@cerbur/clutch-dsh-worktree 0.1.15 → 0.1.17

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 (367) hide show
  1. package/README.md +243 -22
  2. package/README.zh.md +203 -20
  3. package/assets/screenshots/screenshots-dashboard.png +0 -0
  4. package/assets/screenshots/screenshots-en.png +0 -0
  5. package/assets/screenshots/screenshots-git-reviewer.png +0 -0
  6. package/assets/screenshots/screenshots-import.png +0 -0
  7. package/assets/screenshots/screenshots-worktree-tool.png +0 -0
  8. package/assets/screenshots/screenshots-zh.png +0 -0
  9. package/cordis.patch.yml +6 -19
  10. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  11. package/lib/client/WorktreeSurface.js +35 -11
  12. package/lib/client/WorktreeSurface.js.map +1 -1
  13. package/lib/client/command-activity.d.ts +11 -0
  14. package/lib/client/command-activity.d.ts.map +1 -0
  15. package/lib/client/command-activity.js +71 -0
  16. package/lib/client/command-activity.js.map +1 -0
  17. package/lib/client/dashboard/DashboardRequest.d.ts +11 -0
  18. package/lib/client/dashboard/DashboardRequest.d.ts.map +1 -0
  19. package/lib/client/dashboard/DashboardRequest.js +38 -0
  20. package/lib/client/dashboard/DashboardRequest.js.map +1 -0
  21. package/lib/client/dashboard/WorktreeDashboard.d.ts +2 -1
  22. package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
  23. package/lib/client/dashboard/WorktreeDashboard.js +89 -59
  24. package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
  25. package/lib/client/dashboard/WorktreeInstructions.d.ts +2 -1
  26. package/lib/client/dashboard/WorktreeInstructions.d.ts.map +1 -1
  27. package/lib/client/dashboard/WorktreeInstructions.js +27 -8
  28. package/lib/client/dashboard/WorktreeInstructions.js.map +1 -1
  29. package/lib/client/dashboard/dashboard-overlay.d.ts.map +1 -1
  30. package/lib/client/dashboard/dashboard-overlay.js +38 -42
  31. package/lib/client/dashboard/dashboard-overlay.js.map +1 -1
  32. package/lib/client/dashboard/dashboard-selection.d.ts +1 -0
  33. package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -1
  34. package/lib/client/dashboard/dashboard-selection.js.map +1 -1
  35. package/lib/client/dashboard/git/WorktreeGitPanel.d.ts +2 -1
  36. package/lib/client/dashboard/git/WorktreeGitPanel.d.ts.map +1 -1
  37. package/lib/client/dashboard/git/WorktreeGitPanel.js +54 -8
  38. package/lib/client/dashboard/git/WorktreeGitPanel.js.map +1 -1
  39. package/lib/client/dashboard/git/file-address.d.ts +2 -1
  40. package/lib/client/dashboard/git/file-address.d.ts.map +1 -1
  41. package/lib/client/dashboard/git/file-address.js +8 -13
  42. package/lib/client/dashboard/git/file-address.js.map +1 -1
  43. package/lib/client/dashboard/git/useWorktreeGitState.d.ts.map +1 -1
  44. package/lib/client/dashboard/git/useWorktreeGitState.js +4 -1
  45. package/lib/client/dashboard/git/useWorktreeGitState.js.map +1 -1
  46. package/lib/client/dsh-icons.d.ts +2 -0
  47. package/lib/client/dsh-icons.d.ts.map +1 -1
  48. package/lib/client/dsh-icons.js +3 -1
  49. package/lib/client/dsh-icons.js.map +1 -1
  50. package/lib/client/dsh-slot-contract.d.ts +9 -1
  51. package/lib/client/dsh-slot-contract.d.ts.map +1 -1
  52. package/lib/client/entry.d.ts.map +1 -1
  53. package/lib/client/entry.js +57 -1
  54. package/lib/client/entry.js.map +1 -1
  55. package/lib/client/layout/app-frame.d.ts +12 -0
  56. package/lib/client/layout/app-frame.d.ts.map +1 -0
  57. package/lib/client/layout/app-frame.js +82 -0
  58. package/lib/client/layout/app-frame.js.map +1 -0
  59. package/lib/client/locales.d.ts +150 -0
  60. package/lib/client/locales.d.ts.map +1 -1
  61. package/lib/client/locales.js +208 -58
  62. package/lib/client/locales.js.map +1 -1
  63. package/lib/client/overlay/overlay-bounds.d.ts.map +1 -1
  64. package/lib/client/overlay/overlay-bounds.js +8 -3
  65. package/lib/client/overlay/overlay-bounds.js.map +1 -1
  66. package/lib/client/overlay/sidebar-overlay-geometry.d.ts +6 -0
  67. package/lib/client/overlay/sidebar-overlay-geometry.d.ts.map +1 -1
  68. package/lib/client/overlay/sidebar-overlay-geometry.js +180 -32
  69. package/lib/client/overlay/sidebar-overlay-geometry.js.map +1 -1
  70. package/lib/client/restart-notice.d.ts +25 -0
  71. package/lib/client/restart-notice.d.ts.map +1 -0
  72. package/lib/client/restart-notice.js +97 -0
  73. package/lib/client/restart-notice.js.map +1 -0
  74. package/lib/client/session/session-view.d.ts +16 -2
  75. package/lib/client/session/session-view.d.ts.map +1 -1
  76. package/lib/client/session/session-view.js +24 -10
  77. package/lib/client/session/session-view.js.map +1 -1
  78. package/lib/client/session/worktree-session.d.ts +1 -0
  79. package/lib/client/session/worktree-session.d.ts.map +1 -1
  80. package/lib/client/session/worktree-session.js +3 -1
  81. package/lib/client/session/worktree-session.js.map +1 -1
  82. package/lib/client/settings/ToolSettings.d.ts +9 -0
  83. package/lib/client/settings/ToolSettings.d.ts.map +1 -0
  84. package/lib/client/settings/ToolSettings.js +77 -0
  85. package/lib/client/settings/ToolSettings.js.map +1 -0
  86. package/lib/client/settings/WorktreeSettings.d.ts +8 -0
  87. package/lib/client/settings/WorktreeSettings.d.ts.map +1 -0
  88. package/lib/client/settings/WorktreeSettings.js +46 -0
  89. package/lib/client/settings/WorktreeSettings.js.map +1 -0
  90. package/lib/client/settings/WorktreeSettingsNavIcon.d.ts +6 -0
  91. package/lib/client/settings/WorktreeSettingsNavIcon.d.ts.map +1 -0
  92. package/lib/client/settings/WorktreeSettingsNavIcon.js +51 -0
  93. package/lib/client/settings/WorktreeSettingsNavIcon.js.map +1 -0
  94. package/lib/client/settings/diagnostics.d.ts +24 -0
  95. package/lib/client/settings/diagnostics.d.ts.map +1 -0
  96. package/lib/client/settings/diagnostics.js +63 -0
  97. package/lib/client/settings/diagnostics.js.map +1 -0
  98. package/lib/client/settings/settings-navigation.d.ts +7 -0
  99. package/lib/client/settings/settings-navigation.d.ts.map +1 -0
  100. package/lib/client/settings/settings-navigation.js +12 -0
  101. package/lib/client/settings/settings-navigation.js.map +1 -0
  102. package/lib/client/surface/actions/useLifecycleActions.d.ts +2 -1
  103. package/lib/client/surface/actions/useLifecycleActions.d.ts.map +1 -1
  104. package/lib/client/surface/actions/useLifecycleActions.js +14 -5
  105. package/lib/client/surface/actions/useLifecycleActions.js.map +1 -1
  106. package/lib/client/surface/actions/useSessionActions.d.ts.map +1 -1
  107. package/lib/client/surface/actions/useSessionActions.js +6 -6
  108. package/lib/client/surface/actions/useSessionActions.js.map +1 -1
  109. package/lib/client/surface/actions/useWorktreeRegistration.d.ts.map +1 -1
  110. package/lib/client/surface/actions/useWorktreeRegistration.js +4 -2
  111. package/lib/client/surface/actions/useWorktreeRegistration.js.map +1 -1
  112. package/lib/client/surface/components/AnimatedTree.d.ts +32 -0
  113. package/lib/client/surface/components/AnimatedTree.d.ts.map +1 -0
  114. package/lib/client/surface/components/AnimatedTree.js +139 -0
  115. package/lib/client/surface/components/AnimatedTree.js.map +1 -0
  116. package/lib/client/surface/components/NotificationToasts.d.ts +19 -3
  117. package/lib/client/surface/components/NotificationToasts.d.ts.map +1 -1
  118. package/lib/client/surface/components/NotificationToasts.js +73 -7
  119. package/lib/client/surface/components/NotificationToasts.js.map +1 -1
  120. package/lib/client/surface/components/OverlayScrollbar.d.ts +6 -0
  121. package/lib/client/surface/components/OverlayScrollbar.d.ts.map +1 -0
  122. package/lib/client/surface/components/OverlayScrollbar.js +84 -0
  123. package/lib/client/surface/components/OverlayScrollbar.js.map +1 -0
  124. package/lib/client/surface/components/RestartToast.d.ts +6 -0
  125. package/lib/client/surface/components/RestartToast.d.ts.map +1 -0
  126. package/lib/client/surface/components/RestartToast.js +11 -0
  127. package/lib/client/surface/components/RestartToast.js.map +1 -0
  128. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
  129. package/lib/client/surface/components/SurfaceContent.js +110 -39
  130. package/lib/client/surface/components/SurfaceContent.js.map +1 -1
  131. package/lib/client/surface/components/WorkspaceTree.d.ts.map +1 -1
  132. package/lib/client/surface/components/WorkspaceTree.js +7 -2
  133. package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
  134. package/lib/client/surface/components/dialogs.d.ts.map +1 -1
  135. package/lib/client/surface/components/dialogs.js +16 -10
  136. package/lib/client/surface/components/dialogs.js.map +1 -1
  137. package/lib/client/surface/components/rows.d.ts +1 -1
  138. package/lib/client/surface/components/rows.d.ts.map +1 -1
  139. package/lib/client/surface/components/rows.js +24 -101
  140. package/lib/client/surface/components/rows.js.map +1 -1
  141. package/lib/client/surface/notification-queue.d.ts +15 -0
  142. package/lib/client/surface/notification-queue.d.ts.map +1 -1
  143. package/lib/client/surface/notification-queue.js +13 -2
  144. package/lib/client/surface/notification-queue.js.map +1 -1
  145. package/lib/client/surface/state/useSurfaceRefresh.d.ts +1 -1
  146. package/lib/client/surface/state/useSurfaceRefresh.d.ts.map +1 -1
  147. package/lib/client/surface/state/useSurfaceRefresh.js +13 -1
  148. package/lib/client/surface/state/useSurfaceRefresh.js.map +1 -1
  149. package/lib/client/surface/state/useSurfaceSources.d.ts +2 -1
  150. package/lib/client/surface/state/useSurfaceSources.d.ts.map +1 -1
  151. package/lib/client/surface/state/useSurfaceSources.js +7 -5
  152. package/lib/client/surface/state/useSurfaceSources.js.map +1 -1
  153. package/lib/client/surface/state/useTitleMarquee.d.ts +7 -0
  154. package/lib/client/surface/state/useTitleMarquee.d.ts.map +1 -0
  155. package/lib/client/surface/state/useTitleMarquee.js +60 -0
  156. package/lib/client/surface/state/useTitleMarquee.js.map +1 -0
  157. package/lib/client/surface/types.d.ts +8 -1
  158. package/lib/client/surface/types.d.ts.map +1 -1
  159. package/lib/client/view/worktree-error-copy.d.ts.map +1 -1
  160. package/lib/client/view/worktree-error-copy.js +69 -8
  161. package/lib/client/view/worktree-error-copy.js.map +1 -1
  162. package/lib/client/view/worktree-view-errors.d.ts.map +1 -1
  163. package/lib/client/view/worktree-view-errors.js +13 -5
  164. package/lib/client/view/worktree-view-errors.js.map +1 -1
  165. package/lib/client/view/worktree-view-read.d.ts +3 -0
  166. package/lib/client/view/worktree-view-read.d.ts.map +1 -1
  167. package/lib/client/view/worktree-view-read.js +9 -0
  168. package/lib/client/view/worktree-view-read.js.map +1 -1
  169. package/lib/client/worktree-connection.d.ts +14 -2
  170. package/lib/client/worktree-connection.d.ts.map +1 -1
  171. package/lib/client/worktree-connection.js +20 -2
  172. package/lib/client/worktree-connection.js.map +1 -1
  173. package/lib/client/worktree-tool-changes.d.ts +13 -0
  174. package/lib/client/worktree-tool-changes.d.ts.map +1 -0
  175. package/lib/client/worktree-tool-changes.js +64 -0
  176. package/lib/client/worktree-tool-changes.js.map +1 -0
  177. package/lib/client.js +2791 -1131
  178. package/lib/client.js.map +1 -1
  179. package/lib/contract/index.d.ts +12 -2
  180. package/lib/contract/index.d.ts.map +1 -1
  181. package/lib/contract/index.js +10 -0
  182. package/lib/contract/index.js.map +1 -1
  183. package/lib/contract/tool-settings.d.ts +28 -0
  184. package/lib/contract/tool-settings.d.ts.map +1 -0
  185. package/lib/contract/tool-settings.js +10 -0
  186. package/lib/contract/tool-settings.js.map +1 -0
  187. package/lib/contract/worktree-tool-changes.d.ts +10 -0
  188. package/lib/contract/worktree-tool-changes.d.ts.map +1 -0
  189. package/lib/contract/worktree-tool-changes.js +2 -0
  190. package/lib/contract/worktree-tool-changes.js.map +1 -0
  191. package/lib/host/permission-preset-append.d.ts +15 -0
  192. package/lib/host/permission-preset-append.d.ts.map +1 -0
  193. package/lib/host/permission-preset-append.js +63 -0
  194. package/lib/host/permission-preset-append.js.map +1 -0
  195. package/lib/host/service.d.ts +17 -0
  196. package/lib/host/service.d.ts.map +1 -1
  197. package/lib/host/service.js +67 -11
  198. package/lib/host/service.js.map +1 -1
  199. package/lib/host/tool-settings.d.ts +14 -0
  200. package/lib/host/tool-settings.d.ts.map +1 -0
  201. package/lib/host/tool-settings.js +98 -0
  202. package/lib/host/tool-settings.js.map +1 -0
  203. package/lib/host/worktree-permission-manager.d.ts.map +1 -1
  204. package/lib/host/worktree-permission-manager.js +2 -4
  205. package/lib/host/worktree-permission-manager.js.map +1 -1
  206. package/lib/host/worktree-tool-changes.d.ts +12 -0
  207. package/lib/host/worktree-tool-changes.d.ts.map +1 -0
  208. package/lib/host/worktree-tool-changes.js +60 -0
  209. package/lib/host/worktree-tool-changes.js.map +1 -0
  210. package/lib/manage/manager-git-history.d.ts.map +1 -1
  211. package/lib/manage/manager-git-history.js +43 -38
  212. package/lib/manage/manager-git-history.js.map +1 -1
  213. package/lib/manage/manager-sessions.d.ts +5 -0
  214. package/lib/manage/manager-sessions.d.ts.map +1 -1
  215. package/lib/manage/manager-sessions.js +35 -12
  216. package/lib/manage/manager-sessions.js.map +1 -1
  217. package/lib/manage/manager-support.d.ts +10 -2
  218. package/lib/manage/manager-support.d.ts.map +1 -1
  219. package/lib/manage/manager-support.js +90 -14
  220. package/lib/manage/manager-support.js.map +1 -1
  221. package/lib/manage/manager-worktree-lifecycle.d.ts.map +1 -1
  222. package/lib/manage/manager-worktree-lifecycle.js +5 -4
  223. package/lib/manage/manager-worktree-lifecycle.js.map +1 -1
  224. package/lib/manage/manager-worktrees.d.ts +1 -0
  225. package/lib/manage/manager-worktrees.d.ts.map +1 -1
  226. package/lib/manage/manager-worktrees.js +80 -26
  227. package/lib/manage/manager-worktrees.js.map +1 -1
  228. package/lib/manage/manager.d.ts +10 -0
  229. package/lib/manage/manager.d.ts.map +1 -1
  230. package/lib/manage/manager.js +14 -3
  231. package/lib/manage/manager.js.map +1 -1
  232. package/lib/manage/types.d.ts +10 -1
  233. package/lib/manage/types.d.ts.map +1 -1
  234. package/lib/provider/generated-name.d.ts.map +1 -1
  235. package/lib/provider/generated-name.js +5 -4
  236. package/lib/provider/generated-name.js.map +1 -1
  237. package/lib/provider/git/adapter.d.ts.map +1 -1
  238. package/lib/provider/git/adapter.js +5 -2
  239. package/lib/provider/git/adapter.js.map +1 -1
  240. package/lib/provider/mutation-token.d.ts +1 -1
  241. package/lib/provider/mutation-token.d.ts.map +1 -1
  242. package/lib/provider/mutation-token.js +1 -0
  243. package/lib/provider/mutation-token.js.map +1 -1
  244. package/lib/provider/sidecar/repository.d.ts.map +1 -1
  245. package/lib/provider/sidecar/repository.js +1 -0
  246. package/lib/provider/sidecar/repository.js.map +1 -1
  247. package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
  248. package/lib/provider/sidecar/sidecar-schema.js +24 -4
  249. package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
  250. package/lib/provider/transaction/operations/adopt-branch.d.ts.map +1 -1
  251. package/lib/provider/transaction/operations/adopt-branch.js +6 -5
  252. package/lib/provider/transaction/operations/adopt-branch.js.map +1 -1
  253. package/lib/provider/transaction/operations/clean.d.ts.map +1 -1
  254. package/lib/provider/transaction/operations/clean.js +20 -19
  255. package/lib/provider/transaction/operations/clean.js.map +1 -1
  256. package/lib/provider/transaction/operations/create.d.ts +1 -1
  257. package/lib/provider/transaction/operations/create.d.ts.map +1 -1
  258. package/lib/provider/transaction/operations/create.js +23 -13
  259. package/lib/provider/transaction/operations/create.js.map +1 -1
  260. package/lib/provider/transaction/operations/import.d.ts.map +1 -1
  261. package/lib/provider/transaction/operations/import.js +7 -1
  262. package/lib/provider/transaction/operations/import.js.map +1 -1
  263. package/lib/provider/transaction/operations/remove.d.ts.map +1 -1
  264. package/lib/provider/transaction/operations/remove.js +20 -19
  265. package/lib/provider/transaction/operations/remove.js.map +1 -1
  266. package/lib/provider/transaction/recovery/failure-recovery.d.ts.map +1 -1
  267. package/lib/provider/transaction/recovery/failure-recovery.js +19 -18
  268. package/lib/provider/transaction/recovery/failure-recovery.js.map +1 -1
  269. package/lib/provider/transaction/recovery/recover.d.ts.map +1 -1
  270. package/lib/provider/transaction/recovery/recover.js +6 -2
  271. package/lib/provider/transaction/recovery/recover.js.map +1 -1
  272. package/lib/provider/transaction/support/inspection.d.ts.map +1 -1
  273. package/lib/provider/transaction/support/inspection.js +3 -2
  274. package/lib/provider/transaction/support/inspection.js.map +1 -1
  275. package/lib/provider/transaction/support/journal.d.ts.map +1 -1
  276. package/lib/provider/transaction/support/journal.js +8 -5
  277. package/lib/provider/transaction/support/journal.js.map +1 -1
  278. package/lib/provider/transaction/support/path-safety.d.ts.map +1 -1
  279. package/lib/provider/transaction/support/path-safety.js +4 -3
  280. package/lib/provider/transaction/support/path-safety.js.map +1 -1
  281. package/lib/provider/transaction/types.d.ts +2 -1
  282. package/lib/provider/transaction/types.d.ts.map +1 -1
  283. package/lib/provider/types.d.ts +3 -1
  284. package/lib/provider/types.d.ts.map +1 -1
  285. package/lib/provider/types.js +1 -1
  286. package/lib/provider/types.js.map +1 -1
  287. package/lib/provider/worktree-path.d.ts +10 -0
  288. package/lib/provider/worktree-path.d.ts.map +1 -0
  289. package/lib/provider/worktree-path.js +47 -0
  290. package/lib/provider/worktree-path.js.map +1 -0
  291. package/lib/tool/context.d.ts +14 -0
  292. package/lib/tool/context.d.ts.map +1 -0
  293. package/lib/tool/context.js +95 -0
  294. package/lib/tool/context.js.map +1 -0
  295. package/lib/tool/delegation.d.ts +41 -0
  296. package/lib/tool/delegation.d.ts.map +1 -0
  297. package/lib/tool/delegation.js +196 -0
  298. package/lib/tool/delegation.js.map +1 -0
  299. package/lib/tool/errors.d.ts +3 -0
  300. package/lib/tool/errors.d.ts.map +1 -0
  301. package/lib/tool/errors.js +63 -0
  302. package/lib/tool/errors.js.map +1 -0
  303. package/lib/tool/guidance.d.ts +5 -0
  304. package/lib/tool/guidance.d.ts.map +1 -0
  305. package/lib/tool/guidance.js +48 -0
  306. package/lib/tool/guidance.js.map +1 -0
  307. package/lib/tool/history.d.ts +27 -0
  308. package/lib/tool/history.d.ts.map +1 -0
  309. package/lib/tool/history.js +157 -0
  310. package/lib/tool/history.js.map +1 -0
  311. package/lib/tool/index.d.ts +8 -0
  312. package/lib/tool/index.d.ts.map +1 -0
  313. package/lib/tool/index.js +296 -0
  314. package/lib/tool/index.js.map +1 -0
  315. package/lib/tool/inputs.d.ts +12 -0
  316. package/lib/tool/inputs.d.ts.map +1 -0
  317. package/lib/tool/inputs.js +24 -0
  318. package/lib/tool/inputs.js.map +1 -0
  319. package/lib/tool/list-models.d.ts +3 -0
  320. package/lib/tool/list-models.d.ts.map +1 -0
  321. package/lib/tool/list-models.js +38 -0
  322. package/lib/tool/list-models.js.map +1 -0
  323. package/lib/tool/list-sessions.d.ts +3 -0
  324. package/lib/tool/list-sessions.d.ts.map +1 -0
  325. package/lib/tool/list-sessions.js +70 -0
  326. package/lib/tool/list-sessions.js.map +1 -0
  327. package/lib/tool/list-worktrees.d.ts +3 -0
  328. package/lib/tool/list-worktrees.d.ts.map +1 -0
  329. package/lib/tool/list-worktrees.js +39 -0
  330. package/lib/tool/list-worktrees.js.map +1 -0
  331. package/lib/tool/native-session.d.ts +74 -0
  332. package/lib/tool/native-session.d.ts.map +1 -0
  333. package/lib/tool/native-session.js +248 -0
  334. package/lib/tool/native-session.js.map +1 -0
  335. package/lib/tool/new-worktree.d.ts +3 -0
  336. package/lib/tool/new-worktree.d.ts.map +1 -0
  337. package/lib/tool/new-worktree.js +81 -0
  338. package/lib/tool/new-worktree.js.map +1 -0
  339. package/lib/tool/outputs.d.ts +50 -0
  340. package/lib/tool/outputs.d.ts.map +1 -0
  341. package/lib/tool/outputs.js +65 -0
  342. package/lib/tool/outputs.js.map +1 -0
  343. package/lib/tool/report-result.d.ts +3 -0
  344. package/lib/tool/report-result.d.ts.map +1 -0
  345. package/lib/tool/report-result.js +83 -0
  346. package/lib/tool/report-result.js.map +1 -0
  347. package/lib/tool/schema.d.ts +7 -0
  348. package/lib/tool/schema.d.ts.map +1 -0
  349. package/lib/tool/schema.js +92 -0
  350. package/lib/tool/schema.js.map +1 -0
  351. package/lib/tool/send-message.d.ts +3 -0
  352. package/lib/tool/send-message.d.ts.map +1 -0
  353. package/lib/tool/send-message.js +64 -0
  354. package/lib/tool/send-message.js.map +1 -0
  355. package/lib/tool/span-worktree.d.ts +3 -0
  356. package/lib/tool/span-worktree.d.ts.map +1 -0
  357. package/lib/tool/span-worktree.js +114 -0
  358. package/lib/tool/span-worktree.js.map +1 -0
  359. package/lib/tool/types.d.ts +54 -0
  360. package/lib/tool/types.d.ts.map +1 -0
  361. package/lib/tool/types.js +2 -0
  362. package/lib/tool/types.js.map +1 -0
  363. package/lib/typert.host.js +237 -66
  364. package/lib/typert.remote-client.d.ts +7 -1
  365. package/lib/typert.remote-client.d.ts.map +1 -1
  366. package/lib/typert.remote-client.js +237 -66
  367. package/package.json +55 -43
package/lib/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["isRecord","exports","primitives","HoverCard","styles","styles","Tooltip","styles","styles","HoverCard","_Fragment","RiskConfirmation","Modal","_Fragment","Button","styles","Input","_Fragment","_Fragment","_Fragment","openWorktreeSession","emptyState","isRecord","normalizeIds","isMainWorktreeId","sessionStatusLabel","sessionTimeLabel","styles","StateDot","Menu","HoverCard","_Fragment","styles","styles","styles","_Fragment","styles","Toast","styles","_Fragment","styles","Tooltip","emptyState","styles","css","Menu","_Fragment","styles","normalizeBranch","primitives","styles","shortCommit","_Fragment","styles","styles","_Fragment","shortCommit","styles","_Fragment","styles","_Fragment","styles","styles","_Fragment","Tooltip","Modal","Button","Input","StateDot","isMainWorktreeId","isMainWorktreeId","isMainWorktreeId","_Fragment","styles","_Fragment"],"sources":["../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/middleware.mjs","../../../node_modules/.pnpm/immer@10.2.0/node_modules/immer/dist/immer.mjs","../../../node_modules/.pnpm/@deepseek-ai+dsh-client-store@0.1.7-rc.2_@deepseek-ai+cordis@4.0.4/node_modules/@deepseek-ai/dsh-client-store/lib/index.js","client/locales.js","client/worktree-connection.js","client/dsh-icon-compat.js","client/dsh-icons.js","client/context/WorktreeContext.js","client/view/view-mode-dispatch.js","client/view/WorktreeModeAction.js","client/dashboard/dashboard-icon.js","client/dashboard/DashboardHeaderAction.js","client/context/WorktreeHeroContext.js","client/surface/components/AccessConfirmation.js","client/view/worktree-error-copy.js","client/view/worktree-view-errors.js","client/view/worktree-view-actions.js","client/view/worktree-view-read.js","client/session/session-selection.js","client/session/session-view.js","client/surface/selectors.js","client/surface/components/dialogs.js","client/surface/actions/worktree-cleanup-flow.js","client/surface/actions/lifecycle-commands.js","client/surface/components/LifecycleDialogs.js","client/surface/components/NativeDialogs.js","client/surface/components/RegistrationDialog.js","client/surface/shared.js","client/view/navigation.js","client/view/view-mode.js","client/view/worktree-expand-state.js","client/dashboard/dashboard-selection.js","client/surface/components/rows.js","client/surface/components/ActiveWorktree.js","client/surface/components/ArchivedWorktree.js","client/surface/components/ArchivedWorktrees.js","client/surface/components/WorkspaceTree.js","client/surface/notification-queue.js","client/surface/components/NotificationToasts.js","client/surface/components/SurfaceContent.js","client/surface/components/SurfaceHeader.js","client/session/worktree-session-order.js","client/surface/actions/useDragActions.js","client/surface/actions/useLifecycleActions.js","client/surface/state/useLifecycleState.js","client/surface/actions/useNativeActions.js","client/surface/state/useRegistrationState.js","contract/windows-path.js","client/session/worktree-session.js","client/surface/actions/useSessionActions.js","client/session/worktree-session-position.js","client/surface/state/useSessionExpansion.js","client/surface/state/useSessionOrdering.js","client/surface/state/useSurfaceMenus.js","client/surface/actions/useSurfaceMutation.js","client/surface/state/useSurfaceRefresh.js","client/overlay/overlay-bounds.js","client/overlay/sidebar-overlay-geometry.js","client/surface/state/useSurfaceSources.js","client/surface/actions/useWorktreeRegistration.js","client/session/session-labels.js","client/dashboard/vscode-url.js","client/dashboard/open-in-app-controller.js","client/dashboard/OpenInAppButton.js","client/dashboard/dashboard-overlay.js","client/dashboard/worktree-acquisition-facts.js","client/dashboard/WorktreeInstructions.js","client/dashboard/git/git-facts.js","client/dashboard/git/git-file-tree.js","client/dashboard/git/GitFileTypeIcon.js","client/dashboard/git/GitLineStats.js","client/dashboard/git/GitChangedFiles.js","client/dashboard/git/GitCommitList.js","client/dashboard/git/git-diff-parser.js","client/dashboard/git/GitDiffView.js","client/dashboard/git/git-column-split.js","client/dashboard/git/useGitPaneSplit.js","contract/index.js","client/dashboard/git/git-state-cache.js","client/dashboard/git/useWorktreeGitState.js","client/dashboard/git/WorktreeGitPanel.js","client/dashboard/git/WorktreeGitOverview.js","client/dashboard/WorktreeDashboard.js","client/dashboard/dashboard-sessions.js","client/dashboard/dashboard-navigation.js","client/dashboard/git/file-address.js","client/WorktreeSurface.js","client/overlay/WorktreeOverlay.js","client/context/worktree-context.js","client/context/worktree-context-store.js","client/view/view-mode-store.js","client/session/virtual-workspace-membership.js","client/session/session-rename.js","client/session/session-navigation.js","client/permission/worktree-permission.js","client/permission/worktree-permission-icon.js","client/session/worktree-session-fork.js","client/entry.js"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api)\n return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording)\n return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools)\n return;\n if (typeof api.dispatch !== \"function\")\n return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState)\n return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0)\n f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null || proto === Object.prototype)\n return true;\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n if (typeof Ctor !== \"function\")\n return false;\n let ctorString = cachedCtorStrings.get(Ctor);\n if (ctorString === void 0) {\n ctorString = Function.toString.call(Ctor);\n cachedCtorStrings.set(Ctor, ctorString);\n }\n return ctorString === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n if (getArchtype(obj) === 0 /* Object */) {\n const keys = strict ? Reflect.ownKeys(obj) : Object.keys(obj);\n keys.forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: dontMutateMethodOverride,\n add: dontMutateMethodOverride,\n clear: dontMutateMethodOverride,\n delete: dontMutateMethodOverride\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nvar dontMutateMethodOverride = {\n value: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n if (obj === null || typeof obj !== \"object\")\n return true;\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const useStrictIteration = rootScope.immer_.shouldUseStrictIteration();\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path),\n useStrictIteration\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(\n rootScope,\n state,\n result,\n key,\n childValue,\n path,\n isSet2\n ),\n useStrictIteration\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (childValue == null) {\n return;\n }\n if (typeof childValue !== \"object\" && !targetIsSet) {\n return;\n }\n const childIsFrozen = isFrozen(childValue);\n if (childIsFrozen && !targetIsSet) {\n return;\n }\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !childIsFrozen) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n if (parentState && parentState.base_ && parentState.base_[prop] === childValue && childIsFrozen) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n this.useStrictIteration_ = true;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n if (typeof config?.useStrictIteration === \"boolean\")\n this.setUseStrictIteration(config.useStrictIteration);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n /**\n * Pass false to use faster iteration that skips non-enumerable properties\n * but still handles symbols for compatibility.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\n setUseStrictIteration(value) {\n this.useStrictIteration_ = value;\n }\n shouldUseStrictIteration() {\n return this.useStrictIteration_;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n let strict = true;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n strict = state.scope_.immer_.shouldUseStrictIteration();\n } else {\n copy = shallowCopy(value, true);\n }\n each(\n copy,\n (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n },\n strict\n );\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictIteration,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { createStore } from \"zustand/vanilla\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { shallow } from \"zustand/shallow\";\nimport { freeze, produce } from \"immer\";\n//#region lib/types/index.js\n/**\n* React-free snapshot store engine (zustand vanilla + immer + subscribeWithSelector +\n* rafFlush middleware + opt-in persist + dev freeze) plus the declarative\n* shell over it: {@link defineStore} bakes an init/persist/actions literal\n* into a {@link StoreHandle}, the registration-side store seat of slot\n* terminals. Engine products are bare observables — subscribe/getSnapshot/\n* update/set, NO selector hook. Hook synthesis is ui-renderer's (the one\n* uSES bridge, cached per source at the binding site).\n*/\n/**\n* Notify an observer set without allowing one callback to starve the rest.\n* @param listeners - current observer callbacks; copied before dispatch.\n* @param label - diagnostic owner prefix.\n* @param args - callback arguments.\n*/\nfunction notifySubscribers(listeners, label, ...args) {\n\tfor (const listener of [...listeners]) try {\n\t\tlistener(...args);\n\t} catch (error) {\n\t\tconsole.error(`${label} subscriber failed:`, error);\n\t}\n}\n/**\n* Shallow equality for selector slices (zustand/shallow semantics; travels\n* with the engine so hook consumers need no zustand dependency).\n* @param a - left value.\n* @param b - right value.\n* @returns whether the values are shallowly equal.\n*/\nfunction shallowEqual(a, b) {\n\treturn shallow(a, b);\n}\n/** Batches subscriber notification into one flush per animation frame. */\nfunction rafBatch(notify) {\n\tconst schedule = typeof requestAnimationFrame === \"function\" ? (fn) => {\n\t\trequestAnimationFrame(() => {\n\t\t\tfn();\n\t\t});\n\t} : (fn) => {\n\t\tqueueMicrotask(fn);\n\t};\n\tlet scheduled = false;\n\treturn () => {\n\t\tif (scheduled) return;\n\t\tscheduled = true;\n\t\tschedule(() => {\n\t\t\tscheduled = false;\n\t\t\tnotify();\n\t\t});\n\t};\n}\n/**\n* Create a snapshot store.\n*\n* Flush default is 'sync' (controlled inputs need same-tick echo); frame-driven\n* stores opt into 'raf', where a frame's worth of updates coalesces into one\n* notification. Known raf-mode tradeoff: a component mounting mid-frame reads\n* fresh state while existing subscribers hear it next flush — transient\n* frame-level skew, same nature as the object layer's microtask batching.\n*\n* @param init - initial state.\n* @param opts - flush mode and opt-in persistence (localStorage, keyed by name).\n* @returns the store.\n*/\nfunction createSnapshotStore(init, opts) {\n\tconst withSelector = subscribeWithSelector(() => init);\n\tconst api = createStore()(withSelector);\n\tif (opts?.persist) attachPersistence(api, opts.persist.name);\n\tlet subscribe = (fn) => api.subscribe(() => {\n\t\tnotifySubscribers([fn], \"[client-store]\");\n\t});\n\tif (opts?.flush === \"raf\") {\n\t\tconst listeners = /* @__PURE__ */ new Set();\n\t\tconst flush = rafBatch(() => {\n\t\t\tnotifySubscribers(listeners, \"[client-store]\");\n\t\t});\n\t\tapi.subscribe(flush);\n\t\tsubscribe = (fn) => {\n\t\t\tlisteners.add(fn);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(fn);\n\t\t\t};\n\t\t};\n\t}\n\treturn {\n\t\tgetSnapshot: () => api.getState(),\n\t\tsubscribe: (fn) => subscribe(fn),\n\t\tupdate: (mutator) => {\n\t\t\tapi.setState(produce(api.getState(), (draft) => {\n\t\t\t\tmutator(draft);\n\t\t\t}), true);\n\t\t},\n\t\tset: (next) => {\n\t\t\tapi.setState(devFreeze(next), true);\n\t\t}\n\t};\n}\n/**\n* Whole-value JSON persistence to localStorage. Hand-rolled instead of the\n* zustand persist middleware: its write path spreads state into an object\n* (`partialize({ ...get() })`), exploding primitive state (a persisted string\n* draft becomes {0:'h',1:'e',...}) — not fixable via merge/deserialize options\n* because the corruption happens before serialization. Storage failures\n* (quota, private mode) only disable persistence, never break the store.\n*/\nfunction attachPersistence(api, name) {\n\tif (typeof localStorage === \"undefined\") return;\n\ttry {\n\t\tconst raw = localStorage.getItem(name);\n\t\tif (raw !== null) api.setState(devFreeze(JSON.parse(raw)), true);\n\t} catch (error) {\n\t\tconsole.error(`snapshot store '${name}' rehydration failed:`, error);\n\t}\n\tapi.subscribe((state) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(name, JSON.stringify(state));\n\t\t} catch (error) {\n\t\t\tconsole.error(`snapshot store '${name}' persistence failed:`, error);\n\t\t}\n\t});\n}\n/** Deep-freeze draftable wholesale-set state outside production: set() bypasses immer's freeze. */\nfunction devFreeze(value) {\n\treturn freeze(value, true);\n}\n/**\n* Declare a store: initial state, optional persistence, and the full write\n* set as pure draft mutators. The returned handle is the registration\n* currency of the store seat — its identity keys instance sharing. Satisfies\n* ui-slots' DefineStore contract (the handle/instance are the engine-extended\n* subtypes).\n*\n* The `A & ActionsDecl<T>` actions position is load-bearing: T resolves from\n* `init` in the first inference round, and the intersection then contextually\n* types each mutator's draft parameter (context-sensitive functions defer),\n* so call sites write `(d, x: X) => { ... }` with no draft annotation. If a\n* future TS version breaks this single-literal inference, the design's\n* documented fallback is currying (`defineStore(init).actions({...})`).\n* @param decl - init lambda (fresh state per instance), optional persist key, actions table.\n* @returns the store handle.\n*/\nfunction defineStore(decl) {\n\treturn {\n\t\tspec: decl,\n\t\tcreate(scopeKey) {\n\t\t\tconst persistKey = decl.persist === void 0 ? void 0 : scopeKey === void 0 ? decl.persist : `${decl.persist}.${scopeKey}`;\n\t\t\tconst store = createSnapshotStore(decl.init(), persistKey !== void 0 ? { persist: { name: persistKey } } : void 0);\n\t\t\tconst actions = {};\n\t\t\tfor (const key of Object.keys(decl.actions)) {\n\t\t\t\tconst mutate = decl.actions[key];\n\t\t\t\tactions[key] = (...params) => {\n\t\t\t\t\tstore.update((draft) => {\n\t\t\t\t\t\tmutate(draft, ...params);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tactions,\n\t\t\t\tgetSnapshot: () => store.getSnapshot(),\n\t\t\t\tsubscribe: (fn) => store.subscribe(fn),\n\t\t\t\tstore,\n\t\t\t\tclearPersisted: () => {\n\t\t\t\t\tif (persistKey === void 0 || typeof localStorage === \"undefined\") return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlocalStorage.removeItem(persistKey);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\nexport { createSnapshotStore, defineStore, notifySubscribers, shallowEqual };\n\n//# sourceMappingURL=index.js.map","export const WORKTREE_NS = 'worktree';\nexport const zh = {\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard 预览',\n 'dashboard.open': '打开 Dashboard',\n 'dashboard.copyBranch': '复制分支名称',\n 'dashboard.branchCopied': '已复制分支名称',\n 'dashboard.branchCopyFailed': '复制分支名称失败,请重试。',\n 'dashboard.tab.overview': \"概览\",\n 'dashboard.tab.git': \"Git 与变更\",\n 'dashboard.git.title': 'Git 与变更',\n 'dashboard.git.baselineSelector': '基线分支',\n 'dashboard.git.selectBaseline': '选择基线分支',\n 'dashboard.git.selectBaselineTitle': '请选择基线分支',\n 'dashboard.git.selectBaselineDescription': '选择一个本地 branch 作为比较起点,然后查看提交、变更文件和 Diff。',\n 'dashboard.git.base': '基线',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': '提交',\n 'dashboard.git.commits': '提交',\n 'dashboard.git.commitCount': '{n} 个提交',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} 个提交 + 工作区改动',\n 'dashboard.git.uncommittedChanges': '未提交的改动',\n 'dashboard.git.workingTree': '工作区',\n 'dashboard.git.changedFiles': '变更文件',\n 'dashboard.git.lineStats': '+{additions} 行,-{deletions} 行',\n 'dashboard.git.aheadBehindStats': '+{ahead} 领先,-{behind} 落后',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': '拖动调整上下两栏高度,双击恢复默认',\n 'dashboard.git.resizeColumns': '拖动调整左右两栏宽度,双击恢复默认',\n 'dashboard.git.openInSidebar': '在侧栏打开',\n 'dashboard.git.summaryDiff': '汇总 Diff',\n 'dashboard.git.baselineSummary': '基线汇总',\n 'dashboard.git.baselineSummaryDescription': '查看基线比较边界到 HEAD 的全部已提交变更(基线 branch 已分叉时取两者共同祖先,默认不含工作区)。',\n 'dashboard.git.includeWorkingTree': '包含工作区改动',\n 'dashboard.git.includeWorkingTreeDescription': '加入 staged、unstaged 和 untracked 文件。',\n 'dashboard.git.selectedCommitCount': '已选择 {n} 个提交',\n 'dashboard.git.multiSelectCommits': '多选提交',\n 'dashboard.git.multiSelectCommitsDescription': '关闭时点击提交查看该提交自己的 Diff;打开后可同时选择多个提交并查看合并结果。',\n 'dashboard.git.commitSelectionHint': '可多选提交;工作区改动不能与提交混合选择。',\n 'dashboard.git.clearCommitSelection': '清除选择',\n 'dashboard.git.commitDiffSection': '提交变更',\n 'dashboard.git.loadingSummaryFiles': '正在加载基线汇总变更…',\n 'dashboard.git.loadingSummaryDiff': '正在加载基线汇总 Diff…',\n 'dashboard.git.noBaselineChanges': '基线与 HEAD 没有已提交的净变更。',\n 'dashboard.git.noLiveBaselineChanges': '基线与当前工作区没有净变更。',\n 'dashboard.git.refresh': '刷新',\n 'dashboard.git.refreshing': '刷新中…',\n 'dashboard.git.retry': '重试',\n 'dashboard.git.loading': '正在加载 Git 历史和工作区改动…',\n 'dashboard.git.loadingFiles': '正在加载变更文件…',\n 'dashboard.git.loadingDiff': '正在加载 Diff…',\n 'dashboard.git.loadFailed': 'Git 数据加载失败:{reason}',\n 'dashboard.git.refreshFailed': '刷新 Git 数据失败:{reason}',\n 'dashboard.git.baselineUnknownTitle': '历史基线无法获取',\n 'dashboard.git.baselineUnknownDescription': '无法安全确定所选 branch 与当前 HEAD 的比较范围;请确认基线 branch 仍是当前 HEAD 的 ancestor。',\n 'dashboard.git.mainUnavailableTitle': '本地 Workspace 不适用',\n 'dashboard.git.mainUnavailableDescription': 'Git Dashboard 的 branch 基线选择仅适用于已登记 Worktree。',\n 'dashboard.git.derived': '运行时推导',\n 'dashboard.git.noCommits': '没有超出基线的提交。',\n 'dashboard.git.noFiles': '此项没有可显示的变更文件。',\n 'dashboard.git.selectCommit': '选择一个提交或工作区改动查看详情。',\n 'dashboard.git.selectFile': '选择一个文件查看 Diff。',\n 'dashboard.git.untitledCommit': '(无提交标题)',\n 'dashboard.git.truncatedHistory': '仅显示前 200 个提交。',\n 'dashboard.git.truncatedFiles': '变更文件过多,无法完整列出。',\n 'dashboard.git.binary': '二进制文件没有可显示的文本 Diff。',\n 'dashboard.git.diffTruncated': 'Diff 太大,无法在 Dashboard 中完整显示;请在 IDE 中检查完整变更。',\n 'dashboard.git.diffLinesHidden': '为保持滚动流畅,暂时折叠了 {n} 行 Diff。',\n 'dashboard.git.showFullDiff': '显示完整 Diff',\n 'dashboard.git.emptyDiff': '没有可显示的 Diff。',\n 'dashboard.git.status.added': '新增',\n 'dashboard.git.status.modified': '修改',\n 'dashboard.git.status.deleted': '删除',\n 'dashboard.git.status.renamed': '重命名',\n 'dashboard.git.status.copied': '复制',\n 'dashboard.git.status.typeChanged': '类型变化',\n 'dashboard.tab.sessions': \"会话\",\n 'dashboard.tab.children': \"派生 Worktree\",\n 'dashboard.tab.settings': \"设置\",\n 'dashboard.back': \"返回会话\",\n 'dashboard.openSidebar': '打开侧栏',\n 'dashboard.soon': \"即将推出\",\n 'dashboard.notConnected': \"待接入\",\n 'dashboard.unknown': \"未知\",\n 'dashboard.unknownError': '未知错误',\n 'dashboard.historicalUnavailable': \"历史 Worktree 无法获取\",\n 'dashboard.detached': \"分离 HEAD\",\n 'dashboard.cleaned': \"已清理\",\n 'dashboard.archived': \"已归档\",\n 'dashboard.copied': \"已复制完整路径\",\n 'dashboard.copyFailed': \"复制失败,请重试或手动选择上方路径。\",\n 'dashboard.openEditor': \"在 VS Code 中打开\",\n 'dashboard.openIn': \"在 {app} 中打开\",\n 'dashboard.created': \"创建时间\",\n 'dashboard.imported': '登记时间',\n 'dashboard.editorMenu': '选择打开应用',\n 'dashboard.saveInstructions': '保存',\n 'dashboard.savingInstructions': '保存中…',\n 'dashboard.cancelInstructions': '取消',\n 'dashboard.instructionsSaveFailed': '保存失败,草稿已保留。可重试;若其他窗口已修改指令,请取消并重新打开编辑。',\n 'dashboard.editBase': '编辑基线',\n 'dashboard.editBaseDescription': '选择一个本地 branch 作为 Git 与变更的比较基线。',\n 'dashboard.searchBranches': '搜索 branch',\n 'dashboard.noMatchingBranches': '没有匹配的 branch',\n 'dashboard.selectBaseBranch': '选择基线分支',\n 'dashboard.saveBase': '保存基线',\n 'dashboard.savingBase': '保存中…',\n 'dashboard.cancelBase': '取消',\n 'dashboard.baseSaveFailed': '基线保存失败,草稿已保留。请重试;如果其他窗口已修改基线,请取消并重新编辑。',\n 'dashboard.base': \"基线\",\n 'dashboard.source': \"来源\",\n 'dashboard.external': \"外部导入\",\n 'dashboard.plugin': \"插件创建\",\n 'dashboard.start': \"开始新的工作\",\n 'dashboard.startDescription': \"从这个 Worktree 继续工作\",\n 'dashboard.newWorktree': \"新建 Worktree\",\n 'dashboard.newSession': \"新建会话\",\n 'dashboard.newWorktreeDescription': \"基于当前分支创建独立的工作目录\",\n 'dashboard.newSessionDescription': \"在这个 Worktree 中开始新的会话\",\n 'dashboard.instructions': \"Worktree / Main 指令\",\n 'dashboard.edit': \"编辑\",\n 'dashboard.instructionsDescription': \"为这个 Worktree 或 Main Workspace 设置共享的工作指引。\",\n 'dashboard.noInstructions': \"尚未设置指令\",\n 'dashboard.instructionsHint': \"最多 32,000 字符。保存后在这个 Worktree 或 Main Workspace 中运行的会话下一次模型请求中以 <system-reminder> 生效;清空并保存可停用。\",\n 'dashboard.noSessions': \"此 Worktree 暂无可显示的会话。\",\n 'dashboard.viewSessions': \"查看全部会话\",\n 'dashboard.status': \"Worktree 状态\",\n 'dashboard.statusHint': \"目录可用性来自现有检查;选择 branch 基线后,Git 与变更页展示其之后的提交,状态区分别显示已提交和未提交的行数。\",\n 'dashboard.health': \"可用性\",\n 'dashboard.branch': \"当前分支\",\n 'dashboard.branchUnavailable': '当前分支无法获取',\n 'dashboard.aheadBehind': \"领先 / 落后\",\n 'dashboard.committedChanges': \"已提交变更\",\n 'dashboard.workingTree': \"未提交变更\",\n 'dashboard.viewDetails': \"查看详情\",\n 'dashboard.derived': \"派生 Worktree\",\n 'dashboard.childrenHint': \"派生关系尚未接入,不代表没有其他 Worktree。\",\n 'dashboard.viewChildren': \"查看派生 Worktree\",\n 'dashboard.quickActions': \"快捷操作\",\n 'dashboard.action.terminal': \"在终端中打开\",\n 'dashboard.action.diff': \"查看 Git Diff\",\n 'dashboard.action.pullRequest': \"创建 Pull Request\",\n 'dashboard.action.tests': \"运行测试\",\n 'dashboard.action.sync': \"同步基线\",\n 'dashboard.action.archive': \"归档 Worktree\",\n 'dashboard.hint.git': \"这里展示相对于所选 branch 基线的提交、已提交和未提交的变化行数、变更文件和统一 Diff。\",\n 'dashboard.hint.children': \"这里将展示基于此 Worktree 派生的工作目录与关系。\",\n 'dashboard.hint.settings': \"这里将提供 Worktree 指令与偏好设置。当前不会保存任何更改。\",\n 'dashboard.mvpHint': \"MVP · 会话、新建 Worktree、归档、Git 变更和 VS Code 已接入;其余标记为“即将推出”的操作暂不可用。\",\n 'mode.open': '打开 Worktree 模式',\n 'mode.exit': '退出 Worktree 模式',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree 导航',\n 'context.main': '当前分支:{name}',\n 'context.worktree': 'Worktree:{name}',\n 'workspace.rename': '重命名',\n 'workspace.delete': '删除',\n 'workspace.expand': '展开 {name}',\n 'workspace.collapse': '收起 {name}',\n 'workspace.collapseAll': '全部折叠',\n 'workspace.options': '工作区选项:{name}',\n 'workspace.addWorktree': '向 {name} 添加 Worktree',\n 'workspace.add': '添加工作区',\n 'workspace.search': '搜索工作区和会话',\n 'search.clear': '清除搜索',\n 'workspace.noMatches': '没有匹配的工作区',\n 'workspace.renameTitle': '重命名工作区',\n 'workspace.name': '工作区名称',\n 'workspace.duplicate': '已存在同名工作区。',\n 'workspace.deleteTitle': '删除工作区',\n 'workspace.deleteDescription': '删除“{name}”?这只会移除 DSH 工作区注册。目录、会话和 Git Worktree 会保留。',\n 'worktree.title': 'Worktree',\n 'worktree.main': '本地',\n 'worktree.mainWithBranch': '本地({branch})',\n 'worktree.detached': '已分离 Worktree',\n 'worktree.repair': 'Worktree 需要修复',\n 'worktree.repairGuidance': '检查此路径的目录、.git 入口和 Git Worktree 登记是否完整。若目录被移动,请先恢复到原路径;目录仍存在但 Git 关联异常时,可在该目录运行 git worktree repair 后刷新。若已删除且不再需要,请先归档,再选择清理磁盘同步移除状态,或移出管理。',\n 'worktree.recoveryGuidance': '上次操作尚未完成,或目录与仓库身份无法确认。请确认原目录和仓库可访问,再从此 Worktree 菜单选择“重试恢复”。若仍失败,请保留错误详情排查,不要手动删除插件索引。',\n 'worktree.branchDriftGuidance': '实际分支与记录不一致。若切换符合预期,请从此 Worktree 菜单选择“采用当前分支”;否则在 Git 中切回原分支后刷新。会话绑定和工作目录保持不变。',\n 'worktree.detachedGuidance': '此目录处于分离 HEAD。请先在 Git 中切换到所需的本地分支,再刷新;如与原记录不同,选择“采用当前分支”。',\n 'notice.details': '提示详情与恢复操作',\n 'worktree.recovery': 'Worktree 需要恢复',\n 'worktree.ready': '活动 Worktree 已就绪',\n 'worktree.branchDrift': 'Git 分支已变化',\n 'worktree.detachedHead': '分离 HEAD',\n 'worktree.adoptBranch': '采用当前分支',\n 'worktree.retryRecovery': '重试恢复',\n 'worktree.adoptDescription': '将记录分支从“{previous}”更新为“{current}”?只更新插件索引,会话绑定和磁盘文件保持不变。',\n 'worktree.adoptBeforeClean': '请先采用当前分支;分离 HEAD 时请先在 Git 中切换到分支。',\n 'worktree.cleaned': 'Worktree 已移除',\n 'worktree.archivedGroup': '已归档',\n 'worktree.cleanDisk': '清理磁盘',\n 'worktree.cleanDiskTitle': '清理 Worktree 磁盘',\n 'worktree.cleanDiskDescription': '从磁盘删除“{name}”({path})?此操作不可逆。插件不会检查 Session 或子代理是否正在运行,请自行确认所有使用此目录的任务均已停止;否则删除可能导致任务失败或数据丢失。若目录或 .git 已不存在,仅同步 Worktree 移除状态,剩余文件不会删除。关联 Session 与历史会保留。',\n 'worktree.forget': '移出管理',\n 'worktree.forgetTitle': '移出管理',\n 'worktree.forgetDescription': '将“{name}”从 Worktree 插件管理中移除?磁盘目录和 DSH 中的 Session 均会保留。',\n 'worktree.expand': '展开 {name}',\n 'worktree.collapse': '收起 {name}',\n 'worktree.options': 'Worktree 选项:{name}',\n 'worktree.copyPath': '复制路径',\n 'worktree.createNew': '创建新的 Worktree',\n 'worktree.archive': '归档 Worktree',\n 'worktree.archiveDescription': '归档“{name}”?它会移入“已归档”分组。磁盘目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.unarchive': '取消归档',\n 'worktree.unarchiveDisabledRepair': '目录或 Git 登记异常,无法取消归档',\n 'worktree.archiveExternalDescription': '归档“{name}”?它会移入“已归档”分组。外部目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.remove': '归档 Worktree',\n 'worktree.removeDescription': '归档“{name}”?目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.removeExternalDescription': '归档“{name}”?外部目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.addSession': '向 {name} 添加会话',\n 'worktree.noWorktrees': '暂无 Worktree',\n 'worktree.createTitle': '新建 Worktree',\n 'worktree.createDescription': '“{name}” · Worktree 路径由 DSH 管理。',\n 'worktree.tabCreate': '创建',\n 'worktree.tabImport': '导入',\n 'worktree.importDescription': '向“{name}”注册已有的 Worktree。注册和归档均保留原目录;只有另行确认“清理磁盘”才会删除目录。',\n 'worktree.importLoading': '正在查找可导入的 Worktree…',\n 'worktree.importEmpty': '没有可导入的 Worktree。',\n 'worktree.importPlaceholder': '请选择要导入的 Worktree',\n 'worktree.importSelected': '已选择',\n 'worktree.baseBranch': 'Worktree 基线分支',\n 'worktree.noLocalBranch': '没有本地分支',\n 'worktree.noBranches': '此工作区中没有找到本地分支。',\n 'worktree.setup.gitNotInstalled': 'Git 未安装或不在 PATH 中。请先安装 Git,然后重启 DSH 再重试。',\n 'worktree.setup.noRepository': '此 Workspace 不是 Git 仓库。请在 Workspace 目录执行以下命令:',\n 'worktree.setup.noInitialCommit': '此 Git 仓库还没有首次 commit。请先执行以下命令:',\n 'worktree.setup.noLocalBranch': '此 Git 仓库没有本地分支。请先创建一个本地分支:',\n 'worktree.setup.commands': '可复制的命令',\n 'worktree.name': 'Worktree 名称',\n 'worktree.create': '创建 Worktree',\n 'worktree.import': '导入 Worktree',\n 'session.options': '会话选项:{name}',\n 'session.new': '新会话',\n 'session.rename': '重命名会话',\n 'session.fork': 'Fork 会话',\n 'session.archive': '归档会话',\n 'session.copyId': '复制 Session ID',\n 'session.expandMore': '展开其余 {count} 个会话',\n 'session.collapse': '收起',\n 'session.name': '会话名称',\n 'session.status.running': '进行中',\n 'session.status.subagentsRunning.one': '{n} 个子代理运行中',\n 'session.status.subagentsRunning.other': '{n} 个子代理运行中',\n 'session.status.idle': '空闲',\n 'session.status.waitingApproval': '等待审批',\n 'session.status.planReview': '计划待审',\n 'session.status.waitingAnswer': '等待回答',\n 'session.status.completed': '已完成',\n copy: '复制',\n 'hover.copied': '已复制',\n 'session.time.now': '刚刚',\n 'session.time.minutes': '{n}分钟',\n 'session.time.hours': '{n}小时',\n 'session.time.days': '{n}天',\n 'session.time.months': '{n}个月',\n 'session.time.years': '{n}年',\n 'session.time.ago': '{t}前',\n 'dialog.close': '关闭',\n 'dialog.closeBaseline': '关闭编辑基线对话框',\n 'dialog.closeWorkspaceRename': '关闭重命名工作区对话框',\n 'dialog.closeWorkspaceDelete': '关闭删除工作区对话框',\n 'dialog.closeWorktreeCreate': '关闭创建 Worktree 对话框',\n 'dialog.closeWorktreeArchive': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeRemove': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeCleanDisk': '关闭清理 Worktree 磁盘对话框',\n 'dialog.closeWorktreeForget': '关闭移出管理对话框',\n 'dialog.cleanDisk': '清理磁盘',\n 'dialog.forget': '移出管理',\n 'dialog.cancel': '取消',\n 'dialog.rename': '重命名',\n 'dialog.delete': '删除',\n 'action.retry': '重试',\n 'action.retryBinding': '重试绑定',\n 'action.openCreatedSession': '打开已创建的 Session',\n 'permission.fallbackWorkspaceWrite': '无法使用 Worktree 完全访问预设,已降级为 workspace-write;保留审批提示。',\n 'permission.userRestricted': '已保留你在 DSH 原生权限界面选择的限制,未自动提升此 Worktree Session。',\n 'permission.unverified': '无法验证 Worktree Session 的权限服务;Session 已保留,但完全访问未得到确认。',\n 'permission.unavailable': 'Worktree Session 权限状态暂时不可用,请重试。',\n 'permission.fullAccessTitle': '确认启用 Worktree Full access?',\n 'permission.fullAccessDescription': '启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示;网络和进程策略不变。目标 Worktree:{cwd}',\n 'permission.fullAccessAcknowledge': '我已了解风险,并愿意继续',\n 'permission.fullAccessEnable': '启用 Worktree Full access',\n 'status.loading': '正在加载工作区…',\n 'error.worktreeDataUnavailable': 'Worktree 数据不可用,请重试。',\n 'error.gitNotInstalled': 'Git 未安装或不可用,请安装 Git 后重试。',\n 'error.connectionDisposed': 'Worktree 连接已释放,请重新加载插件后重试。',\n 'error.connectionFailed': 'Worktree endpoint {endpoint} 调用失败;连接错误,可重试:{reason}',\n 'error.invalidResult': 'Worktree endpoint {endpoint} 返回了无效结果,请重试请求。',\n 'error.workspaceOrderingUnavailable': '工作区排序不可用,请重新连接后重试。',\n 'error.sessionOrderingUnavailable': '会话排序不可用,请重新连接后重试。',\n 'error.worktreeOrderingUnavailable': 'Worktree 排序不可用,请重新连接后重试。',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree 已创建,但 Session 创建不可用,请重新连接后重试。',\n 'error.sessionCreationUnavailable': 'Session 创建不可用,请重新连接后重试。',\n 'error.worktreeRecordMissing': 'Worktree 注册未返回 Worktree 记录,请重试请求。',\n 'error.worktreeImportInvalid': '这个 Worktree 无法导入,请选择同一 Workspace 中有效的绝对路径。',\n 'error.worktreeAlreadyManaged': '这个 Worktree 已由插件管理。',\n 'error.worktreeMutationBusy': '另一个 DSH 实例正在修改 Worktree 状态,请稍后重试。',\n 'error.worktreeStateConflict': 'Worktree 状态已经变化,请刷新后重试。',\n 'error.worktreeRecoveryRequired': 'Worktree 状态需要恢复;请先完成恢复后再重试破坏性操作。',\n 'error.worktreeIdentityChanged': 'Worktree 或 repository 身份已经变化,需要恢复后再操作。',\n 'error.worktreeSessionBusy': '关联 Session 正在运行,无法执行此操作。',\n 'error.worktreeActivityUnavailable': '无法验证关联 Session 运行状态,无法执行此操作。',\n 'error.worktreeRegistrationSessionUnavailable': 'Worktree 已注册,但 Session 创建不可用,请重新连接后重试。',\n 'error.workspaceRenameUnavailable': '工作区重命名不可用,请重新连接后重试。',\n 'error.workspaceDeleteUnavailable': '工作区删除不可用,请重新连接后重试。',\n 'error.sessionRenameUnavailable': '会话重命名不可用,请重新连接后重试。',\n 'error.sessionBindingFailed': 'Session {sessionId} 已创建,但 Worktree 绑定失败:{reason}',\n 'error.sessionAlreadyBound': 'Session 已绑定到其他 Worktree,未创建新的 Session。',\n 'error.worktreePermissionConfirmationRequired': 'Session 和绑定已保留;确认完全访问后重试,未打开 Session。',\n 'error.worktreePermissionFailed': 'Worktree Session 权限设置失败,可重试:{reason}',\n 'error.sessionListNotReady': 'Session 列表尚未就绪,请重试。',\n 'error.sessionFactsIncomplete': 'Session 信息尚未完整,请重试。',\n 'error.worktreeSessionRepairRequired': '当前 Worktree 的 Session 绑定需要修复,请重试。',\n 'error.worktreeSessionUnavailable': '当前 Worktree 不可用,请重试。',\n 'error.sessionArchived': '该 Session 已归档,无法重试绑定。',\n 'branch.current': '(当前)',\n 'branch.checkedOut': '(已检出)',\n};\nexport const en = {\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard preview',\n 'dashboard.open': 'Open Dashboard',\n 'dashboard.copyBranch': 'Copy branch name',\n 'dashboard.branchCopied': 'Branch name copied',\n 'dashboard.branchCopyFailed': 'Branch name copy failed. Try again.',\n 'dashboard.tab.overview': \"Dashboard\",\n 'dashboard.tab.git': \"Git & Changes\",\n 'dashboard.git.title': 'Git & Changes',\n 'dashboard.git.baselineSelector': 'Baseline branch',\n 'dashboard.git.selectBaseline': 'Select a baseline branch',\n 'dashboard.git.selectBaselineTitle': 'Select a baseline branch',\n 'dashboard.git.selectBaselineDescription': 'Choose a local branch as the comparison point to view commits, changed files, and diffs.',\n 'dashboard.git.base': 'Base',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': 'Commit',\n 'dashboard.git.commits': 'Commits',\n 'dashboard.git.commitCount': '{n} commits',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} commits + working tree changes',\n 'dashboard.git.uncommittedChanges': 'Uncommitted changes',\n 'dashboard.git.workingTree': 'Working tree',\n 'dashboard.git.changedFiles': 'Changed files',\n 'dashboard.git.lineStats': '+{additions} lines, -{deletions} lines',\n 'dashboard.git.aheadBehindStats': '+{ahead} ahead, -{behind} behind',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': 'Drag to resize the stacked panes; double-click to reset',\n 'dashboard.git.resizeColumns': 'Drag to resize the side-by-side panes; double-click to reset',\n 'dashboard.git.openInSidebar': 'Open in Sidebar',\n 'dashboard.git.summaryDiff': 'Summary diff',\n 'dashboard.git.baselineSummary': 'Baseline summary',\n 'dashboard.git.baselineSummaryDescription': 'View all committed changes from the resolved baseline boundary (the shared ancestor when the baseline branch has diverged) to HEAD, excluding the working tree by default.',\n 'dashboard.git.includeWorkingTree': 'Include working tree',\n 'dashboard.git.includeWorkingTreeDescription': 'Include staged, unstaged, and untracked files.',\n 'dashboard.git.selectedCommitCount': '{n} commits selected',\n 'dashboard.git.multiSelectCommits': 'Multi-select commits',\n 'dashboard.git.multiSelectCommitsDescription': 'When off, clicking a commit shows its own diff; when on, several commits can be selected together.',\n 'dashboard.git.commitSelectionHint': 'Select multiple commits; working-tree changes cannot be mixed with commits.',\n 'dashboard.git.clearCommitSelection': 'Clear selection',\n 'dashboard.git.commitDiffSection': 'Commit change',\n 'dashboard.git.loadingSummaryFiles': 'Loading baseline summary changes…',\n 'dashboard.git.loadingSummaryDiff': 'Loading baseline summary diff…',\n 'dashboard.git.noBaselineChanges': 'The baseline and HEAD have no committed net changes.',\n 'dashboard.git.noLiveBaselineChanges': 'The baseline and current working tree have no net changes.',\n 'dashboard.git.refresh': 'Refresh',\n 'dashboard.git.refreshing': 'Refreshing…',\n 'dashboard.git.retry': 'Retry',\n 'dashboard.git.loading': 'Loading Git history and working tree changes…',\n 'dashboard.git.loadingFiles': 'Loading changed files…',\n 'dashboard.git.loadingDiff': 'Loading diff…',\n 'dashboard.git.loadFailed': 'Git data failed to load: {reason}',\n 'dashboard.git.refreshFailed': 'Git refresh failed: {reason}',\n 'dashboard.git.baselineUnknownTitle': 'Historical baseline unavailable',\n 'dashboard.git.baselineUnknownDescription': 'The selected branch cannot be safely compared with the current HEAD; confirm that it is still an ancestor of HEAD.',\n 'dashboard.git.mainUnavailableTitle': 'Not available for the local Workspace',\n 'dashboard.git.mainUnavailableDescription': 'Branch baseline selection in the Git Dashboard applies only to registered Worktrees.',\n 'dashboard.git.derived': 'Derived at runtime',\n 'dashboard.git.noCommits': 'No commits are ahead of the baseline.',\n 'dashboard.git.noFiles': 'This entry has no displayable changed files.',\n 'dashboard.git.selectCommit': 'Select a commit or working-tree change to view its details.',\n 'dashboard.git.selectFile': 'Select a file to view its diff.',\n 'dashboard.git.untitledCommit': '(untitled commit)',\n 'dashboard.git.truncatedHistory': 'Showing the first 200 commits.',\n 'dashboard.git.truncatedFiles': 'Too many changed files to list completely.',\n 'dashboard.git.binary': 'Binary files have no text diff to display.',\n 'dashboard.git.diffTruncated': 'The diff is too large to display completely; inspect the full change in your IDE.',\n 'dashboard.git.diffLinesHidden': 'Folded {n} diff lines to keep scrolling responsive.',\n 'dashboard.git.showFullDiff': 'Show full diff',\n 'dashboard.git.emptyDiff': 'No diff to display.',\n 'dashboard.git.status.added': 'Added',\n 'dashboard.git.status.modified': 'Modified',\n 'dashboard.git.status.deleted': 'Deleted',\n 'dashboard.git.status.renamed': 'Renamed',\n 'dashboard.git.status.copied': 'Copied',\n 'dashboard.git.status.typeChanged': 'Type changed',\n 'dashboard.tab.sessions': \"Sessions\",\n 'dashboard.tab.children': \"Children\",\n 'dashboard.tab.settings': \"Settings\",\n 'dashboard.back': \"Back to session\",\n 'dashboard.openSidebar': 'Open sidebar',\n 'dashboard.soon': \"Coming soon\",\n 'dashboard.notConnected': \"Not connected\",\n 'dashboard.unknown': \"Unknown\",\n 'dashboard.unknownError': 'Unknown error',\n 'dashboard.historicalUnavailable': \"Unavailable for historical Worktrees\",\n 'dashboard.detached': \"Detached HEAD\",\n 'dashboard.cleaned': \"Cleaned\",\n 'dashboard.archived': \"Archived\",\n 'dashboard.copied': \"Full path copied\",\n 'dashboard.copyFailed': \"Copy failed. Try again or select the path above.\",\n 'dashboard.openEditor': \"Open in VS Code\",\n 'dashboard.openIn': \"Open in {app}\",\n 'dashboard.created': \"Created\",\n 'dashboard.imported': 'Imported',\n 'dashboard.editorMenu': 'Choose application',\n 'dashboard.saveInstructions': 'Save',\n 'dashboard.savingInstructions': 'Saving…',\n 'dashboard.cancelInstructions': 'Cancel',\n 'dashboard.instructionsSaveFailed': 'Save failed; your draft is retained. Retry, or cancel and reopen if another window changed the instructions.',\n 'dashboard.editBase': 'Edit baseline',\n 'dashboard.editBaseDescription': 'Choose a local branch as the Git & Changes comparison baseline.',\n 'dashboard.searchBranches': 'Search branches',\n 'dashboard.noMatchingBranches': 'No matching branches',\n 'dashboard.selectBaseBranch': 'Select a baseline branch',\n 'dashboard.saveBase': 'Save baseline',\n 'dashboard.savingBase': 'Saving…',\n 'dashboard.cancelBase': 'Cancel',\n 'dashboard.baseSaveFailed': 'Baseline save failed; your draft is retained. Retry, or cancel and reopen if another window changed the baseline.',\n 'dashboard.base': \"Base\",\n 'dashboard.source': \"Source\",\n 'dashboard.external': \"Imported\",\n 'dashboard.plugin': \"Plugin-created\",\n 'dashboard.start': \"Start a new work\",\n 'dashboard.startDescription': \"Choose how to continue from this worktree\",\n 'dashboard.newWorktree': \"New Worktree\",\n 'dashboard.newSession': \"New Session\",\n 'dashboard.newWorktreeDescription': \"Create an isolated worktree from this branch\",\n 'dashboard.newSessionDescription': \"Start another session in this worktree\",\n 'dashboard.instructions': \"Worktree / Main Instructions\",\n 'dashboard.edit': \"Edit\",\n 'dashboard.instructionsDescription': \"A place for shared guidance for this Worktree or Main Workspace.\",\n 'dashboard.noInstructions': \"No instructions yet\",\n 'dashboard.instructionsHint': \"Up to 32,000 characters. Saved instructions enter the next model request for Sessions using this Worktree or Main Workspace as <system-reminder>. Clear and save to disable.\",\n 'dashboard.noSessions': \"No visible sessions in this worktree.\",\n 'dashboard.viewSessions': \"View all sessions\",\n 'dashboard.status': \"Worktree Status\",\n 'dashboard.statusHint': \"Availability comes from existing checks; after you choose a branch baseline, Git & Changes shows later commits, while the status facts separate committed and uncommitted line counts.\",\n 'dashboard.health': \"Availability\",\n 'dashboard.branch': \"Current branch\",\n 'dashboard.branchUnavailable': 'Current branch unavailable',\n 'dashboard.aheadBehind': \"Ahead / Behind\",\n 'dashboard.committedChanges': \"Committed changes\",\n 'dashboard.workingTree': \"Uncommitted changes\",\n 'dashboard.viewDetails': \"View details\",\n 'dashboard.derived': \"Derived Worktrees\",\n 'dashboard.childrenHint': \"Parent and child relationships are not connected yet.\",\n 'dashboard.viewChildren': \"View all children\",\n 'dashboard.quickActions': \"Quick Actions\",\n 'dashboard.action.terminal': \"Open in Terminal\",\n 'dashboard.action.diff': \"View Git Diff\",\n 'dashboard.action.pullRequest': \"Create Pull Request\",\n 'dashboard.action.tests': \"Run Tests\",\n 'dashboard.action.sync': \"Sync with Base\",\n 'dashboard.action.archive': \"Archive Worktree\",\n 'dashboard.hint.git': \"View commits, committed and uncommitted line totals, changed files, and unified diffs relative to the selected branch baseline.\",\n 'dashboard.hint.children': \"Derived worktrees and their relationships will appear here.\",\n 'dashboard.hint.settings': \"Worktree instructions and preferences will appear here. No changes are saved yet.\",\n 'dashboard.mvpHint': \"MVP · Sessions, Worktree creation, archive, Git changes, and VS Code are connected. Other actions marked Coming soon are unavailable.\",\n 'mode.open': 'Open Worktree mode',\n 'mode.exit': 'Exit Worktree mode',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree navigation',\n 'context.main': 'Current branch: {name}',\n 'context.worktree': 'Worktree: {name}',\n 'workspace.rename': 'Rename',\n 'workspace.delete': 'Delete',\n 'workspace.expand': 'Expand {name}',\n 'workspace.collapse': 'Collapse {name}',\n 'workspace.collapseAll': 'Collapse All',\n 'workspace.options': 'Workspace options for {name}',\n 'workspace.addWorktree': 'Add Worktree to {name}',\n 'workspace.add': 'Add Workspace',\n 'workspace.search': 'Search Workspaces and Sessions',\n 'search.clear': 'Clear search',\n 'workspace.noMatches': 'No matching Workspaces',\n 'workspace.renameTitle': 'Rename Workspace',\n 'workspace.name': 'Workspace name',\n 'workspace.duplicate': 'A Workspace with this name already exists.',\n 'workspace.deleteTitle': 'Delete Workspace',\n 'workspace.deleteDescription': 'Delete {name}? This removes only the DSH Workspace registration. The directory, Sessions, and Git Worktrees will be retained.',\n 'worktree.title': 'Worktrees',\n 'worktree.main': 'Local',\n 'worktree.mainWithBranch': 'Local ({branch})',\n 'worktree.detached': 'Detached Worktree',\n 'worktree.repair': 'Worktree needs repair',\n 'worktree.repairGuidance': 'Check the directory, .git entry, and Git Worktree registration at this path. Restore a moved directory to its original path. If it still exists but Git links are broken, run git worktree repair there and refresh. If it was deleted and is no longer needed, archive it, then use Clean Disk to reconcile removal or Remove from Management.',\n 'worktree.recoveryGuidance': 'A previous operation is incomplete, or the directory and repository identity could not be verified. Check that the original directory and repository are accessible, then choose Retry Recovery from this Worktree menu. If it still fails, keep the error details for diagnosis; do not delete the plugin index manually.',\n 'worktree.branchDriftGuidance': 'The current branch differs from the recorded branch. If intentional, choose Adopt Current Branch from this Worktree menu; otherwise switch back in Git and refresh. Session bindings and working directories are preserved.',\n 'worktree.detachedGuidance': 'This directory has a detached HEAD. Switch to the intended local branch in Git and refresh, then choose Adopt Current Branch if it differs from the recorded branch.',\n 'notice.details': 'Notification details and recovery',\n 'worktree.recovery': 'Worktree requires recovery',\n 'worktree.ready': 'Active Worktree ready',\n 'worktree.branchDrift': 'Git branch changed',\n 'worktree.detachedHead': 'Detached HEAD',\n 'worktree.adoptBranch': 'Adopt current branch',\n 'worktree.retryRecovery': 'Retry recovery',\n 'worktree.adoptDescription': 'Update the recorded branch from “{previous}” to “{current}”? Only the plugin index changes; Session bindings and disk files are preserved.',\n 'worktree.adoptBeforeClean': 'Adopt the current branch first; for detached HEAD, check out a branch in Git first.',\n 'worktree.cleaned': 'Worktree removed',\n 'worktree.archivedGroup': 'Archived',\n 'worktree.cleanDisk': 'Clean Up Disk',\n 'worktree.cleanDiskTitle': 'Clean Up Worktree Disk',\n 'worktree.cleanDiskDescription': 'Delete {name} ({path}) from disk? This operation cannot be undone. The plugin does not check whether Sessions or subagents are running. Confirm that all tasks using this directory have stopped; otherwise deletion may cause task failures or data loss. If the directory or .git is already absent, only the Worktree removal status is synchronized; remaining files are not deleted. Linked Sessions and history are preserved.',\n 'worktree.forget': 'Remove from Management',\n 'worktree.forgetTitle': 'Remove from Management',\n 'worktree.forgetDescription': 'Remove {name} from Worktree plugin management? Disk directories and Sessions in DSH will be retained.',\n 'worktree.expand': 'Expand {name}',\n 'worktree.collapse': 'Collapse {name}',\n 'worktree.options': 'Worktree options for {name}',\n 'worktree.copyPath': 'Copy path',\n 'worktree.createNew': 'Create new Worktree',\n 'worktree.archive': 'Archive Worktree',\n 'worktree.archiveDescription': 'Archive {name}? It moves to the Archived group. Disk files, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.unarchive': 'Unarchive Worktree',\n 'worktree.unarchiveDisabledRepair': 'Cannot unarchive because directory or Git registration is abnormal',\n 'worktree.archiveExternalDescription': 'Archive {name}? It moves to the Archived group. The external directory, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.remove': 'Archive Worktree',\n 'worktree.removeDescription': 'Archive {name}? The directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.removeExternalDescription': 'Archive {name}? The external directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.addSession': 'Add Session to {name}',\n 'worktree.noWorktrees': 'No Worktrees',\n 'worktree.createTitle': 'New Worktree',\n 'worktree.createDescription': '{name} · the Worktree path is managed by DSH.',\n 'worktree.tabCreate': 'Create',\n 'worktree.tabImport': 'Import',\n 'worktree.importDescription': 'Register an existing Worktree for {name}. Registration and archiving preserve the directory; only a separately confirmed Clean Disk action deletes it.',\n 'worktree.importLoading': 'Finding importable Worktrees…',\n 'worktree.importEmpty': 'No importable Worktrees found.',\n 'worktree.importPlaceholder': 'Select a Worktree to import',\n 'worktree.importSelected': 'Selected',\n 'worktree.baseBranch': 'Worktree base branch',\n 'worktree.noLocalBranch': 'No local branch',\n 'worktree.noBranches': 'No local branches found in this Workspace.',\n 'worktree.setup.gitNotInstalled': 'Git is not installed or is not available on PATH. Install Git, restart DSH, and retry.',\n 'worktree.setup.noRepository': 'This Workspace is not a Git repository. Run these commands in the Workspace directory:',\n 'worktree.setup.noInitialCommit': 'This Git repository has no initial commit. Run these commands first:',\n 'worktree.setup.noLocalBranch': 'This Git repository has no local branch. Create one first:',\n 'worktree.setup.commands': 'Copyable commands',\n 'worktree.name': 'Worktree name',\n 'worktree.create': 'Create Worktree',\n 'worktree.import': 'Import Worktree',\n 'session.options': 'Session options for {name}',\n 'session.new': 'New Session',\n 'session.rename': 'Rename session',\n 'session.fork': 'Fork session',\n 'session.archive': 'Archive session',\n 'session.copyId': 'Copy session ID',\n 'session.expandMore': 'Expand {count} more',\n 'session.collapse': 'Collapse',\n 'session.name': 'Session name',\n 'session.status.running': 'Running',\n 'session.status.subagentsRunning.one': '{n} subagent running',\n 'session.status.subagentsRunning.other': '{n} subagents running',\n 'session.status.idle': 'Idle',\n 'session.status.waitingApproval': 'Waiting for approval',\n 'session.status.planReview': 'Plan awaiting review',\n 'session.status.waitingAnswer': 'Waiting for answer',\n 'session.status.completed': 'Completed',\n copy: 'Copy',\n 'hover.copied': 'Copied',\n 'session.time.now': 'now',\n 'session.time.minutes': '{n}min',\n 'session.time.hours': '{n}h',\n 'session.time.days': '{n}d',\n 'session.time.months': '{n}mo',\n 'session.time.years': '{n}y',\n 'session.time.ago': '{t} ago',\n 'dialog.close': 'Close',\n 'dialog.closeBaseline': 'Close Edit baseline dialog',\n 'dialog.closeWorkspaceRename': 'Close Rename Workspace dialog',\n 'dialog.closeWorkspaceDelete': 'Close Delete Workspace dialog',\n 'dialog.closeWorktreeCreate': 'Close Create Worktree dialog',\n 'dialog.closeWorktreeArchive': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeRemove': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeCleanDisk': 'Close Clean Up Worktree Disk dialog',\n 'dialog.closeWorktreeForget': 'Close Remove from Management dialog',\n 'dialog.cleanDisk': 'Clean Up Disk',\n 'dialog.forget': 'Remove from Management',\n 'dialog.cancel': 'Cancel',\n 'dialog.rename': 'Rename',\n 'dialog.delete': 'Delete',\n 'action.retry': 'Retry',\n 'action.retryBinding': 'Retry Binding',\n 'action.openCreatedSession': 'Open Created Session',\n 'permission.fallbackWorkspaceWrite': 'The Worktree Full Access preset is unavailable; fell back to workspace-write with approval prompts enabled.',\n 'permission.userRestricted': 'The restriction selected in DSH’s native permission UI was preserved; this Worktree Session was not elevated.',\n 'permission.unverified': 'The Worktree Session permission service could not be verified; the Session was retained, but Full Access is not confirmed.',\n 'permission.unavailable': 'The Worktree Session permission state is temporarily unavailable; retry the request.',\n 'permission.fullAccessTitle': 'Enable Worktree Full access?',\n 'permission.fullAccessDescription': 'Worktree Full access lets this Session access linked Git metadata and Worktree files outside the Session directory. It disables filesystem confinement for this Session while keeping approval prompts enabled; network and process policy are unchanged. Target Worktree: {cwd}',\n 'permission.fullAccessAcknowledge': 'I understand the risks and want to continue',\n 'permission.fullAccessEnable': 'Enable Worktree Full access',\n 'status.loading': 'Loading Workspaces…',\n 'error.worktreeDataUnavailable': 'Worktree data is unavailable. Retry the request.',\n 'error.gitNotInstalled': 'Git is not installed or unavailable. Install Git and retry.',\n 'error.connectionDisposed': 'Worktree connection is disposed; reload the plugin and retry.',\n 'error.connectionFailed': 'Worktree endpoint {endpoint} failed; retryable connection error: {reason}',\n 'error.invalidResult': 'Worktree endpoint {endpoint} returned an invalid result; retry the request.',\n 'error.workspaceOrderingUnavailable': 'Workspace ordering is unavailable; retry after reconnecting.',\n 'error.sessionOrderingUnavailable': 'Session ordering is unavailable; retry after reconnecting.',\n 'error.worktreeOrderingUnavailable': 'Worktree ordering is unavailable; retry after reconnecting.',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree created, but Session creation is unavailable; retry after reconnecting.',\n 'error.sessionCreationUnavailable': 'Session creation is unavailable; retry after reconnecting.',\n 'error.worktreeRecordMissing': 'Worktree registration returned no Worktree record; retry the request.',\n 'error.worktreeImportInvalid': 'This Worktree cannot be imported. Choose a valid absolute path in this Workspace.',\n 'error.worktreeAlreadyManaged': 'This Worktree is already managed by the plugin.',\n 'error.worktreeMutationBusy': 'Another DSH instance is mutating Worktree state; retry shortly.',\n 'error.worktreeStateConflict': 'The Worktree state changed; refresh and retry the request.',\n 'error.worktreeRecoveryRequired': 'Worktree state requires recovery; resolve it before retrying destructive actions.',\n 'error.worktreeIdentityChanged': 'The Worktree or repository identity changed; recovery is required before acting.',\n 'error.worktreeSessionBusy': 'Linked Session activity is still running; operation rejected.',\n 'error.worktreeActivityUnavailable': 'Unable to verify linked Session activity; operation rejected.',\n 'error.worktreeRegistrationSessionUnavailable': 'The Worktree was registered, but Session creation is unavailable; retry after reconnecting.',\n 'error.workspaceRenameUnavailable': 'Workspace rename is unavailable; retry after reconnecting.',\n 'error.workspaceDeleteUnavailable': 'Workspace delete is unavailable; retry after reconnecting.',\n 'error.sessionRenameUnavailable': 'Session rename is unavailable; retry after reconnecting.',\n 'error.sessionBindingFailed': 'Session {sessionId} was created, but Worktree binding failed: {reason}',\n 'error.sessionAlreadyBound': 'The Session is already bound to another Worktree; no new Session was created.',\n 'error.worktreePermissionConfirmationRequired': 'The Session and binding were retained; confirm Full Access and retry. The Session was not opened.',\n 'error.worktreePermissionFailed': 'Worktree Session permission setup failed; retryable error: {reason}',\n 'error.sessionListNotReady': 'The Session list is not ready yet; retry the request.',\n 'error.sessionFactsIncomplete': 'Session facts are incomplete; retry the request.',\n 'error.worktreeSessionRepairRequired': 'The current Worktree Session binding needs repair; retry the request.',\n 'error.worktreeSessionUnavailable': 'The current Worktree is unavailable; retry the request.',\n 'error.sessionArchived': 'This Session is archived and cannot be retried for binding.',\n 'branch.current': ' (current)',\n 'branch.checkedOut': ' (checked out)',\n};\n//# sourceMappingURL=locales.js.map","/** The one logical channel shared by the DSH Connection and Typert Gateway. */\nexport const WORKTREE_CONNECTION_CHANNEL = '/api';\n/**\n * Canonical Worktree endpoints owned by this adapter. Keeping the table here makes\n * the browser call surface auditable without making React know wire names.\n */\nexport const WORKTREE_CONNECTION_ENDPOINTS = Object.freeze({\n listWorktrees: 'worktreeManager/listWorktrees',\n listWorktreeCommits: 'worktreeManager/listWorktreeCommits',\n listWorktreeCommitFiles: 'worktreeManager/listWorktreeCommitFiles',\n getWorktreeCommitFileDiff: 'worktreeManager/getWorktreeCommitFileDiff',\n listImportCandidates: 'worktreeManager/listImportCandidates',\n listBranches: 'worktreeManager/listBranches',\n createWorktree: 'worktreeManager/createWorktree',\n importWorktree: 'worktreeManager/importWorktree',\n removeWorktree: 'worktreeManager/removeWorktree',\n unarchiveWorktree: 'worktreeManager/unarchiveWorktree',\n cleanWorktree: 'worktreeManager/cleanWorktree',\n adoptWorktreeBranch: 'worktreeManager/adoptWorktreeBranch',\n recoverWorktrees: 'worktreeManager/recoverWorktrees',\n forgetWorktree: 'worktreeManager/forgetWorktree',\n insertWorktreeBefore: 'worktreeManager/insertWorktreeBefore',\n getWorktreeInstructions: 'worktreeManager/getWorktreeInstructions',\n updateWorktreeInstructions: 'worktreeManager/updateWorktreeInstructions',\n updateWorktreeBaseBranch: 'worktreeManager/updateWorktreeBaseBranch',\n listBindings: 'worktreeManager/listBindings',\n bindSession: 'worktreeManager/bindSession',\n ensureWorktreePermission: 'worktreeManager/ensureWorktreePermission',\n normalizeDetachedWorktreePermissions: 'worktreeManager/normalizeDetachedWorktreePermissions',\n});\n/** Browser-safe error shared by transport, Gateway, endpoint and domain failures. */\nexport class WorktreeConnectionError extends Error {\n code;\n details;\n retryable;\n constructor(options) {\n super(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'WorktreeConnectionError';\n this.code = options.code;\n this.details = Object.freeze({ ...(options.details ?? {}) });\n this.retryable = options.retryable;\n }\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isWorktreeError(value) {\n return (isRecord(value) &&\n typeof value.code === 'string' &&\n typeof value.message === 'string' &&\n isRecord(value.details));\n}\nfunction isWorktreeRemoteResult(value) {\n if (!isRecord(value) || typeof value.ok !== 'boolean')\n return false;\n return value.ok || (isWorktreeError(value.error) && value.error.details !== undefined);\n}\nfunction disposedError() {\n return new WorktreeConnectionError({\n code: 'CLIENT_DISPOSED',\n message: '',\n details: {},\n retryable: false,\n });\n}\nfunction connectionFailure(endpoint, error, code = 'CONNECTION_CALL_FAILED') {\n const message = error instanceof Error ? error.message : String(error);\n return new WorktreeConnectionError({\n code,\n message,\n details: { endpoint },\n retryable: true,\n cause: error,\n });\n}\nfunction gatewayFailure(endpoint, result) {\n const rawDetails = isRecord(result.error.details) ? result.error.details : {};\n throw new WorktreeConnectionError({\n code: result.error.code,\n message: result.error.message,\n details: { endpoint, ...rawDetails },\n retryable: true,\n });\n}\nfunction invalidResult(endpoint) {\n return new WorktreeConnectionError({\n code: 'WORKTREE_RPC_INVALID_RESULT',\n message: '',\n details: { endpoint },\n retryable: true,\n });\n}\nfunction unwrap(endpoint, result) {\n if (!result.ok)\n gatewayFailure(endpoint, result);\n if (!isWorktreeRemoteResult(result.value))\n throw invalidResult(endpoint);\n if (!result.value.ok) {\n throw new WorktreeConnectionError({\n code: result.value.error.code,\n message: result.value.error.message,\n details: result.value.error.details,\n retryable: false,\n });\n }\n return result.value.value;\n}\n/**\n * Adapt the shared DSH Connection RPC into the existing WorktreeManager contract.\n * All wire details and request cancellation live behind this one deep module.\n */\nexport function createWorktreeConnectionAdapter(rpc) {\n const inFlight = new Set();\n let disposed = false;\n async function invoke(method, input) {\n if (disposed)\n throw disposedError();\n const controller = new AbortController();\n inFlight.add(controller);\n const endpoint = WORKTREE_CONNECTION_ENDPOINTS[method];\n try {\n let result;\n try {\n result = await rpc.call(WORKTREE_CONNECTION_CHANNEL, endpoint, { args: { input } }, controller.signal);\n }\n catch (error) {\n if (disposed && controller.signal.aborted)\n throw disposedError();\n throw connectionFailure(endpoint, error);\n }\n return unwrap(endpoint, result);\n }\n finally {\n inFlight.delete(controller);\n }\n }\n return {\n listWorktrees: (input) => invoke('listWorktrees', input),\n listWorktreeCommits: (input) => invoke('listWorktreeCommits', input),\n listWorktreeCommitFiles: (input) => invoke('listWorktreeCommitFiles', input),\n getWorktreeCommitFileDiff: (input) => invoke('getWorktreeCommitFileDiff', input),\n listImportCandidates: (input) => invoke('listImportCandidates', input),\n listBranches: (input) => invoke('listBranches', input),\n createWorktree: (input) => invoke('createWorktree', input),\n importWorktree: (input) => invoke('importWorktree', input),\n async removeWorktree(input) {\n await invoke('removeWorktree', input);\n },\n async unarchiveWorktree(input) {\n await invoke('unarchiveWorktree', input);\n },\n async adoptWorktreeBranch(input) { await invoke('adoptWorktreeBranch', input); },\n async recoverWorktrees(input) { await invoke('recoverWorktrees', input); },\n async cleanWorktree(input) {\n await invoke('cleanWorktree', input);\n },\n async forgetWorktree(input) {\n await invoke('forgetWorktree', input);\n },\n async insertWorktreeBefore(input) {\n return invoke('insertWorktreeBefore', input);\n },\n async getWorktreeInstructions(input) {\n return invoke('getWorktreeInstructions', input);\n },\n async updateWorktreeInstructions(input) {\n return invoke('updateWorktreeInstructions', input);\n },\n async updateWorktreeBaseBranch(input) {\n return invoke('updateWorktreeBaseBranch', input);\n },\n listBindings: (input) => invoke('listBindings', input),\n bindSession: (input) => invoke('bindSession', input),\n ensureWorktreePermission: (input) => invoke('ensureWorktreePermission', input),\n normalizeDetachedWorktreePermissions: (input) => invoke('normalizeDetachedWorktreePermissions', input),\n dispose() {\n if (disposed)\n return;\n disposed = true;\n for (const controller of inFlight)\n controller.abort();\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-connection.js.map","import { createElement } from 'react';\n/** Resolve a legacy size-named export or the equivalent DSH 1.7 weighted export. */\nexport function createDshIconAlias(exports, legacyName, currentName) {\n return function DshIconAlias(props) {\n const candidate = exports[legacyName] ?? exports[currentName];\n if (typeof candidate !== 'function') {\n throw new Error(`Missing DSH icon export: ${legacyName} or ${currentName}`);\n }\n return createElement(candidate, props);\n };\n}\n//# sourceMappingURL=dsh-icon-compat.js.map","import * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nimport { createDshIconAlias } from './dsh-icon-compat.js';\nconst exports = primitives;\nexport const IconArchiveOutline20 = createDshIconAlias(exports, 'IconArchiveOutline20', 'IconArchiveOutlineRegular');\nexport const IconBranchOutline16 = createDshIconAlias(exports, 'IconBranchOutline16', 'IconBranchOutlineRegular');\nexport const IconChevronDownOutline14 = createDshIconAlias(exports, 'IconChevronDownOutline14', 'IconChevronDownOutlineRegular');\nexport const IconChevronRightOutline14 = createDshIconAlias(exports, 'IconChevronRightOutline14', 'IconChevronRightOutlineRegular');\nexport const IconCheckOutline16 = createDshIconAlias(exports, 'IconCheckOutline16', 'IconCheckOutlineRegular');\nexport const IconCloseFill14 = createDshIconAlias(exports, 'IconCloseFill14', 'IconCloseFillRegular');\nexport const IconCloseOutline16 = createDshIconAlias(exports, 'IconCloseOutline16', 'IconCloseOutlineRegular');\nexport const IconCopyOutline16 = createDshIconAlias(exports, 'IconCopyOutline16', 'IconCopyOutlineRegular');\nexport const IconEditOutline16 = createDshIconAlias(exports, 'IconEditOutline16', 'IconEditOutlineRegular');\nexport const IconEllipsisOutline16 = createDshIconAlias(exports, 'IconEllipsisOutline16', 'IconEllipsisOutlineRegular');\nexport const IconFolderClose16 = createDshIconAlias(exports, 'IconFolderClose16', 'IconFolderCloseRegular');\nexport const IconFolderOpen16 = createDshIconAlias(exports, 'IconFolderOpen16', 'IconFolderOpenRegular');\nexport const IconPanelLeftOutline16 = createDshIconAlias(exports, 'IconPanelLeftOutline16', 'IconPanelLeftOutlineRegular');\nexport const IconPlusOutline16 = createDshIconAlias(exports, 'IconPlusOutline16', 'IconPlusOutlineRegular');\nexport const IconProjectAddOutline16 = createDshIconAlias(exports, 'IconProjectAddOutline16', 'IconProjectAddOutlineRegular');\nexport const IconRefreshOutline16 = createDshIconAlias(exports, 'IconRefreshOutline16', 'IconRefreshOutlineRegular');\nexport const IconRightUpOutline16 = createDshIconAlias(exports, 'IconRightUpOutline16', 'IconRightUpOutlineRegular');\nexport const IconSearchOutline16 = createDshIconAlias(exports, 'IconSearchOutline16', 'IconSearchOutlineRegular');\nexport const IconTrashOutline16 = createDshIconAlias(exports, 'IconTrashOutline16', 'IconTrashOutlineRegular');\n//# sourceMappingURL=dsh-icons.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport styles from './worktree-context.css';\nfunction WorktreeContextLabel({ value, t, }) {\n if (value.kind === 'none')\n return null;\n const ariaLabel = value.kind === 'main'\n ? t('context.main', { name: value.label })\n : t('context.worktree', { name: value.label });\n return (_jsx(HoverCard, { anchor: _jsxs(\"span\", { className: styles.headerContext, title: value.label, \"aria-label\": ariaLabel, children: [_jsx(IconBranchOutline16, { size: 14, className: styles.contextIcon }), _jsx(\"span\", { className: styles.contextLabel, children: value.label })] }), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: value.label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Render the current branch or active Worktree branch beside the Session title. */\nexport function WorktreeHeaderContext({ sessionId, useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.sessionId !== sessionId)\n return null;\n return _jsx(WorktreeContextLabel, { value: state.value, t: t });\n}\n//# sourceMappingURL=WorktreeContext.js.map","let globalSetViewMode;\nexport function registerViewModeSetter(setter) {\n globalSetViewMode = setter;\n}\nexport function getViewModeSetter() {\n return globalSetViewMode;\n}\nexport function switchViewMode(mode) {\n globalSetViewMode?.(mode);\n}\n//# sourceMappingURL=view-mode-dispatch.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport { registerViewModeSetter } from './view-mode-dispatch.js';\nimport styles from '../worktree.css';\n/** Footer action that enters/exits the peer Worktree navigation mode. */\nexport function WorktreeModeAction({ wide, useStore, actions, t, available, }) {\n useEffect(() => {\n registerViewModeSetter(actions.setViewMode);\n return () => {\n registerViewModeSetter(undefined);\n };\n }, [actions.setViewMode]);\n if (!available)\n return null;\n const mode = useStore((state) => state.viewMode);\n const active = mode === 'worktree';\n return (_jsxs(\"button\", { type: \"button\", className: styles.action, \"data-worktree-mode-action\": true, \"data-active\": active || undefined, \"data-collapsed\": !wide || undefined, \"aria-label\": active ? t('mode.exit') : t('mode.open'), \"aria-pressed\": active, title: active ? t('mode.exit') : t('mode.label'), onClick: () => {\n actions.setViewMode(active ? 'workspace-session' : 'worktree');\n }, children: [_jsx(IconBranchOutline16, { size: wide ? 16 : 18 }), wide && _jsx(\"span\", { className: styles.actionLabel, children: t('mode.label') })] }));\n}\n//# sourceMappingURL=WorktreeModeAction.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** 4-quadrant layout glyph representing dashboard / overview. */\nexport function IconDashboard({ size = 16, className, }) {\n return (_jsxs(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.5\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"rect\", { x: \"2\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"2\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" })] }));\n}\n//# sourceMappingURL=dashboard-icon.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconDashboard } from './dashboard-icon.js';\nimport styles from './dashboard-header-action.css';\n/**\n * Render a quick Dashboard action for the current Session's resolved context.\n * The entry only appears after the shared context read is ready and points at\n * the same Session that owns the native header.\n */\nexport function DashboardHeaderAction({ sessionId, useWorktreeContext, openDashboard, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.status !== 'ready' || state.sessionId !== sessionId || state.value.kind === 'none') {\n return null;\n }\n return (_jsx(Tooltip, { label: t('dashboard.open'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.headerDashboardButton, \"aria-label\": t('dashboard.open'), onClick: () => {\n openDashboard(String(sessionId));\n }, children: _jsx(IconDashboard, { size: 16 }) }) }));\n}\n//# sourceMappingURL=DashboardHeaderAction.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport styles from './worktree-context.css';\nfunction labelFor(state) {\n if (state.status !== 'ready' ||\n state.workspaceTitle === undefined ||\n state.value.kind === 'none') {\n return undefined;\n }\n return `${state.workspaceTitle} (${state.value.label})`;\n}\nfunction elementWithClassSuffix(root, suffix) {\n const candidates = root.querySelectorAll('[class]');\n for (const candidate of candidates) {\n if ([...candidate.classList].some((token) => token === suffix || token.endsWith(`_${suffix}`))) {\n return candidate;\n }\n }\n return null;\n}\nfunction headlineElement(root) {\n // Anchor to the visible end of the native title line. The headline wrapper\n // spans the whole content column, so using it would place the suffix at the\n // far edge instead of immediately after the title and preview badge.\n return elementWithClassSuffix(root, 'previewBadge')\n ?? elementWithClassSuffix(root, 'headlineText')\n ?? elementWithClassSuffix(root, 'headline');\n}\nfunction positionedAncestor(element) {\n if (element.offsetParent instanceof HTMLElement)\n return element.offsetParent;\n for (let ancestor = element.parentElement; ancestor !== null; ancestor = ancestor.parentElement) {\n if (getComputedStyle(ancestor).position !== 'static')\n return ancestor;\n }\n return null;\n}\nfunction overlayFor(element) {\n const host = element.closest('[data-worktree-hero-host]');\n return positionedAncestor(host ?? element);\n}\nfunction measurePlacement(element) {\n const hero = document.querySelector('[data-phase=\"hero\"]');\n // The Slot renderer inserts a display: contents wrapper before the actual\n // shell overlay layer, so the direct parent is not the containing block.\n const overlay = overlayFor(element);\n const headline = hero === null ? null : headlineElement(hero);\n if (hero === null || headline === null || overlay === null)\n return null;\n const anchor = headline.getBoundingClientRect();\n const frame = overlay.getBoundingClientRect();\n const width = element.getBoundingClientRect().width;\n const afterHeadlineLeft = anchor.right - frame.left + 8;\n const fitsAfterHeadline = afterHeadlineLeft + width <= frame.width - 8;\n return {\n left: fitsAfterHeadline\n ? afterHeadlineLeft\n : Math.max(8, frame.width - width - 8),\n top: fitsAfterHeadline\n ? Math.max(8, anchor.top - frame.top + (anchor.height - 22) / 2)\n : Math.max(8, anchor.bottom - frame.top + 8),\n };\n}\nfunction contextAriaLabel(state, t) {\n if (state.value.kind === 'main')\n return t('context.main', { name: state.value.label });\n if (state.value.kind === 'worktree')\n return t('context.worktree', { name: state.value.label });\n return undefined;\n}\nfunction heroContainer() {\n if (typeof document === 'undefined')\n return null;\n const el = document.querySelector('[data-phase=\"hero\"]');\n return el && el.isConnected ? el : null;\n}\n/**\n * Browser-local Hero suffix. Portaled directly into the native Hero container\n * so its stacking context stays within the conversation column instead of\n * floating above overlays, menus, and dropdowns.\n */\nexport function WorktreeHeroContext({ useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n const label = labelFor(state);\n const [placement, setPlacement] = useState(null);\n const [heroTarget, setHeroTarget] = useState(() => heroContainer());\n const measure = useCallback((element) => {\n if (element === null) {\n setPlacement(null);\n return;\n }\n setPlacement(measurePlacement(element));\n }, []);\n useLayoutEffect(() => {\n if (typeof document === 'undefined' || typeof window === 'undefined')\n return undefined;\n let frameRequest;\n const schedule = () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n frameRequest = window.requestAnimationFrame(() => {\n frameRequest = undefined;\n const currentHero = heroContainer();\n setHeroTarget((prev) => (prev === currentHero ? prev : currentHero));\n const element = document.querySelector('[data-worktree-hero-context]');\n if (element !== null) {\n measure(element);\n }\n else {\n setPlacement(null);\n }\n });\n };\n const mutationObserver = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(schedule);\n mutationObserver?.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['class', 'data-phase'],\n });\n const element = document.querySelector('[data-worktree-hero-context]');\n const observedAncestor = element !== null ? (overlayFor(element) ?? element) : (heroTarget ?? document.body);\n const resizeObserver = typeof ResizeObserver === 'undefined'\n ? undefined\n : new ResizeObserver(schedule);\n if (observedAncestor !== null) {\n resizeObserver?.observe(observedAncestor);\n }\n window.addEventListener('resize', schedule);\n schedule();\n return () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n window.removeEventListener('resize', schedule);\n };\n }, [label, measure, heroTarget]);\n const ariaLabel = contextAriaLabel(state, t);\n if (label === undefined || heroTarget === null)\n return null;\n return createPortal(_jsx(\"span\", { className: styles.heroContextHost, \"data-worktree-hero-host\": true, style: placement === null ? { visibility: 'hidden' } : {\n left: `${placement.left}px`,\n top: `${placement.top}px`,\n }, children: _jsx(HoverCard, { anchor: (_jsx(\"span\", { ref: measure, className: styles.heroContext, \"data-worktree-hero-context\": true, \"aria-label\": ariaLabel, title: label, children: label })), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }) }), heroTarget);\n}\n//# sourceMappingURL=WorktreeHeroContext.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { RiskConfirmation } from '@deepseek-ai/dsh-client-ui-primitives';\nexport function AccessConfirmation({ source, props }) {\n const { fullAccessConfirmationSnapshot, fullAccessAcknowledged, setFullAccessAcknowledged } = source;\n const { t, fullAccessConfirmation } = props;\n return (_jsx(_Fragment, { children: _jsx(RiskConfirmation, { open: fullAccessConfirmationSnapshot !== undefined, title: t('permission.fullAccessTitle'), description: fullAccessConfirmationSnapshot === undefined\n ? ''\n : t('permission.fullAccessDescription', {\n cwd: fullAccessConfirmationSnapshot.cwd,\n }), acknowledgeLabel: t('permission.fullAccessAcknowledge'), cancelLabel: t('dialog.cancel'), closeLabel: t('dialog.close'), confirmLabel: t('permission.fullAccessEnable'), acknowledged: fullAccessAcknowledged, onAcknowledgedChange: setFullAccessAcknowledged, onCancel: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(false);\n }, onConfirm: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(true);\n } }) }));\n}\n//# sourceMappingURL=AccessConfirmation.js.map","function detail(error, name) {\n const value = error.details?.[name];\n return typeof value === 'string' ? value : '';\n}\nfunction reason(error, t) {\n return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');\n}\nexport function formatWorktreePermissionNotice(result, t) {\n switch (result.status) {\n case 'fallback-workspace-write':\n return t('permission.fallbackWorkspaceWrite');\n case 'user-restricted':\n return t('permission.userRestricted');\n case 'unverified':\n return t('permission.unverified');\n default:\n return t('permission.unavailable');\n }\n}\nexport function formatWorktreeViewError(error, t) {\n switch (error.code) {\n case 'CLIENT_DISPOSED':\n return t('error.connectionDisposed');\n case 'CONNECTION_CALL_FAILED':\n return t('error.connectionFailed', {\n endpoint: detail(error, 'endpoint'),\n reason: reason(error, t),\n });\n case 'WORKTREE_RPC_INVALID_RESULT':\n return t('error.invalidResult', { endpoint: detail(error, 'endpoint') });\n case 'WORKSPACE_ORDER_UNAVAILABLE':\n return t('error.workspaceOrderingUnavailable');\n case 'SESSION_ORDER_UNAVAILABLE':\n return t('error.sessionOrderingUnavailable');\n case 'WORKTREE_ORDER_UNAVAILABLE':\n return t('error.worktreeOrderingUnavailable');\n case 'SESSION_CREATE_UNAVAILABLE':\n return t('error.sessionCreationUnavailable');\n case 'WORKTREE_CREATED_SESSION_UNAVAILABLE':\n return t('error.worktreeCreatedSessionUnavailable');\n case 'WORKTREE_RECORD_MISSING':\n return t('error.worktreeRecordMissing');\n case 'WORKTREE_IMPORT_INVALID':\n return t('error.worktreeImportInvalid');\n case 'WORKTREE_ALREADY_MANAGED':\n return t('error.worktreeAlreadyManaged');\n case 'WORKTREE_MUTATION_BUSY':\n return t('error.worktreeMutationBusy');\n case 'WORKTREE_STATE_CONFLICT':\n return t('error.worktreeStateConflict');\n case 'WORKTREE_RECOVERY_REQUIRED':\n return t('error.worktreeRecoveryRequired');\n case 'WORKTREE_IDENTITY_CHANGED':\n return t('error.worktreeIdentityChanged');\n case 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE':\n return t('error.worktreeRegistrationSessionUnavailable');\n case 'WORKSPACE_RENAME_UNAVAILABLE':\n return t('error.workspaceRenameUnavailable');\n case 'WORKSPACE_DELETE_UNAVAILABLE':\n return t('error.workspaceDeleteUnavailable');\n case 'SESSION_RENAME_UNAVAILABLE':\n return t('error.sessionRenameUnavailable');\n case 'SESSION_BINDING_FAILED':\n return t('error.sessionBindingFailed', {\n sessionId: detail(error, 'sessionId'),\n reason: reason(error, t),\n });\n case 'SESSION_ALREADY_BOUND':\n return t('error.sessionAlreadyBound');\n case 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED':\n return t('error.worktreePermissionConfirmationRequired');\n case 'WORKTREE_PERMISSION_FAILED':\n return t('error.worktreePermissionFailed', { reason: reason(error, t) });\n case 'SESSION_LIST_NOT_READY':\n return t('error.sessionListNotReady');\n case 'SESSION_FACTS_INCOMPLETE':\n return t('error.sessionFactsIncomplete');\n case 'WORKTREE_SESSION_REPAIR_REQUIRED':\n return t('error.worktreeSessionRepairRequired');\n case 'WORKTREE_SESSION_UNAVAILABLE':\n return t('error.worktreeSessionUnavailable');\n case 'SESSION_ARCHIVED':\n return t('error.sessionArchived');\n case 'GIT_NOT_INSTALLED':\n return t('error.gitNotInstalled');\n default:\n return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');\n }\n}\n//# sourceMappingURL=worktree-error-copy.js.map","/** A DSH Session exists even when the external Worktree binding needs repair. */\nexport class WorktreeSessionBindingError extends Error {\n code;\n retryable;\n details;\n sessionId;\n cause;\n constructor(sessionId, cause) {\n const candidate = typeof cause === 'object' && cause !== null\n ? cause\n : undefined;\n const reason = cause instanceof Error\n ? cause.message\n : typeof candidate?.message === 'string'\n ? candidate.message\n : String(cause);\n super(reason);\n this.name = 'WorktreeSessionBindingError';\n const conflict = candidate?.code === 'SESSION_ALREADY_BOUND';\n this.code = conflict ? 'SESSION_ALREADY_BOUND' : 'SESSION_BINDING_FAILED';\n this.retryable = conflict ? false : candidate?.retryable !== false;\n this.details = typeof candidate?.details === 'object' && candidate.details !== null\n && !Array.isArray(candidate.details)\n ? candidate.details\n : {};\n this.sessionId = sessionId;\n this.cause = cause;\n }\n}\n/** A Session is retained after permission confirmation or permission setup needs retry. */\nexport class WorktreeSessionPermissionError extends Error {\n code;\n retryable = true;\n details;\n sessionId;\n createdSession;\n cause;\n constructor(sessionId, createdSession, cause) {\n const reason = cause instanceof Error ? cause.message : cause === undefined ? '' : String(cause);\n super(reason);\n this.name = 'WorktreeSessionPermissionError';\n this.code = cause === undefined\n ? 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED'\n : 'WORKTREE_PERMISSION_FAILED';\n this.details = { sessionId };\n this.sessionId = sessionId;\n this.createdSession = createdSession;\n this.cause = cause;\n }\n}\nfunction recordDetails(value) {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return undefined;\n const details = value.details;\n if (typeof details !== 'object' || details === null || Array.isArray(details))\n return undefined;\n return details;\n}\n/** Convert any adapter/Gateway failure into renderable, retry-aware UI data. */\nexport function toWorktreeViewError(error) {\n if (typeof error === 'object' && error !== null) {\n const candidate = error;\n const details = error instanceof WorktreeSessionBindingError || error instanceof WorktreeSessionPermissionError\n ? { ...(recordDetails(error) ?? {}), sessionId: error.sessionId }\n : recordDetails(error);\n return {\n code: typeof candidate.code === 'string' ? candidate.code : 'WORKTREE_VIEW_FAILED',\n message: typeof candidate.message === 'string' ? candidate.message : '',\n retryable: candidate.retryable !== false,\n ...(details === undefined ? {} : { details }),\n };\n }\n return {\n code: 'WORKTREE_VIEW_FAILED',\n message: '',\n retryable: true,\n };\n}\n/** Keep ordering mutation/refresh failures reachable from the surface Retry control. */\nexport function toRetryableWorktreeOrderError(error) {\n return {\n ...toWorktreeViewError(error),\n retryable: true,\n };\n}\n//# sourceMappingURL=worktree-view-errors.js.map","import { WorktreeSessionBindingError } from './worktree-view-errors.js';\nfunction browserRandomUuid() {\n const randomUUID = globalThis.crypto?.randomUUID;\n if (typeof randomUUID === 'function')\n return randomUUID.call(globalThis.crypto);\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n/** Generate a short, editable default branch name without colliding with known local names. */\nexport function createDefaultWorktreeName(existingNames, randomUuid = browserRandomUuid) {\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n for (let attempt = 0; attempt < 100; attempt += 1) {\n const suffix = randomUuid().replace(/[^a-z0-9]/gi, '').slice(0, 8).toLowerCase();\n if (suffix.length < 8)\n continue;\n const candidate = `dsh/${suffix}`;\n if (!usedNames.has(candidate))\n return candidate;\n }\n throw new Error('Unable to generate an available default Worktree name.');\n}\n/** Generate the next available numeric sibling name for a selected Worktree. */\nexport function createNumberedWorktreeName(baseName, existingNames) {\n const normalizedBaseName = baseName.trim();\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n const numberedBase = normalizedBaseName.match(/^(.*)-(\\d+)$/);\n const prefix = numberedBase?.[1] || normalizedBaseName || 'worktree';\n const parsedNumber = numberedBase === null ? 1 : Number(numberedBase[2]);\n let number = Number.isSafeInteger(parsedNumber) ? parsedNumber + 1 : 2;\n for (let attempt = 0; attempt < 10000; attempt += 1) {\n const candidate = `${prefix}-${number}`;\n if (!usedNames.has(candidate))\n return candidate;\n number += 1;\n }\n throw new Error('Unable to generate an available numbered Worktree name.');\n}\n/** Resolve a row-half drop target to native-style optional before-anchor semantics. */\nexport function resolveWorktreeMove(worktreeIds, sourceWorktreeId, targetWorktreeId, half) {\n const sourceIndex = worktreeIds.indexOf(sourceWorktreeId);\n const targetIndex = worktreeIds.indexOf(targetWorktreeId);\n if (sourceIndex === -1 || targetIndex === -1)\n return undefined;\n const beforeWorktreeId = half === 'before'\n ? targetWorktreeId\n : worktreeIds[targetIndex + 1];\n if (beforeWorktreeId === sourceWorktreeId)\n return undefined;\n const anchorIndex = beforeWorktreeId === undefined\n ? worktreeIds.length\n : worktreeIds.indexOf(beforeWorktreeId);\n if (anchorIndex === sourceIndex || anchorIndex === sourceIndex + 1)\n return undefined;\n return beforeWorktreeId === undefined ? {} : { beforeWorktreeId };\n}\n/** Keep mutation routing in the browser Consumer while leaving wire details to the adapter. */\nexport async function executeWorktreeAction(manager, action) {\n if (action.type === 'createWorktree') {\n return manager.createWorktree(action.input);\n }\n if (action.type === 'importWorktree') {\n return manager.importWorktree(action.input);\n }\n if (action.type === 'removeWorktree') {\n await manager.removeWorktree(action.input);\n return;\n }\n if (action.type === 'unarchiveWorktree') {\n await manager.unarchiveWorktree(action.input);\n return;\n }\n if (action.type === 'cleanWorktree') {\n await manager.cleanWorktree(action.input);\n return;\n }\n if (action.type === 'forgetWorktree') {\n await manager.forgetWorktree(action.input);\n return;\n }\n}\n/**\n * Create a normal DSH Session at a Worktree cwd, then add the external binding.\n * A binding failure deliberately leaves the DSH-created Session intact.\n */\nexport async function createSessionForWorktree(input) {\n const sessionId = await input.createSession({ cwd: input.cwd });\n try {\n await input.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(sessionId, error);\n }\n await input.beforeOpen?.(sessionId);\n input.openSession(sessionId);\n return sessionId;\n}\n//# sourceMappingURL=worktree-view-actions.js.map","import { toWorktreeViewError } from './worktree-view-errors.js';\n/** Merge one freshly read Workspace projection without clearing other ready views. */\nexport function mergeWorktreeView(views, nextView) {\n const index = views.findIndex((view) => view.workspaceId === nextView.workspaceId);\n if (index === -1)\n return [...views, nextView];\n const merged = [...views];\n merged[index] = nextView;\n return merged;\n}\n/** Merge explicit Workspace updates while preserving current order and ready references. */\nexport function mergeWorktreeViews(existing, workspaceIds, updates) {\n const byWorkspaceId = new Map(existing.map((view) => [view.workspaceId, view]));\n for (const update of updates)\n byWorkspaceId.set(update.workspaceId, update);\n return [...new Set(workspaceIds)].flatMap((workspaceId) => {\n const view = byWorkspaceId.get(workspaceId);\n return view === undefined ? [] : [view];\n });\n}\n/** Reuse the previous ID snapshot when DSH republishes equivalent Workspace items. */\nexport function stableWorkspaceIds(previous, next) {\n if (previous.length !== next.length)\n return next;\n for (let index = 0; index < previous.length; index += 1) {\n if (previous[index] !== next[index])\n return next;\n }\n return previous;\n}\n/** Keep only the most recently started Worktree surface refresh authoritative. */\nexport function createWorktreeRefreshGuard() {\n let latestGeneration = 0;\n const begin = () => {\n latestGeneration += 1;\n return latestGeneration;\n };\n const isCurrent = (generation) => generation === latestGeneration;\n const invalidate = () => {\n latestGeneration += 1;\n };\n return {\n begin,\n isCurrent,\n invalidate,\n async run(load, onSuccess, onError) {\n const generation = begin();\n let value;\n try {\n value = await load();\n }\n catch (error) {\n if (!isCurrent(generation))\n return;\n onError(error);\n return;\n }\n if (!isCurrent(generation))\n return;\n onSuccess(value);\n },\n };\n}\n/** Prefer the branch checked out by the DSH Workspace, then fall back to any local branch. */\nexport function selectDefaultBaseBranch(branches) {\n return branches.find((branch) => branch.isCurrent)?.name ?? branches[0]?.name ?? '';\n}\n/** Keep a valid user choice across branch-list refreshes, otherwise choose the current branch. */\nexport function reconcileBaseBranchSelection(selectedBranch, branches) {\n if (branches.some((branch) => branch.name === selectedBranch))\n return selectedBranch;\n return selectDefaultBaseBranch(branches);\n}\n/** Return copyable, read-only setup commands for a Git readiness state. */\nexport function worktreeSetupCommands(status) {\n switch (status) {\n case 'gitNotInstalled':\n return [];\n case 'noRepository':\n return [\n 'git init',\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noInitialCommit':\n return [\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noLocalBranch':\n return ['git switch -c main'];\n case 'ready':\n return [];\n }\n}\nfunction readinessFromBranchError(error) {\n const viewError = toWorktreeViewError(error);\n if (viewError.code === 'GIT_NOT_INSTALLED') {\n return { status: 'gitNotInstalled', error: viewError };\n }\n if (viewError.code === 'WORKSPACE_NOT_GIT_REPOSITORY') {\n return { status: 'noRepository', error: viewError };\n }\n if (viewError.code === 'WORKTREE_REQUIRES_INITIAL_COMMIT') {\n return { status: 'noInitialCommit', error: viewError };\n }\n return undefined;\n}\n/** Share complete Workspace reads without allowing stale generations to repopulate the cache. */\nexport function createWorktreeViewReader(manager) {\n const entries = new Map();\n let disposed = false;\n const entryFor = (workspaceId) => {\n const current = entries.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = { generation: 0, stale: false };\n entries.set(workspaceId, created);\n return created;\n };\n const read = (workspaceId) => {\n if (disposed)\n return Promise.reject(new Error('Worktree view reader disposed'));\n const entry = entryFor(workspaceId);\n if (!entry.stale && entry.view !== undefined)\n return Promise.resolve(entry.view);\n if (entry.inFlight?.generation === entry.generation)\n return entry.inFlight.promise;\n const generation = entry.generation;\n const promise = loadWorktreeView(manager, workspaceId)\n .then((data) => {\n const view = { workspaceId, ...data };\n if (!disposed && entries.get(workspaceId) === entry && entry.generation === generation) {\n entry.view = view;\n entry.stale = false;\n }\n return view;\n })\n .finally(() => {\n if (entry.inFlight?.promise === promise)\n entry.inFlight = undefined;\n });\n entry.inFlight = { generation, promise };\n return promise;\n };\n return {\n invalidate(workspaceId, options) {\n if (disposed)\n return;\n const entry = entryFor(workspaceId);\n // Read-only menu opens may share a current read. Mutations must retire it.\n if (options?.reuseInFlight && entry.inFlight?.generation === entry.generation)\n return;\n entry.generation += 1;\n entry.stale = true;\n entry.view = undefined;\n },\n read,\n readMany(workspaceIds) {\n const uniqueIds = [...new Set(workspaceIds)];\n return Promise.all(uniqueIds.map((workspaceId) => read(workspaceId)));\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n entries.clear();\n },\n };\n}\n/** Read the Worktree, branch, binding, and Workspace-root Main projections in one refresh. */\nexport async function loadWorktreeView(manager, workspaceId) {\n const [worktreesResult, branchesResult, bindingsResult, mainInstructionsResult] = await Promise.allSettled([\n manager.listWorktrees({ workspaceId }),\n manager.listBranches({ workspaceId }),\n manager.listBindings({ workspaceId }),\n typeof manager.getWorktreeInstructions === 'function'\n ? manager.getWorktreeInstructions({ workspaceId, worktreeId: `main:${workspaceId}` })\n : Promise.resolve(''),\n ]);\n if (worktreesResult.status === 'rejected')\n throw worktreesResult.reason;\n if (bindingsResult.status === 'rejected')\n throw bindingsResult.reason;\n if (mainInstructionsResult.status === 'rejected')\n throw mainInstructionsResult.reason;\n if (branchesResult.status === 'rejected') {\n const readiness = readinessFromBranchError(branchesResult.reason);\n if (readiness !== undefined) {\n return {\n worktrees: worktreesResult.value,\n branches: [],\n bindings: bindingsResult.value,\n mainInstructions: mainInstructionsResult.value,\n readiness,\n };\n }\n throw branchesResult.reason;\n }\n return {\n worktrees: worktreesResult.value,\n branches: branchesResult.value,\n bindings: bindingsResult.value,\n mainInstructions: mainInstructionsResult.value,\n readiness: branchesResult.value.length > 0\n ? { status: 'ready' }\n : { status: 'noLocalBranch' },\n };\n}\n/** Isolate modal-target callbacks while sharing the Client Workspace reader. */\nexport function createWorktreeModalViewLoader(reader) {\n const guard = createWorktreeRefreshGuard();\n return {\n invalidate: guard.invalidate,\n load(workspaceId, onSuccess, onError) {\n return guard.run(() => reader.read(workspaceId), onSuccess, (error) => onError(toWorktreeViewError(error)));\n },\n };\n}\n/** Load one independent projection per DSH Workspace for the flat sidebar hierarchy. */\nexport async function loadWorktreeViews(manager, workspaceIds) {\n return Promise.all(workspaceIds.map(async (workspaceId) => ({\n workspaceId,\n ...(await loadWorktreeView(manager, workspaceId)),\n })));\n}\n/** Hide DSH-archived Sessions from the browser-local Worktree projection. */\nexport function filterArchivedSessionIds(sessionIds, archivedSessionIds) {\n return sessionIds.filter((sessionId) => !archivedSessionIds.includes(sessionId));\n}\n//# sourceMappingURL=worktree-view-read.js.map","/** Prefer the legacy selected-id field; DSH 1.7 represents selection by mainView retention. */\nexport function currentSessionIdFromList(sessions) {\n if (sessions.current !== undefined)\n return sessions.current;\n const sessionIds = Object.keys(sessions.byId);\n return sessionIds.find((sessionId) => (sessions.byId[sessionId]?.retainedBy?.mainView ?? 0) > 0);\n}\n//# sourceMappingURL=session-selection.js.map","import { currentSessionIdFromList } from './session-selection.js';\nfunction isPendingInteractionStatus(value) {\n return value === 'approval' || value === 'plan-review' || value === 'question';\n}\nfunction validUpdatedAt(value) {\n return value !== undefined && Number.isFinite(value);\n}\n/**\n * Native-compatible subagent lineage index. The upstream runtime's public client\n * entry is a browser module-loader bundle, so keeping this pure mirror local lets\n * the browser Consumer and its Node tests share the same status semantics.\n */\nfunction indexSubagentDescendants(summaries) {\n const indexed = new Map();\n for (const descendant of Object.values(summaries)) {\n if (descendant.origin !== 'subagent')\n continue;\n const seen = new Set();\n let current = descendant;\n while (current?.origin === 'subagent' &&\n current.parentId !== undefined &&\n !seen.has(current.id)) {\n seen.add(current.id);\n const aggregate = indexed.get(current.parentId);\n if (aggregate === undefined) {\n indexed.set(current.parentId, {\n count: 1,\n runningCount: descendant.running ? 1 : 0,\n });\n }\n else {\n aggregate.count += 1;\n if (descendant.running)\n aggregate.runningCount += 1;\n }\n current = summaries[current.parentId];\n }\n }\n return indexed;\n}\n/** Native Workspace relative-time buckets, kept pure for deterministic rendering/tests. */\nexport function relativeTime(updatedAt, now) {\n if (!validUpdatedAt(updatedAt) || !Number.isFinite(now))\n return undefined;\n const MIN = 60_000;\n const HOUR = 3_600_000;\n const DAY = 86_400_000;\n const diff = Math.max(0, now - updatedAt);\n if (diff < MIN)\n return { unit: 'now', n: 0 };\n if (diff < HOUR)\n return { unit: 'minutes', n: Math.floor(diff / MIN) };\n if (diff < DAY)\n return { unit: 'hours', n: Math.floor(diff / HOUR) };\n if (diff < 30 * DAY)\n return { unit: 'days', n: Math.floor(diff / DAY) };\n if (diff < 365 * DAY)\n return { unit: 'months', n: Math.floor(diff / (30 * DAY)) };\n return { unit: 'years', n: Math.floor(diff / (365 * DAY)) };\n}\n/** Match native Workspace status priority while retaining the aggregate subagent count. */\nexport function sessionStatus(session, runningSubagentCount) {\n const count = Number.isFinite(runningSubagentCount) && runningSubagentCount > 0\n ? Math.floor(runningSubagentCount)\n : 0;\n if (isPendingInteractionStatus(session.pendingInteraction)) {\n const labelKey = session.pendingInteraction === 'approval'\n ? 'waitingApproval'\n : session.pendingInteraction === 'plan-review'\n ? 'planReview'\n : 'waitingAnswer';\n return { state: 'warning', labelKey, runningSubagentCount: count };\n }\n if (session.running === true) {\n return { state: 'ongoing', labelKey: 'running', runningSubagentCount: count };\n }\n if (count > 0) {\n return { state: 'ongoing', labelKey: 'subagentsRunning', runningSubagentCount: count };\n }\n if (session.completed === true) {\n return { state: 'done', labelKey: 'completed', runningSubagentCount: 0 };\n }\n return { state: 'done', labelKey: 'idle', runningSubagentCount: 0 };\n}\nfunction toLineageSummary(sessionId, summary) {\n return {\n id: sessionId,\n running: summary.running === true,\n ...(summary.parentId === undefined ? {} : { parentId: summary.parentId }),\n ...(summary.origin === 'subagent' ? { origin: 'subagent' } : {}),\n };\n}\n/** Derive row and group activity facts from one retained DSH Session snapshot. */\nexport function deriveSessionPresentationIndex(sessions) {\n const lineageSummaries = Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => [\n sessionId,\n toLineageSummary(sessionId, summary),\n ]));\n const descendants = indexSubagentDescendants(lineageSummaries);\n return Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => {\n const runningSubagentCount = descendants.get(sessionId)?.runningCount ?? 0;\n const status = sessionStatus(summary, runningSubagentCount);\n return [\n sessionId,\n {\n status,\n running: summary.running === true,\n ongoing: summary.running === true || runningSubagentCount > 0,\n runningSubagentCount,\n completed: summary.completed === true,\n ...(validUpdatedAt(summary.updatedAt) ? { updatedAt: summary.updatedAt } : {}),\n },\n ];\n }));\n}\n/** Aggregate only live ongoing activity; callers decide which IDs are in the group. */\nexport function hasOngoingSession(sessionIds, presentations) {\n return sessionIds.some((sessionId) => presentations[sessionId]?.ongoing === true);\n}\nfunction pendingStatusRank(status) {\n switch (status.labelKey) {\n case 'waitingApproval':\n return 3;\n case 'planReview':\n return 2;\n case 'waitingAnswer':\n return 1;\n default:\n return 0;\n }\n}\nfunction ongoingStatusRank(status) {\n return status.labelKey === 'running' ? 2 : status.labelKey === 'subagentsRunning' ? 1 : 0;\n}\n/**\n * Select the single Session status that a collapsed group should expose.\n *\n * The result is a representative status rather than a list: callers render at most one\n * StateDot. Pending interaction warnings outrank live activity, which outranks a completed\n * reminder. Idle Sessions do not contribute a group status.\n */\nexport function aggregateSessionStatus(sessionIds, presentations) {\n let pending;\n let pendingRank = 0;\n let ongoing;\n let ongoingRank = 0;\n let completed = false;\n for (const sessionId of sessionIds) {\n const presentation = presentations[sessionId];\n if (presentation === undefined)\n continue;\n if (presentation.status.state === 'warning') {\n const rank = pendingStatusRank(presentation.status);\n if (pending === undefined || rank > pendingRank) {\n pending = presentation.status;\n pendingRank = rank;\n }\n }\n else if (presentation.ongoing === true) {\n const rank = ongoingStatusRank(presentation.status);\n if (ongoing === undefined || rank > ongoingRank) {\n ongoing = presentation.status;\n ongoingRank = rank;\n }\n }\n if (presentation.completed === true)\n completed = true;\n }\n if (pending !== undefined)\n return pending;\n if (ongoing !== undefined)\n return ongoing;\n return completed\n ? { state: 'done', labelKey: 'completed', runningSubagentCount: 0 }\n : undefined;\n}\n/** Read the native blank flag without inferring blankness from title or id. */\nexport function isBlankSession(sessionId, sessions) {\n return sessions.byId[sessionId]?.blank === true;\n}\n/** Native tree visibility: ordinary rows plus the currently selected blank row. */\nfunction isVisibleSession(sessionId, sessions) {\n return !isBlankSession(sessionId, sessions) || currentSessionIdFromList(sessions) === sessionId;\n}\n/** Filter a group without mutating its source order. */\nexport function filterVisibleSessionIds(sessionIds, sessions) {\n return sessionIds.filter((sessionId) => isVisibleSession(sessionId, sessions));\n}\n/** Resolve a row title while keeping the blank label outside the DSH summary. */\nexport function sessionDisplayLabel(sessionId, sessions, blankLabel) {\n const summary = sessions.byId[sessionId];\n return summary?.blank === true ? blankLabel : (summary?.displayTitle ?? sessionId);\n}\n/** Match only durable Session titles or the final diagnostic id fallback. */\nexport function sessionMatchesQuery(sessionId, sessions, normalizedQuery) {\n const summary = sessions.byId[sessionId];\n if (summary?.blank === true)\n return false;\n const label = summary?.displayTitle ?? sessionId;\n return label.toLocaleLowerCase().includes(normalizedQuery);\n}\n//# sourceMappingURL=session-view.js.map","import { sessionDisplayLabel, sessionMatchesQuery, } from '../session/session-view.js';\n/** Native activity changes invalidate only the archived Worktrees' owning reads. */\nexport function worktreeActivityRefreshWorkspaceIds(views, previous, next) {\n return views\n .filter((view) => view.bindings.some((binding) => previous[binding.sessionId]?.ongoing !== next[binding.sessionId]?.ongoing &&\n view.worktrees.some((record) => record.worktreeId === binding.worktreeId && record.status === 'removed')))\n .map((view) => view.workspaceId);\n}\nexport function sessionLabel(sessionId, sessions, t) {\n return sessionDisplayLabel(sessionId, sessions, t('session.new'));\n}\nexport function bindingIdsFor(bindings, worktreeId) {\n return bindings\n .filter((binding) => binding.worktreeId === worktreeId)\n .map((binding) => binding.sessionId);\n}\nexport function clearSessionGroupExpansion(current, groupKeys) {\n const next = { ...current };\n for (const key of groupKeys)\n delete next[key];\n return next;\n}\n/** DSH list snapshots report a monotone `pending` → `ready` arrival phase. */\nexport function isPendingListPhase(phase) {\n return phase !== undefined && phase !== 'ready';\n}\n/**\n * True only for an authoritative Worktree projection: the confirmed Workspace list is\n * non-empty and every Workspace in it has a ready view.\n *\n * An empty `workspaceIds` means the Workspace list has not arrived yet — never that every\n * Workspace disappeared. Callers prune browser-local preferences on `true`, so an empty or\n * partial read must stay incomplete and keep those preferences untouched.\n */\nexport function isCompleteWorktreeWorkspaceSnapshot(workspaceIds, views) {\n if (workspaceIds.length === 0)\n return false;\n if (views.length !== workspaceIds.length)\n return false;\n const expected = new Set(workspaceIds);\n const actual = new Set(views.map((view) => view.workspaceId));\n return actual.size === expected.size && [...expected].every((id) => actual.has(id));\n}\nexport function includesText(value, query) {\n return value.toLocaleLowerCase().includes(query);\n}\nexport function workspaceMatches(workspace, view, sessions, query) {\n if (query.length === 0)\n return true;\n if (includesText(workspace.title, query))\n return true;\n if (workspace.sessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return true;\n }\n if (view === undefined)\n return false;\n if (view.worktrees.some((record) => includesText(record.branch, query) || includesText(record.absolutePath, query))) {\n return true;\n }\n return view.bindings.some((binding) => sessionMatchesQuery(binding.sessionId, sessions, query));\n}\nexport function resolveCurrentSessionLocation(currentSessionId, workspaces, views) {\n if (currentSessionId === undefined)\n return undefined;\n const workspace = workspaces.find((candidate) => candidate.sessionIds.includes(currentSessionId));\n if (workspace === undefined)\n return undefined;\n const view = views.find((candidate) => candidate.workspaceId === workspace.workspaceId);\n if (view === undefined)\n return undefined;\n const binding = view.bindings.find((candidate) => candidate.sessionId === currentSessionId);\n if (binding === undefined) {\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'main:' + workspace.workspaceId,\n kind: 'main',\n };\n }\n const worktree = view.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId &&\n candidate.workspaceId === workspace.workspaceId);\n if (worktree === undefined)\n return undefined;\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'worktree:' + worktree.worktreeId,\n kind: 'worktree',\n worktreeId: worktree.worktreeId,\n ...(worktree.status === 'removed' ? { archived: true } : {}),\n };\n}\nexport function currentSessionRevealKeys(location) {\n if (location === undefined)\n return [];\n return [\n 'workspace:' + location.workspaceId,\n ...(location.kind === 'worktree' && location.archived\n ? ['archived:' + location.workspaceId]\n : []),\n location.kind === 'main' ? 'main:' + location.workspaceId : 'worktree:' + location.worktreeId,\n 'session-group:' + location.groupKey,\n ];\n}\nexport function shouldRevealCurrentSessionGroup(sessionIds, currentSessionId) {\n if (currentSessionId === undefined || sessionIds.length <= 5)\n return false;\n return sessionIds.indexOf(currentSessionId) >= 5;\n}\nexport function isSessionGroupAutoExpanded(sessionIds, currentSessionId, currentSessionRevealActive) {\n return (currentSessionRevealActive && shouldRevealCurrentSessionGroup(sessionIds, currentSessionId));\n}\n/** Lifecycle mutations rely on user confirmation, not Session activity coverage. */\nexport function worktreeLifecycleBlockReason(actionPending, health) {\n if (actionPending)\n return 'pending';\n if (health === 'recovery-needed')\n return 'recovery';\n return undefined;\n}\n//# sourceMappingURL=selectors.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Input, Modal } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { formatWorktreeViewError } from '../../view/worktree-error-copy.js';\nimport { worktreeSetupCommands } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { worktreeLifecycleBlockReason } from '../selectors.js';\nexport function WorktreeAdoptBranchDialog({ t, worktree, actionPending, error, onClose, onSubmit, onRetry, }) {\n if (worktree === undefined || typeof worktree.currentBranch !== 'string')\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (!actionPending)\n onClose();\n }, closeLabel: t('dialog.cancel'), title: t('worktree.adoptBranch'), description: t('worktree.adoptDescription', {\n previous: worktree.branch,\n current: worktree.currentBranch,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || error !== undefined, onClick: () => {\n void onSubmit();\n }, children: t('worktree.adoptBranch') })] }), children: error !== undefined && (_jsxs(\"div\", { role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: formatWorktreeViewError(error, t) }), _jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onRetry, children: t('action.retry') })] })) }));\n}\nfunction worktreeSetupMessage(status, t) {\n switch (status) {\n case 'gitNotInstalled':\n return t('worktree.setup.gitNotInstalled');\n case 'noRepository':\n return t('worktree.setup.noRepository');\n case 'noInitialCommit':\n return t('worktree.setup.noInitialCommit');\n case 'noLocalBranch':\n return t('worktree.setup.noLocalBranch');\n }\n}\nexport function WorktreeSessionRenameDialog({ t, target, draft, pending, error, onClose, onDraftChange, onSubmit, }) {\n return (_jsxs(Modal, { open: target !== undefined, onClose: onClose, closeLabel: t('dialog.close'), title: t('session.rename'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending || draft.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('session.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) }))] }));\n}\nexport function WorktreeWorkspaceRenameDialog({ t, target, draft, pending, duplicate, error, onClose, onDraftChange, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsxs(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceRename'), title: t('workspace.renameTitle'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending ||\n draft.trim().length === 0 ||\n draft.trim() === target.currentTitle ||\n duplicate, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('workspace.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), duplicate && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: t('workspace.duplicate') })), error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) }))] }));\n}\nexport function WorktreeWorkspaceDeleteDialog({ t, target, pending, error, onClose, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceDelete'), title: t('workspace.deleteTitle'), description: t('workspace.deleteDescription', { name: target.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"outline\", disabled: pending, onClick: () => {\n void onSubmit();\n }, children: t('dialog.delete') })] }), children: error !== undefined && (_jsx(\"p\", { className: styles.renameError, role: \"alert\", children: formatWorktreeViewError(error, t) })) }));\n}\nexport function WorktreeCreateDialog({ t, workspace, view, readError, setupStatus, canCreate, mode, importCandidates, selectedImportPath, selectedBranch, newBranch, actionPending, onClose, onRetry, onModeChange, onRetryImportCandidates, onSelectedImportPathChange, onSelectedBranchChange, onNewBranchChange, onSubmit, }) {\n if (workspace === undefined)\n return null;\n const setupCommands = setupStatus === undefined ? [] : worktreeSetupCommands(setupStatus);\n const importing = mode === 'import';\n const importBlocked = actionPending || importCandidates.status === 'loading' || selectedImportPath === undefined;\n return (_jsxs(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCreate'), title: t('worktree.createTitle'), description: importing\n ? t('worktree.importDescription', { name: workspace.title })\n : t('worktree.createDescription', { name: workspace.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: importing\n ? importBlocked\n : actionPending ||\n !canCreate ||\n selectedBranch.length === 0 ||\n newBranch.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: importing ? t('worktree.import') : t('worktree.create') })] }), children: [_jsxs(\"div\", { className: styles.worktreeModalTabs, role: \"tablist\", \"aria-label\": t('worktree.title'), children: [_jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'create', disabled: actionPending, onClick: () => {\n onModeChange('create');\n }, children: t('worktree.tabCreate') }), _jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'import', disabled: actionPending, onClick: () => {\n onModeChange('import');\n }, children: t('worktree.tabImport') })] }), importing ? (_jsxs(\"div\", { className: styles.worktreeImportCandidates, role: \"tabpanel\", children: [importCandidates.status === 'loading' && importCandidates.candidates.length === 0 && (_jsx(\"p\", { className: styles.message, children: t('worktree.importLoading') })), importCandidates.status === 'error' && (_jsxs(\"div\", { className: styles.worktreeImportError, role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: formatWorktreeViewError(importCandidates.error, t) }), _jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onRetryImportCandidates, children: t('action.retry') })] })), importCandidates.candidates.length === 0 && importCandidates.status === 'ready' && (_jsx(\"p\", { className: styles.message, children: t('worktree.importEmpty') })), importCandidates.candidates.length > 0 && (_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.tabImport'), _jsxs(\"select\", { className: styles.worktreeImportSelect, \"data-worktree-import-select\": true, \"aria-label\": t('worktree.tabImport'), value: selectedImportPath ?? '', disabled: actionPending, onChange: (event) => {\n onSelectedImportPathChange(event.currentTarget.value);\n }, children: [_jsx(\"option\", { value: \"\", disabled: true, children: t('worktree.importPlaceholder') }), importCandidates.candidates.map((candidate) => (_jsxs(\"option\", { value: candidate.absolutePath, children: [candidate.branch, \" \\u2014 \", candidate.absolutePath] }, candidate.absolutePath)))] })] }))] })) : readError !== undefined ? (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": \"error\", role: \"alert\", children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readError, t) }), readError.retryable && onRetry !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: onRetry, children: t('action.retry') }))] })) : canCreate ? (_jsxs(_Fragment, { children: [_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.baseBranch'), _jsx(\"select\", { className: styles.actionSelect, \"aria-label\": t('worktree.baseBranch'), value: selectedBranch, disabled: actionPending, onChange: (event) => {\n onSelectedBranchChange(event.currentTarget.value);\n }, children: view?.branches.map((branch) => (_jsxs(\"option\", { value: branch.name, children: [branch.name, branch.isCurrent ? t('branch.current') : '', branch.checkedOut ? t('branch.checkedOut') : ''] }, branch.name))) })] }), _jsxs(\"label\", { className: styles.modalField, children: [t('worktree.name'), _jsx(Input, { className: styles.renameInput, \"aria-label\": t('worktree.name'), value: newBranch, placeholder: \"dsh/12345678\", disabled: actionPending, onChange: (event) => {\n onNewBranchChange(event.currentTarget.value);\n } })] })] })) : (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": setupStatus ?? 'loading', role: \"alert\", children: [_jsx(\"p\", { className: styles.message, children: setupStatus === undefined ? t('status.loading') : worktreeSetupMessage(setupStatus, t) }), setupCommands.length > 0 && (_jsx(\"pre\", { className: styles.commandBlock, \"aria-label\": t('worktree.setup.commands'), children: setupCommands.join('\\n') }))] }))] }));\n}\nexport function WorktreeRemovalDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeArchive'), title: t('worktree.archive'), description: worktree.source === 'external'\n ? t('worktree.archiveExternalDescription', { name: worktree.branch })\n : t('worktree.archiveDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending, onClick: () => {\n void onSubmit();\n }, children: t('worktree.archive') })] }) }));\n}\nexport function WorktreeCleanDiskDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCleanDisk'), title: t('worktree.cleanDiskTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.cleanDiskDescription', {\n name: worktree.branch,\n path: worktree.absolutePath,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.cleanDisk') })] }) }));\n}\nexport function WorktreeForgetDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeForget'), title: t('worktree.forgetTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.forgetDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.forget') })] }) }));\n}\n//# sourceMappingURL=dialogs.js.map","export async function runWorktreeCleanupFlow(input) {\n await input.clean();\n if (!input.isCurrent())\n return;\n input.onCommitted();\n const follow = async (stage, operation) => {\n if (!input.isCurrent())\n return;\n try {\n await operation();\n }\n catch (error) {\n if (input.isCurrent())\n input.onFollowUpError(stage, error);\n }\n };\n await Promise.all([follow('refresh', input.refresh), follow('permission', input.normalize)]);\n}\n//# sourceMappingURL=worktree-cleanup-flow.js.map","import { runWorktreeCleanupFlow } from './worktree-cleanup-flow.js';\nimport { executeWorktreeAction, toWorktreeViewError } from '../../view/worktree-view.js';\nimport { bindingIdsFor } from '../selectors.js';\n/** Archive, disk cleanup and forget retain their separate commit/recovery semantics. */\nexport function createLifecycleCommands({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { manager, permission, onPermissionNotice, onWorktreeForgotten } = props;\n const { worktreeBranchAdoption, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, cleanupGuard, setWorktreeForget, } = lifecycleState;\n const { runMutation, setActionError, setActionPending } = mutation;\n const { cleanDiskTarget, forgetTarget } = lifecycle;\n const { suppressCurrentSessionReveal, clearSessionGroups } = expansion;\n const { readStateRef, setReadState, refresh, readState } = read;\n const { pendingSessionBinding, setPendingSessionBinding } = session;\n const confirmBranchAdoption = () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target?.mutationToken || typeof target.currentBranch !== 'string')\n return;\n const expectedBranch = target.currentBranch;\n const mutationToken = target.mutationToken;\n void runMutation(async () => {\n await manager.adoptWorktreeBranch({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n expectedBranch,\n });\n setWorktreeBranchAdoption(undefined);\n }, { scope: { kind: 'workspace', workspaceId: target.workspaceId }, preserveCurrent: true });\n };\n const confirmArchive = () => {\n if (manager === undefined || worktreeRemoval === undefined)\n return;\n const target = worktreeRemoval;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'removeWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n suppressCurrentSessionReveal('archived:' + target.workspaceId);\n setWorktreeRemoval(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n const confirmDiskCleanup = () => {\n if (manager === undefined || cleanDiskTarget === undefined)\n return;\n const target = cleanDiskTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId));\n setActionPending(true);\n setActionError(undefined);\n void runWorktreeCleanupFlow({\n clean: async () => {\n await executeWorktreeAction(manager, {\n type: 'cleanWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n },\n onCommitted: () => {\n setWorktreeCleanDisk(undefined);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.map((w) => {\n if (w.worktreeId !== target.worktreeId)\n return w;\n return {\n ...w,\n status: 'removed',\n diskCleanup: 'completed',\n health: 'cleaned',\n mutationToken: undefined,\n };\n }),\n bindings: v.bindings.map((b) => {\n if (b.worktreeId !== target.worktreeId)\n return b;\n return {\n ...b,\n status: 'detached',\n };\n }),\n };\n }),\n };\n });\n },\n refresh: async () => {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n },\n normalize: async () => {\n if (permission?.normalizeDetachedWorktreePermissions === undefined)\n return;\n try {\n const result = await permission.normalizeDetachedWorktreePermissions({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n });\n if (result !== undefined && isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, result);\n }\n }\n catch {\n if (isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, {\n status: 'unverified',\n retryable: true,\n });\n }\n }\n },\n isCurrent,\n onFollowUpError: () => {\n // Follow-up errors do not fail the clean mutation\n },\n })\n .catch((error) => {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n })\n .finally(() => {\n if (isCurrent())\n setActionPending(false);\n });\n };\n const confirmForget = () => {\n if (manager === undefined || forgetTarget === undefined)\n return;\n const target = forgetTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const targetBindings = readState.status === 'ready'\n ? (readState.views.find((v) => v.workspaceId === target.workspaceId)?.bindings ?? [])\n : [];\n const affectedSessionIds = bindingIdsFor(targetBindings, target.worktreeId);\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'forgetWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n cleanupGuard.current.invalidate();\n onWorktreeForgotten?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionIds: affectedSessionIds,\n });\n if (pendingSessionBinding?.worktreeId === target.worktreeId) {\n setPendingSessionBinding(undefined);\n }\n clearSessionGroups(['worktree:' + target.worktreeId]);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.filter((w) => w.worktreeId !== target.worktreeId),\n bindings: v.bindings.filter((b) => b.worktreeId !== target.worktreeId),\n };\n }),\n };\n });\n setWorktreeForget(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n return { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget };\n}\n//# sourceMappingURL=lifecycle-commands.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeAdoptBranchDialog, WorktreeCleanDiskDialog, WorktreeForgetDialog, WorktreeRemovalDialog, } from './dialogs.js';\nimport { createLifecycleCommands } from '../actions/lifecycle-commands.js';\nexport function LifecycleDialogs({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { t } = props;\n const { worktreeBranchAdoption, branchAdoptionGuard, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, setWorktreeForget, } = lifecycleState;\n const { actionPending, actionError } = mutation;\n const { refreshBranchAdoption, cleanDiskTarget, forgetTarget } = lifecycle;\n const { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget } = createLifecycleCommands({\n props,\n lifecycleState,\n mutation,\n lifecycle,\n expansion,\n read,\n session,\n });\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeAdoptBranchDialog, { t: t, worktree: worktreeBranchAdoption, actionPending: actionPending, error: actionError, onRetry: () => {\n void refreshBranchAdoption();\n }, onClose: () => {\n branchAdoptionGuard.current.invalidate();\n setWorktreeBranchAdoption(undefined);\n }, onSubmit: confirmBranchAdoption }), _jsx(WorktreeRemovalDialog, { t: t, worktree: worktreeRemoval, actionPending: actionPending, onClose: () => {\n setWorktreeRemoval(undefined);\n }, onSubmit: confirmArchive }), _jsx(WorktreeCleanDiskDialog, { t: t, worktree: cleanDiskTarget, actionPending: actionPending, onClose: () => {\n setWorktreeCleanDisk(undefined);\n }, onSubmit: confirmDiskCleanup }), _jsx(WorktreeForgetDialog, { t: t, worktree: forgetTarget, actionPending: actionPending, onClose: () => {\n setWorktreeForget(undefined);\n }, onSubmit: confirmForget })] }));\n}\n//# sourceMappingURL=LifecycleDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeSessionRenameDialog, WorktreeWorkspaceDeleteDialog, WorktreeWorkspaceRenameDialog, } from './dialogs.js';\nexport function NativeDialogs({ props, native }) {\n const { t } = props;\n const { sessionRenameTarget, sessionRenameDraft, sessionRenamePending, sessionRenameError, closeSessionRename, setSessionRenameDraft, setSessionRenameError, confirmSessionRename, workspaceRenameTarget, workspaceRenameDraft, workspaceRenamePending, workspaceRenameDuplicate, workspaceRenameError, closeWorkspaceRename, setWorkspaceRenameDraft, setWorkspaceRenameError, confirmWorkspaceRename, workspaceDeleteTarget, workspaceDeletePending, workspaceDeleteError, closeWorkspaceDelete, confirmWorkspaceDelete, } = native;\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeSessionRenameDialog, { t: t, target: sessionRenameTarget, draft: sessionRenameDraft, pending: sessionRenamePending, error: sessionRenameError, onClose: closeSessionRename, onDraftChange: (draft) => {\n setSessionRenameDraft(draft);\n setSessionRenameError(undefined);\n }, onSubmit: confirmSessionRename }), _jsx(WorktreeWorkspaceRenameDialog, { t: t, target: workspaceRenameTarget, draft: workspaceRenameDraft, pending: workspaceRenamePending, duplicate: workspaceRenameDuplicate, error: workspaceRenameError, onClose: closeWorkspaceRename, onDraftChange: (draft) => {\n setWorkspaceRenameDraft(draft);\n setWorkspaceRenameError(undefined);\n }, onSubmit: confirmWorkspaceRename }), _jsx(WorktreeWorkspaceDeleteDialog, { t: t, target: workspaceDeleteTarget, pending: workspaceDeletePending, error: workspaceDeleteError, onClose: closeWorkspaceDelete, onSubmit: confirmWorkspaceDelete })] }));\n}\n//# sourceMappingURL=NativeDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { WorktreeCreateDialog } from './dialogs.js';\nexport function RegistrationDialog({ props, registration, registrationState, mutation, read, }) {\n const { t } = props;\n const { modalWorkspace, modalView, modalSetupStatus, modalCanCreate, closeWorktreeCreator, changeWorktreeModalMode, loadImportCandidates, submitWorktree, } = registration;\n const { modalReadError, worktreeModalMode, importCandidates, selectedImportPath, selectedBranch, newBranch, worktreeModalWorkspaceId, modalReadViewRef, setSelectedBranch, setNewBranch, setSelectedImportPath, } = registrationState;\n const { actionPending } = mutation;\n const { loadModalWorktreeView } = read;\n return (_jsx(_Fragment, { children: _jsx(WorktreeCreateDialog, { t: t, workspace: modalWorkspace, view: modalView, readError: modalReadError, setupStatus: modalSetupStatus, canCreate: modalCanCreate, mode: worktreeModalMode, importCandidates: importCandidates, selectedImportPath: selectedImportPath, selectedBranch: selectedBranch, newBranch: newBranch, actionPending: actionPending, onClose: closeWorktreeCreator, onRetry: () => {\n if (worktreeModalWorkspaceId === undefined)\n return;\n modalReadViewRef.current = undefined;\n setSelectedBranch('');\n setNewBranch('');\n loadModalWorktreeView(worktreeModalWorkspaceId);\n }, onModeChange: changeWorktreeModalMode, onRetryImportCandidates: () => {\n if (worktreeModalWorkspaceId !== undefined) {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n }, onSelectedImportPathChange: setSelectedImportPath, onSelectedBranchChange: setSelectedBranch, onNewBranchChange: setNewBranch, onSubmit: submitWorktree }) }));\n}\n//# sourceMappingURL=RegistrationDialog.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { stableWorkspaceIds, toWorktreeViewError, } from '../view/worktree-view.js';\nexport function toNativeWorktreeViewError(error) {\n const viewError = toWorktreeViewError(error);\n if (typeof error === 'object' && error !== null)\n return viewError;\n return { ...viewError, message: String(error) };\n}\nexport const EMPTY_READ_STATE = { status: 'idle', views: [] };\nexport const EMPTY_PERMISSION_NOTICE = undefined;\nexport const EMPTY_PERMISSION_NOTICE_SUBSCRIBE = () => () => { };\nexport const EMPTY_PERMISSION_NOTICE_SNAPSHOT = () => EMPTY_PERMISSION_NOTICE;\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE = () => () => { };\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT = () => undefined;\nexport const EMPTY_FORK_RECOVERY_SNAPSHOT = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n};\nexport const EMPTY_FORK_RECOVERY_STORE = {\n getSnapshot: () => EMPTY_FORK_RECOVERY_SNAPSHOT,\n subscribe: () => () => { },\n};\nexport function cx(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nexport function updatedAtById(sessionIds, sessions) {\n return Object.fromEntries(sessionIds.map((sessionId) => [sessionId, sessions.byId[sessionId]?.updatedAt]));\n}\nexport function forkRecoveryError(recovery) {\n const error = toNativeWorktreeViewError(recovery.error);\n return {\n ...error,\n code: error.code === 'WORKTREE_VIEW_FAILED' ? 'SESSION_BINDING_FAILED' : error.code,\n details: {\n ...(error.details ?? {}),\n sessionId: recovery.childSessionId,\n },\n };\n}\nexport function useStableWorkspaceIds(workspaces) {\n const next = workspaces.map((workspace) => workspace.workspaceId);\n const previousRef = useRef([]);\n const stable = stableWorkspaceIds(previousRef.current, next);\n if (stable !== previousRef.current)\n previousRef.current = stable;\n return previousRef.current;\n}\nexport function IconCollapseAll16({ size = 16 }) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"currentColor\", children: _jsx(\"path\", { d: \"M9 11h6v1H9v-1zm6-3H9v1h6V8zm-6-3h6v1H9V5zM4.15 2.15l-.71.7L5.59 5H1v1h4.59L3.44 8.15l.71.7L7.5 5.5 4.15 2.15zm0 6l-.71.7L5.59 11H1v1h4.59l-2.15 2.15.71.7L7.5 11.5 4.15 8.15z\" }) }));\n}\n//# sourceMappingURL=shared.js.map","/** Open an existing Session through DSH without touching the peer view mode. */\nexport function openWorktreeSession(opener, sessionId) {\n opener.open(sessionId);\n}\n//# sourceMappingURL=navigation.js.map","import { currentSessionIdFromList } from '../session/session-selection.js';\n/** Browser-local storage key; it is never sent to DSH or the sidecar. */\nexport const WORKTREE_VIEW_MODE_STORAGE_KEY = 'clutch-dsh-worktree.view-mode';\n/** Guard persisted values before they become a visible mode. */\nexport function isWorktreeViewMode(value) {\n return value === 'workspace-session' || value === 'worktree';\n}\n/** Degraded/unavailable plugin state always exposes the original DSH view. */\nexport function effectiveViewMode(preferred, worktreeServiceAvailable) {\n if (!worktreeServiceAvailable || !isWorktreeViewMode(preferred))\n return 'workspace-session';\n return preferred;\n}\n/** Keep the Main bucket scoped to the selected DSH Workspace before filtering bindings. */\nexport function workspaceSessionIds(workspaces, workspaceId, sessionIds) {\n if (workspaceId === undefined)\n return [];\n const workspace = workspaces.items.find((candidate) => candidate.workspaceId === workspaceId);\n if (workspace === undefined)\n return [];\n const listed = new Set(sessionIds);\n return workspace.sessionIds.filter((sessionId) => listed.has(sessionId));\n}\nexport function unboundSessionIds(sessionIds, boundSessionIds) {\n const bound = new Set(boundSessionIds);\n return sessionIds.filter((sessionId) => !bound.has(sessionId));\n}\nexport function projectVirtualWorkspaceMembership(snapshot, previousBindings, nextBindings) {\n const previousSessionIds = new Set(previousBindings.map((binding) => binding.sessionId));\n const nextByWorkspace = new Map();\n for (const binding of nextBindings) {\n const sessionIds = nextByWorkspace.get(binding.workspaceId) ?? [];\n if (!sessionIds.includes(binding.sessionId))\n sessionIds.push(binding.sessionId);\n nextByWorkspace.set(binding.workspaceId, sessionIds);\n }\n const items = snapshot.items.map((workspace) => {\n const nativeSessionIds = workspace.sessionIds.filter((sessionId) => !previousSessionIds.has(sessionId));\n const virtualSessionIds = nextByWorkspace.get(workspace.workspaceId) ?? [];\n const sessionIds = [\n ...nativeSessionIds,\n ...virtualSessionIds.filter((sessionId) => !nativeSessionIds.includes(sessionId)),\n ];\n if (sessionIds.length === workspace.sessionIds.length &&\n sessionIds.every((sessionId, index) => sessionId === workspace.sessionIds[index])) {\n return workspace;\n }\n return { ...workspace, sessionIds };\n });\n if (items.every((workspace, index) => workspace === snapshot.items[index]))\n return snapshot;\n return { ...snapshot, items };\n}\nfunction validTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction createdAtTimestamp(createdAt) {\n const timestamp = Date.parse(createdAt);\n return Number.isFinite(timestamp) ? timestamp : undefined;\n}\n/**\n * Derive the most recent Workspace from rc.1 Session/Workspace metadata.\n * Host order is retained when timestamps tie, so equal activity never causes\n * the native Workspace order to oscillate.\n */\nexport function deriveRecentWorkspaceId(workspaces, sessionsById) {\n let recentWorkspaceId;\n let recentTimestamp = Number.NEGATIVE_INFINITY;\n for (const workspace of workspaces.items) {\n let workspaceTimestamp;\n for (const sessionId of workspace.sessionIds) {\n const updatedAt = sessionsById[sessionId]?.updatedAt;\n if (validTimestamp(updatedAt)) {\n workspaceTimestamp = Math.max(workspaceTimestamp ?? updatedAt, updatedAt);\n }\n }\n workspaceTimestamp ??= createdAtTimestamp(workspace.createdAt);\n if (workspaceTimestamp === undefined || workspaceTimestamp <= recentTimestamp)\n continue;\n recentWorkspaceId = workspace.workspaceId;\n recentTimestamp = workspaceTimestamp;\n }\n return recentWorkspaceId;\n}\n/**\n * Select the initial Worktree surface Workspace without navigating DSH:\n * current Session membership wins, then derived DSH recency, then the first available\n * Workspace keeps the surface usable in an empty/reconnecting fixture.\n */\nexport function initialWorkspaceId(workspaces, sessions) {\n const currentSessionId = currentSessionIdFromList(sessions);\n if (currentSessionId !== undefined) {\n const currentWorkspace = workspaces.items.find((workspace) => workspace.sessionIds.includes(currentSessionId));\n if (currentWorkspace !== undefined)\n return currentWorkspace.workspaceId;\n }\n const recentWorkspaceId = deriveRecentWorkspaceId(workspaces, sessions.byId);\n if (recentWorkspaceId !== undefined)\n return recentWorkspaceId;\n return workspaces.items[0]?.workspaceId;\n}\n//# sourceMappingURL=view-mode.js.map","/** Browser-local storage identity; never sent to DSH or the plugin sidecar. */\nexport const WORKTREE_EXPAND_STATE_STORAGE_KEY = 'clutch-dsh-worktree.expand-state';\nfunction emptyState() {\n return {\n collapsedWorkspaceIds: {},\n collapsedMainWorkspaceIds: {},\n collapsedWorktreeIds: {},\n };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction normalizeIds(value) {\n if (!isRecord(value))\n return {};\n return Object.fromEntries(Object.entries(value).filter(([id, collapsed]) => id.length > 0 && collapsed === true));\n}\n/** Turn any persisted JSON value into the current state shape. */\nexport function normalizeWorktreeExpandState(value) {\n const source = isRecord(value) ? value : {};\n return {\n collapsedWorkspaceIds: normalizeIds(source.collapsedWorkspaceIds),\n collapsedMainWorkspaceIds: normalizeIds(source.collapsedMainWorkspaceIds),\n collapsedWorktreeIds: normalizeIds(source.collapsedWorktreeIds),\n };\n}\nexport function isWorkspaceExpanded(state, workspaceId) {\n return state.collapsedWorkspaceIds[workspaceId] !== true;\n}\nexport function isMainExpanded(state, workspaceId) {\n return state.collapsedMainWorkspaceIds[workspaceId] !== true;\n}\nexport function isWorktreeExpanded(state, worktreeId) {\n return state.collapsedWorktreeIds[worktreeId] !== true;\n}\nfunction toggle(record, id) {\n if (record[id] === true)\n delete record[id];\n else\n record[id] = true;\n}\nfunction retain(record, ids) {\n const allowed = new Set(ids);\n for (const id of Object.keys(record)) {\n if (!allowed.has(id))\n delete record[id];\n }\n}\n/** Create one apply-scoped store; component remounts share this instance. */\nexport function createWorktreeExpandStateStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_EXPAND_STATE_STORAGE_KEY },\n });\n }\n catch {\n // A throwing browser storage getter can fail before runtime persistence's own guard.\n store = snapshotStoreFactory(emptyState());\n }\n // Runtime persistence handles invalid JSON; normalize valid but wrong-shaped JSON.\n store.set(normalizeWorktreeExpandState(store.getSnapshot()));\n const actions = {\n toggleWorkspace: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedWorkspaceIds, workspaceId); });\n },\n toggleMain: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedMainWorkspaceIds, workspaceId); });\n },\n toggleWorktree: (worktreeId) => {\n store.update((draft) => { toggle(draft.collapsedWorktreeIds, worktreeId); });\n },\n collapseAll: (workspaceIds, worktreeIds = [], mainWorkspaceIds = workspaceIds) => {\n store.update((draft) => {\n for (const id of workspaceIds) {\n draft.collapsedWorkspaceIds[id] = true;\n }\n for (const id of mainWorkspaceIds) {\n draft.collapsedMainWorkspaceIds[id] = true;\n }\n for (const id of worktreeIds) {\n draft.collapsedWorktreeIds[id] = true;\n }\n });\n },\n retain: (workspaceIds, worktreeIds) => {\n // No Workspace IDs means the Workspace list has not arrived yet. Pruning from that\n // read would delete every stored preference, so refuse it outright: only a caller\n // holding a complete, non-empty snapshot may prune.\n if (workspaceIds.length === 0)\n return;\n store.update((draft) => {\n retain(draft.collapsedWorkspaceIds, workspaceIds);\n retain(draft.collapsedMainWorkspaceIds, workspaceIds);\n retain(draft.collapsedWorktreeIds, worktreeIds);\n });\n },\n };\n return Object.assign(store, { actions });\n}\n//# sourceMappingURL=worktree-expand-state.js.map","export function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\nexport function isManagedDashboardRecord(record) {\n return !isMainWorktreeId(record.worktreeId);\n}\nexport function createMainWorktreeRecord(workspace, currentBranch, instructions = '') {\n return {\n worktreeId: `main:${workspace.workspaceId}`,\n workspaceId: workspace.workspaceId,\n // Main is a browser-local projection, not a plugin-managed Worktree. Keep\n // unavailable branch and health facts empty instead of inventing values.\n branch: currentBranch ?? '',\n currentBranch,\n absolutePath: workspace.path,\n status: 'active',\n instructions,\n };\n}\nexport function resolveDashboardRecord(selection, mode, currentSessionId, workspaceIds, records, mainRecord) {\n if (selection === undefined ||\n mode !== 'worktree' ||\n (selection.sessionId !== undefined && selection.sessionId !== currentSessionId) ||\n !workspaceIds.includes(selection.workspaceId))\n return undefined;\n if (mainRecord !== undefined &&\n (isMainWorktreeId(selection.worktreeId) || selection.worktreeId === mainRecord.worktreeId)) {\n return mainRecord;\n }\n return records?.find((record) => record.workspaceId === selection.workspaceId && record.worktreeId === selection.worktreeId);\n}\n//# sourceMappingURL=dashboard-selection.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { HoverCard, Menu, StateDot, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconArchiveOutline20, IconBranchOutline16, IconChevronDownOutline14, IconChevronRightOutline14, IconCopyOutline16, IconEditOutline16, IconEllipsisOutline16, IconFolderClose16, IconFolderOpen16, IconPlusOutline16, IconRefreshOutline16, IconTrashOutline16, } from '../../dsh-icons.js';\nimport { useEffect, useRef, useState } from 'react';\nimport { IconDashboard } from '../../dashboard/dashboard-icon.js';\nimport { isBlankSession, relativeTime, } from '../../session/session-view.js';\nimport styles from '../../worktree.css';\nimport { sessionLabel } from '../selectors.js';\nfunction rowHalf(event) {\n const rect = event.currentTarget.getBoundingClientRect();\n return event.clientY < rect.top + rect.height / 2 ? 'before' : 'after';\n}\nconst WORKTREE_LABEL_SCROLL_START_PAUSE_MS = 800;\nconst WORKTREE_LABEL_SCROLL_FORWARD_MS = 3_000;\nconst WORKTREE_LABEL_SCROLL_END_PAUSE_MS = 1_000;\nconst WORKTREE_LABEL_SCROLL_RETURN_MS = 3_000;\nconst WORKTREE_LABEL_SCROLL_CYCLE_MS = WORKTREE_LABEL_SCROLL_START_PAUSE_MS +\n WORKTREE_LABEL_SCROLL_FORWARD_MS +\n WORKTREE_LABEL_SCROLL_END_PAUSE_MS +\n WORKTREE_LABEL_SCROLL_RETURN_MS;\nfunction worktreeLabelScrollProgress(elapsedMs) {\n const elapsed = elapsedMs % WORKTREE_LABEL_SCROLL_CYCLE_MS;\n const forwardStart = WORKTREE_LABEL_SCROLL_START_PAUSE_MS;\n const forwardEnd = forwardStart + WORKTREE_LABEL_SCROLL_FORWARD_MS;\n const returnStart = forwardEnd + WORKTREE_LABEL_SCROLL_END_PAUSE_MS;\n if (elapsed < forwardStart)\n return 0;\n if (elapsed < forwardEnd) {\n return (elapsed - forwardStart) / WORKTREE_LABEL_SCROLL_FORWARD_MS;\n }\n if (elapsed < returnStart)\n return 1;\n return 1 - (elapsed - returnStart) / WORKTREE_LABEL_SCROLL_RETURN_MS;\n}\nfunction sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\nfunction sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Native Workspace hover-card time copy, including the trailing \"ago\" marker. */\nfunction sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n/** Native Workspace hover-card status list, including a secondary subagent status when relevant. */\nfunction sessionHoverStatuses(presentation) {\n if (presentation.runningSubagentCount === 0 ||\n presentation.status.labelKey === 'subagentsRunning') {\n return [presentation.status];\n }\n return [\n presentation.status,\n {\n state: 'ongoing',\n labelKey: 'subagentsRunning',\n runningSubagentCount: presentation.runningSubagentCount,\n },\n ];\n}\n/** Native Workspace Session hover-card details, adapted to the Worktree row projection. */\nfunction WorktreeSessionHoverContent({ label, blank, presentation, t, }) {\n const statuses = presentation === undefined ? [] : sessionHoverStatuses(presentation);\n const timeValue = !blank && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n return (_jsxs(\"div\", { className: styles.sessionHoverContent, children: [_jsx(\"div\", { className: styles.sessionHoverTitle, children: label }), !blank && timeValue !== undefined && (_jsx(\"div\", { className: styles.sessionHoverTime, children: sessionHoverTimeLabel(t, timeValue) })), statuses.map((status) => (_jsxs(\"div\", { className: styles.sessionHoverStatus, children: [_jsx(StateDot, { state: status.state }), _jsx(\"span\", { children: sessionStatusLabel(t, status) })] }, `${status.labelKey}-${status.runningSubagentCount}`)))] }));\n}\n/** Workspace row using the native DSH menu, fixed action column, and drag contract. */\nexport function WorktreeWorkspaceRow({ t, workspace, expanded, groupActivityStatus, actionPending, menuOpen, drag, onToggle, onCreateWorktree, onRename, onDelete, onMenuOpenChange, }) {\n const workspaceMenuItems = [\n {\n id: 'rename',\n label: t('workspace.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: actionPending,\n },\n {\n id: 'delete',\n label: t('workspace.delete'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: actionPending,\n },\n ];\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n return (_jsxs(\"div\", { className: `${styles.workspaceRow} ${markerClass}`, \"data-workspace-drag\": drag.active ? 'active' : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menuOpen || undefined, draggable: true, onClick: () => {\n onToggle();\n }, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', workspace.workspaceId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.workspaceDisclosure}`, \"aria-label\": t(expanded ? 'workspace.collapse' : 'workspace.expand', {\n name: workspace.title,\n }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: expanded ? (_jsx(IconChevronDownOutline14, { size: 18 })) : (_jsx(IconChevronRightOutline14, { size: 18 })) }), _jsx(\"span\", { className: styles.workspaceIcon, \"aria-hidden\": \"true\", children: expanded ? _jsx(IconFolderOpen16, {}) : _jsx(IconFolderClose16, {}) }), _jsx(\"span\", { className: styles.workspaceTitle, children: workspace.title }), _jsxs(\"span\", { className: `${styles.treeActionSlot} ${styles.workspaceActions}`, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), _jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n onMenuOpenChange(false);\n }, items: workspaceMenuItems, onSelect: (id) => {\n onMenuOpenChange(false);\n if (id === 'rename')\n onRename();\n if (id === 'delete')\n onDelete();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-workspace-menu\": true, \"aria-label\": t('workspace.options', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onMenuOpenChange(!menuOpen);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) }), _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-worktree\": true, \"aria-label\": t('workspace.addWorktree', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onCreateWorktree();\n }, children: _jsx(IconPlusOutline16, {}) })] })] }));\n}\n/** Shared Main/Worktree group row with parameterized icon, state, and actions. */\nexport function WorktreeGroupRow({ t, kind, label, worktreeId, expanded, groupActivityStatus, icon, workspaceTitle, state, stateLabel, repairGuidance, onToggle, onCreateSession, showDashboardAction, menu, drag, }) {\n const main = kind === 'main';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n const worktreeStateVisible = stateLabel !== undefined;\n const dashboardActionVisible = showDashboardAction === true && menu?.onDashboard !== undefined;\n const worktreeLabelRef = useRef(null);\n const labelScrollFrameRef = useRef(undefined);\n const worktreeLabelPointerInsideRef = useRef(false);\n const stopWorktreeLabelScroll = () => {\n if (labelScrollFrameRef.current !== undefined) {\n cancelAnimationFrame(labelScrollFrameRef.current);\n labelScrollFrameRef.current = undefined;\n }\n if (worktreeLabelRef.current !== null) {\n worktreeLabelRef.current.scrollLeft = 0;\n }\n };\n const startWorktreeLabelScroll = () => {\n if (labelScrollFrameRef.current !== undefined) {\n return;\n }\n const labelElement = worktreeLabelRef.current;\n const prefersReducedMotion = typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (labelElement === null || prefersReducedMotion) {\n return;\n }\n const startedAt = performance.now();\n const animate = (timestamp) => {\n if (worktreeLabelRef.current !== labelElement) {\n labelScrollFrameRef.current = undefined;\n return;\n }\n const maxScrollLeft = Math.max(0, labelElement.scrollWidth - labelElement.clientWidth);\n if (maxScrollLeft === 0) {\n labelElement.scrollLeft = 0;\n labelScrollFrameRef.current = undefined;\n return;\n }\n labelElement.scrollLeft =\n maxScrollLeft * worktreeLabelScrollProgress(timestamp - startedAt);\n labelScrollFrameRef.current = requestAnimationFrame(animate);\n };\n labelScrollFrameRef.current = requestAnimationFrame(animate);\n };\n const syncWorktreeLabelScroll = () => {\n if (worktreeLabelPointerInsideRef.current || groupActivityVisible) {\n startWorktreeLabelScroll();\n }\n else {\n stopWorktreeLabelScroll();\n }\n };\n useEffect(() => {\n syncWorktreeLabelScroll();\n }, [groupActivityVisible, label]);\n useEffect(() => {\n return () => {\n if (labelScrollFrameRef.current !== undefined) {\n cancelAnimationFrame(labelScrollFrameRef.current);\n labelScrollFrameRef.current = undefined;\n }\n };\n }, []);\n const markerClass = drag?.marker === 'before'\n ? styles.dropBefore\n : drag?.marker === 'after'\n ? styles.dropAfter\n : '';\n const dragProps = drag === undefined\n ? {}\n : {\n draggable: true,\n onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', worktreeId ?? label);\n drag.start();\n },\n onDragEnd: drag.end,\n onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n },\n onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n },\n };\n const row = (_jsxs(\"div\", { className: `${styles.worktreeRow} ${markerClass}`, \"data-main-group\": main ? 'true' : undefined, \"data-main-expanded\": main ? String(expanded) : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menu?.open ? 'true' : undefined, \"data-worktree-drag\": drag?.active ? 'active' : undefined, ...dragProps, onClick: onToggle, onMouseEnter: () => {\n worktreeLabelPointerInsideRef.current = true;\n syncWorktreeLabelScroll();\n }, onMouseLeave: () => {\n worktreeLabelPointerInsideRef.current = false;\n syncWorktreeLabelScroll();\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.worktreeDisclosure}`, \"aria-label\": t(expanded ? 'worktree.collapse' : 'worktree.expand', { name: label }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: expanded ? (_jsx(IconChevronDownOutline14, { size: 18 })) : (_jsx(IconChevronRightOutline14, { size: 18 })) }), _jsx(\"span\", { className: styles.worktreeIcon, \"data-worktree-state\": state, \"aria-hidden\": \"true\", children: icon }), worktreeStateVisible && (_jsx(\"span\", { className: styles.worktreeStateLabel, children: stateLabel })), _jsx(\"span\", { ref: worktreeLabelRef, className: styles.worktreeLabel, children: label }), _jsxs(\"span\", { className: styles.treeActionSlot, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), dashboardActionVisible && (_jsx(\"span\", { className: styles.dashboardAction, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-dashboard-action\": true, \"aria-label\": t('dashboard.title'), onClick: (event) => {\n event.stopPropagation();\n menu?.onDashboard?.();\n }, children: _jsx(IconDashboard, { size: 16 }) }) })), menu !== undefined && (_jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menu.open, onClose: () => {\n menu.onOpenChange(false);\n }, items: [\n ...(menu.onDashboard === undefined\n ? []\n : [{ id: 'dashboard', label: t('dashboard.title'), icon: _jsx(IconDashboard, { size: 16 }) }]),\n ...(menu.showCreate\n ? [\n {\n id: 'create',\n label: t('worktree.createNew'),\n icon: _jsx(IconPlusOutline16, {}),\n disabled: menu.disabled || menu.onCreateWorktree === undefined,\n },\n ]\n : []),\n {\n id: 'copy-path',\n label: t('worktree.copyPath'),\n icon: _jsx(IconCopyOutline16, {}),\n disabled: menu.disabled,\n },\n ...(menu.showRemove\n ? [\n {\n id: 'remove',\n label: t('worktree.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n danger: true,\n disabled: menu.disabled || menu.onRemove === undefined,\n },\n ]\n : []),\n ...(menu.onAdoptBranch\n ? [\n {\n id: 'adopt-branch',\n label: t('worktree.adoptBranch'),\n disabled: menu.disabled,\n },\n ]\n : []),\n ...(menu.onRecover\n ? [{ id: 'recover', label: t('worktree.retryRecovery'), disabled: menu.disabled }]\n : []),\n ...(menu.showUnarchive\n ? [\n {\n id: 'unarchive',\n label: menu.unarchiveDisabledReason\n ? `${t('worktree.unarchive')} (${menu.unarchiveDisabledReason})`\n : t('worktree.unarchive'),\n icon: _jsx(IconRefreshOutline16, {}),\n disabled: menu.disabled || menu.unarchiveDisabled || menu.onUnarchive === undefined,\n },\n ]\n : []),\n ...(menu.showCleanDisk\n ? [\n {\n id: 'clean-disk',\n label: menu.cleanDiskDisabledReason\n ? `${t('worktree.cleanDisk')} (${menu.cleanDiskDisabledReason})`\n : t('worktree.cleanDisk'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.cleanDiskDisabled || menu.onCleanDisk === undefined,\n },\n ]\n : []),\n ...(menu.showForget\n ? [\n {\n id: 'forget',\n label: menu.forgetDisabledReason\n ? `${t('worktree.forget')} (${menu.forgetDisabledReason})`\n : t('worktree.forget'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.forgetDisabled || menu.onForget === undefined,\n },\n ]\n : []),\n ], onSelect: (id) => {\n menu.onOpenChange(false);\n if (id === 'create' && menu.showCreate)\n menu.onCreateWorktree?.();\n if (id === 'dashboard')\n menu.onDashboard?.();\n if (id === 'adopt-branch')\n menu.onAdoptBranch?.();\n if (id === 'recover')\n menu.onRecover?.();\n if (id === 'copy-path')\n void writeClipboard(menu.copyPath);\n if (id === 'remove' && menu.showRemove)\n menu.onRemove?.();\n if (id === 'unarchive' && menu.showUnarchive)\n menu.onUnarchive?.();\n if (id === 'clean-disk' && menu.showCleanDisk)\n menu.onCleanDisk?.();\n if (id === 'forget' && menu.showForget)\n menu.onForget?.();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-worktree-menu\": true, \"aria-label\": t('worktree.options', { name: menu.label }), onClick: (event) => {\n event.stopPropagation();\n menu.onOpenChange(!menu.open);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })), onCreateSession !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-main-session\": main ? 'true' : undefined, \"data-add-session\": main ? undefined : 'true', \"aria-label\": t('worktree.addSession', { name: workspaceTitle }), onClick: (event) => {\n event.stopPropagation();\n onCreateSession();\n }, children: _jsx(IconPlusOutline16, {}) }))] })] }));\n if (main)\n return row;\n return (_jsx(HoverCard, { anchor: row, content: _jsxs(\"div\", { className: styles.worktreeHoverDetails, children: [_jsx(\"div\", { className: styles.worktreeHoverTitle, children: label }), stateLabel !== undefined && state !== 'done' && (_jsx(\"p\", { className: styles.worktreeHoverTitle, children: stateLabel })), repairGuidance !== undefined && (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.worktreeHoverTitle, children: menu?.copyPath }), _jsx(\"p\", { className: styles.worktreeHoverTitle, children: repairGuidance })] }))] }), openDelayMs: 500, disabled: menu?.open === true || drag?.active === true, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Worktree-mode Session row with the same trailing options menu as native DSH rows. */\nexport function WorktreeSessionRow({ t, sessionId, blank, current, label, drag, actionPending, onOpen, onRename, onFork, onArchive, presentation, }) {\n const [menuOpen, setMenuOpen] = useState(false);\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const sessionMenuItems = [\n {\n id: 'rename',\n label: t('session.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: onRename === undefined || actionPending,\n },\n {\n id: 'fork',\n label: t('session.fork'),\n icon: _jsx(IconBranchOutline16, {}),\n disabled: onFork === undefined || actionPending,\n },\n {\n id: 'archive',\n label: t('session.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n disabled: onArchive === undefined || actionPending,\n },\n {\n id: 'copy-session-id',\n label: t('session.copyId'),\n icon: _jsx(IconCopyOutline16, {}),\n },\n ];\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n const row = (_jsxs(\"div\", { className: `${styles.treeSessionRow} ${markerClass}`, \"data-session-id\": sessionId, \"data-session-blank\": blank ? 'true' : undefined, \"data-session-current\": current ? 'true' : undefined, \"data-session-drag\": drag.active ? 'active' : undefined, \"data-menu-open\": menuOpen || undefined, role: \"treeitem\", \"aria-current\": current ? 'true' : undefined, draggable: true, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', sessionId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: styles.treeSessionContent, onClick: onOpen, children: _jsx(\"span\", { className: styles.sessionLabel, children: label }) }), !blank && (_jsxs(\"span\", { className: styles.sessionTrailing, children: [_jsx(\"span\", { className: styles.sessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.sessionStatus, \"data-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.sessionTime, \"data-session-time\": true, children: timeLabel })) : null }), _jsx(\"span\", { className: styles.rowActions, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n setMenuOpen(false);\n }, items: sessionMenuItems, onSelect: (id) => {\n setMenuOpen(false);\n if (id === 'rename')\n onRename?.(sessionId, label);\n if (id === 'fork')\n onFork?.(sessionId);\n if (id === 'archive')\n onArchive?.(sessionId);\n if (id === 'copy-session-id')\n void writeClipboard(sessionId);\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-session-menu\": true, \"aria-label\": t('session.options', { name: label }), onClick: (event) => {\n event.stopPropagation();\n setMenuOpen((current) => !current);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })] }))] }));\n return (_jsx(HoverCard, { anchor: row, content: _jsx(WorktreeSessionHoverContent, { label: label, blank: blank, presentation: presentation, t: t }), openDelayMs: 500, disabled: menuOpen || drag.active, copyText: blank ? undefined : label, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\nexport function WorktreeSessionGroup({ t, groupKey, sessionIds, workspaceId, currentSessionId, expanded, actionPending, sessions, sessionPresentations, dragState, onToggleExpanded, onStartDrag, onHoverDrag, onClearDrag, onFinishDrag, onCommitDrag, onOpen, onRename, onFork, onArchive, }) {\n const visibleSessionIds = expanded ? sessionIds : sessionIds.slice(0, 5);\n const sameGroupDrag = dragState?.groupKey === groupKey;\n return (_jsxs(_Fragment, { children: [visibleSessionIds.map((sessionId) => (_jsx(WorktreeSessionRow, { t: t, sessionId: sessionId, blank: isBlankSession(sessionId, sessions), current: sessionId === currentSessionId, label: sessionLabel(sessionId, sessions, t), presentation: sessionPresentations[sessionId], drag: {\n active: sameGroupDrag,\n marker: sameGroupDrag && dragState.over?.sessionId === sessionId ? dragState.over.half : null,\n start: () => {\n onStartDrag(groupKey, sessionId);\n },\n hover: (half) => {\n onHoverDrag(sessionId, half);\n },\n drop: (half) => {\n if (dragState === undefined)\n return;\n onCommitDrag(dragState, { sessionId, half }, sessionIds, workspaceId);\n },\n end: () => {\n if (dragState?.over !== null && dragState?.over !== undefined) {\n onCommitDrag(dragState, dragState.over, sessionIds, workspaceId);\n }\n else {\n onClearDrag();\n }\n onFinishDrag();\n },\n }, actionPending: actionPending, onOpen: () => {\n onOpen(sessionId);\n }, onRename: onRename, onFork: onFork, onArchive: onArchive }, `${groupKey}:${sessionId}`))), sessionIds.length > 5 && (_jsx(\"button\", { type: \"button\", className: styles.sessionOverflowButton, \"aria-expanded\": expanded, onClick: onToggleExpanded, children: expanded\n ? t('session.collapse')\n : t('session.expandMore', { count: sessionIds.length - 5 }) }))] }));\n}\n//# sourceMappingURL=rows.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded } from '../selectors.js';\nexport function ActiveWorktree({ record, source, expansion, ordering, props, lifecycle, session, menus, mutation, read, registration, lifecycleState, drag, native, bindings, workspaceMatchesQuery, workspace, workspaceWorktreeNames, sameWorkspaceWorktreeDrag, activeWorktrees, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { createSession, openWorkspaceSession } = session;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { actionPending, setActionError } = mutation;\n const { refresh } = read;\n const { openWorktreeCreator } = registration;\n const { setWorktreeRemoval } = lifecycleState;\n const { worktreeDrag, worktreeDropCommitted, setWorktreeDrag, commitWorktreeDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = `worktree:${record.worktreeId}`;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'repair' || record.health === 'recovery-needed'\n ? 'error'\n : record.health === 'branch-drift'\n ? 'warning'\n : 'done';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.ready');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, repairGuidance: record.health === 'repair'\n ? t('worktree.repairGuidance')\n : record.health === 'recovery-needed'\n ? t('worktree.recoveryGuidance')\n : record.health === 'branch-drift'\n ? t(record.currentBranch === null ? 'worktree.detachedGuidance' : 'worktree.branchDriftGuidance')\n : undefined, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, onCreateSession: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed'\n ? () => {\n void createSession({\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n cwd: record.absolutePath,\n });\n }\n : undefined, menu: {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null,\n showRemove: record.status === 'active' && record.health !== 'recovery-needed',\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onCreateWorktree: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null\n ? () => {\n openWorktreeCreator(workspace, {\n baseBranch: record.currentBranch ?? record.branch,\n newBranch: createNumberedWorktreeName(record.currentBranch ?? record.branch, workspaceWorktreeNames),\n });\n }\n : undefined,\n onRemove: record.status === 'active'\n ? () => {\n setWorktreeRemoval(record);\n setActionError(undefined);\n }\n : undefined,\n }, drag: {\n active: sameWorkspaceWorktreeDrag,\n marker: worktreeDrag?.over?.worktreeId === record.worktreeId ? worktreeDrag.over.half : null,\n start: () => {\n worktreeDropCommitted.current = false;\n setWorktreeDrag({\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n over: null,\n });\n },\n hover: (half) => {\n setWorktreeDrag((current) => current === undefined || current.workspaceId !== workspace.workspaceId\n ? current\n : {\n ...current,\n over: { worktreeId: record.worktreeId, half },\n });\n },\n drop: (half) => {\n if (worktreeDrag === undefined)\n return;\n commitWorktreeDrag(worktreeDrag, { worktreeId: record.worktreeId, half }, activeWorktrees.map((candidate) => candidate.worktreeId), workspace.workspaceId);\n },\n end: () => {\n setWorktreeDrag(undefined);\n worktreeDropCommitted.current = false;\n },\n } }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ActiveWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { executeWorktreeAction, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded, worktreeLifecycleBlockReason, } from '../selectors.js';\nexport function ArchivedWorktree({ record, source, expansion, ordering, props, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, bindings, workspaceMatchesQuery, workspace, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, manager, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { actionPending, setActionError, runMutation } = mutation;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { refresh } = read;\n const { setWorktreeCleanDisk, setWorktreeForget } = lifecycleState;\n const { sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag } = drag;\n const { openWorkspaceSession } = session;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = 'worktree:' + record.worktreeId;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'recovery-needed'\n ? 'error'\n : record.diskCleanup === 'completed'\n ? undefined\n : record.health === 'repair'\n ? 'error'\n : 'warning';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.diskCleanup === 'completed'\n ? t('worktree.cleaned')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.detached');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: (() => {\n const activityBlocked = worktreeLifecycleBlockReason(actionPending, record.health);\n const blockedReasonText = activityBlocked === 'recovery' ? t('worktree.recovery') : undefined;\n return {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: false,\n showRemove: false,\n showUnarchive: record.diskCleanup !== 'completed',\n showCleanDisk: record.diskCleanup !== 'completed',\n showForget: true,\n disabled: actionPending,\n unarchiveDisabled: activityBlocked !== undefined || record.health === 'repair',\n cleanDiskDisabled: activityBlocked !== undefined || record.health === 'branch-drift',\n forgetDisabled: activityBlocked !== undefined,\n unarchiveDisabledReason: record.health === 'repair'\n ? t('worktree.unarchiveDisabledRepair')\n : blockedReasonText,\n cleanDiskDisabledReason: record.health === 'branch-drift' ? t('worktree.adoptBeforeClean') : blockedReasonText,\n forgetDisabledReason: blockedReasonText,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onUnarchive: () => {\n if (!manager)\n return;\n if (!record.mutationToken) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'unarchiveWorktree',\n input: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n mutationToken: record.mutationToken,\n },\n });\n }, {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n },\n onCleanDisk: () => {\n setWorktreeCleanDisk(record);\n setActionError(undefined);\n },\n onForget: () => {\n setWorktreeForget(record);\n setActionError(undefined);\n },\n };\n })() }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ArchivedWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconArchiveOutline20 } from '../../dsh-icons.js';\nimport { aggregateSessionStatus } from '../../session/session-view.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { ArchivedWorktree } from './ArchivedWorktree.js';\nimport { WorktreeGroupRow } from './rows.js';\nimport { bindingIdsFor } from '../selectors.js';\nexport function ArchivedWorktrees({ expansion, props, source, ordering, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, workspace, archivedWorktrees, bindings, workspaceMatchesQuery, }) {\n const { isCurrentSessionReveal, expandedArchivedWorkspaces, toggleArchivedWorkspace } = expansion;\n const { t } = props;\n const { sessions, archivedSessionIds, sessionPresentations } = source;\n const archivedKey = 'archived:' + workspace.workspaceId;\n const isArchivedAutoExpanded = isCurrentSessionReveal(archivedKey);\n const isArchivedExpanded = expandedArchivedWorkspaces[workspace.workspaceId] === true || isArchivedAutoExpanded;\n return (_jsxs(\"div\", { className: styles.archivedGroup, \"data-archived-group\": true, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"archived-group\", label: `${t('worktree.archivedGroup')} (${archivedWorktrees.length})`, expanded: isArchivedExpanded, groupActivityStatus: aggregateSessionStatus(filterArchivedSessionIds(archivedWorktrees.flatMap((record) => bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId))), archivedSessionIds), sessionPresentations), icon: _jsx(IconArchiveOutline20, { size: 16 }), workspaceTitle: workspace.title, onToggle: () => {\n toggleArchivedWorkspace(workspace.workspaceId);\n } }), isArchivedExpanded && (_jsx(\"div\", { className: styles.treeChildren, children: archivedWorktrees.map((record) => (_jsx(ArchivedWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace }, record.worktreeId))) }))] }));\n}\n//# sourceMappingURL=ArchivedWorktrees.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { isMainExpanded, isWorkspaceExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { createMainWorktreeRecord } from '../../dashboard/dashboard-selection.js';\nimport styles from '../../worktree.css';\nimport { ActiveWorktree } from './ActiveWorktree.js';\nimport { ArchivedWorktrees } from './ArchivedWorktrees.js';\nimport { WorktreeGroupRow, WorktreeSessionGroup, WorktreeWorkspaceRow } from './rows.js';\nimport { includesText, isSessionGroupAutoExpanded, workspaceMatches } from '../selectors.js';\nexport function WorkspaceTree({ props, read, source, expansion, ordering, drag, mutation, menus, registration, native, lifecycle, session, lifecycleState, }) {\n const { t, createMainSession, openSession, renameSession, forkSession, archiveSession } = props;\n const { viewByWorkspace } = read;\n const { expandSnapshot, workspaces, sessions, archivedSessionIds, sessionPresentations, currentSessionId, } = source;\n const { isCurrentSessionReveal, query, expandedSessionGroups, toggleWorkspace, toggleMain, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { worktreeDrag, workspaceDrag, workspaceDropCommitted, setWorkspaceDrag, commitWorkspaceDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { actionPending } = mutation;\n const { openWorkspaceMenuId, setOpenWorkspaceMenuId, openMainMenuId, setOpenMainMenuId } = menus;\n const { openWorktreeCreator } = registration;\n const { openWorkspaceRename, openWorkspaceDelete, openSessionRename, archiveWorktreeSession } = native;\n const visibleWorkspaces = workspaces.items.filter((workspace) => workspaceMatches(workspace, viewByWorkspace.get(workspace.workspaceId), sessions, query));\n return (_jsx(_Fragment, { children: _jsx(\"div\", { className: styles.workspaceList, children: visibleWorkspaces.length === 0 ? (_jsx(\"p\", { className: styles.empty, children: t('workspace.noMatches') })) : (visibleWorkspaces.map((workspace) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n const currentBranch = view?.branches.find((branch) => branch.isCurrent)?.name;\n const mainLabel = currentBranch === undefined\n ? t('worktree.main')\n : t('worktree.mainWithBranch', { branch: currentBranch });\n const expanded = isWorkspaceExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('workspace:' + workspace.workspaceId);\n const workspaceMatchesQuery = includesText(workspace.title, query);\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const workspaceActivitySessionIds = filterVisibleSessionIds(allWorkspaceSessionIds, sessions);\n const workspaceGroupActivityStatus = aggregateSessionStatus(workspaceActivitySessionIds, sessionPresentations);\n const bindings = view?.bindings ?? [];\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n const mainGroupKey = `main:${workspace.workspaceId}`;\n const orderedMainSessionIds = orderedSessionIdsByAccount.get(mainGroupKey) ?? mainSessionIds;\n const visibleMainSessionIds = mainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const orderedVisibleMainSessionIds = orderedMainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const mainExpanded = isMainExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('main:' + workspace.workspaceId);\n const sessionIds = orderedVisibleMainSessionIds.length === visibleMainSessionIds.length\n ? orderedVisibleMainSessionIds\n : visibleMainSessionIds;\n const mainSessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + mainGroupKey));\n const mainSessionGroupExpanded = expandedSessionGroups[mainGroupKey] === true || mainSessionGroupAutoExpanded;\n const worktrees = view?.worktrees ?? [];\n const activeWorktrees = worktrees.filter((record) => record.status === 'active');\n const archivedWorktrees = worktrees.filter((record) => record.status === 'removed');\n const workspaceWorktreeNames = [\n ...(view?.branches.map((branch) => branch.name) ?? []),\n ...(view?.worktrees.map((worktree) => worktree.branch) ?? []),\n ];\n const sameWorkspaceWorktreeDrag = worktreeDrag?.workspaceId === workspace.workspaceId;\n return (_jsxs(\"section\", { className: styles.workspaceGroup, \"data-workspace-id\": workspace.workspaceId, children: [_jsx(WorktreeWorkspaceRow, { t: t, workspace: workspace, expanded: expanded, groupActivityStatus: workspaceGroupActivityStatus, actionPending: actionPending, menuOpen: openWorkspaceMenuId === workspace.workspaceId, drag: {\n active: workspaceDrag !== undefined,\n marker: workspaceDrag?.over?.workspaceId === workspace.workspaceId\n ? workspaceDrag.over.half\n : null,\n start: () => {\n workspaceDropCommitted.current = false;\n setWorkspaceDrag({ workspaceId: workspace.workspaceId, over: null });\n },\n hover: (half) => {\n setWorkspaceDrag((current) => current === undefined\n ? current\n : {\n ...current,\n over: { workspaceId: workspace.workspaceId, half },\n });\n },\n drop: (half) => {\n if (workspaceDrag === undefined)\n return;\n commitWorkspaceDrag(workspaceDrag, {\n workspaceId: workspace.workspaceId,\n half,\n });\n },\n end: () => {\n if (workspaceDrag?.over !== null && workspaceDrag?.over !== undefined) {\n commitWorkspaceDrag(workspaceDrag, workspaceDrag.over);\n }\n else {\n setWorkspaceDrag(undefined);\n }\n workspaceDropCommitted.current = false;\n },\n }, onToggle: () => {\n toggleWorkspace(workspace.workspaceId);\n }, onCreateWorktree: () => {\n openWorktreeCreator(workspace);\n }, onRename: () => {\n openWorkspaceRename(workspace);\n }, onDelete: () => {\n openWorkspaceDelete(workspace);\n }, onMenuOpenChange: (open) => {\n setOpenWorkspaceMenuId(open ? workspace.workspaceId : undefined);\n } }), expanded && (_jsxs(\"div\", { className: styles.treeChildren, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"main\", label: mainLabel, expanded: mainExpanded, groupActivityStatus: aggregateSessionStatus(mainSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, onToggle: () => {\n toggleMain(workspace.workspaceId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: {\n onDashboard: props.openDashboard === undefined\n ? undefined\n : () => props.openDashboard?.(createMainWorktreeRecord(workspace, currentBranch)),\n open: openMainMenuId === workspace.workspaceId,\n label: mainLabel,\n copyPath: workspace.path,\n showCreate: currentBranch !== undefined,\n showRemove: false,\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenMainMenuId(open ? workspace.workspaceId : undefined);\n },\n onCreateWorktree: currentBranch === undefined\n ? undefined\n : () => {\n openWorktreeCreator(workspace, {\n baseBranch: currentBranch,\n newBranch: createNumberedWorktreeName(currentBranch, workspaceWorktreeNames),\n });\n },\n }, onCreateSession: createMainSession === undefined\n ? undefined\n : () => {\n createMainSession(workspace.workspaceId);\n } }), mainExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: mainGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: mainSessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(mainGroupKey, mainSessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined\n ? current\n : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorktreeSession({ open: openSession }, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession })), activeWorktrees.length === 0 && archivedWorktrees.length === 0 && (_jsx(\"p\", { className: styles.emptyNested, children: t('worktree.noWorktrees') })), activeWorktrees.map((record) => (_jsx(ActiveWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, session: session, menus: menus, mutation: mutation, read: read, registration: registration, lifecycleState: lifecycleState, drag: drag, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace, workspaceWorktreeNames: workspaceWorktreeNames, sameWorkspaceWorktreeDrag: sameWorkspaceWorktreeDrag, activeWorktrees: activeWorktrees }, record.worktreeId))), archivedWorktrees.length > 0 && (_jsx(ArchivedWorktrees, { expansion: expansion, props: props, source: source, ordering: ordering, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, workspace: workspace, archivedWorktrees: archivedWorktrees, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery }))] }))] }, workspace.workspaceId));\n })) }) }));\n}\n//# sourceMappingURL=WorkspaceTree.js.map","/** Resolved notices leave the queue; unchanged snapshots never announce twice. */\nexport function reconcileNotifications(state, notices) {\n const unique = [...new Map(notices.map((notice) => [notice.key, notice])).values()];\n const active = new Set(unique.map((notice) => notice.key));\n const seen = new Set(state.seen);\n const pending = state.pending.filter((notice) => active.has(notice.key));\n for (const notice of unique) {\n if (!seen.has(notice.key))\n pending.push(notice);\n }\n const nextSeen = [...active];\n if (nextSeen.length === state.seen.length &&\n nextSeen.every((key, index) => key === state.seen[index]) &&\n pending.length === state.pending.length &&\n pending.every((notice, index) => notice === state.pending[index]))\n return state;\n return { seen: nextSeen, pending };\n}\n//# sourceMappingURL=notification-queue.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Toast } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useCallback, useEffect, useState } from 'react';\nimport { reconcileNotifications, } from '../notification-queue.js';\n/** One native toast at a time; recovery controls remain available after it fades. */\nexport function NotificationToasts({ notices, detailsLabel, }) {\n const [queue, setQueue] = useState({ seen: [], pending: [] });\n useEffect(() => {\n setQueue((current) => reconcileNotifications(current, notices));\n }, [notices]);\n const current = queue.pending[0];\n const key = current?.key;\n const onDone = useCallback(() => {\n setQueue((state) => ({\n ...state,\n pending: state.pending.filter((notice) => notice.key !== key),\n }));\n }, [key]);\n if (current === undefined)\n return null;\n const text = current.text.length > 240 ? current.text.slice(0, 240) + '…' : current.text;\n return (_jsx(Toast, { text: text + ' · ' + detailsLabel, holdMs: 6000, onDone: onDone }, current.key));\n}\n//# sourceMappingURL=NotificationToasts.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { formatWorktreePermissionNotice, formatWorktreeViewError, } from '../../view/worktree-error-copy.js';\nimport styles from '../../worktree.css';\nimport { forkRecoveryError } from '../shared.js';\nimport { WorkspaceTree } from './WorkspaceTree.js';\nimport { NotificationToasts } from './NotificationToasts.js';\nexport function SurfaceContent({ source, props, lifecycle, mutation, session, read, expansion, ordering, drag, menus, registration, native, lifecycleState, }) {\n const { permissionNoticeSnapshot, forkRecoverySnapshot } = source;\n const { t, retryForkSession, openSession } = props;\n const { permissionRetryTarget, retryCleanupPermissions, recoveryAction } = lifecycle;\n const { actionPending, actionError, setActionError } = mutation;\n const { forkRetryKey, retryForkBinding, pendingSessionBinding, pendingSessionArchived, retrySessionBinding, setPendingSessionBinding, } = session;\n const { refresh, readState } = read;\n const notices = [];\n const addNotice = (scope, text) => {\n notices.push({ key: JSON.stringify([scope, text]), text });\n };\n if (permissionNoticeSnapshot !== undefined) {\n addNotice('permission:' +\n permissionNoticeSnapshot.workspaceId +\n ':' +\n permissionNoticeSnapshot.worktreeId, formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t));\n }\n for (const recovery of forkRecoverySnapshot.pending) {\n addNotice('fork:' + recovery.key, formatWorktreeViewError(forkRecoveryError(recovery), t));\n }\n if (actionError !== undefined) {\n addNotice('action:' + JSON.stringify(actionError.details), formatWorktreeViewError(actionError, t));\n }\n if (readState.targetError !== undefined) {\n addNotice('target:' + JSON.stringify(readState.targetError.workspaceIds), formatWorktreeViewError(readState.targetError.error, t));\n }\n if (readState.status === 'error' && readState.error !== undefined) {\n addNotice('read', formatWorktreeViewError(readState.error, t));\n }\n return (_jsxs(\"div\", { ref: expansion.contentRef, className: styles.content, tabIndex: 0, children: [_jsx(NotificationToasts, { notices: notices, detailsLabel: t('notice.details') }), notices.length > 0 && (_jsxs(\"details\", { className: styles.notificationDetails, children: [_jsxs(\"summary\", { children: [t('notice.details'), \" (\", notices.length, \")\"] }), permissionNoticeSnapshot !== undefined && (_jsxs(\"div\", { className: styles.notice, role: \"status\", \"data-worktree-permission-notice\": true, children: [_jsx(\"p\", { className: styles.message, children: formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t) }), permissionRetryTarget !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: retryCleanupPermissions, children: t('action.retry') }))] })), forkRecoverySnapshot.pending.map((recovery) => {\n const recoveryViewError = forkRecoveryError(recovery);\n return (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-fork-recovery\": recovery.key, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(recoveryViewError, t) }), _jsxs(\"div\", { className: styles.recoveryActions, children: [retryForkSession !== undefined && recoveryViewError.retryable && (_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: forkRetryKey !== undefined, onClick: () => {\n void retryForkBinding(recovery.key);\n }, children: t('action.retryBinding') })), _jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: forkRetryKey !== undefined, onClick: () => {\n openSession(recovery.childSessionId);\n }, children: t('action.openCreatedSession') })] })] }, recovery.key));\n }), actionError !== undefined && (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(actionError, t) }), recoveryAction(actionError), pendingSessionBinding !== undefined && (_jsxs(\"div\", { className: styles.recoveryActions, children: [_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: actionPending || pendingSessionArchived, onClick: () => {\n void retrySessionBinding();\n }, children: t('action.retryBinding') }), !pendingSessionBinding.permissionRequired && (_jsx(\"button\", { type: \"button\", className: styles.actionButton, disabled: actionPending, onClick: () => {\n const sessionId = pendingSessionBinding.sessionId;\n setPendingSessionBinding(undefined);\n setActionError(undefined);\n openSession(sessionId);\n }, children: t('action.openCreatedSession') }))] })), actionError.retryable && (_jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n setActionError(undefined);\n void refresh({ scope: { kind: 'global' } });\n }, children: t('action.retry') }))] })), readState.targetError !== undefined && (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-target-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readState.targetError.error, t) }), recoveryAction(readState.targetError.error), _jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: readState.targetError.workspaceIds,\n },\n preserveCurrent: true,\n });\n }, children: t('action.retry') })] })), readState.status === 'error' && readState.error !== undefined ? (_jsxs(\"div\", { className: styles.error, role: \"alert\", \"data-worktree-error\": true, children: [_jsx(\"p\", { className: styles.message, \"data-error\": \"true\", children: formatWorktreeViewError(readState.error, t) }), recoveryAction(readState.error), _jsx(\"button\", { type: \"button\", className: styles.retryButton, onClick: () => {\n void refresh({ scope: { kind: 'global' } });\n }, children: t('action.retry') })] })) : null] })), readState.status === 'loading' && _jsx(\"p\", { className: styles.message, children: t('status.loading') }), readState.status === 'ready' ? (_jsx(WorkspaceTree, { props: props, read: read, source: source, expansion: expansion, ordering: ordering, drag: drag, mutation: mutation, menus: menus, registration: registration, native: native, lifecycle: lifecycle, session: session, lifecycleState: lifecycleState })) : null] }));\n}\n//# sourceMappingURL=SurfaceContent.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconCloseFill14, IconCloseOutline16, IconProjectAddOutline16, IconSearchOutline16, } from '../../dsh-icons.js';\nimport styles from '../../worktree.css';\nimport { cx, IconCollapseAll16 } from '../shared.js';\nexport function SurfaceHeader({ expansion, props, source, read, mutation }) {\n const { searchExpanded, searchRoot, setSearchExpanded, searchInput, searchQuery, setSearchQuery, setExpandedArchivedWorkspaces, setExpandedSessionGroups, setCurrentSessionReveal, currentSessionLocation, } = expansion;\n const { t, expandState, createWorkspace, actions } = props;\n const { workspaceIds } = source;\n const { readState } = read;\n const { runMutation } = mutation;\n const currentWorkspaceId = currentSessionLocation?.workspaceId;\n const currentWorktreeId = currentSessionLocation?.kind === 'worktree' ? currentSessionLocation.worktreeId : undefined;\n const targetWorkspaceIds = workspaceIds.filter((id) => id !== currentWorkspaceId);\n const worktreeIds = readState.views\n .flatMap((view) => view.worktrees.map((record) => record.worktreeId))\n .filter((worktreeId) => worktreeId !== currentWorktreeId);\n return (_jsx(_Fragment, { children: _jsxs(\"header\", { className: styles.header, children: [_jsx(\"span\", { className: cx(styles.title, searchExpanded && styles.titleHidden), children: t('worktree.title') }), _jsx(\"div\", { className: cx(styles.searchSlot, searchExpanded && styles.searchSlotExpanded), children: _jsxs(\"div\", { ref: searchRoot, className: cx(styles.search, searchExpanded && styles.searchExpanded), onClick: () => {\n if (!searchExpanded) {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }\n }, children: [_jsx(Tooltip, { label: t('workspace.search'), side: \"bottom\", delayMs: 500, disabled: searchExpanded, children: _jsx(\"button\", { type: \"button\", className: styles.searchButton, \"aria-label\": t('workspace.search'), \"aria-expanded\": searchExpanded, onClick: () => {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }, children: _jsx(IconSearchOutline16, { size: searchExpanded ? 12 : 14 }) }) }), _jsx(\"input\", { ref: searchInput, className: styles.searchInput, type: \"text\", \"aria-label\": t('workspace.search'), placeholder: t('workspace.search'), value: searchQuery, tabIndex: searchExpanded ? 0 : -1, onChange: (event) => {\n setSearchQuery(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n } }), searchExpanded && (_jsx(\"button\", { type: \"button\", className: styles.clearButton, \"aria-label\": t('search.clear'), onClick: (event) => {\n event.stopPropagation();\n setSearchQuery('');\n setSearchExpanded(false);\n }, children: _jsx(IconCloseFill14, {}) }))] }) }), _jsxs(\"div\", { className: cx(styles.headerActions, searchExpanded && styles.headerActionsHidden), children: [_jsx(Tooltip, { label: t('workspace.collapseAll'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.collapseAll'), onClick: () => {\n // Keep the current Session's workspace and worktree expanded in state,\n // while collapsing all other unrelated workspaces and worktrees, and collapsing all Main groups.\n if (currentSessionLocation === undefined)\n setCurrentSessionReveal(undefined);\n expandState.actions.collapseAll(targetWorkspaceIds, worktreeIds, workspaceIds);\n setExpandedArchivedWorkspaces({});\n setExpandedSessionGroups({});\n }, children: _jsx(IconCollapseAll16, {}) }) }), _jsx(Tooltip, { label: t('workspace.add'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.add'), onClick: () => {\n if (createWorkspace !== undefined)\n void runMutation(createWorkspace);\n }, children: _jsx(IconProjectAddOutline16, {}) }) }), _jsx(Tooltip, { label: t('mode.exit'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.closeButton, \"aria-label\": t('mode.exit'), onClick: () => {\n actions.setViewMode('workspace-session');\n }, children: _jsx(IconCloseOutline16, {}) }) })] })] }) }));\n}\n//# sourceMappingURL=SurfaceHeader.js.map","/** Browser-only persistence key; this state never crosses the DSH or sidecar boundary. */\nexport const WORKTREE_SESSION_ORDER_STORAGE_KEY = 'clutch-dsh-worktree.session-order';\nfunction emptyState() {\n return { accounts: {} };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isValidTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction normalizeIds(value) {\n if (!Array.isArray(value))\n return [];\n const seen = new Set();\n const ids = [];\n for (const id of value) {\n if (typeof id !== 'string' || id.length === 0 || seen.has(id))\n continue;\n seen.add(id);\n ids.push(id);\n }\n return ids;\n}\nfunction normalizeAccount(value) {\n if (!isRecord(value))\n return undefined;\n const order = normalizeIds(value.order);\n const allowed = new Set(order);\n const observedUpdatedAt = {};\n if (isRecord(value.observedUpdatedAt)) {\n for (const [id, timestamp] of Object.entries(value.observedUpdatedAt)) {\n if (allowed.has(id) && isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n }\n return { order, observedUpdatedAt };\n}\n/** Normalize persisted state without trusting any browser-local JSON shape. */\nexport function normalizeWorktreeSessionOrderState(value) {\n if (!isRecord(value) || !isRecord(value.accounts))\n return emptyState();\n const accounts = {};\n for (const [accountKey, account] of Object.entries(value.accounts)) {\n if (accountKey.length === 0)\n continue;\n const normalized = normalizeAccount(account);\n if (normalized !== undefined)\n accounts[accountKey] = normalized;\n }\n return { accounts };\n}\nfunction validIds(ids) {\n return normalizeIds([...ids]);\n}\nfunction sameRecord(left, right) {\n if (left === undefined)\n return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length)\n return false;\n return rightKeys.every((key) => left[key] === right[key]);\n}\nfunction sameAccount(left, right) {\n return (left !== undefined &&\n left.order.length === right.order.length &&\n left.order.every((id, index) => id === right.order[index]) &&\n sameRecord(left.observedUpdatedAt, right.observedUpdatedAt));\n}\nfunction orderByUpdatedAt(ids, updatedAtById) {\n return ids\n .map((id, index) => ({ id, index, timestamp: updatedAtById[id] }))\n .sort((left, right) => {\n const leftValid = isValidTimestamp(left.timestamp);\n const rightValid = isValidTimestamp(right.timestamp);\n if (leftValid && rightValid) {\n const difference = Number(right.timestamp) - Number(left.timestamp);\n if (difference !== 0)\n return difference;\n }\n if (leftValid !== rightValid)\n return leftValid ? -1 : 1;\n return left.index - right.index;\n })\n .map(({ id }) => id);\n}\n/** Native-style activity order transition driven by the latest Session timestamp. */\nexport function nextSessionOrderAccount(input) {\n const baseIds = validIds(input.baseIds);\n const previous = input.previous;\n if (previous === undefined) {\n const observedUpdatedAt = {};\n for (const id of baseIds) {\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n return { order: orderByUpdatedAt(baseIds, input.updatedAtById), observedUpdatedAt };\n }\n const available = new Set(baseIds);\n const order = [];\n const seen = new Set();\n for (const id of previous.order) {\n if (available.has(id) && !seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n for (const id of baseIds) {\n if (!seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n const observedUpdatedAt = {};\n const previousIds = new Set(previous.order);\n const newlyObserved = [];\n const promoted = [];\n for (const [index, id] of order.entries()) {\n if (!previousIds.has(id))\n newlyObserved.push(id);\n const previousTimestamp = previous.observedUpdatedAt[id];\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(previousTimestamp))\n observedUpdatedAt[id] = previousTimestamp;\n if (isValidTimestamp(timestamp)) {\n if (!isValidTimestamp(previousTimestamp) || timestamp > previousTimestamp) {\n if (isValidTimestamp(previousTimestamp)) {\n promoted.push({ id, timestamp, index });\n }\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const orderedNewlyObserved = orderByUpdatedAt(newlyObserved, input.updatedAtById);\n promoted.sort((left, right) => right.timestamp - left.timestamp || left.index - right.index);\n const promotedIds = new Set([\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ]);\n return {\n order: [\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ...order.filter((id) => !promotedIds.has(id)),\n ],\n observedUpdatedAt,\n };\n}\n/** Apply a successful manual drag without dropping IDs hidden by search. */\nexport function reorderSessionIds(order, sessionId, overSessionId, half) {\n const next = order.filter((id) => id !== sessionId);\n const targetIndex = next.indexOf(overSessionId);\n if (targetIndex === -1)\n return [...order];\n next.splice(half === 'before' ? targetIndex : targetIndex + 1, 0, sessionId);\n return next;\n}\nfunction cloneAccount(account) {\n return {\n order: [...account.order],\n observedUpdatedAt: { ...account.observedUpdatedAt },\n };\n}\n/** Create one apply-scoped, browser-local Session ordering store. */\nexport function createWorktreeSessionOrderStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_SESSION_ORDER_STORAGE_KEY },\n });\n }\n catch {\n store = snapshotStoreFactory(emptyState());\n }\n store.set(normalizeWorktreeSessionOrderState(store.getSnapshot()));\n let disposed = false;\n const actions = {\n reconcile: (accountKey, baseIds, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const next = nextSessionOrderAccount({\n baseIds,\n updatedAtById,\n previous: draft.accounts[accountKey],\n });\n if (sameAccount(draft.accounts[accountKey], next))\n return;\n draft.accounts[accountKey] = cloneAccount(next);\n });\n },\n setOrder: (accountKey, order, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const current = draft.accounts[accountKey] ?? {\n order: [],\n observedUpdatedAt: {},\n };\n const observedUpdatedAt = { ...current.observedUpdatedAt };\n if (updatedAtById !== undefined) {\n for (const [id, timestamp] of Object.entries(updatedAtById)) {\n if (isValidTimestamp(timestamp)) {\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const next = {\n order: validIds(order),\n observedUpdatedAt,\n };\n if (sameAccount(current, next))\n return;\n draft.accounts[accountKey] = next;\n });\n },\n retain: (accountKeys) => {\n if (disposed)\n return;\n const allowed = new Set(accountKeys);\n if (allowed.size === 0)\n return;\n store.update((draft) => {\n for (const accountKey of Object.keys(draft.accounts)) {\n if (!allowed.has(accountKey))\n delete draft.accounts[accountKey];\n }\n });\n },\n };\n return Object.assign(store, {\n actions,\n dispose: () => {\n disposed = true;\n },\n });\n}\n//# sourceMappingURL=worktree-session-order.js.map","import { useRef, useState } from 'react';\nimport { reorderSessionIds } from '../../session/worktree-session-order.js';\nimport { resolveWorktreeMove, toRetryableWorktreeOrderError, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { updatedAtById } from '../shared.js';\n/**\n * Persist one visual Session move without crossing the Worktree membership boundary.\n * Worktree Sessions are plugin-local projections, while Main Sessions remain native DSH members.\n */\nexport async function commitSessionOrder(input) {\n if (input.groupKey.startsWith('worktree:')) {\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n return;\n }\n if (input.insertSessionBefore === undefined) {\n throw new Error('Native Session ordering is unavailable');\n }\n await input.insertSessionBefore(input.workspaceId, input.sessionId, input.beforeSessionId);\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n}\n/** Resolve a visual drop against the full account order, retaining filtered IDs. */\nexport function resolveSessionDragOrder(input) {\n const targetIndex = input.visibleSessionIds.indexOf(input.over.sessionId);\n const sourceIndex = input.visibleSessionIds.indexOf(input.sessionId);\n if (targetIndex === -1 || sourceIndex === -1)\n return undefined;\n const currentOrder = [...input.currentOrder];\n const knownIds = new Set(currentOrder);\n for (const id of input.visibleSessionIds) {\n if (!knownIds.has(id)) {\n knownIds.add(id);\n currentOrder.push(id);\n }\n }\n const nextOrder = reorderSessionIds(currentOrder, input.sessionId, input.over.sessionId, input.over.half);\n if (nextOrder.length === currentOrder.length &&\n nextOrder.every((id, index) => id === currentOrder[index])) {\n return undefined;\n }\n const nextIndex = nextOrder.indexOf(input.sessionId);\n if (nextIndex === -1)\n return undefined;\n return {\n beforeSessionId: nextOrder[nextIndex + 1],\n nextOrder,\n };\n}\nexport function useDragActions({ source, orderedSessionIdsByAccount, props, mutation, read, }) {\n const { workspaces, sessionOrderSnapshot } = source;\n const { insertWorkspaceBefore, insertSessionBefore, sessionOrder, insertWorktreeBefore } = props;\n const { setActionError } = mutation;\n const { refresh } = read;\n const [workspaceDrag, setWorkspaceDrag] = useState();\n const workspaceDropCommitted = useRef(false);\n const [sessionDrag, setSessionDrag] = useState();\n const sessionDropCommitted = useRef(false);\n const [worktreeDrag, setWorktreeDrag] = useState();\n const worktreeDropCommitted = useRef(false);\n const commitWorkspaceDrag = (activeDrag, over) => {\n if (workspaceDropCommitted.current)\n return;\n workspaceDropCommitted.current = true;\n setWorkspaceDrag(undefined);\n const rows = workspaces.items;\n const targetIndex = rows.findIndex((workspace) => workspace.workspaceId === over.workspaceId);\n const sourceIndex = rows.findIndex((workspace) => workspace.workspaceId === activeDrag.workspaceId);\n if (targetIndex === -1 || sourceIndex === -1)\n return;\n const beforeWorkspaceId = over.half === 'before' ? over.workspaceId : rows[targetIndex + 1]?.workspaceId;\n const anchorIndex = beforeWorkspaceId === undefined\n ? rows.length\n : rows.findIndex((workspace) => workspace.workspaceId === beforeWorkspaceId);\n if (beforeWorkspaceId === activeDrag.workspaceId ||\n anchorIndex === sourceIndex ||\n anchorIndex === sourceIndex + 1) {\n return;\n }\n if (insertWorkspaceBefore === undefined) {\n setActionError({\n code: 'WORKSPACE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorkspaceBefore(activeDrag.workspaceId, beforeWorkspaceId).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitSessionDrag = (activeDrag, over, sessionIds, workspaceId) => {\n if (sessionDropCommitted.current)\n return;\n sessionDropCommitted.current = true;\n setSessionDrag(undefined);\n const currentOrder = orderedSessionIdsByAccount.get(activeDrag.groupKey) ??\n sessionOrderSnapshot.accounts[activeDrag.groupKey]?.order ??\n sessionIds;\n const move = resolveSessionDragOrder({\n visibleSessionIds: sessionIds,\n currentOrder,\n sessionId: activeDrag.sessionId,\n over,\n });\n if (move === undefined)\n return;\n const isWorktreeSession = activeDrag.groupKey.startsWith('worktree:');\n if (!isWorktreeSession && insertSessionBefore === undefined) {\n setActionError({\n code: 'SESSION_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void commitSessionOrder({\n groupKey: activeDrag.groupKey,\n workspaceId,\n sessionId: activeDrag.sessionId,\n beforeSessionId: move.beforeSessionId,\n nextOrder: move.nextOrder,\n insertSessionBefore,\n setOrder: sessionOrder.actions.setOrder,\n updatedAtById: updatedAtById(sessionIds, source.sessions),\n }).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitWorktreeDrag = (activeDrag, over, worktreeIds, workspaceId) => {\n if (worktreeDropCommitted.current)\n return;\n worktreeDropCommitted.current = true;\n setWorktreeDrag(undefined);\n if (activeDrag.workspaceId !== workspaceId)\n return;\n const move = resolveWorktreeMove(worktreeIds, activeDrag.worktreeId, over.worktreeId, over.half);\n if (move === undefined)\n return;\n if (insertWorktreeBefore === undefined) {\n setActionError({\n code: 'WORKTREE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorktreeBefore(workspaceId, activeDrag.worktreeId, move.beforeWorktreeId)\n .then(() => refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n invalidateContext: false,\n }))\n .catch((error) => {\n setActionError(toRetryableWorktreeOrderError(error));\n });\n };\n return {\n workspaceDrag,\n setWorkspaceDrag,\n workspaceDropCommitted,\n sessionDrag,\n setSessionDrag,\n sessionDropCommitted,\n worktreeDrag,\n setWorktreeDrag,\n worktreeDropCommitted,\n commitWorkspaceDrag,\n commitSessionDrag,\n commitWorktreeDrag,\n };\n}\n//# sourceMappingURL=useDragActions.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { mergeWorktreeView, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nexport function useLifecycleActions({ read, lifecycleState, source, props, mutation }) {\n const { viewByWorkspace, readStateRef, refresh, setReadState } = read;\n const { worktreeCleanDisk, worktreeForget, permissionRetryPending, cleanupGuard, setWorktreeBranchAdoption, worktreeBranchAdoption, branchAdoptionGuard, } = lifecycleState;\n const { mode, permissionNoticeSnapshot, workspaceIdsRef } = source;\n const { permission, permissionNotice, onPermissionNotice, manager, t, viewReader } = props;\n const { actionPending, setActionPending, runMutation, setActionError } = mutation;\n const latestLifecycleTarget = (target) => target === undefined\n ? undefined\n : viewByWorkspace\n .get(target.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === target.worktreeId);\n const cleanDiskTarget = latestLifecycleTarget(worktreeCleanDisk);\n const forgetTarget = latestLifecycleTarget(worktreeForget);\n const permissionRetryTarget = mode === 'worktree' &&\n permissionNoticeSnapshot?.result.retryable === true &&\n permission?.normalizeDetachedWorktreePermissions !== undefined\n ? viewByWorkspace\n .get(permissionNoticeSnapshot.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === permissionNoticeSnapshot.worktreeId &&\n record.diskCleanup === 'completed')\n : undefined;\n const retryCleanupPermissions = async () => {\n if (!permissionRetryTarget || !permission || actionPending || permissionRetryPending.current)\n return;\n const target = {\n workspaceId: permissionRetryTarget.workspaceId,\n worktreeId: permissionRetryTarget.worktreeId,\n };\n const notice = permissionNoticeSnapshot;\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n permissionNotice?.getSnapshot() === notice &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId && record.diskCleanup === 'completed'));\n if (!isCurrent())\n return;\n permissionRetryPending.current = true;\n setActionPending(true);\n try {\n const result = await permission.normalizeDetachedWorktreePermissions(target);\n if (isCurrent())\n onPermissionNotice?.(target, result);\n }\n catch {\n if (isCurrent())\n onPermissionNotice?.(target, { status: 'unverified', retryable: true });\n }\n finally {\n if (cleanupGuard.current.isCurrent(generation)) {\n permissionRetryPending.current = false;\n setActionPending(false);\n }\n }\n };\n const recoveryAction = (error) => {\n const workspaceId = error?.details?.workspaceId;\n if (!manager || error?.code !== 'WORKTREE_RECOVERY_REQUIRED' || typeof workspaceId !== 'string')\n return null;\n return (_jsx(\"button\", { type: \"button\", className: styles.retryButton, disabled: actionPending, onClick: () => {\n void runMutation(() => manager.recoverWorktrees({ workspaceId }), {\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n });\n }, children: t('worktree.retryRecovery') }));\n };\n const branchActions = (record) => ({\n onAdoptBranch: record.health === 'branch-drift' && typeof record.currentBranch === 'string'\n ? () => {\n setWorktreeBranchAdoption(record);\n setActionError(undefined);\n }\n : undefined,\n onRecover: record.health === 'recovery-needed'\n ? () => {\n if (!manager)\n return;\n void runMutation(() => manager.recoverWorktrees({ workspaceId: record.workspaceId }), {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n }\n : undefined,\n });\n const refreshBranchAdoption = async () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target)\n return;\n const generation = branchAdoptionGuard.current.begin();\n const isCurrent = () => branchAdoptionGuard.current.isCurrent(generation);\n setActionPending(true);\n try {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n if (!isCurrent())\n return;\n const view = await viewReader.read(target.workspaceId);\n if (!isCurrent())\n return;\n if (!workspaceIdsRef.current.includes(target.workspaceId)) {\n setWorktreeBranchAdoption(undefined);\n setActionError(undefined);\n return;\n }\n const latest = view.worktrees.find((record) => record.worktreeId === target.worktreeId);\n setReadState((current) => ({ ...current, views: mergeWorktreeView(current.views, view) }));\n setWorktreeBranchAdoption(latest?.health === 'branch-drift' && typeof latest.currentBranch === 'string'\n ? latest\n : undefined);\n setActionError(undefined);\n }\n catch (error) {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n }\n finally {\n if (isCurrent())\n setActionPending(false);\n }\n };\n const branchLabel = (record) => record.health === 'branch-drift'\n ? `${record.branch} → ${record.currentBranch ?? t('worktree.detachedHead')}`\n : record.branch;\n return {\n latestLifecycleTarget,\n cleanDiskTarget,\n forgetTarget,\n permissionRetryTarget,\n retryCleanupPermissions,\n recoveryAction,\n branchActions,\n refreshBranchAdoption,\n branchLabel,\n };\n}\n//# sourceMappingURL=useLifecycleActions.js.map","import { useEffect, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard } from '../../view/worktree-view.js';\nexport function useLifecycleState({ props, source, mutation }) {\n const { manager } = props;\n const { mode } = source;\n const { setActionPending } = mutation;\n const [worktreeBranchAdoption, setWorktreeBranchAdoption] = useState();\n const [worktreeRemoval, setWorktreeRemoval] = useState();\n const [worktreeCleanDisk, setWorktreeCleanDisk] = useState();\n const [worktreeForget, setWorktreeForget] = useState();\n const cleanupGuard = useRef(createWorktreeRefreshGuard());\n const branchAdoptionGuard = useRef(createWorktreeRefreshGuard());\n useEffect(() => {\n const guard = branchAdoptionGuard.current;\n setWorktreeBranchAdoption(undefined);\n return () => guard.invalidate();\n }, [manager, mode]);\n const permissionRetryPending = useRef(false);\n useEffect(() => {\n const guard = cleanupGuard.current;\n permissionRetryPending.current = false;\n setActionPending(false);\n return () => guard.invalidate();\n }, [manager, mode]);\n return {\n worktreeBranchAdoption,\n setWorktreeBranchAdoption,\n worktreeRemoval,\n setWorktreeRemoval,\n worktreeCleanDisk,\n setWorktreeCleanDisk,\n worktreeForget,\n setWorktreeForget,\n cleanupGuard,\n branchAdoptionGuard,\n permissionRetryPending,\n };\n}\n//# sourceMappingURL=useLifecycleState.js.map","import { useState } from 'react';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useNativeActions({ source, props, mutation }) {\n const { workspaces } = source;\n const { renameWorkspace, deleteWorkspace, renameSession, archiveSession } = props;\n const { runMutation } = mutation;\n const [sessionRenameTarget, setSessionRenameTarget] = useState();\n const [sessionRenameDraft, setSessionRenameDraft] = useState('');\n const [sessionRenamePending, setSessionRenamePending] = useState(false);\n const [sessionRenameError, setSessionRenameError] = useState();\n const [workspaceRenameTarget, setWorkspaceRenameTarget] = useState();\n const [workspaceRenameDraft, setWorkspaceRenameDraft] = useState('');\n const [workspaceRenamePending, setWorkspaceRenamePending] = useState(false);\n const [workspaceRenameError, setWorkspaceRenameError] = useState();\n const [workspaceDeleteTarget, setWorkspaceDeleteTarget] = useState();\n const [workspaceDeletePending, setWorkspaceDeletePending] = useState(false);\n const [workspaceDeleteError, setWorkspaceDeleteError] = useState();\n const workspaceRenameTrimmed = workspaceRenameDraft.trim();\n const workspaceRenameDuplicate = workspaceRenameTarget !== undefined &&\n workspaceRenameTrimmed.length > 0 &&\n workspaces.items.some((workspace) => workspace.workspaceId !== workspaceRenameTarget.workspaceId &&\n workspace.title === workspaceRenameTrimmed);\n const workspaceRenameBlocked = workspaceRenamePending ||\n workspaceRenameTarget === undefined ||\n workspaceRenameTrimmed.length === 0 ||\n workspaceRenameTrimmed === workspaceRenameTarget?.currentTitle ||\n workspaceRenameDuplicate;\n const openWorkspaceRename = (workspace) => {\n setWorkspaceRenameTarget({\n workspaceId: workspace.workspaceId,\n currentTitle: workspace.title,\n });\n setWorkspaceRenameDraft(workspace.title);\n setWorkspaceRenameError(undefined);\n };\n const closeWorkspaceRename = () => {\n if (workspaceRenamePending)\n return;\n setWorkspaceRenameTarget(undefined);\n setWorkspaceRenameError(undefined);\n };\n const confirmWorkspaceRename = async () => {\n const target = workspaceRenameTarget;\n if (workspaceRenameBlocked || target === undefined)\n return;\n if (renameWorkspace === undefined) {\n setWorkspaceRenameError({\n code: 'WORKSPACE_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceRenamePending(true);\n setWorkspaceRenameError(undefined);\n try {\n await renameWorkspace(target.workspaceId, workspaceRenameTrimmed);\n setWorkspaceRenameTarget(undefined);\n }\n catch (error) {\n setWorkspaceRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceRenamePending(false);\n }\n };\n const openWorkspaceDelete = (workspace) => {\n setWorkspaceDeleteTarget({ workspaceId: workspace.workspaceId, title: workspace.title });\n setWorkspaceDeleteError(undefined);\n };\n const closeWorkspaceDelete = () => {\n if (workspaceDeletePending)\n return;\n setWorkspaceDeleteTarget(undefined);\n setWorkspaceDeleteError(undefined);\n };\n const confirmWorkspaceDelete = async () => {\n const target = workspaceDeleteTarget;\n if (target === undefined || workspaceDeletePending)\n return;\n if (deleteWorkspace === undefined) {\n setWorkspaceDeleteError({\n code: 'WORKSPACE_DELETE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceDeletePending(true);\n setWorkspaceDeleteError(undefined);\n try {\n await deleteWorkspace(target.workspaceId);\n setWorkspaceDeleteTarget(undefined);\n }\n catch (error) {\n setWorkspaceDeleteError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceDeletePending(false);\n }\n };\n const openSessionRename = (sessionId, currentTitle) => {\n setSessionRenameTarget({ sessionId, currentTitle });\n setSessionRenameDraft(currentTitle);\n setSessionRenameError(undefined);\n };\n const closeSessionRename = () => {\n if (sessionRenamePending)\n return;\n setSessionRenameTarget(undefined);\n setSessionRenameError(undefined);\n };\n const confirmSessionRename = async () => {\n const target = sessionRenameTarget;\n const title = sessionRenameDraft.trim();\n if (target === undefined || title.length === 0 || sessionRenamePending)\n return;\n if (renameSession === undefined) {\n setSessionRenameError({\n code: 'SESSION_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setSessionRenamePending(true);\n setSessionRenameError(undefined);\n try {\n await renameSession(target.sessionId, title);\n setSessionRenameTarget(undefined);\n }\n catch (error) {\n setSessionRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setSessionRenamePending(false);\n }\n };\n const archiveWorktreeSession = async (sessionId) => {\n if (archiveSession === undefined)\n return;\n await runMutation(() => archiveSession(sessionId));\n };\n return {\n sessionRenameTarget,\n setSessionRenameTarget,\n sessionRenameDraft,\n setSessionRenameDraft,\n sessionRenamePending,\n setSessionRenamePending,\n sessionRenameError,\n setSessionRenameError,\n workspaceRenameTarget,\n setWorkspaceRenameTarget,\n workspaceRenameDraft,\n setWorkspaceRenameDraft,\n workspaceRenamePending,\n setWorkspaceRenamePending,\n workspaceRenameError,\n setWorkspaceRenameError,\n workspaceDeleteTarget,\n setWorkspaceDeleteTarget,\n workspaceDeletePending,\n setWorkspaceDeletePending,\n workspaceDeleteError,\n setWorkspaceDeleteError,\n workspaceRenameTrimmed,\n workspaceRenameDuplicate,\n workspaceRenameBlocked,\n openWorkspaceRename,\n closeWorkspaceRename,\n confirmWorkspaceRename,\n openWorkspaceDelete,\n closeWorkspaceDelete,\n confirmWorkspaceDelete,\n openSessionRename,\n closeSessionRename,\n confirmSessionRename,\n archiveWorktreeSession,\n };\n}\n//# sourceMappingURL=useNativeActions.js.map","import { useRef, useState } from 'react';\nimport { createWorktreeModalViewLoader, createWorktreeRefreshGuard, } from '../../view/worktree-view.js';\nexport function useRegistrationState({ props }) {\n const { viewReader } = props;\n const [worktreeModalWorkspaceId, setWorktreeModalWorkspaceId] = useState();\n const [modalReadError, setModalReadError] = useState();\n const [modalReadLoading, setModalReadLoading] = useState(false);\n const [worktreeModalMode, setWorktreeModalMode] = useState('create');\n const [importCandidates, setImportCandidates] = useState({\n status: 'idle',\n candidates: [],\n });\n const [selectedImportPath, setSelectedImportPath] = useState();\n const [selectedBranch, setSelectedBranch] = useState('');\n const [newBranch, setNewBranch] = useState('');\n const modalReadLoader = useRef(createWorktreeModalViewLoader(viewReader));\n const modalReadViewRef = useRef();\n const importCandidatesGuard = useRef(createWorktreeRefreshGuard());\n const modalWorkspaceIdRef = useRef(worktreeModalWorkspaceId);\n modalWorkspaceIdRef.current = worktreeModalWorkspaceId;\n return {\n worktreeModalWorkspaceId,\n setWorktreeModalWorkspaceId,\n modalReadError,\n setModalReadError,\n modalReadLoading,\n setModalReadLoading,\n worktreeModalMode,\n setWorktreeModalMode,\n importCandidates,\n setImportCandidates,\n selectedImportPath,\n setSelectedImportPath,\n selectedBranch,\n setSelectedBranch,\n newBranch,\n setNewBranch,\n modalReadLoader,\n modalReadViewRef,\n importCandidatesGuard,\n modalWorkspaceIdRef,\n };\n}\n//# sourceMappingURL=useRegistrationState.js.map","/**\n * Browser-safe Windows path identity helpers. They intentionally do not touch\n * the filesystem; Provider adds physical stat/realpath checks where it has\n * access to Node APIs.\n */\nconst EXTENDED_PATH_PREFIX = '//?/';\nconst EXTENDED_UNC_PREFIX = '//?/UNC/';\nexport function isWindowsPath(value) {\n return /^[A-Za-z]:[\\\\/]/u.test(value) ||\n value.startsWith('\\\\\\\\') ||\n /^\\/\\/\\?(?:\\/|\\\\)/u.test(value);\n}\n/** Strip only the extended drive/UNC prefixes supported by the browser boundary. */\nexport function stripExtendedWindowsPrefix(value) {\n const normalized = value.replaceAll('\\\\', '/');\n const normalizedUncPrefix = EXTENDED_UNC_PREFIX.toLowerCase();\n if (normalized.toLowerCase().startsWith(normalizedUncPrefix)) {\n return '//' + normalized.slice(EXTENDED_UNC_PREFIX.length);\n }\n if (normalized.startsWith(EXTENDED_PATH_PREFIX)) {\n const drivePath = normalized.slice(EXTENDED_PATH_PREFIX.length);\n if (/^[A-Za-z]:\\//u.test(drivePath))\n return drivePath;\n }\n return value;\n}\nexport function normalizeWindowsPath(value) {\n let normalized = stripExtendedWindowsPrefix(value).replaceAll('\\\\', '/');\n const unc = normalized.startsWith('//');\n normalized = normalized.replace(/\\/{2,}/gu, '/');\n if (unc && normalized.startsWith('/'))\n normalized = '/' + normalized;\n if (normalized.length > 3)\n normalized = normalized.replace(/\\/+$/u, '');\n return normalized.toLowerCase();\n}\nexport function sameWindowsPath(left, right) {\n return (isWindowsPath(left) || isWindowsPath(right)) &&\n normalizeWindowsPath(left) === normalizeWindowsPath(right);\n}\n//# sourceMappingURL=windows-path.js.map","import { sameWindowsPath } from '../../contract/windows-path.js';\nimport { createSessionForWorktree, WorktreeSessionBindingError, } from '../view/worktree-view.js';\nimport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport class WorktreeSessionActionError extends Error {\n code;\n retryable;\n details;\n constructor(code, message, retryable, details = {}) {\n super(message);\n this.code = code;\n this.retryable = retryable;\n this.name = 'WorktreeSessionActionError';\n this.details = details;\n }\n}\n/**\n * Keep the confirmation and second permission call in one place for new,\n * reused, and retried Sessions. The Host still validates the relation.\n */\nexport async function ensureWorktreeSessionPermission(input) {\n if (input.permission === undefined)\n return;\n const request = {\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n binding: 'active',\n };\n let result;\n try {\n result = await input.permission.ensureWorktreePermission(request);\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (result.status === 'confirmation-required') {\n let confirmed;\n try {\n confirmed = input.confirmFullAccess === undefined\n ? false\n : await input.confirmFullAccess({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (!confirmed) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n try {\n result = await input.permission.ensureWorktreePermission({ ...request, confirmed: true });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n }\n if (result.status === 'confirmation-required') {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n input.onPermissionResult?.({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n }, result);\n}\n/**\n * Compare paths for browser-side candidate filtering and the no-Host safety fallback.\n * When Host validation is available, it remains authoritative for physical aliases.\n */\nfunction sameWorktreePath(left, right) {\n return left === right || sameWindowsPath(left, right);\n}\nexport function resolveWorktreeSessionAction(input) {\n if (input.target.status !== 'active' ||\n input.target.health === 'repair' ||\n input.target.health === 'recovery-needed') {\n return { kind: 'reject', reason: 'worktree-not-available' };\n }\n if (input.sessions.phase !== 'ready') {\n return { kind: 'wait', reason: 'sessions-not-ready' };\n }\n const targetBinding = input.bindings.find((binding) => binding.worktreeId === input.target.worktreeId && binding.status === 'active');\n if (targetBinding !== undefined) {\n const summary = input.sessions.byId[targetBinding.sessionId];\n if (summary === undefined) {\n return {\n kind: 'repair',\n reason: 'active-binding-session-missing',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.cwd === undefined ||\n (!input.hostValidatesPhysicalPath && !sameWorktreePath(summary.cwd, input.target.absolutePath))) {\n return {\n kind: 'repair',\n reason: 'active-binding-cwd-mismatch',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.blank === true &&\n !input.archivedSessionIds.includes(targetBinding.sessionId)) {\n return { kind: 'open-bound', sessionId: targetBinding.sessionId };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary === undefined ||\n summary.blank === undefined ||\n (summary.blank === true && summary.cwd === undefined)) {\n return { kind: 'wait', reason: 'session-facts-incomplete' };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary?.blank !== true ||\n summary.cwd === undefined ||\n !sameWorktreePath(summary.cwd, input.target.absolutePath) ||\n input.archivedSessionIds.includes(sessionId)) {\n continue;\n }\n if (!input.bindings.some((binding) => binding.sessionId === sessionId)) {\n return { kind: 'bind-existing', sessionId };\n }\n }\n return { kind: 'create' };\n}\nfunction actionError(action) {\n switch (action.kind) {\n case 'wait':\n return new WorktreeSessionActionError(action.reason === 'sessions-not-ready' ? 'SESSION_LIST_NOT_READY' : 'SESSION_FACTS_INCOMPLETE', '', true);\n case 'repair':\n return new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', action.reason, true, {\n ...(action.sessionId === undefined ? {} : { sessionId: action.sessionId }),\n });\n case 'reject':\n return new WorktreeSessionActionError('WORKTREE_SESSION_UNAVAILABLE', action.reason, false);\n default:\n return new WorktreeSessionActionError('WORKTREE_SESSION_ACTION_FAILED', '', true);\n }\n}\nexport async function retryWorktreeSessionBinding(input) {\n if (input.archived) {\n throw new WorktreeSessionActionError('SESSION_ARCHIVED', '', false, {\n sessionId: input.pending.sessionId,\n });\n }\n try {\n await input.manager.bindSession({\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n sessionId: input.pending.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(input.pending.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: input.permission,\n confirmFullAccess: input.confirmFullAccess,\n onPermissionResult: input.onPermissionResult,\n sessionId: input.pending.sessionId,\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n cwd: input.pending.cwd,\n createdSession: true,\n });\n input.ensureSessionWorkspace(input.pending.workspaceId, input.pending.sessionId);\n input.openSession(input.pending.sessionId);\n return input.pending.sessionId;\n}\n/**\n * Browser-only Worktree `+` connector. It owns the read/resolve/bind/create/open\n * sequence and coalesces repeated calls for one Worktree within one Client fiber.\n */\nexport function createWorktreeSessionConnector(options) {\n const inFlight = new Map();\n let disposed = false;\n const run = async (input) => {\n const [worktrees, bindings] = await Promise.all([\n options.manager.listWorktrees({ workspaceId: input.workspaceId }),\n options.manager.listBindings({ workspaceId: input.workspaceId }),\n ]);\n if (disposed) {\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n }\n const target = worktrees.find((record) => record.worktreeId === input.worktreeId);\n if (target === undefined ||\n (options.permission === undefined && !sameWorktreePath(target.absolutePath, input.cwd))) {\n throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'worktree target unavailable', true);\n }\n const action = resolveWorktreeSessionAction({\n target,\n sessions: options.sessions.getSnapshot(),\n archivedSessionIds: options.archivedSessionIds(),\n bindings,\n hostValidatesPhysicalPath: options.permission !== undefined,\n });\n if (action.kind === 'open-bound') {\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n return action.sessionId;\n }\n if (action.kind === 'bind-existing') {\n try {\n await options.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: action.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(action.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n if (!disposed) {\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n }\n return action.sessionId;\n }\n if (action.kind !== 'create')\n throw actionError(action);\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n return createSessionForWorktree({\n ...input,\n createSession: options.createSession,\n manager: options.manager,\n beforeOpen: async (sessionId) => {\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: true,\n });\n },\n openSession: (sessionId) => {\n if (!disposed)\n options.openSession(sessionId);\n },\n });\n };\n return {\n create(input) {\n const key = `${input.workspaceId}\\u0000${input.worktreeId}`;\n const current = inFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = run(input).finally(() => {\n if (inFlight.get(key) === promise)\n inFlight.delete(key);\n });\n inFlight.set(key, promise);\n return promise;\n },\n dispose() {\n disposed = true;\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session.js.map","import { useState } from 'react';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { retryWorktreeSessionBinding } from '../../session/worktree-session.js';\nimport { toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useSessionActions({ source, props, mutation, read }) {\n const { archivedSessionIds } = source;\n const { createSessionForWorktree: createSessionCallback, manager, ensureSessionWorkspace, permission, confirmFullAccess, onPermissionResult, openSession, retryForkSession, } = props;\n const { setActionError, setActionPending } = mutation;\n const { refresh } = read;\n const [pendingSessionBinding, setPendingSessionBinding] = useState();\n const [forkRetryKey, setForkRetryKey] = useState();\n const pendingSessionArchived = pendingSessionBinding !== undefined &&\n archivedSessionIds.includes(pendingSessionBinding.sessionId);\n const createSession = async (input) => {\n if (createSessionCallback === undefined) {\n setActionError({\n code: 'SESSION_CREATE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n await createSessionCallback(input);\n await refresh({\n scope: { kind: 'workspace', workspaceId: input.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && error.retryable) {\n setPendingSessionBinding({ ...input, sessionId: error.sessionId });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...input,\n sessionId: error.sessionId,\n permissionRequired: true,\n });\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retrySessionBinding = async () => {\n if (manager === undefined || pendingSessionBinding === undefined || pendingSessionArchived)\n return;\n const pending = pendingSessionBinding;\n setActionPending(true);\n setActionError(undefined);\n try {\n await retryWorktreeSessionBinding({\n manager,\n pending,\n archived: false,\n ensureSessionWorkspace: (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n },\n permission,\n confirmFullAccess,\n onPermissionResult,\n openSession,\n });\n setPendingSessionBinding(undefined);\n await refresh({\n scope: { kind: 'workspace', workspaceId: pending.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && !error.retryable) {\n setPendingSessionBinding(undefined);\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retryForkBinding = async (key) => {\n if (retryForkSession === undefined || forkRetryKey !== undefined)\n return;\n setForkRetryKey(key);\n try {\n await retryForkSession(key);\n }\n catch (error) {\n setActionError(toNativeWorktreeViewError(error));\n }\n finally {\n setForkRetryKey(undefined);\n }\n };\n const openWorkspaceSession = (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n openWorktreeSession({ open: openSession }, sessionId);\n };\n return {\n pendingSessionBinding,\n setPendingSessionBinding,\n forkRetryKey,\n setForkRetryKey,\n pendingSessionArchived,\n createSession,\n retrySessionBinding,\n retryForkBinding,\n openWorkspaceSession,\n };\n}\n//# sourceMappingURL=useSessionActions.js.map","/** Keep one current Session row in the Worktree content scrollport. */\nexport function scrollCurrentSessionIntoView(root, sessionId) {\n if (root === null)\n return false;\n const row = Array.from(root.querySelectorAll('[data-session-id]')).find((candidate) => candidate.dataset.sessionId === sessionId);\n if (row === undefined)\n return false;\n const rootRect = root.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n if (rowRect.top < rootRect.top) {\n root.scrollTop -= rootRect.top - rowRect.top;\n }\n else if (rowRect.bottom > rootRect.bottom) {\n root.scrollTop += rowRect.bottom - rootRect.bottom;\n }\n return true;\n}\n//# sourceMappingURL=worktree-session-position.js.map","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { isMainExpanded, isWorkspaceExpanded, isWorktreeExpanded, } from '../../view/worktree-expand-state.js';\nimport { scrollCurrentSessionIntoView } from '../../session/worktree-session-position.js';\nimport { clearSessionGroupExpansion, currentSessionRevealKeys, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, resolveCurrentSessionLocation, } from '../selectors.js';\nexport function useSessionExpansion({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { currentSessionId, workspaces, mode, expandSnapshot, workspaceIds } = source;\n const { expandState } = props;\n const [searchQuery, setSearchQuery] = useState('');\n const [searchExpanded, setSearchExpanded] = useState(false);\n const searchRoot = useRef(null);\n const searchInput = useRef(null);\n const contentRef = useRef(null);\n const [currentSessionReveal, setCurrentSessionReveal] = useState();\n const revealSessionIdRef = useRef(Symbol('initial'));\n const revealModeRef = useRef(Symbol('initial'));\n let activeReveal = currentSessionReveal;\n if (currentSessionId !== revealSessionIdRef.current || mode !== revealModeRef.current) {\n revealSessionIdRef.current = currentSessionId;\n revealModeRef.current = mode;\n activeReveal =\n currentSessionId === undefined || mode !== 'worktree'\n ? undefined\n : { sessionId: currentSessionId, suppressedKeys: {} };\n setCurrentSessionReveal(activeReveal);\n }\n const searchQueryRef = useRef(searchQuery);\n searchQueryRef.current = searchQuery;\n useEffect(() => {\n if (!searchExpanded)\n return;\n const onClick = (event) => {\n if (!(event.target instanceof Node) || searchRoot.current?.contains(event.target) === true)\n return;\n searchInput.current?.blur();\n if (searchQuery.trim() !== '')\n return;\n setSearchExpanded(false);\n };\n document.addEventListener('click', onClick);\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [searchExpanded, searchQuery]);\n useEffect(() => {\n if (searchExpanded) {\n searchInput.current?.focus({ preventScroll: true });\n }\n }, [searchExpanded]);\n const locateGenerationRef = useRef(0);\n const positionedLocateGenerationRef = useRef();\n const [expandedArchivedWorkspaces, setExpandedArchivedWorkspaces] = useState({});\n const [expandedSessionGroups, setExpandedSessionGroups] = useState({});\n const query = searchQuery.trim().toLocaleLowerCase();\n const currentSessionLocation = useMemo(() => readState.status === 'ready'\n ? resolveCurrentSessionLocation(currentSessionId, workspaces.items, readState.views)\n : undefined, [currentSessionId, readState.status, readState.views, workspaces.items]);\n const currentRevealKeys = useMemo(() => new Set(currentSessionRevealKeys(currentSessionLocation)), [currentSessionLocation]);\n const isCurrentSessionReveal = (key) => activeReveal !== undefined &&\n activeReveal.sessionId === currentSessionId &&\n currentRevealKeys.has(key) &&\n activeReveal.suppressedKeys[key] !== true;\n useLayoutEffect(() => {\n locateGenerationRef.current += 1;\n positionedLocateGenerationRef.current = undefined;\n if (mode !== 'worktree') {\n setSearchExpanded(false);\n return;\n }\n if (searchQueryRef.current.trim().length > 0) {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n }, [currentSessionId, mode]);\n useLayoutEffect(() => {\n if (mode !== 'worktree' ||\n currentSessionId === undefined ||\n currentSessionLocation === undefined) {\n return;\n }\n const generation = locateGenerationRef.current;\n if (positionedLocateGenerationRef.current === generation)\n return;\n let cancelled = false;\n const frame = requestAnimationFrame(() => {\n if (cancelled || generation !== locateGenerationRef.current)\n return;\n if (!scrollCurrentSessionIntoView(contentRef.current, currentSessionId))\n return;\n positionedLocateGenerationRef.current = generation;\n });\n return () => {\n cancelled = true;\n cancelAnimationFrame(frame);\n };\n }, [\n currentSessionId,\n currentSessionLocation,\n activeReveal,\n expandSnapshot,\n mode,\n query,\n readState.status,\n ]);\n useEffect(() => {\n // Pruning is destructive: require a confirmed Workspace list whose projections all\n // arrived. A pending or partial read means \"nothing arrived yet\", not \"nothing exists\".\n if (readState.status !== 'ready' ||\n isPendingListPhase(workspaces.phase) ||\n !isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views))\n return;\n expandState.actions.retain(workspaceIds, readState.views.flatMap((view) => view.worktrees.map((record) => record.worktreeId)));\n }, [expandState, readState.status, readState.views, workspaceIds, workspaces.phase]);\n const clearSessionGroups = (groupKeys) => {\n if (groupKeys.length === 0)\n return;\n setExpandedSessionGroups((current) => clearSessionGroupExpansion(current, groupKeys));\n };\n const suppressCurrentSessionReveal = (key) => {\n if (!isCurrentSessionReveal(key))\n return false;\n setCurrentSessionReveal((current) => {\n if (current === undefined || current.sessionId !== currentSessionId)\n return current;\n return {\n ...current,\n suppressedKeys: { ...current.suppressedKeys, [key]: true },\n };\n });\n return true;\n };\n const toggleWorkspace = (workspaceId) => {\n const persistedExpanded = isWorkspaceExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('workspace:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('workspace:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n return;\n }\n expandState.actions.toggleWorkspace(workspaceId);\n if (visuallyExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n }\n };\n const toggleMain = (workspaceId) => {\n const persistedExpanded = isMainExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('main:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('main:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['main:' + workspaceId]);\n return;\n }\n expandState.actions.toggleMain(workspaceId);\n if (visuallyExpanded)\n clearSessionGroups(['main:' + workspaceId]);\n };\n const toggleWorktree = (worktreeId) => {\n const persistedExpanded = isWorktreeExpanded(expandSnapshot, worktreeId);\n const autoExpanded = isCurrentSessionReveal('worktree:' + worktreeId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('worktree:' + worktreeId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['worktree:' + worktreeId]);\n return;\n }\n expandState.actions.toggleWorktree(worktreeId);\n if (visuallyExpanded)\n clearSessionGroups(['worktree:' + worktreeId]);\n };\n const toggleArchivedWorkspace = (workspaceId) => {\n const archivedKey = 'archived:' + workspaceId;\n const autoExpanded = isCurrentSessionReveal(archivedKey);\n const persistedExpanded = expandedArchivedWorkspaces[workspaceId] === true;\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal(archivedKey);\n }\n setExpandedArchivedWorkspaces((current) => ({\n ...current,\n [workspaceId]: !visuallyExpanded,\n }));\n };\n const toggleSessionGroup = (groupKey, autoExpanded) => {\n const transientExpanded = expandedSessionGroups[groupKey] === true;\n if (autoExpanded) {\n suppressCurrentSessionReveal('session-group:' + groupKey);\n setExpandedSessionGroups((current) => {\n const next = { ...current };\n delete next[groupKey];\n return next;\n });\n return;\n }\n setExpandedSessionGroups((current) => ({\n ...current,\n [groupKey]: !transientExpanded,\n }));\n };\n return {\n searchQuery,\n setSearchQuery,\n searchExpanded,\n setSearchExpanded,\n searchRoot,\n searchInput,\n contentRef,\n currentSessionReveal: activeReveal,\n setCurrentSessionReveal,\n searchQueryRef,\n locateGenerationRef,\n positionedLocateGenerationRef,\n expandedArchivedWorkspaces,\n setExpandedArchivedWorkspaces,\n expandedSessionGroups,\n setExpandedSessionGroups,\n query,\n currentSessionLocation,\n currentRevealKeys,\n isCurrentSessionReveal,\n clearSessionGroups,\n suppressCurrentSessionReveal,\n toggleWorkspace,\n toggleMain,\n toggleWorktree,\n toggleArchivedWorkspace,\n toggleSessionGroup,\n };\n}\n//# sourceMappingURL=useSessionExpansion.js.map","import { useEffect, useMemo } from 'react';\nimport { filterVisibleSessionIds } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { nextSessionOrderAccount, } from '../../session/worktree-session-order.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { bindingIdsFor, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, } from '../selectors.js';\nimport { updatedAtById } from '../shared.js';\nexport function useSessionOrdering({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { workspaces, sessions, archivedSessionIds, sessionOrderSnapshot, mode, workspaceIds } = source;\n const { sessionOrder } = props;\n // DSH lists report a monotone `pending` → `ready` arrival phase, and an empty list in\n // the pending phase means \"nothing arrived yet\" rather than \"nothing exists\". Deriving\n // accounts from that read would reset every stored order to no order at all.\n const sourcesReady = readState.status === 'ready' &&\n !isPendingListPhase(sessions.phase) &&\n !isPendingListPhase(workspaces.phase);\n // Reconciling may run as soon as one Workspace projection is ready, but deleting accounts\n // for Workspaces that no longer exist requires the complete, non-empty projection.\n const canRetainAccounts = sourcesReady && isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views);\n const sessionOrderInputs = useMemo(() => {\n if (!sourcesReady)\n return [];\n const inputs = [];\n for (const workspace of workspaces.items) {\n // Before this Workspace's projection lands, which Sessions belong to a Worktree is\n // unknown. Skipping it keeps the stored order instead of rebuilding it from a guess.\n const view = viewByWorkspace.get(workspace.workspaceId);\n if (view === undefined)\n continue;\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const bindings = view.bindings;\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n inputs.push({\n accountKey: `main:${workspace.workspaceId}`,\n sessionIds: mainSessionIds,\n updatedAtById: updatedAtById(mainSessionIds, sessions),\n });\n for (const record of view.worktrees) {\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n inputs.push({\n accountKey: `worktree:${record.worktreeId}`,\n sessionIds: worktreeSessionIds,\n updatedAtById: updatedAtById(worktreeSessionIds, sessions),\n });\n }\n }\n return inputs;\n }, [\n archivedSessionIds,\n sessions.byId,\n sessions.ids,\n sourcesReady,\n viewByWorkspace,\n workspaces,\n workspaces.items,\n ]);\n const orderedSessionIdsByAccount = useMemo(() => {\n const ordered = new Map();\n for (const input of sessionOrderInputs) {\n const previous = sessionOrderSnapshot.accounts[input.accountKey];\n ordered.set(input.accountKey, nextSessionOrderAccount({\n baseIds: input.sessionIds,\n updatedAtById: input.updatedAtById,\n previous,\n }).order);\n }\n return ordered;\n }, [sessionOrderInputs, sessionOrderSnapshot]);\n useEffect(() => {\n if (mode !== 'worktree' || sessionOrderInputs.length === 0)\n return;\n for (const input of sessionOrderInputs) {\n sessionOrder.actions.reconcile(input.accountKey, input.sessionIds, input.updatedAtById);\n }\n if (!canRetainAccounts)\n return;\n sessionOrder.actions.retain(sessionOrderInputs.map((input) => input.accountKey));\n }, [canRetainAccounts, mode, sessionOrder, sessionOrderInputs]);\n return { sessionOrderInputs, orderedSessionIdsByAccount };\n}\n//# sourceMappingURL=useSessionOrdering.js.map","import { useState } from 'react';\nexport function useSurfaceMenus() {\n const [openWorkspaceMenuId, setOpenWorkspaceMenuId] = useState();\n const [openMainMenuId, setOpenMainMenuId] = useState();\n const [openWorktreeMenuId, setOpenWorktreeMenuId] = useState();\n return {\n openWorkspaceMenuId,\n setOpenWorkspaceMenuId,\n openMainMenuId,\n setOpenMainMenuId,\n openWorktreeMenuId,\n setOpenWorktreeMenuId,\n };\n}\n//# sourceMappingURL=useSurfaceMenus.js.map","import { useState } from 'react';\nimport { toWorktreeViewError } from '../../view/worktree-view.js';\nexport function useSurfaceMutation({ read }) {\n const { refresh } = read;\n const [actionError, setActionError] = useState();\n const [actionPending, setActionPending] = useState(false);\n const runMutation = async (operation, refreshOptions) => {\n setActionPending(true);\n setActionError(undefined);\n try {\n await operation();\n if (refreshOptions !== undefined)\n await refresh(refreshOptions);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return { actionError, setActionError, actionPending, setActionPending, runMutation };\n}\n//# sourceMappingURL=useSurfaceMutation.js.map","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard, mergeWorktreeView, mergeWorktreeViews, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { worktreeActivityRefreshWorkspaceIds } from '../selectors.js';\nimport { EMPTY_READ_STATE } from '../shared.js';\nexport function useSurfaceRefresh({ source, props, registrationState }) {\n const { forkRecoverySnapshot, workspaceIdsRef, mode, workspaceIds, sessionPresentations } = source;\n const { manager, viewReader, invalidateWorktreeContext, syncSessionWorkspaces } = props;\n const { modalReadViewRef, setModalReadError, setModalReadLoading, modalReadLoader, setWorktreeModalWorkspaceId, } = registrationState;\n const [readState, setReadState] = useState(EMPTY_READ_STATE);\n const readStateRef = useRef(readState);\n readStateRef.current = readState;\n const refreshGuard = useRef(createWorktreeRefreshGuard());\n const targetRefreshGuards = useRef(new Map());\n const forkRecoveryRevisionRef = useRef(forkRecoverySnapshot.revision);\n const guardFor = (workspaceId) => {\n const current = targetRefreshGuards.current.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = createWorktreeRefreshGuard();\n targetRefreshGuards.current.set(workspaceId, created);\n return created;\n };\n const refresh = useCallback(async (options = {}) => {\n if (manager === undefined) {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n setReadState(EMPTY_READ_STATE);\n return;\n }\n const scope = options.scope ?? { kind: 'global' };\n const preserveCurrent = options.preserveCurrent === true;\n const currentWorkspaceIds = workspaceIdsRef.current;\n if (scope.kind === 'global') {\n if (!preserveCurrent) {\n setReadState({ status: 'loading', views: [] });\n }\n const selectedWorkspaceIds = [...currentWorkspaceIds];\n for (const workspaceId of selectedWorkspaceIds) {\n viewReader.invalidate(workspaceId);\n }\n const contextRefresh = options.invalidateContext === false ? undefined : invalidateWorktreeContext?.();\n await refreshGuard.current.run(async () => {\n const [views] = await Promise.all([\n viewReader.readMany(selectedWorkspaceIds),\n contextRefresh ?? Promise.resolve(),\n ]);\n return views;\n }, (views) => {\n setReadState((current) => {\n const merged = mergeWorktreeViews(current.views, workspaceIdsRef.current, views);\n return {\n status: 'ready',\n views: modalReadViewRef.current === undefined\n ? merged\n : mergeWorktreeView(merged, modalReadViewRef.current),\n };\n });\n }, (error) => {\n if (preserveCurrent)\n throw error;\n setReadState({\n status: 'error',\n views: modalReadViewRef.current === undefined ? [] : [modalReadViewRef.current],\n error: toWorktreeViewError(error),\n });\n });\n return;\n }\n const requestedWorkspaceIds = scope.kind === 'workspace' ? [scope.workspaceId] : scope.workspaceIds;\n const selectedWorkspaceIds = [...new Set(requestedWorkspaceIds)].filter((workspaceId) => currentWorkspaceIds.includes(workspaceId));\n if (selectedWorkspaceIds.length === 0)\n return;\n await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {\n const guard = guardFor(workspaceId);\n viewReader.invalidate(workspaceId, { reuseInFlight: options.reuseInFlight });\n const contextRefresh = options.invalidateContext === false\n ? undefined\n : invalidateWorktreeContext?.(workspaceId);\n const generation = guard.begin();\n try {\n const view = await viewReader.read(workspaceId);\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const remainingTargetError = current.targetError?.workspaceIds.filter((candidate) => candidate !== workspaceId) ?? [];\n const next = {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, [view]),\n error: undefined,\n };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n }\n catch (error) {\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const previousIds = current.targetError?.workspaceIds ?? [];\n return {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, []),\n error: undefined,\n targetError: {\n workspaceIds: [...new Set([...previousIds, workspaceId])],\n error: {\n ...toWorktreeViewError(error),\n retryable: true,\n },\n },\n };\n });\n }\n finally {\n await contextRefresh?.catch(() => undefined);\n }\n }));\n }, [invalidateWorktreeContext, manager, viewReader]);\n const loadModalWorktreeView = useCallback((workspaceId) => {\n setModalReadError(undefined);\n setModalReadLoading(true);\n if (manager === undefined) {\n setModalReadLoading(false);\n setModalReadError({\n code: 'WORKTREE_VIEW_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n void modalReadLoader.current.load(workspaceId, (view) => {\n modalReadViewRef.current = view;\n setModalReadLoading(false);\n setReadState((current) => ({\n ...current,\n views: mergeWorktreeView(current.views, view),\n }));\n }, (error) => {\n setModalReadLoading(false);\n setModalReadError(toWorktreeViewError(error));\n });\n }, [manager, viewReader]);\n useEffect(() => {\n if (mode === 'worktree') {\n void refresh({ preserveCurrent: readStateRef.current.status === 'ready' });\n }\n else {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n setReadState(EMPTY_READ_STATE);\n }\n }, [mode, refresh]);\n const previousWorkspaceIdsRef = useRef(workspaceIds);\n useEffect(() => {\n const previousWorkspaceIds = previousWorkspaceIdsRef.current;\n previousWorkspaceIdsRef.current = workspaceIds;\n if (mode !== 'worktree')\n return;\n const addedWorkspaceIds = workspaceIds.filter((workspaceId) => !previousWorkspaceIds.includes(workspaceId));\n const removedWorkspaceIds = previousWorkspaceIds.filter((workspaceId) => !workspaceIds.includes(workspaceId));\n for (const workspaceId of removedWorkspaceIds) {\n targetRefreshGuards.current.delete(workspaceId);\n }\n setReadState((current) => {\n const views = mergeWorktreeViews(current.views, workspaceIds, []);\n const remainingTargetError = current.targetError?.workspaceIds.filter((workspaceId) => workspaceIds.includes(workspaceId)) ?? [];\n const next = { ...current, views };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n for (const workspaceId of addedWorkspaceIds) {\n void refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n }).catch(() => {\n // The target error remains visible and can be retried explicitly.\n });\n }\n }, [mode, refresh, workspaceIds]);\n useEffect(() => {\n if (forkRecoveryRevisionRef.current === forkRecoverySnapshot.revision)\n return;\n forkRecoveryRevisionRef.current = forkRecoverySnapshot.revision;\n if (mode !== 'worktree' || manager === undefined)\n return;\n if (forkRecoverySnapshot.affectedWorkspaceIds.length === 0)\n return;\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: forkRecoverySnapshot.affectedWorkspaceIds,\n },\n preserveCurrent: readStateRef.current.status === 'ready',\n }).catch(() => {\n // Recovery state remains visible; the next explicit retry can refresh it again.\n });\n }, [\n forkRecoverySnapshot.affectedWorkspaceIds,\n forkRecoverySnapshot.revision,\n manager,\n mode,\n refresh,\n ]);\n useEffect(() => {\n if (readState.status !== 'ready' || syncSessionWorkspaces === undefined)\n return;\n syncSessionWorkspaces(readState.views.flatMap((view) => view.bindings.map((binding) => ({\n workspaceId: binding.workspaceId,\n sessionId: binding.sessionId,\n }))));\n }, [readState.status, readState.views, syncSessionWorkspaces]);\n const viewByWorkspace = useMemo(() => new Map(readState.views.map((view) => [view.workspaceId, view])), [readState.views]);\n const previousActivityRef = useRef(sessionPresentations);\n useEffect(() => {\n const previous = previousActivityRef.current;\n previousActivityRef.current = sessionPresentations;\n if (mode !== 'worktree')\n return;\n const affected = worktreeActivityRefreshWorkspaceIds(readStateRef.current.views, previous, sessionPresentations);\n if (affected.length > 0)\n void refresh({\n scope: { kind: 'workspaces', workspaceIds: affected },\n preserveCurrent: true,\n });\n }, [mode, refresh, sessionPresentations]);\n return {\n readState,\n setReadState,\n readStateRef,\n refreshGuard,\n targetRefreshGuards,\n forkRecoveryRevisionRef,\n guardFor,\n refresh,\n loadModalWorktreeView,\n previousWorkspaceIdsRef,\n viewByWorkspace,\n previousActivityRef,\n };\n}\n//# sourceMappingURL=useSurfaceRefresh.js.map","export function computeOverlayBounds(frame, newSession, footer) {\n if (newSession === undefined || footer === undefined) {\n return { ready: false, top: 0, height: 0 };\n }\n const top = Math.max(0, newSession.top - frame.top);\n const footerTop = Math.max(top, footer.top - frame.top);\n return { ready: true, top, height: footerTop - top };\n}\n//# sourceMappingURL=overlay-bounds.js.map","import { useLayoutEffect, useRef, useState } from 'react';\nimport { computeOverlayBounds } from './overlay-bounds.js';\nconst EMPTY_BOUNDS = { ready: false, top: 0, height: 0 };\nfunction asRect(element) {\n const rect = element.getBoundingClientRect();\n return { top: rect.top, bottom: rect.bottom };\n}\nexport function syncObservedElement(observer, previous, next) {\n const nextElement = next ?? undefined;\n if (previous === nextElement)\n return previous;\n if (previous !== undefined)\n observer?.unobserve(previous);\n if (nextElement !== undefined)\n observer?.observe(nextElement);\n return nextElement;\n}\nexport function resolveNativeSidebarRoot(sidebar) {\n const directChild = sidebar.firstElementChild;\n if (directChild === null)\n return undefined;\n const directRect = directChild.getBoundingClientRect();\n if (directRect.width > 0 || directRect.height > 0)\n return directChild;\n return directChild.firstElementChild ?? directChild;\n}\nexport function findNewSessionAnchor(root) {\n const labels = ['新建会话', 'New session', '新会话', 'New Session'];\n const buttons = Array.from(root.querySelectorAll('button'));\n const visibleLabel = buttons.find((button) => {\n const text = button.textContent?.trim();\n return text === '新会话' || text === 'New Session';\n });\n if (visibleLabel !== undefined)\n return visibleLabel;\n for (const label of labels) {\n const button = buttons.find((candidate) => candidate.getAttribute('aria-label') === label);\n if (button !== undefined)\n return button;\n }\n return undefined;\n}\nexport function useSidebarOverlayGeometry(active) {\n const ref = useRef(null);\n const [width, setWidth] = useState(280);\n const [bounds, setBounds] = useState(EMPTY_BOUNDS);\n useLayoutEffect(() => {\n if (!active) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const surface = ref.current;\n const overlay = surface?.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n const sidebar = frame?.firstElementChild;\n const nativeRoot = sidebar === null || sidebar === undefined ? undefined : resolveNativeSidebarRoot(sidebar);\n if (!(overlay instanceof HTMLElement) ||\n !(sidebar instanceof HTMLElement) ||\n !(nativeRoot instanceof HTMLElement)) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const overlayElement = overlay;\n const sidebarElement = sidebar;\n const nativeRootElement = nativeRoot;\n let frameHandle;\n let observedNewSession;\n let observedFooter;\n function update() {\n const newSession = findNewSessionAnchor(nativeRootElement);\n const footer = nativeRootElement.lastElementChild;\n observedNewSession = syncObservedElement(resizeObserver, observedNewSession, newSession);\n observedFooter = syncObservedElement(resizeObserver, observedFooter, footer);\n const nextWidth = sidebarElement.getBoundingClientRect().width;\n if (nextWidth > 0)\n setWidth(nextWidth);\n setBounds(computeOverlayBounds(asRect(overlayElement), newSession === undefined ? undefined : asRect(newSession), footer === null ? undefined : asRect(footer)));\n }\n function scheduleUpdate() {\n if (frameHandle !== undefined)\n return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = undefined;\n update();\n });\n }\n const resizeObserver = typeof ResizeObserver === 'function'\n ? new ResizeObserver(scheduleUpdate)\n : undefined;\n for (const element of [overlayElement, sidebarElement, nativeRootElement]) {\n resizeObserver?.observe(element);\n }\n update();\n const mutationObserver = typeof MutationObserver === 'function'\n ? new MutationObserver(scheduleUpdate)\n : undefined;\n mutationObserver?.observe(nativeRootElement, { childList: true, subtree: true });\n return () => {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n if (frameHandle !== undefined)\n cancelAnimationFrame(frameHandle);\n };\n }, [active]);\n return { ref, width, bounds };\n}\n//# sourceMappingURL=sidebar-overlay-geometry.js.map","import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { deriveSessionPresentationIndex } from '../../session/session-view.js';\nimport { useSidebarOverlayGeometry } from '../../overlay/sidebar-overlay-geometry.js';\nimport { effectiveViewMode } from '../../view/view-mode.js';\nimport { currentSessionIdFromList } from '../../session/session-selection.js';\nimport { EMPTY_FORK_RECOVERY_STORE, EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, EMPTY_PERMISSION_NOTICE_SNAPSHOT, EMPTY_PERMISSION_NOTICE_SUBSCRIBE, useStableWorkspaceIds, } from '../shared.js';\nexport function useSurfaceSources({ props }) {\n const { useStore, available, manager, useSessions, useWorkspaces, forkRecovery, expandState, permissionNotice, fullAccessConfirmation, sessionOrder, } = props;\n const preferredMode = useStore((state) => state.viewMode);\n const mode = effectiveViewMode(preferredMode, available && manager !== undefined);\n const sessions = useSessions((state) => state);\n const workspaces = useWorkspaces((state) => state);\n const forkRecoveryStore = forkRecovery ?? EMPTY_FORK_RECOVERY_STORE;\n const forkRecoverySnapshot = useSyncExternalStore(forkRecoveryStore.subscribe, forkRecoveryStore.getSnapshot, forkRecoveryStore.getSnapshot);\n const currentSessionId = currentSessionIdFromList(sessions);\n const workspaceIds = useStableWorkspaceIds(workspaces.items);\n const workspaceIdsRef = useRef(workspaceIds);\n workspaceIdsRef.current = workspaceIds;\n const expandSnapshot = useSyncExternalStore(expandState.subscribe, expandState.getSnapshot, expandState.getSnapshot);\n const permissionNoticeSnapshot = useSyncExternalStore(permissionNotice?.subscribe ?? EMPTY_PERMISSION_NOTICE_SUBSCRIBE, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT);\n const fullAccessConfirmationSnapshot = useSyncExternalStore(fullAccessConfirmation?.subscribe ?? EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT);\n const fullAccessConfirmationKey = fullAccessConfirmationSnapshot === undefined\n ? ''\n : [\n fullAccessConfirmationSnapshot.workspaceId,\n fullAccessConfirmationSnapshot.worktreeId,\n fullAccessConfirmationSnapshot.sessionId,\n fullAccessConfirmationSnapshot.cwd,\n ].join('\\u0000');\n const [fullAccessAcknowledged, setFullAccessAcknowledged] = useState(false);\n useEffect(() => {\n setFullAccessAcknowledged(false);\n }, [fullAccessConfirmationKey]);\n const sessionOrderSnapshot = useSyncExternalStore(sessionOrder.subscribe, sessionOrder.getSnapshot, sessionOrder.getSnapshot);\n const sessionPresentations = useMemo(() => deriveSessionPresentationIndex(sessions), [sessions.byId]);\n const { ref, width, bounds } = useSidebarOverlayGeometry(mode === 'worktree');\n const collapsed = width <= 64;\n const archivedSessionIds = workspaces.archivedSessionIds ?? [];\n return {\n preferredMode,\n mode,\n sessions,\n workspaces,\n forkRecoveryStore,\n forkRecoverySnapshot,\n currentSessionId,\n workspaceIds,\n workspaceIdsRef,\n expandSnapshot,\n permissionNoticeSnapshot,\n fullAccessConfirmationSnapshot,\n fullAccessConfirmationKey,\n fullAccessAcknowledged,\n setFullAccessAcknowledged,\n sessionOrderSnapshot,\n sessionPresentations,\n ref,\n width,\n bounds,\n collapsed,\n archivedSessionIds,\n };\n}\n//# sourceMappingURL=useSurfaceSources.js.map","import { useCallback, useEffect } from 'react';\nimport { createDefaultWorktreeName, executeWorktreeAction, reconcileBaseBranchSelection, selectDefaultBaseBranch, toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nexport function useWorktreeRegistration({ source, registrationState, read, props, mutation, session, }) {\n const { workspaces } = source;\n const { worktreeModalWorkspaceId, modalReadLoading, setSelectedBranch, setNewBranch, setImportCandidates, importCandidatesGuard, modalWorkspaceIdRef, modalReadLoader, modalReadViewRef, setWorktreeModalWorkspaceId, setModalReadError, setModalReadLoading, setWorktreeModalMode, setSelectedImportPath, importCandidates, newBranch, selectedImportPath, worktreeModalMode, selectedBranch, } = registrationState;\n const { viewByWorkspace, loadModalWorktreeView, refresh } = read;\n const { manager, createSessionForWorktree: createSessionCallback } = props;\n const { actionPending, setActionError, setActionPending } = mutation;\n const { setPendingSessionBinding } = session;\n const modalWorkspace = workspaces.items.find((workspace) => workspace.workspaceId === worktreeModalWorkspaceId);\n const modalView = worktreeModalWorkspaceId === undefined\n ? undefined\n : viewByWorkspace.get(worktreeModalWorkspaceId);\n const modalReadiness = modalView?.readiness;\n const modalSetupStatus = modalView === undefined\n ? undefined\n : modalReadiness?.status === 'ready'\n ? modalView.branches.length === 0\n ? 'noLocalBranch'\n : undefined\n : modalReadiness?.status;\n const modalCanCreate = !modalReadLoading && modalSetupStatus === undefined && modalReadiness?.status === 'ready';\n useEffect(() => {\n if (worktreeModalWorkspaceId === undefined || modalView === undefined)\n return;\n if (modalView.readiness.status !== 'ready') {\n setSelectedBranch('');\n setNewBranch('');\n return;\n }\n setSelectedBranch((current) => reconcileBaseBranchSelection(current, modalView.branches));\n setNewBranch((current) => {\n if (current.length > 0)\n return current;\n const existingNames = [\n ...modalView.branches.map((branch) => branch.name),\n ...modalView.worktrees.map((worktree) => worktree.branch),\n ];\n return createDefaultWorktreeName(existingNames);\n });\n }, [modalView, worktreeModalWorkspaceId]);\n const loadImportCandidates = useCallback(async (workspaceId) => {\n if (manager === undefined)\n return;\n setImportCandidates((current) => ({ status: 'loading', candidates: current.candidates }));\n await importCandidatesGuard.current.run(() => manager.listImportCandidates({ workspaceId }), (candidates) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates({ status: 'ready', candidates });\n }, (error) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates((current) => ({\n status: 'error',\n candidates: current.candidates,\n error: toWorktreeViewError(error),\n }));\n });\n }, [manager]);\n const closeWorktreeCreator = (force = false) => {\n if (actionPending && !force)\n return;\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n };\n const openWorktreeCreator = (workspace, defaults = {}) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(workspace.workspaceId);\n setWorktreeModalMode('create');\n setImportCandidates({ status: 'idle', candidates: [] });\n setSelectedImportPath(undefined);\n setActionError(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n if (view === undefined) {\n setSelectedBranch(defaults.baseBranch ?? '');\n setNewBranch(defaults.newBranch ?? '');\n loadModalWorktreeView(workspace.workspaceId);\n return;\n }\n setSelectedBranch(defaults.baseBranch ?? selectDefaultBaseBranch(view.branches));\n setNewBranch(defaults.newBranch ??\n createDefaultWorktreeName([\n ...view.branches.map((branch) => branch.name),\n ...view.worktrees.map((worktree) => worktree.branch),\n ]));\n };\n const changeWorktreeModalMode = (mode) => {\n setWorktreeModalMode(mode);\n if (mode === 'import' &&\n worktreeModalWorkspaceId !== undefined &&\n importCandidates.status === 'idle') {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n };\n const continueWorktreeRegistration = async (registeredWorktree) => {\n closeWorktreeCreator(true);\n if (createSessionCallback === undefined) {\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n setActionError({\n code: 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n const sessionInput = {\n workspaceId: registeredWorktree.workspaceId,\n worktreeId: registeredWorktree.worktreeId,\n cwd: registeredWorktree.absolutePath,\n };\n try {\n await createSessionCallback(sessionInput);\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError && error.retryable) {\n setPendingSessionBinding({ ...sessionInput, sessionId: error.sessionId });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...sessionInput,\n sessionId: error.sessionId,\n permissionRequired: true,\n });\n }\n throw error;\n }\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n };\n const submitWorktree = async () => {\n const worktreeName = newBranch.trim();\n const selectedImportCandidate = importCandidates.candidates.find((candidate) => candidate.absolutePath === selectedImportPath);\n if (manager === undefined || modalWorkspace === undefined)\n return;\n if (worktreeModalMode === 'create' &&\n (!modalCanCreate || selectedBranch.length === 0 || worktreeName.length === 0))\n return;\n if (worktreeModalMode === 'import' && selectedImportCandidate === undefined)\n return;\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n const registeredWorktree = worktreeModalMode === 'create'\n ? await executeWorktreeAction(manager, {\n type: 'createWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n branch: selectedBranch,\n newBranch: worktreeName,\n },\n })\n : await executeWorktreeAction(manager, {\n type: 'importWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n absolutePath: selectedImportCandidate.absolutePath,\n },\n });\n if (registeredWorktree === undefined) {\n throw {\n code: 'WORKTREE_RECORD_MISSING',\n message: '',\n retryable: true,\n };\n }\n await continueWorktreeRegistration(registeredWorktree);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return {\n modalWorkspace,\n modalView,\n modalReadiness,\n modalSetupStatus,\n modalCanCreate,\n loadImportCandidates,\n closeWorktreeCreator,\n openWorktreeCreator,\n changeWorktreeModalMode,\n continueWorktreeRegistration,\n submitWorktree,\n };\n}\n//# sourceMappingURL=useWorktreeRegistration.js.map","/** Localize the native-compatible Session status used by both surfaces. */\nexport function sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\n/** Localize the compact relative time shown for idle Sessions. */\nexport function sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Include the native relative-time suffix used in Session hover details. */\nexport function sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n//# sourceMappingURL=session-labels.js.map","import { stripExtendedWindowsPrefix } from '../../contract/windows-path.js';\n/** Encode path segments while retaining Windows drive and directory separators. */\nexport function vscodeFolderUrl(absolutePath) {\n const normalizedPath = stripExtendedWindowsPrefix(absolutePath);\n const windowsPath = /^[a-z]:[\\\\/]/i.test(normalizedPath) ||\n normalizedPath.startsWith('\\\\\\\\') || normalizedPath.startsWith('//');\n const path = windowsPath ? normalizedPath.replaceAll('\\\\', '/') : normalizedPath;\n const encoded = path.split('/').map(encodeURIComponent).join('/');\n const withDrive = windowsPath ? encoded.replace(/^([a-z])%3A/i, '$1:') : encoded;\n return 'vscode://file' + (withDrive.startsWith('/') ? '' : '/') + withDrive;\n}\n//# sourceMappingURL=vscode-url.js.map","// Official DSH Host open-in-app routes. Keep these URLs relative so requests stay on\n// the current DSH host and retain the Host's validation and permission checks.\nexport const OPEN_IN_APP_APPS_ROUTE = '/open-in-app/apps';\nexport const OPEN_IN_APP_ICON_ROUTE = '/open-in-app/icon/';\nexport const OPEN_IN_APP_OPEN_ROUTE = '/open-in-app/open';\nexport class OpenInAppController {\n fetcher;\n _apps = null;\n _choice = '';\n _loading;\n _listeners = new Set();\n constructor(fetcher = (input, init) => fetch(input, init)) {\n this.fetcher = fetcher;\n }\n get apps() {\n return this._apps;\n }\n get choice() {\n return this._choice;\n }\n subscribe(listener) {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n }\n notify() {\n for (const listener of this._listeners) {\n listener();\n }\n }\n load() {\n this._loading ??= this.run();\n return this._loading;\n }\n choose(appId) {\n if (this._choice === appId)\n return;\n this._choice = appId;\n this.notify();\n }\n iconUrl(appId) {\n return `${OPEN_IN_APP_ICON_ROUTE}${encodeURIComponent(appId)}`;\n }\n async launch(appId, path) {\n const body = { app: appId, path };\n const response = await this.fetcher(OPEN_IN_APP_OPEN_ROUTE, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok)\n throw new Error(`open failed: HTTP ${String(response.status)}`);\n }\n async run() {\n let apps = [];\n try {\n const response = await this.fetcher(OPEN_IN_APP_APPS_ROUTE, {\n headers: { accept: 'application/json' },\n });\n if (response.ok) {\n const payload = (await response.json());\n if (Array.isArray(payload.apps)) {\n apps = payload.apps.filter((id) => typeof id === 'string');\n }\n }\n }\n catch {\n // Swallows network failures: falls back to empty apps list\n }\n this._apps = apps;\n this.notify();\n }\n}\nexport const defaultOpenInAppController = new OpenInAppController();\n//# sourceMappingURL=open-in-app-controller.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { Menu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconChevronDownOutline14 } from '../dsh-icons.js';\nimport { vscodeFolderUrl } from './vscode-url.js';\nimport { defaultOpenInAppController } from './open-in-app-controller.js';\nimport css from './open-in-app.css';\nconst APP_NAMES = {\n cursor: 'Cursor',\n vscode: 'VS Code',\n vscodeinsiders: 'VS Code Insiders',\n windsurf: 'Windsurf',\n zed: 'Zed',\n sublimetext: 'Sublime Text',\n xcode: 'Xcode',\n androidstudio: 'Android Studio',\n intellij: 'IntelliJ IDEA',\n pycharm: 'PyCharm',\n webstorm: 'WebStorm',\n phpstorm: 'PhpStorm',\n goland: 'GoLand',\n rider: 'Rider',\n rustrover: 'RustRover',\n fork: 'Fork',\n sourcetree: 'Sourcetree',\n github: 'GitHub Desktop',\n tower: 'Tower',\n gitkraken: 'GitKraken',\n smartgit: 'SmartGit',\n sublimemerge: 'Sublime Merge',\n ghostty: 'Ghostty',\n warp: 'Warp',\n iterm: 'iTerm2',\n kitty: 'kitty',\n terminal: 'Terminal',\n finder: 'Finder',\n explorer: 'Explorer',\n};\nconst failedIcons = new Set();\nfunction AppIcon({ id, url, size }) {\n const [failed, setFailed] = useState(failedIcons.has(id));\n if (failed) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1.8, className: css.icon, \"aria-hidden\": \"true\", children: _jsx(\"rect\", { x: \"3\", y: \"3\", width: \"18\", height: \"18\", rx: \"5\" }) }));\n }\n return (_jsx(\"img\", { src: url, width: size, height: size, className: css.icon, alt: \"\", \"aria-hidden\": \"true\", draggable: false, onError: () => {\n failedIcons.add(id);\n setFailed(true);\n } }));\n}\nconst BUSY_DRESS_DELAY_MS = 250;\nexport function OpenInAppButton({ path, t, controller = defaultOpenInAppController, }) {\n useEffect(() => {\n void controller.load();\n }, [controller]);\n const appsSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.apps, () => null);\n const choiceSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.choice, () => '');\n const [open, setOpen] = useState(false);\n const [phase, setPhase] = useState('idle');\n const inFlight = useRef(false);\n const busyTimer = useRef(undefined);\n const errorTimer = useRef(undefined);\n useEffect(() => () => {\n clearTimeout(busyTimer.current);\n clearTimeout(errorTimer.current);\n }, []);\n // If host has no apps or request failed, fallback to native vscode:// link\n if (appsSnapshot === null || appsSnapshot.length === 0) {\n return (_jsx(\"a\", { className: `${css.split} ${css.fallback}`, href: vscodeFolderUrl(path), \"data-dashboard-action\": \"open-editor\", children: _jsx(\"span\", { className: css.main, children: t('dashboard.openEditor') }) }));\n }\n const validApps = appsSnapshot;\n const currentAppId = validApps.find((appId) => appId === choiceSnapshot) ?? validApps[0] ?? 'vscode';\n const currentAppName = APP_NAMES[currentAppId] ?? currentAppId;\n const buttonLabel = t('dashboard.openIn', { app: currentAppName });\n const launch = (appId) => {\n if (inFlight.current)\n return;\n inFlight.current = true;\n clearTimeout(errorTimer.current);\n clearTimeout(busyTimer.current);\n busyTimer.current = setTimeout(() => {\n setPhase('busy');\n }, BUSY_DRESS_DELAY_MS);\n controller\n .launch(appId, path)\n .then(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('idle');\n })\n .catch(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('error');\n clearTimeout(errorTimer.current);\n errorTimer.current = setTimeout(() => {\n setPhase('idle');\n }, 2000);\n });\n };\n const menuItems = validApps.map((appId) => ({\n id: appId,\n label: APP_NAMES[appId] ?? appId,\n icon: _jsx(AppIcon, { id: appId, url: controller.iconUrl(appId), size: 16 }),\n }));\n return (_jsx(\"div\", { className: css.control, onKeyDown: (event) => {\n if (event.key === 'Escape' && open) {\n event.stopPropagation();\n setOpen(false);\n }\n }, children: _jsx(Menu, { open: open, align: \"end\", dense: true, onClose: () => {\n setOpen(false);\n }, items: menuItems, selectedId: currentAppId, onSelect: (id) => {\n setOpen(false);\n if (inFlight.current)\n return;\n controller.choose(id);\n launch(id);\n }, anchor: _jsxs(\"div\", { className: css.split, \"data-dashboard-action\": \"open-editor\", children: [_jsxs(\"button\", { type: \"button\", className: css.main, \"data-state\": phase, disabled: phase === 'busy', \"aria-label\": buttonLabel, title: buttonLabel, onClick: () => {\n launch(currentAppId);\n }, children: [_jsx(AppIcon, { id: currentAppId, url: controller.iconUrl(currentAppId), size: 16 }), _jsx(\"span\", { children: buttonLabel })] }), validApps.length > 1 && (_jsx(\"button\", { type: \"button\", className: css.chevron, \"aria-expanded\": open, \"aria-haspopup\": \"menu\", \"aria-label\": t('dashboard.editorMenu'), disabled: phase === 'busy', onClick: () => {\n setOpen((prev) => !prev);\n }, children: _jsx(IconChevronDownOutline14, { size: 12 }) }))] }) }) }));\n}\n//# sourceMappingURL=OpenInAppButton.js.map","// Upstream AppFrame's 8px Sidebar handle is centered on the track boundary.\n// Keep its 4px right half outside this higher stacking-context overlay.\nconst SIDEBAR_RESIZE_HANDLE_HALF_WIDTH = 4;\n/** Reversible presentation only: leave the native React tree and Session alive. */\nexport function concealDashboardBackground(element) {\n const visibility = element.style.getPropertyValue('visibility');\n const priority = element.style.getPropertyPriority('visibility');\n const inert = element.getAttribute('inert');\n const hidden = element.getAttribute('aria-hidden');\n element.style.setProperty('visibility', 'hidden');\n element.setAttribute('inert', '');\n element.setAttribute('aria-hidden', 'true');\n return () => {\n if (element.style.getPropertyValue('visibility') === 'hidden') {\n if (visibility)\n element.style.setProperty('visibility', visibility, priority);\n else\n element.style.removeProperty('visibility');\n }\n for (const [name, value] of [\n ['inert', inert],\n ['aria-hidden', hidden],\n ]) {\n if (value === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, value);\n }\n };\n}\nexport function isRightSidebarOpenFromDom(frame, rightbar) {\n if (typeof frame.querySelector === 'function') {\n if (frame.querySelector('[data-sidebar-right-open]') !== null) {\n return true;\n }\n if (frame.hasAttribute('data-rightbar-collapsed')) {\n return false;\n }\n }\n if (frame.getAttribute?.('data-rightbar-collapsed') !== null) {\n return false;\n }\n if (rightbar instanceof HTMLElement) {\n if (rightbar.getAttribute?.('data-sidebar-right-open') !== null) {\n return true;\n }\n }\n return false;\n}\n/** Layout seam shared with the existing Sidebar overlay; fail closed on frame/center loss. */\nexport function mountDashboardOverlay(surface, onPlacement, options) {\n const overlay = surface.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n if (!overlay || !frame) {\n onPlacement(undefined);\n options?.onRightSidebarChange?.(false);\n return () => { };\n }\n const hidden = new Map();\n let observed = [];\n let scheduled;\n let disposed = false;\n let lastRightSidebarOpen;\n const restore = () => {\n for (const cleanup of hidden.values())\n cleanup();\n hidden.clear();\n };\n const schedule = () => {\n if (disposed || scheduled !== undefined)\n return;\n scheduled = requestAnimationFrame(() => {\n scheduled = undefined;\n update();\n });\n };\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n const update = () => {\n if (disposed)\n return;\n // AppFrame owns Sidebar | CenterColumn | [RightbarColumn] | shell.overlay.\n // The native rightbar is absent on a page with no current Session, but the\n // Dashboard still needs the same center-to-frame placement in that layout.\n // Do not depend on generated CSS class names or mutate slot registrations.\n const sidebar = frame.firstElementChild;\n const center = sidebar?.nextElementSibling;\n const rightbar = center?.nextElementSibling;\n const hasRightbar = rightbar instanceof HTMLElement &&\n rightbar !== overlay &&\n rightbar.nextElementSibling === overlay;\n const hasNoRightbar = rightbar === overlay;\n const valid = overlay.isConnected &&\n overlay.parentElement === frame &&\n sidebar instanceof HTMLElement &&\n center instanceof HTMLElement &&\n (hasRightbar || hasNoRightbar);\n const nextObserved = valid\n ? hasRightbar\n ? [overlay, sidebar, center, rightbar]\n : [overlay, sidebar, center]\n : [frame];\n for (const old of observed)\n if (!nextObserved.includes(old))\n resize?.unobserve(old);\n for (const next of nextObserved)\n if (!observed.includes(next))\n resize?.observe(next);\n observed = nextObserved;\n if (!valid) {\n restore();\n onPlacement(undefined);\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n return;\n }\n const box = overlay.getBoundingClientRect();\n const boundary = sidebar.getBoundingClientRect();\n const rightBoundary = hasRightbar && rightbar instanceof HTMLElement ? rightbar.getBoundingClientRect().left : box.right;\n const left = Math.max(0, boundary.right - box.left + SIDEBAR_RESIZE_HANDLE_HALF_WIDTH);\n const rightEdge = Math.min(box.right, rightBoundary);\n const width = rightEdge - box.left - left;\n if (width <= 0 || box.height <= 0) {\n restore();\n onPlacement(undefined);\n return;\n }\n for (const [element, cleanup] of hidden) {\n if (element !== center) {\n cleanup();\n hidden.delete(element);\n }\n }\n if (!hidden.has(center))\n hidden.set(center, concealDashboardBackground(center));\n onPlacement({ left, top: 0, width, height: box.height });\n const isRightSidebarOpen = options?.isRightSidebarExpanded !== undefined\n ? options.isRightSidebarExpanded()\n : isRightSidebarOpenFromDom(frame, hasRightbar ? rightbar : undefined);\n if (lastRightSidebarOpen !== isRightSidebarOpen) {\n lastRightSidebarOpen = isRightSidebarOpen;\n options?.onRightSidebarChange?.(isRightSidebarOpen);\n }\n };\n const mutation = typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(schedule);\n try {\n mutation?.observe(frame, {\n childList: true,\n attributes: true,\n subtree: true,\n attributeFilter: [\n 'data-rightbar-collapsed',\n 'data-sidebar-right-open',\n 'data-sidebar-right-panel',\n ],\n });\n }\n catch {\n mutation?.observe(frame, { childList: true });\n }\n // Frame replacement may detach all original anchors at once.\n if (frame.parentElement) {\n try {\n mutation?.observe(frame.parentElement, { childList: true });\n }\n catch {\n // ignore\n }\n }\n update();\n return () => {\n disposed = true;\n resize?.disconnect();\n mutation?.disconnect();\n if (scheduled !== undefined)\n cancelAnimationFrame(scheduled);\n restore();\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n };\n}\n//# sourceMappingURL=dashboard-overlay.js.map","export function selectWorktreeAcquisitionFacts(record) {\n return {\n timestampKind: record.source === 'external' ? 'imported' : 'created',\n ...(record.source === 'external'\n ? record.importedAt === undefined\n ? {}\n : { timestamp: record.importedAt }\n : record.createdAt === undefined\n ? {}\n : { timestamp: record.createdAt }),\n ...(record.baseBranch === undefined ? {} : { baseBranch: record.baseBranch }),\n };\n}\n//# sourceMappingURL=worktree-acquisition-facts.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState } from 'react';\nimport styles from './dashboard.css';\nexport function WorktreeInstructions({ value, onSave, t, disabled, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [error, setError] = useState(false);\n const [pending, setPending] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n }, [value]);\n const expected = useRef(value);\n const save = async () => {\n if (busy.current || draft === undefined || !onSave)\n return;\n busy.current = true;\n setPending(true);\n setError(false);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n setDraft(undefined);\n }\n }\n catch {\n if (alive.current)\n setError(true);\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(\"div\", { children: [_jsx(\"p\", { children: t('dashboard.instructionsHint') }), draft === undefined ? (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.dashboardInstructionsText, children: saved || t('dashboard.noInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: disabled || !onSave, onClick: () => {\n expected.current = saved;\n setDraft(saved);\n setError(false);\n }, children: t('dashboard.edit') })] })) : (_jsxs(_Fragment, { children: [_jsx(\"textarea\", { className: styles.dashboardInstructionsInput, \"aria-label\": t('dashboard.instructions'), value: draft, maxLength: 32000, rows: 8, disabled: pending, onChange: (event) => setDraft(event.target.value) }), _jsxs(\"div\", { className: styles.dashboardInstructionActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending || disabled, onClick: () => void save(), children: t(pending ? 'dashboard.savingInstructions' : 'dashboard.saveInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending, onClick: () => {\n setDraft(undefined);\n setError(false);\n }, children: t('dashboard.cancelInstructions') })] }), error && _jsx(\"p\", { role: \"alert\", children: t('dashboard.instructionsSaveFailed') })] }))] }));\n}\n//# sourceMappingURL=WorktreeInstructions.js.map","/**\n * Shared Git-tab facts. These helpers stay free of React and DOM APIs so the\n * Dashboard's branch, Main, and line-total rules have one definition.\n */\n/** Main (Local) Worktree ids never carry a Worktree-relative Git comparison. */\nexport function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\n/** Trim a branch value and drop empty strings. */\nexport function normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\n/** A baseline equal to the current Worktree branch is not a usable default. */\nexport function normalizeBaselineBranch(value, currentBranch) {\n const baseline = normalizeBranch(value);\n return baseline === undefined || baseline === currentBranch ? undefined : baseline;\n}\n/**\n * Sum the known text-file additions/deletions. Binary files have no line\n * counts, so they are ignored when a target also contains readable files;\n * binary-only targets remain explicitly unknown.\n */\nexport function sumLineTotals(files) {\n let additions = 0;\n let deletions = 0;\n let knownFiles = 0;\n for (const file of files) {\n if (file.additions === undefined || file.deletions === undefined)\n continue;\n additions += file.additions;\n deletions += file.deletions;\n knownFiles += 1;\n }\n return files.length === 0 || knownFiles > 0 ? { additions, deletions } : undefined;\n}\n//# sourceMappingURL=git-facts.js.map","const byName = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nfunction compareNodes(left, right) {\n if (left.kind !== right.kind)\n return left.kind === 'folder' ? -1 : 1;\n return byName.compare(left.name, right.name);\n}\nfunction materialize(nodes) {\n return [...nodes.values()].sort(compareNodes).map((node) => node.kind === 'folder'\n ? {\n kind: 'folder',\n name: node.name,\n path: node.path,\n children: materialize(node.children),\n }\n : node);\n}\n/** Build a stable, directory-first tree from Git's slash-separated relative paths. */\nexport function buildGitFileTree(files) {\n const roots = new Map();\n for (const file of files) {\n const segments = file.path.split('/').filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n roots.set(file.path, { kind: 'file', name: file.path, file });\n continue;\n }\n let nodes = roots;\n let directoryPath = '';\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n directoryPath = directoryPath.length === 0 ? segment : directoryPath + '/' + segment;\n const folderKey = 'folder:' + segment;\n const existing = nodes.get(folderKey);\n if (existing?.kind === 'folder') {\n nodes = existing.children;\n continue;\n }\n const folder = {\n kind: 'folder',\n name: segment,\n path: directoryPath,\n children: new Map(),\n };\n nodes.set(folderKey, folder);\n nodes = folder.children;\n }\n const name = segments[segments.length - 1];\n const fileKey = 'file:' + name + ':' + file.path + ':' + (file.oldPath ?? '');\n nodes.set(fileKey, { kind: 'file', name, file });\n }\n return materialize(roots);\n}\n//# sourceMappingURL=git-file-tree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nfunction FallbackFileIcon({ className, size = 16 }) {\n return (_jsxs(\"svg\", { viewBox: \"0 0 16 16\", width: size, height: size, fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"path\", { d: \"M3 2h6l4 4v8H3V2z\" }), _jsx(\"path\", { d: \"M9 2v4h4\" })] }));\n}\n/**\n * Standard DSH file type icon with fallback.\n * Uses FileTypeIcon from @deepseek-ai/dsh-client-ui-primitives when available,\n * and falls back to a clean SVG file glyph in older runtimes.\n */\n/**\n * Optional native primitives, resolved once at module scope instead of on every\n * rendered changed-file row.\n */\nconst primitivesRecord = primitives;\nconst FileTypeIcon = primitivesRecord.FileTypeIcon;\nconst classifyFileType = primitivesRecord.classifyFileType;\nexport function GitFileTypeIcon({ path, className, size = 16 }) {\n if (typeof FileTypeIcon === 'function' && typeof classifyFileType === 'function') {\n return _jsx(FileTypeIcon, { kind: classifyFileType(path), size: size, className: className });\n }\n return _jsx(FallbackFileIcon, { className: className, size: size });\n}\n//# sourceMappingURL=GitFileTypeIcon.js.map","import { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport styles from './worktree-git.css';\n/** Compact, color-coded Git line counts shared by overview and changed-file rows. */\nexport function GitLineStats({ additions, deletions, ariaLabel, className, }) {\n if (additions === undefined && deletions === undefined)\n return null;\n 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] }))] }));\n}\n//# sourceMappingURL=GitLineStats.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconFolderClose16, IconFolderOpen16 } from '../../dsh-icons.js';\nimport { useId, useMemo, useState } from 'react';\nimport { buildGitFileTree } from './git-file-tree.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from './worktree-git.css';\n/** Localized status wording for the row title and accessible label, so the color cue is still announced. */\nconst STATUS_LABELS = {\n added: 'dashboard.git.status.added',\n modified: 'dashboard.git.status.modified',\n deleted: 'dashboard.git.status.deleted',\n renamed: 'dashboard.git.status.renamed',\n copied: 'dashboard.git.status.copied',\n 'type-changed': 'dashboard.git.status.typeChanged',\n};\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\nfunction fileName(path) {\n const segments = path.split('/').filter((segment) => segment.length > 0);\n return segments.at(-1) ?? path;\n}\nfunction fileTitle(file) {\n return file.oldPath !== undefined && file.oldPath !== file.path\n ? file.oldPath + ' → ' + file.path\n : file.path;\n}\nfunction fileLabel(file) {\n const name = fileName(file.path);\n if (file.oldPath === undefined || file.oldPath === file.path)\n return name;\n return (_jsxs(_Fragment, { children: [fileName(file.oldPath), \" \", _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" }), \" \", name] }));\n}\nfunction folderId(treeId, path) {\n return 'dashboard-git-folder-' + treeId + '-' + encodeURIComponent(path);\n}\nfunction renderTreeNodes({ treeId, level, nodes, collapsedFolders, toggleFolder, selectedPath, onSelect, t, }) {\n return nodes.map((node, index) => {\n if (node.kind === 'folder') {\n const collapsed = collapsedFolders.has(node.path);\n const childrenId = folderId(treeId, node.path);\n return (_jsxs(\"li\", { className: styles.gitFolder, role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-expanded\": !collapsed, children: [_jsxs(\"button\", { type: \"button\", className: styles.gitFolderButton, \"data-dashboard-git-folder\": node.path, \"aria-expanded\": !collapsed, \"aria-controls\": childrenId, onClick: () => toggleFolder(node.path), onKeyDown: (event) => {\n if (event.key === 'ArrowRight' && collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n else if (event.key === 'ArrowLeft' && !collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n }, children: [_jsx(\"span\", { className: styles.gitFolderIcon, \"aria-hidden\": \"true\", children: collapsed ? _jsx(IconFolderClose16, {}) : _jsx(IconFolderOpen16, {}) }), _jsx(\"span\", { className: styles.gitFolderName, title: node.path, children: node.name })] }), _jsx(\"ul\", { id: childrenId, className: styles.gitFolderChildren, role: \"group\", hidden: collapsed, children: renderTreeNodes({\n treeId,\n level: level + 1,\n nodes: node.children,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) })] }, 'folder:' + node.path));\n }\n const { file } = node;\n const isSelected = selectedPath === file.path || selectedPath === file.oldPath;\n // The row color carries the status visually; the localized wording stays in the\n // title and accessible label so the row remains readable without color.\n const statusText = fileTitle(file) + ' · ' + t(STATUS_LABELS[file.status]);\n return (_jsx(\"li\", { role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-selected\": isSelected, children: _jsxs(\"button\", { type: \"button\", \"aria-selected\": isSelected, \"data-dashboard-git-file\": file.path, \"aria-label\": statusText, title: statusText, onClick: () => onSelect(file.path), children: [_jsx(\"span\", { className: styles.gitFileIcon, \"aria-hidden\": \"true\", children: _jsx(GitFileTypeIcon, { path: file.path, className: styles.gitFileIconGlyph }) }), _jsx(\"span\", { className: styles.gitFilePath, \"data-status\": file.status, title: statusText, children: fileLabel(file) }), _jsx(GitLineStats, { additions: file.additions, deletions: file.deletions, ariaLabel: file.additions === undefined || file.deletions === undefined\n ? undefined\n : t('dashboard.git.lineStats', { additions: file.additions, deletions: file.deletions }) }), file.commits !== undefined && file.commits.length > 0 && (_jsx(\"code\", { className: styles.gitFileContributors, title: file.commits.join(', '), children: file.commits.map(shortCommit).join(', ') }))] }) }, 'file:' + (file.oldPath ?? '') + '\\u0000' + file.path));\n });\n}\n/** Changed-file tree; only paths returned by Host are selectable. */\nexport function GitChangedFiles({ files, selectedPath, onSelect, t }) {\n const treeInstanceId = useId().replaceAll(':', '');\n const [collapsedFolders, setCollapsedFolders] = useState(() => new Set());\n // Building the tree sorts every folder, so it is derived once per file list\n // instead of on each render of the surrounding panel.\n const tree = useMemo(() => buildGitFileTree(files), [files]);\n const toggleFolder = (path) => {\n setCollapsedFolders((previous) => {\n const next = new Set(previous);\n if (next.has(path))\n next.delete(path);\n else\n next.add(path);\n return next;\n });\n };\n return (_jsx(\"ul\", { className: styles.gitChangedFileList, role: \"tree\", \"aria-label\": t('dashboard.git.changedFiles'), \"data-dashboard-git-file-tree\": true, children: renderTreeNodes({\n treeId: treeInstanceId,\n level: 1,\n nodes: tree,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) }));\n}\n//# sourceMappingURL=GitChangedFiles.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport styles from './worktree-git.css';\nfunction commitDate(value) {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n}\n/** Keyboard-navigable, optionally multi-selectable, graph-free commit list for the Dashboard. */\nexport function GitCommitList({ commits, selectedCommit, selectedCommits = [], multiSelect = false, onSelect, onToggle, t }) {\n const itemRefs = useRef([]);\n const move = (index, direction) => {\n const nextIndex = direction === 'first'\n ? 0\n : direction === 'last'\n ? commits.length - 1\n : Math.max(0, Math.min(commits.length - 1, index + direction));\n itemRefs.current[nextIndex]?.focus();\n };\n const pick = (commit) => {\n // The working tree is a single live target, so it always replaces the selection.\n if (!multiSelect || commit.kind === 'working-tree' || onToggle === undefined)\n onSelect(commit.sha);\n else\n onToggle(commit.sha);\n };\n return (_jsx(\"ul\", { className: styles.gitCommitList, role: \"listbox\", \"aria-multiselectable\": multiSelect, \"data-dashboard-git-commit-multiselect\": multiSelect ? 'on' : 'off', \"aria-label\": t('dashboard.git.commits'), \"aria-describedby\": multiSelect ? 'dashboard-git-commit-selection-hint' : undefined, children: commits.map((commit, index) => {\n const isWorkingTree = commit.kind === 'working-tree';\n const isSelected = isWorkingTree\n ? selectedCommit === commit.sha\n : selectedCommits.includes(commit.sha);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { ref: (element) => { itemRefs.current[index] = element; }, type: \"button\", role: \"option\", \"aria-selected\": isSelected, \"aria-posinset\": index + 1, \"aria-setsize\": commits.length, \"data-dashboard-git-commit\": commit.sha, \"data-dashboard-git-commit-kind\": commit.kind ?? 'commit', onClick: () => pick(commit), onKeyDown: (event) => {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n move(index, -1);\n }\n else if (event.key === 'ArrowDown') {\n event.preventDefault();\n move(index, 1);\n }\n else if (event.key === 'Home') {\n event.preventDefault();\n move(index, 'first');\n }\n else if (event.key === 'End') {\n event.preventDefault();\n move(index, 'last');\n }\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n pick(commit);\n }\n }, children: [multiSelect && (_jsx(\"span\", { className: styles.gitCommitSelectionMark, \"aria-hidden\": \"true\", children: isSelected ? '✓' : '○' })), _jsx(\"span\", { className: styles.gitCommitSubject, children: isWorkingTree ? t('dashboard.git.uncommittedChanges') : commit.subject || t('dashboard.git.untitledCommit') }), _jsx(\"span\", { className: styles.gitCommitMeta, children: isWorkingTree ? (_jsx(\"span\", { className: styles.gitCommitWorkingTree, children: t('dashboard.git.workingTree') })) : (_jsxs(_Fragment, { children: [_jsx(\"code\", { children: commit.sha.slice(0, 7) }), _jsx(\"span\", { children: commit.authorName }), _jsx(\"time\", { dateTime: commit.authoredAt, title: commitDate(commit.authoredAt), children: commitDate(commit.authoredAt) })] })) })] }) }, commit.sha));\n }) }));\n}\n//# sourceMappingURL=GitCommitList.js.map","const HUNK_HEADER = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/u;\n/** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */\nexport function parseUnifiedDiff(patch) {\n const hunks = [];\n let current;\n let oldLine = 0;\n let newLine = 0;\n const flush = () => {\n if (current === undefined)\n return;\n hunks.push({\n oldStart: current.oldStart,\n oldLines: current.oldLines,\n newStart: current.newStart,\n newLines: current.newLines,\n lines: current.lines,\n });\n current = undefined;\n };\n for (const rawLine of patch.split(/\\r?\\n/u)) {\n const header = HUNK_HEADER.exec(rawLine);\n if (header !== null) {\n flush();\n oldLine = Number(header[1]);\n newLine = Number(header[3]);\n current = {\n oldStart: oldLine,\n oldLines: Number(header[2] ?? '1'),\n newStart: newLine,\n newLines: Number(header[4] ?? '1'),\n lines: [],\n };\n continue;\n }\n if (current === undefined || rawLine === '\\\')\n continue;\n const marker = rawLine[0];\n const text = rawLine.slice(1);\n if (marker === ' ') {\n current.lines.push({ type: 'context', oldLine, newLine, text });\n oldLine += 1;\n newLine += 1;\n }\n else if (marker === '+') {\n current.lines.push({ type: 'add', newLine, text });\n newLine += 1;\n }\n else if (marker === '-') {\n current.lines.push({ type: 'delete', oldLine, text });\n oldLine += 1;\n }\n }\n flush();\n return hunks;\n}\n//# sourceMappingURL=git-diff-parser.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconRightUpOutline16 } from '../../dsh-icons.js';\nimport { useEffect, useMemo, useState } from 'react';\nimport { parseUnifiedDiff } from './git-diff-parser.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport styles from './worktree-git.css';\n/**\n * Rendering budget for one patch. The provider already bounds patch bytes, but a\n * large summary can still hold thousands of lines, so the panel folds hunks\n * beyond this budget and offers to render the rest on request.\n */\nconst MAX_RENDERED_DIFF_LINES = 2000;\nfunction hunkLabel(hunk) {\n return '@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@';\n}\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\n/** Fold whole hunks once the render budget is reached. */\nfunction limitHunks(hunks, maxLines) {\n const visible = [];\n let rendered = 0;\n let hiddenLines = 0;\n for (const hunk of hunks) {\n const cost = hunk.lines.length + 1;\n if (rendered < maxLines) {\n visible.push(hunk);\n rendered += cost;\n continue;\n }\n hiddenLines += cost;\n }\n return { hunks: visible, hiddenLines };\n}\n/** Render one unified patch as escaped plain text with lightweight line numbers. */\nfunction DiffHunks({ patch, t }) {\n const hunks = useMemo(() => parseUnifiedDiff(patch), [patch]);\n const [expanded, setExpanded] = useState(false);\n useEffect(() => {\n setExpanded(false);\n }, [patch]);\n if (hunks.length === 0) {\n return _jsx(\"pre\", { className: styles.gitRawDiff, children: patch || t('dashboard.git.emptyDiff') });\n }\n const limited = expanded ? { hunks, hiddenLines: 0 } : limitHunks(hunks, MAX_RENDERED_DIFF_LINES);\n return (_jsxs(_Fragment, { children: [limited.hunks.map((hunk, hunkIndex) => (_jsxs(\"section\", { className: styles.gitDiffHunk, children: [_jsx(\"div\", { className: styles.gitDiffHunkHeader, children: hunkLabel(hunk) }), hunk.lines.map((line, lineIndex) => (_jsxs(\"div\", { className: styles.gitDiffLine + ' ' + styles['gitDiffLine' + line.type], children: [_jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'add' ? '' : line.oldLine }), _jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'delete' ? '' : line.newLine }), _jsxs(\"code\", { children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: line.type === 'context' ? ' ' : line.type === 'add' ? '+' : '-' }), line.text] })] }, line.type + '-' + lineIndex)))] }, hunk.oldStart + '-' + hunk.newStart + '-' + hunkIndex))), limited.hiddenLines > 0 && (_jsxs(\"div\", { className: styles.gitDiffFolded, children: [_jsx(\"span\", { children: t('dashboard.git.diffLinesHidden', { n: limited.hiddenLines }) }), _jsx(\"button\", { type: \"button\", className: styles.gitDiffShowAll, \"data-dashboard-git-show-full-diff\": true, onClick: () => setExpanded(true), children: t('dashboard.git.showFullDiff') })] }))] }));\n}\nfunction DiffSegment({ segment, t }) {\n return (_jsxs(\"section\", { className: styles.gitDiffSegment, children: [_jsxs(\"div\", { className: styles.gitDiffSegmentHeader, children: [t('dashboard.git.commitDiffSection'), \" \", _jsx(\"code\", { children: shortCommit(segment.commit) })] }), segment.binary ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.binary') })) : segment.truncated ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.diffTruncated') })) : (_jsx(DiffHunks, { patch: segment.patch, t: t }))] }));\n}\n/** Render unified diff content as escaped plain text with lightweight line numbers. */\nexport function GitDiffView({ diff, onOpenFile, t }) {\n if (diff === undefined) {\n return _jsx(\"div\", { className: styles.gitDiffEmpty, children: t('dashboard.git.selectFile') });\n }\n const toolbar = (_jsxs(\"div\", { className: styles.gitDiffToolbar, children: [_jsxs(\"span\", { className: styles.gitDiffPath, title: diff.path, children: [_jsx(GitFileTypeIcon, { path: diff.path, className: styles.gitFileIconGlyph }), diff.path] }), onOpenFile !== undefined && (_jsxs(\"button\", { type: \"button\", className: styles.gitDiffOpenInSidebar, onClick: () => onOpenFile(diff.path), title: t('dashboard.git.openInSidebar'), \"data-dashboard-git-open-file\": diff.path, children: [_jsx(IconRightUpOutline16, { size: 14, className: styles.gitDiffOpenIcon }), _jsx(\"span\", { children: t('dashboard.git.openInSidebar') })] }))] }));\n if (diff.segments !== undefined) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: diff.segments.map((segment, index) => (_jsx(DiffSegment, { segment: segment, t: t }, segment.commit + '-' + index))) })] }));\n }\n if (diff.binary || diff.truncated) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiffMessage, children: diff.binary ? t('dashboard.git.binary') : t('dashboard.git.diffTruncated') })] }));\n }\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: _jsx(DiffHunks, { patch: diff.patch, t: t }) })] }));\n}\n//# sourceMappingURL=GitDiffView.js.map","/**\n * Geometry for the two draggable Git dividers. Each divider splits one grid axis\n * of the panel into a leading pane, the divider itself, and a trailing pane.\n * These helpers stay free of DOM and React APIs so the drag math is testable.\n */\n/** Share of the stacked axis, in percent, given to the commits pane by default. */\nexport const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;\n/** Share of the side-by-side axis, in percent, given to the left column by default. */\nexport const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;\n/** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */\nexport const GIT_SPLIT_MIN_ROW_PX = 140;\n/** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */\nexport const GIT_SPLIT_MIN_COLUMN_PX = 240;\n/** Percentage points moved by one arrow-key press (Shift multiplies the step). */\nexport const GIT_SPLIT_KEY_STEP = 4;\nfunction roundPercent(percent) {\n return Math.round(percent * 100) / 100;\n}\n/**\n * Clamp a leading-pane share to the range that keeps both panes usable, or\n * undefined when the measured geometry cannot express a usable split at all.\n */\nexport function clampGitSplitPercent(percent, geometry) {\n if (!Number.isFinite(percent))\n return undefined;\n const { size, divider, minimum } = geometry;\n if (!Number.isFinite(size) || size <= 0)\n return undefined;\n const lower = (minimum / size) * 100;\n const upper = 100 - ((minimum + Math.max(divider, 0)) / size) * 100;\n if (upper <= lower)\n return undefined;\n return roundPercent(Math.min(Math.max(percent, lower), upper));\n}\n/** Resolve the share that keeps the divider centered under a pointer. */\nexport function gitSplitPercentFromPointer(pointer, geometry) {\n const halfDivider = Math.max(geometry.divider, 0) / 2;\n const leadingPx = pointer - geometry.start - halfDivider;\n return clampGitSplitPercent((leadingPx / geometry.size) * 100, geometry);\n}\n//# sourceMappingURL=git-column-split.js.map","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { GIT_SPLIT_KEY_STEP, clampGitSplitPercent, gitSplitPercentFromPointer } from './git-column-split.js';\n/**\n * Remembers every divider position for the rest of the browser session, so\n * closing and reopening the Git tab keeps the split the user dragged to.\n */\nconst rememberedPercents = new Map();\n/** Arrow keys that move a leading pane forward or backward along one axis. */\nconst KEY_DIRECTIONS = {\n horizontal: { ArrowUp: -1, ArrowDown: 1 },\n vertical: { ArrowLeft: -1, ArrowRight: 1 },\n};\n/**\n * Resize one grid axis with a pointer or the keyboard. The dragging frame writes\n * straight to the DOM custom property, so heavy commit and file lists never\n * re-render per pointer move; React state commits once per gesture.\n */\nexport function useGitPaneSplit(options) {\n const { containerRef, orientation, property, minimum, fallback } = options;\n const splitterRef = useRef(null);\n const [percent, setPercent] = useState(() => rememberedPercents.get(property) ?? fallback);\n const [dragging, setDragging] = useState(false);\n const percentRef = useRef(percent);\n const geometryRef = useRef(undefined);\n const draggingRef = useRef(false);\n const applyPercent = useCallback((next) => {\n percentRef.current = next;\n containerRef.current?.style.setProperty(property, next + '%');\n splitterRef.current?.setAttribute('aria-valuenow', String(Math.round(next)));\n }, [containerRef, property]);\n const commitPercent = useCallback((next) => {\n applyPercent(next);\n rememberedPercents.set(property, next);\n setPercent(next);\n }, [applyPercent, property]);\n useEffect(() => {\n applyPercent(percent);\n rememberedPercents.set(property, percent);\n }, [applyPercent, percent, property]);\n useEffect(() => {\n if (!dragging)\n return undefined;\n // Keep the resize cursor and suppress selection while the pointer is captured.\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.cursor = orientation === 'horizontal' ? 'row-resize' : 'col-resize';\n document.body.style.userSelect = 'none';\n return () => {\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n };\n }, [dragging, orientation]);\n const measure = useCallback(() => {\n const container = containerRef.current;\n const splitter = splitterRef.current;\n if (container === null || splitter === null)\n return undefined;\n const containerRect = container.getBoundingClientRect();\n const splitterRect = splitter.getBoundingClientRect();\n return orientation === 'horizontal'\n ? { start: containerRect.top, size: containerRect.height, divider: splitterRect.height, minimum }\n : { start: containerRect.left, size: containerRect.width, divider: splitterRect.width, minimum };\n }, [containerRef, minimum, orientation]);\n const startDrag = useCallback((event) => {\n if (event.button !== 0)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n geometryRef.current = geometry;\n draggingRef.current = true;\n setDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n event.preventDefault();\n // preventDefault suppresses the default focus; keep the divider keyboard-reachable.\n event.currentTarget.focus({ preventScroll: true });\n }, [measure]);\n const drag = useCallback((event) => {\n const geometry = geometryRef.current;\n if (!draggingRef.current || geometry === undefined)\n return;\n const pointer = orientation === 'horizontal' ? event.clientY : event.clientX;\n const next = gitSplitPercentFromPointer(pointer, geometry);\n if (next !== undefined)\n applyPercent(next);\n }, [applyPercent, orientation]);\n const endDrag = useCallback((event) => {\n if (!draggingRef.current)\n return;\n draggingRef.current = false;\n geometryRef.current = undefined;\n setDragging(false);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n const geometry = measure();\n commitPercent(geometry === undefined\n ? percentRef.current\n : clampGitSplitPercent(percentRef.current, geometry) ?? percentRef.current);\n }, [commitPercent, measure]);\n const onKeyDown = useCallback((event) => {\n const direction = KEY_DIRECTIONS[orientation][event.key];\n if (direction === undefined)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n event.preventDefault();\n const step = GIT_SPLIT_KEY_STEP * (event.shiftKey ? 4 : 1);\n const next = clampGitSplitPercent(percentRef.current + direction * step, geometry);\n if (next !== undefined)\n commitPercent(next);\n }, [commitPercent, measure, orientation]);\n const reset = useCallback(() => {\n commitPercent(fallback);\n }, [commitPercent, fallback]);\n return { splitterRef, percent, dragging, startDrag, drag, endDrag, onKeyDown, reset };\n}\n//# sourceMappingURL=useGitPaneSplit.js.map","/**\n * 插件的稳定、浏览器安全契约层;这里只定义领域值与服务形状,不依赖 Git、sidecar 或 Node runtime。\n * Stable, browser-safe contract layer for the plugin; it defines domain values and service shapes without Git, sidecar, or Node runtime dependencies.\n *\n * @packageDocumentation\n */\n/**\n * 跨 Host/浏览器边界保持稳定的领域错误码;新增、删除或重命名成员都属于公开契约变更。\n * Stable domain error codes shared across the Host/browser boundary; adding, removing, or renaming a member is a public contract change.\n */\nexport const WORKTREE_ERROR_CODES = Object.freeze([\n 'WORKSPACE_NOT_FOUND',\n 'WORKSPACE_NOT_GIT_REPOSITORY',\n 'GIT_NOT_INSTALLED',\n 'WORKTREE_REQUIRES_INITIAL_COMMIT',\n 'WORKTREE_BRANCH_CONFLICT',\n 'WORKTREE_NOT_FOUND',\n 'WORKTREE_ORDER_INVALID',\n 'WORKTREE_REMOVED',\n 'WORKTREE_IMPORT_INVALID',\n 'WORKTREE_ALREADY_MANAGED',\n 'SESSION_NOT_FOUND',\n 'SESSION_CWD_MISMATCH',\n 'SESSION_ALREADY_BOUND',\n 'SIDECAR_UNAVAILABLE',\n 'SIDECAR_CORRUPT',\n 'SIDECAR_SYNC_REQUIRED',\n 'GIT_OPERATION_FAILED',\n 'WORKTREE_MUTATION_BUSY',\n 'WORKTREE_STATE_CONFLICT',\n 'WORKTREE_RECOVERY_REQUIRED',\n 'WORKTREE_IDENTITY_CHANGED',\n 'WORKTREE_PERMISSION_BINDING_REQUIRED',\n 'WORKTREE_SESSION_BUSY',\n 'WORKTREE_ACTIVITY_UNAVAILABLE',\n]);\n/** Stable synthetic commit id used for the current uncommitted working tree entry. */\nexport const WORKTREE_GIT_WORKING_TREE = 'working-tree';\n/** Stable synthetic id used by the Dashboard's baseline-wide summary view. */\nexport const WORKTREE_GIT_SUMMARY = 'summary';\n/**\n * Git object-name guard shared by the Contract, Provider, Manage and Client\n * seams so commit-SHA validation cannot drift between layers. SHA-1 and SHA-256\n * repository formats are both accepted.\n */\nexport const WORKTREE_GIT_COMMIT_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/iu;\n/** True when the value is a full-length Git commit SHA. */\nexport function isWorktreeGitCommit(value) {\n return typeof value === 'string' && WORKTREE_GIT_COMMIT_PATTERN.test(value);\n}\nexport * from './worktree-permission.js';\nexport * from './windows-path.js';\n/**\n * 创建错误 DTO 而不抛出异常,供 Host 将已识别的领域失败投影到 Remote result。\n * Creates an error DTO without throwing, allowing the Host to project recognized domain failures into a Remote result.\n */\nexport function createWorktreeError(code, message, details = {}) {\n return { code, message, details };\n}\n/**\n * Browser Remote 可调用的方法白名单;runtime cwd 解析刻意不进入该边界。\n * Allowlist of Browser Remote methods; runtime cwd resolution is intentionally excluded from this boundary.\n */\nexport const WORKTREE_REMOTE_METHODS = Object.freeze([\n 'getWorktreeInstructions',\n 'updateWorktreeInstructions',\n 'updateWorktreeBaseBranch',\n 'listWorktrees',\n 'listWorktreeCommits',\n 'listWorktreeCommitFiles',\n 'getWorktreeCommitFileDiff',\n 'listImportCandidates',\n 'listBranches',\n 'createWorktree',\n 'importWorktree',\n 'removeWorktree',\n 'unarchiveWorktree',\n 'cleanWorktree',\n 'adoptWorktreeBranch',\n 'recoverWorktrees',\n 'forgetWorktree',\n 'insertWorktreeBefore',\n 'listBindings',\n 'bindSession',\n 'ensureWorktreePermission',\n 'normalizeDetachedWorktreePermissions',\n]);\n//# sourceMappingURL=index.js.map","import { WORKTREE_GIT_WORKING_TREE, isWorktreeGitCommit, } from '../../../contract/index.js';\nexport const MAX_FILE_CACHE = 8;\nexport const MAX_DIFF_CACHE = 24;\n/** The summary selection for one working-tree inclusion mode. */\nexport function summarySelection(includeWorkingTree) {\n return includeWorkingTree ? { kind: 'summary', includeWorkingTree: true } : { kind: 'summary' };\n}\nfunction targetKey(target) {\n if (target.kind === 'commit')\n return 'commit\\u0000' + target.commit;\n if (target.selection.kind === 'summary') {\n return target.selection.includeWorkingTree === true ? 'summary\\u0000working-tree' : 'summary';\n }\n return 'commits\\u0000' + target.selection.commits.join('\\u0000');\n}\nfunction historyProjectionKey(history) {\n if (history.status !== 'ready')\n return 'unknown';\n return (history.value.baseline?.commit ?? 'unknown') + '\\u0000' + (history.value.headCommit ?? 'unknown');\n}\n/** True when the target reads the live working tree and must not be cached. */\nexport function isLiveTarget(target) {\n return target.kind === 'commit'\n ? target.commit === WORKTREE_GIT_WORKING_TREE\n : target.selection.kind === 'summary' && target.selection.includeWorkingTree === true;\n}\n/**\n * Live-result markers complete a cache key. Matching on the marker rather than\n * on a hand-written substring keeps key construction and invalidation aligned.\n */\nconst LIVE_KEY_MARKERS = [\n '\\u0000' + targetKey({ kind: 'commit', commit: WORKTREE_GIT_WORKING_TREE }),\n '\\u0000' + targetKey({ kind: 'selection', selection: summarySelection(true) }),\n];\n/** True when a file or diff cache key belongs to a live working-tree read. */\nexport function isLiveCacheKey(key) {\n return LIVE_KEY_MARKERS.some((marker) => key.includes(marker));\n}\n/**\n * Key token for a read that names no baseline branch and therefore asks the\n * Manager to resolve the Worktree's captured acquisition commit. The leading NUL\n * cannot appear in a local branch name, so the token can never collide with one.\n */\nconst CAPTURED_BASELINE_KEY = '\\u0000captured';\nfunction baselineKey(baseBranch) {\n return baseBranch ?? CAPTURED_BASELINE_KEY;\n}\nexport function gitCacheKey(baseBranch, history, target) {\n return baselineKey(baseBranch) + '\\u0000' + historyProjectionKey(history) + '\\u0000' + targetKey(target);\n}\nexport function diffCacheKey(baseBranch, history, target, filePath) {\n return gitCacheKey(baseBranch, history, target) + '\\u0000' + filePath;\n}\n/** Compare two targets by projection identity rather than object identity. */\nexport function sameTarget(left, right) {\n return targetKey(left) === targetKey(right);\n}\n/** Drop the oldest entries until the cache respects its bound. */\nexport function trimCache(cache, maxSize) {\n while (cache.size > maxSize) {\n const oldest = cache.keys().next().value;\n if (oldest === undefined)\n return;\n cache.delete(oldest);\n }\n}\n/** Find the changed-file row for a new or previous path. */\nexport function fileForPath(files, selectedPath) {\n return files.files.find((file) => file.path === selectedPath || file.oldPath === selectedPath);\n}\n/** Keep only SHAs that are still part of the current history projection. */\nexport function canonicalizeCommits(history, commits) {\n if (history === undefined)\n return [];\n const requested = new Set(commits.filter((commit) => isWorktreeGitCommit(commit)));\n return history.commits\n .filter((commit) => commit.sha !== WORKTREE_GIT_WORKING_TREE && requested.has(commit.sha))\n .map((commit) => commit.sha);\n}\n//# sourceMappingURL=git-state-cache.js.map","import { useEffect, useMemo, useSyncExternalStore } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId } from './git-facts.js';\nimport { MAX_DIFF_CACHE, MAX_FILE_CACHE, canonicalizeCommits, diffCacheKey, fileForPath, gitCacheKey, isLiveCacheKey, isLiveTarget, sameTarget, summarySelection, trimCache, } from './git-state-cache.js';\nfunction asError(error) {\n return error instanceof Error ? error : new Error(String(error));\n}\nfunction normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\nfunction emptyState(defaultBaselineBranch, main) {\n return {\n branches: { status: 'idle' },\n baselineBranch: normalizeBranch(defaultBaselineBranch),\n history: { status: 'idle' },\n view: main ? 'commits' : 'summary',\n includeWorkingTree: false,\n selectedCommits: [],\n commitMultiSelect: false,\n files: { status: 'idle' },\n diff: { status: 'idle' },\n };\n}\n/**\n * Create the browser-safe Git Dashboard state machine. Construction is inert;\n * the caller explicitly starts history loading on first Git-tab activation.\n */\nexport function createWorktreeGitStateController(input) {\n // Main reads the Workspace-root HEAD history directly; Worktree reads still\n // require either an explicit baseline branch or an immutable acquisition commit.\n const main = isMainWorktreeId(input.worktreeId);\n const capturedBaseline = input.capturedBaseline === true;\n const canRead = (baselineBranch) => main || capturedBaseline || baselineBranch !== undefined;\n let state = emptyState(input.defaultBaselineBranch, main);\n let disposed = false;\n let branchesLoaded = false;\n let branchesRequest = 0;\n let historyLoaded = false;\n let historyRequest = 0;\n let filesRequest = 0;\n let diffRequest = 0;\n let branchesInFlight;\n let historyInFlight;\n const filesInFlight = new Map();\n const diffInFlight = new Map();\n const listeners = new Set();\n const filesCache = new Map();\n const diffCache = new Map();\n const emit = () => {\n if (disposed)\n return;\n for (const listener of listeners)\n listener();\n };\n const update = (next) => {\n if (disposed)\n return;\n state = next;\n emit();\n };\n const invalidateWorkingTreeCache = () => {\n for (const key of filesCache.keys()) {\n if (isLiveCacheKey(key))\n filesCache.delete(key);\n }\n for (const key of diffCache.keys()) {\n if (isLiveCacheKey(key))\n diffCache.delete(key);\n }\n };\n const retireLiveInFlight = () => {\n let retired = false;\n for (const key of filesInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n filesInFlight.delete(key);\n retired = true;\n }\n }\n for (const key of diffInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n diffInFlight.delete(key);\n retired = true;\n }\n }\n return retired;\n };\n const currentTarget = () => {\n if (state.view === 'summary') {\n return { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n }\n if (state.selectedCommit === undefined)\n return undefined;\n if (state.selectedCommit !== WORKTREE_GIT_WORKING_TREE &&\n state.selectedCommits.length > 1) {\n return { kind: 'selection', selection: { kind: 'commits', commits: state.selectedCommits } };\n }\n return { kind: 'commit', commit: state.selectedCommit };\n };\n /**\n * Stale-response guard. A completion only publishes while it is still the\n * newest request for the same baseline, projection, and selected path.\n */\n const isCurrentRequest = (request, latestRequest, baselineBranch, target, selectedPath) => {\n if (disposed || request !== latestRequest || state.baselineBranch !== baselineBranch)\n return false;\n const active = currentTarget();\n if (active === undefined || !sameTarget(active, target))\n return false;\n return selectedPath === undefined || state.selectedPath === selectedPath;\n };\n const requestFiles = (baseBranch, history, target) => {\n const key = gitCacheKey(baseBranch, history, target);\n const existing = filesInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n filesInFlight.set(key, promise);\n void promise.then(() => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n }, () => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n });\n return promise;\n };\n const requestDiff = (baseBranch, history, target, diffPath) => {\n const key = diffCacheKey(baseBranch, history, target, diffPath);\n const existing = diffInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.getWorktreeCommitFileDiff({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n path: diffPath,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n diffInFlight.set(key, promise);\n void promise.then(() => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n }, () => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n });\n return promise;\n };\n const loadDiff = async (target, selectedPath, diffPath) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++diffRequest;\n const key = diffCacheKey(baselineBranch, state.history, target, diffPath);\n const cached = isLiveTarget(target) ? undefined : diffCache.get(key);\n if (cached !== undefined) {\n update({ ...state, selectedPath, diff: { status: 'ready', value: cached } });\n return;\n }\n update({ ...state, selectedPath, diff: { status: 'loading' } });\n try {\n const value = await requestDiff(baselineBranch, state.history, target, diffPath);\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n if (!isLiveTarget(target)) {\n diffCache.set(key, value);\n trimCache(diffCache, MAX_DIFF_CACHE);\n }\n update({ ...state, diff: { status: 'ready', value } });\n }\n catch (error) {\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n update({ ...state, diff: { status: 'error', error: asError(error) } });\n }\n };\n const applyFiles = (target, value) => {\n const selectedPath = value.files[0]?.path;\n update({\n ...state,\n files: { status: 'ready', value },\n selectedPath,\n diff: { status: 'idle' },\n });\n if (selectedPath !== undefined)\n void loadDiff(target, selectedPath, selectedPath);\n };\n const loadFiles = async (target, preserveReady = false) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++filesRequest;\n ++diffRequest;\n const key = gitCacheKey(baselineBranch, state.history, target);\n const cached = isLiveTarget(target) ? undefined : filesCache.get(key);\n if (cached !== undefined) {\n applyFiles(target, cached);\n return;\n }\n const previousFiles = state.files.status === 'ready' ? state.files : undefined;\n if (!preserveReady || previousFiles === undefined) {\n update({ ...state, files: { status: 'loading' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else {\n update({ ...state, files: { ...previousFiles, refreshing: true } });\n }\n try {\n const value = await requestFiles(baselineBranch, state.history, target);\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (!isLiveTarget(target)) {\n filesCache.set(key, value);\n trimCache(filesCache, MAX_FILE_CACHE);\n }\n applyFiles(target, value);\n }\n catch (error) {\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (preserveReady && previousFiles !== undefined) {\n update({ ...state, files: { status: 'ready', value: previousFiles.value, error: asError(error) } });\n }\n else {\n update({ ...state, files: { status: 'error', error: asError(error) }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n }\n };\n const resetTarget = (next) => {\n retireLiveInFlight();\n ++filesRequest;\n ++diffRequest;\n update({\n ...state,\n ...next,\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n };\n const selectBaselineBranch = (branch) => {\n if (disposed || main)\n return;\n const nextBranch = normalizeBranch(branch);\n if (state.baselineBranch === nextBranch)\n return;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n historyInFlight = undefined;\n historyLoaded = false;\n filesInFlight.clear();\n diffInFlight.clear();\n filesCache.clear();\n diffCache.clear();\n update({\n ...state,\n baselineBranch: nextBranch,\n history: { status: 'idle' },\n view: 'summary',\n selectedCommit: undefined,\n selectedCommits: [],\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n // Clearing an explicit selection falls back to the captured baseline, so it\n // must re-read rather than leave the previous branch projection on screen.\n if (nextBranch !== undefined || capturedBaseline)\n void loadHistory();\n };\n const selectSummary = () => {\n if (disposed || main || !canRead(state.baselineBranch))\n return;\n const target = { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n resetTarget({ view: 'summary', selectedCommit: undefined, selectedCommits: [] });\n void loadFiles(target);\n };\n const setIncludeWorkingTree = (includeWorkingTree) => {\n if (disposed || main || state.includeWorkingTree === includeWorkingTree)\n return;\n if (state.view !== 'summary' || !canRead(state.baselineBranch)) {\n update({ ...state, includeWorkingTree });\n return;\n }\n const target = { kind: 'selection', selection: summarySelection(includeWorkingTree) };\n resetTarget({ includeWorkingTree });\n void loadFiles(target);\n };\n const selectView = (view) => {\n if (view === 'summary') {\n selectSummary();\n return;\n }\n if (disposed || !canRead(state.baselineBranch))\n return;\n const selectedCommit = state.selectedCommit;\n const selectedCommits = state.selectedCommits;\n if (state.view === 'commits' && state.files.status === 'ready')\n return;\n resetTarget({ view: 'commits' });\n if (selectedCommit === undefined)\n return;\n const target = selectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: selectedCommit };\n void loadFiles(target);\n };\n const selectCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history !== undefined && !history.commits.some((candidate) => candidate.sha === commit))\n return;\n const target = { kind: 'commit', commit };\n const selectedCommits = commit === WORKTREE_GIT_WORKING_TREE ? [] : [commit];\n if (state.view === 'commits' && state.selectedCommit === commit && state.files.status === 'ready' && state.selectedCommits.length <= 1)\n return;\n resetTarget({ view: 'commits', selectedCommit: commit, selectedCommits });\n void loadFiles(target);\n };\n const toggleCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch) || commit === WORKTREE_GIT_WORKING_TREE)\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history === undefined || !history.commits.some((candidate) => candidate.sha === commit && candidate.sha !== WORKTREE_GIT_WORKING_TREE))\n return;\n const selected = state.selectedCommits.includes(commit)\n ? state.selectedCommits.filter((candidate) => candidate !== commit)\n : [...state.selectedCommits, commit];\n const canonical = canonicalizeCommits(history, selected);\n if (canonical.length === 0) {\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n return;\n }\n const selectedCommit = canonical.includes(commit) ? commit : canonical[canonical.length - 1];\n const target = canonical.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: canonical } }\n : { kind: 'commit', commit: selectedCommit };\n resetTarget({ view: 'commits', selectedCommit, selectedCommits: canonical });\n void loadFiles(target);\n };\n /**\n * Switch between replace-on-click and additive selection. Turning multi-select\n * off collapses an aggregate target back to its primary commit so the files and\n * diff panes keep matching the visible selection.\n */\n const setCommitMultiSelect = (enabled) => {\n if (disposed || state.commitMultiSelect === enabled)\n return;\n if (enabled) {\n update({ ...state, commitMultiSelect: true });\n return;\n }\n const primary = state.selectedCommit;\n const aggregated = state.view === 'commits' && primary !== undefined && state.selectedCommits.length > 1;\n if (!aggregated) {\n update({\n ...state,\n commitMultiSelect: false,\n selectedCommits: primary === undefined ? [] : [primary],\n });\n return;\n }\n // selectCommit must still observe the aggregate selection; collapsing it first\n // would trip the \"already showing this commit\" guard and keep the union files.\n update({ ...state, commitMultiSelect: false });\n selectCommit(primary);\n };\n const clearCommitSelection = () => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n };\n const selectPath = (selectedPath) => {\n if (disposed || state.files.status !== 'ready')\n return;\n const target = currentTarget();\n if (target === undefined)\n return;\n const changedFile = fileForPath(state.files.value, selectedPath);\n if (changedFile === undefined)\n return;\n ++diffRequest;\n void loadDiff(target, selectedPath, changedFile.path);\n };\n const loadBranches = (refresh = false) => {\n if (disposed || main)\n return Promise.resolve();\n if (branchesInFlight !== undefined)\n return branchesInFlight;\n if (!refresh && branchesLoaded)\n return Promise.resolve();\n const request = ++branchesRequest;\n const previous = state.branches;\n if (refresh && previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, branches: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager?.listBranches === undefined) {\n if (!disposed && request === branchesRequest) {\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value: [] } });\n }\n return;\n }\n try {\n const value = await input.manager.listBranches({ workspaceId: input.workspaceId });\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value } });\n }\n catch (error) {\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = false;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, branches: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (branchesInFlight === promise)\n branchesInFlight = undefined;\n });\n branchesInFlight = promise;\n return promise;\n };\n const loadHistory = (refresh = false) => {\n if (disposed || !canRead(state.baselineBranch))\n return Promise.resolve();\n if (historyInFlight !== undefined)\n return historyInFlight;\n if (!refresh && historyLoaded)\n return Promise.resolve();\n const baselineBranch = state.baselineBranch;\n const request = ++historyRequest;\n const previous = state.history;\n const refreshesWorkingTree = refresh && state.selectedCommit === WORKTREE_GIT_WORKING_TREE;\n if (refresh) {\n const retiredLiveReads = retireLiveInFlight();\n if (retiredLiveReads) {\n ++filesRequest;\n ++diffRequest;\n if (state.files.status === 'loading') {\n update({ ...state, files: { status: 'idle' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else if (state.diff.status === 'loading') {\n update({ ...state, diff: { status: 'idle' } });\n }\n }\n }\n if (refreshesWorkingTree)\n invalidateWorkingTreeCache();\n if (refresh && previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, history: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager === undefined) {\n const error = new Error('Git manager unavailable');\n if (!disposed && request === historyRequest) {\n historyLoaded = true;\n update({ ...state, history: { status: 'error', error } });\n }\n return;\n }\n try {\n const value = await input.manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n });\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const selectedCommits = state.view === 'summary'\n ? []\n : canonicalizeCommits(value, state.selectedCommits);\n const selectedCommitStillExists = state.view !== 'summary' &&\n state.selectedCommit !== undefined &&\n value.commits.some((commit) => commit.sha === state.selectedCommit);\n const nextSelectedCommit = state.view === 'summary'\n ? undefined\n : selectedCommitStillExists\n ? state.selectedCommit\n : selectedCommits[0] ?? value.commits[0]?.sha;\n const nextSelectedCommits = state.view === 'summary'\n ? []\n : selectedCommits.length > 0\n ? selectedCommits\n : nextSelectedCommit !== undefined && nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE\n ? [nextSelectedCommit]\n : [];\n update({\n ...state,\n history: { status: 'ready', value },\n selectedCommits: nextSelectedCommits,\n selectedCommit: nextSelectedCommit,\n });\n if (state.view === 'summary') {\n void loadFiles({ kind: 'selection', selection: summarySelection(state.includeWorkingTree) }, true);\n }\n else if (nextSelectedCommit === undefined) {\n resetTarget({ selectedCommit: undefined, selectedCommits: [] });\n }\n else if (!selectedCommitStillExists || selectedCommits.length !== state.selectedCommits.length || refreshesWorkingTree) {\n const target = nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: nextSelectedCommit };\n void loadFiles(target, refreshesWorkingTree);\n }\n }\n catch (error) {\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, history: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (historyInFlight === promise)\n historyInFlight = undefined;\n });\n historyInFlight = promise;\n return promise;\n };\n const controller = {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n loadBranches: () => loadBranches(false),\n loadHistory: () => loadHistory(false),\n refresh: () => {\n const branchesTask = loadBranches(true);\n const historyTask = loadHistory(true);\n return Promise.all([branchesTask, historyTask]).then(() => undefined);\n },\n selectBaselineBranch,\n selectView,\n selectSummary,\n setIncludeWorkingTree,\n selectCommit,\n toggleCommit,\n setCommitMultiSelect,\n clearCommitSelection,\n selectPath,\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n ++branchesRequest;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n listeners.clear();\n },\n };\n return controller;\n}\n/** React adapter; the first Git history request starts in the mount effect. */\nexport function useWorktreeGitState(input) {\n const controller = useMemo(() => createWorktreeGitStateController(input), [\n input.manager,\n input.workspaceId,\n input.worktreeId,\n input.defaultBaselineBranch,\n input.capturedBaseline,\n ]);\n const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);\n useEffect(() => {\n void controller.loadBranches();\n void controller.loadHistory();\n return controller.dispose;\n }, [controller]);\n return {\n ...snapshot,\n loadBranches: controller.loadBranches,\n loadHistory: controller.loadHistory,\n refresh: controller.refresh,\n selectBaselineBranch: controller.selectBaselineBranch,\n selectView: controller.selectView,\n selectSummary: controller.selectSummary,\n setIncludeWorkingTree: controller.setIncludeWorkingTree,\n selectCommit: controller.selectCommit,\n toggleCommit: controller.toggleCommit,\n setCommitMultiSelect: controller.setCommitMultiSelect,\n clearCommitSelection: controller.clearCommitSelection,\n selectPath: controller.selectPath,\n dispose: controller.dispose,\n };\n}\n//# sourceMappingURL=useWorktreeGitState.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitChangedFiles } from './GitChangedFiles.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport { GitCommitList } from './GitCommitList.js';\nimport { GitDiffView } from './GitDiffView.js';\nimport { 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';\nimport { useGitPaneSplit } from './useGitPaneSplit.js';\nimport { useWorktreeGitState } from './useWorktreeGitState.js';\nimport styles from './worktree-git.css';\nfunction shortCommit(commit) {\n return commit === undefined ? '—' : commit.slice(0, 7);\n}\nfunction selectedCommit(history, sha) {\n return history?.commits.find((commit) => commit.sha === sha);\n}\nfunction commitCountLabel(history, t) {\n const committedCount = history.commits.filter((commit) => commit.kind !== 'working-tree').length;\n return history.commits.some((commit) => commit.kind === 'working-tree')\n ? t('dashboard.git.commitCountWithWorkingTree', { commits: committedCount })\n : t('dashboard.git.commitCount', { n: committedCount });\n}\nfunction commitLabel(commit, t) {\n return commit.kind === 'working-tree'\n ? t('dashboard.git.workingTree')\n : shortCommit(commit.sha);\n}\nfunction readyFiles(value) {\n return value?.files ?? [];\n}\n/** Empty-state copy per honest unavailable reason; one definition for both blocks. */\nconst UNAVAILABLE_COPY = {\n main: {\n title: 'dashboard.git.mainUnavailableTitle',\n description: 'dashboard.git.mainUnavailableDescription',\n },\n 'baseline-unselected': {\n title: 'dashboard.git.selectBaselineTitle',\n description: 'dashboard.git.selectBaselineDescription',\n },\n 'baseline-unknown': {\n title: 'dashboard.git.baselineUnknownTitle',\n description: 'dashboard.git.baselineUnknownDescription',\n },\n};\nfunction UnavailableNotice({ reason, t, }) {\n 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) })] }));\n}\n/** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */\nexport function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }) {\n const isMain = isMainWorktreeId(worktreeId);\n const selectedDefaultBaseline = normalizeBaselineBranch(defaultBaselineBranch, currentBranch);\n const state = useWorktreeGitState({\n manager,\n workspaceId,\n worktreeId,\n defaultBaselineBranch: isMain ? undefined : selectedDefaultBaseline,\n capturedBaseline: isMain ? false : capturedBaseline,\n });\n const gridRef = useRef(null);\n // Both dividers share the grid: one splits rows, one splits columns, in either layout.\n const rows = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'horizontal',\n property: '--git-rows-top',\n minimum: GIT_SPLIT_MIN_ROW_PX,\n fallback: GIT_SPLIT_DEFAULT_ROW_PERCENT,\n });\n const columns = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'vertical',\n property: '--git-columns-left',\n minimum: GIT_SPLIT_MIN_COLUMN_PX,\n fallback: GIT_SPLIT_DEFAULT_COLUMN_PERCENT,\n });\n const historyValue = state.history.status === 'ready' ? state.history.value : undefined;\n const commit = selectedCommit(historyValue, state.selectedCommit);\n const files = state.files.status === 'ready' ? readyFiles(state.files.value) : [];\n const diff = state.diff.status === 'ready' ? state.diff.value : undefined;\n const refreshing = state.history.status === 'ready' && state.history.refreshing === true;\n const unavailable = historyValue?.unavailableReason;\n const branchOptions = (state.branches.status === 'ready' ? state.branches.value : [])\n .filter((branch) => branch.name !== currentBranch);\n const branchError = state.branches.status === 'error'\n ? state.branches.error\n : state.branches.status === 'ready'\n ? state.branches.error\n : undefined;\n const baselineCommit = historyValue?.baseline?.commit;\n const baselineRef = state.baselineBranch ?? historyValue?.baseline?.ref;\n const targetLabel = state.view === 'summary'\n ? t('dashboard.git.baselineSummary')\n : state.selectedCommits.length > 1\n ? t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length })\n : commit === undefined\n ? undefined\n : commitLabel(commit, t);\n const hasTarget = state.view === 'summary' || commit !== undefined;\n const lineTotals = state.files.status === 'ready' && hasTarget ? sumLineTotals(files) : undefined;\n 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', {\n ahead: historyValue.ahead,\n behind: historyValue.behind,\n }) }) })] }))] }))] })), 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'\n ? _jsx(\"span\", { children: targetLabel })\n : _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', {\n additions: lineTotals.additions,\n deletions: lineTotals.deletions,\n }) })))] })] }), 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'\n ? state.includeWorkingTree\n ? t('dashboard.git.noLiveBaselineChanges')\n : t('dashboard.git.noBaselineChanges')\n : 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 }))] })] }))] }));\n}\n/**\n * Draggable divider that resizes one axis of the Git grid. The wide layout puts\n * the row divider inside the left column and the column divider beside it; the\n * narrow layout keeps both, between the top panes and above the diff.\n */\nfunction GitSplitter({ split, orientation, axis, label }) {\n 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 }));\n}\nfunction errorText(error, t) {\n return error.message || t('dashboard.unknownError');\n}\n//# sourceMappingURL=WorktreeGitPanel.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useState } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from '../dashboard.css';\nfunction isWorkingTreeCommit(commit) {\n return commit.kind === 'working-tree' || commit.sha === WORKTREE_GIT_WORKING_TREE;\n}\n/** Read the compact Git projections needed by the Overview status facts. */\nexport function useWorktreeGitOverview(input) {\n const baselineBranch = normalizeBaselineBranch(input.defaultBaselineBranch, input.currentBranch);\n // A captured acquisition commit keeps the Overview readable without a selected\n // branch; Main keeps this comparison-only Overview disconnected while its Git tab reads direct history.\n const readable = input.capturedBaseline === true || baselineBranch !== undefined;\n const [state, setState] = useState({ status: 'unavailable' });\n useEffect(() => {\n if (input.manager === undefined || isMainWorktreeId(input.worktreeId) || !readable) {\n setState({ status: 'unavailable' });\n return;\n }\n const manager = input.manager;\n let active = true;\n setState({ status: 'loading' });\n void manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n })\n .then(async (history) => {\n const workingTree = history.commits.find(isWorkingTreeCommit);\n const committedFilesPromise = history.unavailableReason === undefined\n ? manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n selection: { kind: 'summary', includeWorkingTree: false },\n }).then((result) => result.files)\n : Promise.resolve([]);\n const workingTreeFilesPromise = workingTree === undefined\n ? Promise.resolve([])\n : manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n commit: workingTree.sha,\n }).then((result) => result.files);\n const [committedFiles, workingTreeFiles] = await Promise.all([\n committedFilesPromise,\n workingTreeFilesPromise,\n ]);\n if (active)\n setState({ status: 'ready', history, committedFiles, workingTreeFiles });\n })\n .catch(() => {\n if (active)\n setState({ status: 'error' });\n });\n return () => {\n active = false;\n };\n }, [baselineBranch, readable, input.manager, input.workspaceId, input.worktreeId]);\n return state;\n}\nexport function WorktreeGitOverviewValue({ state, metric, t, }) {\n if (state.status !== 'ready') {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n if (metric === 'aheadBehind') {\n const { ahead, behind } = state.history;\n if (ahead === undefined || behind === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n return (_jsx(GitLineStats, { additions: ahead, deletions: behind, ariaLabel: t('dashboard.git.aheadBehindStats', { ahead, behind }) }));\n }\n if (state.history.unavailableReason !== undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n const files = metric === 'committed' ? state.committedFiles : state.workingTreeFiles;\n const totals = sumLineTotals(files);\n if (totals === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.unknown') });\n }\n return (_jsx(GitLineStats, { additions: totals.additions, deletions: totals.deletions, ariaLabel: t('dashboard.git.lineStats', {\n additions: totals.additions,\n deletions: totals.deletions,\n }) }));\n}\n//# sourceMappingURL=WorktreeGitOverview.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport { Button, Input, Modal, StateDot, Tooltip, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconBranchOutline16, IconCheckOutline16, IconCopyOutline16, IconEditOutline16, IconPanelLeftOutline16, IconSearchOutline16, } from '../dsh-icons.js';\nimport { isBlankSession, relativeTime, sessionDisplayLabel } from '../session/session-view.js';\nimport { currentSessionIdFromList } from '../session/session-selection.js';\nimport { sessionStatusLabel, sessionTimeLabel } from '../session/session-labels.js';\nimport { OpenInAppButton } from './OpenInAppButton.js';\nimport { mountDashboardOverlay } from './dashboard-overlay.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\nimport { selectWorktreeAcquisitionFacts } from './worktree-acquisition-facts.js';\nimport styles from './dashboard.css';\nimport { WorktreeInstructions } from './WorktreeInstructions.js';\nimport { WorktreeGitPanel } from './git/WorktreeGitPanel.js';\nimport { useWorktreeGitOverview, WorktreeGitOverviewValue, } from './git/WorktreeGitOverview.js';\nconst TABS = ['overview', 'git', 'sessions', 'children', 'settings'];\nfunction DashboardIcon({ kind }) {\n const paths = {\n overview: 'M3 3h7v7H3z M14 3h7v7h-7z M3 14h7v7H3z M14 14h7v7h-7z',\n git: 'M7 7v10 M17 7v3c0 4-10 0-10 4 M5 3h4v4H5z M5 17h4v4H5z M15 3h4v4h-4z',\n sessions: 'M4 4h16v13H9l-5 4z M8 8h8 M8 12h5',\n children: 'M12 7v5 M5 17v-5h14v5 M9 3h6v4H9z M2 17h6v4H2z M16 17h6v4h-6z',\n settings: 'M4 6h16 M4 12h16 M4 18h16 M8 3v6 M16 9v6 M10 15v6',\n instructions: 'M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5',\n actions: 'M13 2 4 14h7l-1 8 10-13h-8z',\n };\n return (_jsx(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.6\", strokeLinecap: \"round\", strokeLinejoin: \"round\", \"aria-hidden\": \"true\", children: _jsx(\"path\", { d: paths[kind] }) }));\n}\nfunction Card({ title, icon, action, children, }) {\n return (_jsxs(\"section\", { className: styles.dashboardCard, children: [_jsxs(\"div\", { className: styles.dashboardCardHeading, children: [_jsxs(\"h2\", { children: [icon, title] }), action] }), children] }));\n}\nfunction DashboardFactRow({ label, children, action, baseline = false, }) {\n return (_jsxs(\"div\", { children: [_jsx(\"dt\", { children: label }), _jsx(\"dd\", { \"data-dashboard-baseline\": baseline ? true : undefined, children: children }), _jsx(\"span\", { className: styles.dashboardFactAction, children: action })] }));\n}\nfunction PlaceholderButton({ children, t }) {\n return (_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: true, title: t('dashboard.soon'), children: children }));\n}\nfunction WorktreeBaselineEditor({ value, branches, currentBranch, onSave, t, disabled, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [search, setSearch] = useState('');\n const [pending, setPending] = useState(false);\n const [error, setError] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n const optionRefs = useRef([]);\n const trigger = useRef(null);\n const wasOpen = useRef(false);\n const expected = useRef(value);\n const pickerId = useId();\n const options = branches.filter((branch) => branch.name !== currentBranch);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n expected.current = value;\n }, [value]);\n useEffect(() => {\n if (wasOpen.current && draft === undefined)\n trigger.current?.focus();\n wasOpen.current = draft !== undefined;\n }, [draft]);\n const closeEditor = () => {\n if (pending)\n return;\n setDraft(undefined);\n setSearch('');\n setError(false);\n };\n const openEditor = () => {\n expected.current = saved;\n setDraft(saved ?? '');\n setSearch('');\n setError(false);\n };\n const query = search.trim().toLowerCase();\n const filteredOptions = query.length === 0\n ? options\n : options.filter((branch) => branch.name.toLowerCase().includes(query));\n const activeIndex = filteredOptions.findIndex((branch) => branch.name === draft);\n // The list is a permanent, fixed-height region: filtering swaps its rows but\n // never changes its height, so the modal frame stays put.\n const listOpen = filteredOptions.length > 0;\n const selectOption = (index) => {\n if (pending)\n return;\n const branch = filteredOptions[index];\n if (branch === undefined)\n return;\n setDraft(branch.name);\n };\n const moveOption = (offset) => {\n if (filteredOptions.length === 0)\n return;\n const nextIndex = activeIndex < 0\n ? offset > 0\n ? 0\n : filteredOptions.length - 1\n : (activeIndex + offset + filteredOptions.length) % filteredOptions.length;\n selectOption(nextIndex);\n optionRefs.current[nextIndex]?.scrollIntoView({ block: 'nearest' });\n };\n const onSearchKeyDown = (event) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n moveOption(event.key === 'ArrowDown' ? 1 : -1);\n }\n else if (event.key === 'Enter' && filteredOptions.length > 0) {\n event.preventDefault();\n selectOption(activeIndex < 0 ? 0 : activeIndex);\n }\n };\n const save = async () => {\n if (busy.current ||\n draft === undefined ||\n onSave === undefined ||\n !options.some((branch) => branch.name === draft))\n return;\n busy.current = true;\n setPending(true);\n setError(false);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n expected.current = result;\n setDraft(undefined);\n setSearch('');\n }\n }\n catch {\n if (alive.current)\n setError(true);\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(_Fragment, { children: [_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, action: onSave !== undefined ? (_jsx(Tooltip, { label: t('dashboard.editBase'), side: \"bottom\", delayMs: 500, disabled: disabled || options.length === 0, children: _jsx(\"button\", { type: \"button\", ref: trigger, className: styles.dashboardIconButton, \"data-dashboard-baseline-edit\": true, \"aria-label\": t('dashboard.editBase'), title: t('dashboard.editBase'), \"aria-haspopup\": \"dialog\", \"aria-expanded\": draft !== undefined, disabled: disabled || options.length === 0, onClick: openEditor, children: _jsx(IconEditOutline16, {}) }) })) : undefined, children: saved === undefined ? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) : (_jsx(\"span\", { \"data-dashboard-baseline-value\": true, children: saved })) }), _jsx(Modal, { open: draft !== undefined, onClose: closeEditor, closeLabel: t('dialog.closeBaseline'), title: t('dashboard.editBase'), description: t('dashboard.editBaseDescription'), className: styles.dashboardBaselineModal, contentClassName: styles.dashboardBaselineModalContent, footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: closeEditor, children: t('dashboard.cancelBase') }), _jsx(Button, { variant: \"primary\", \"data-dashboard-baseline-save\": true, disabled: pending || disabled || !options.some((branch) => branch.name === draft), onClick: () => void save(), children: t(pending ? 'dashboard.savingBase' : 'dashboard.saveBase') })] }), children: _jsxs(\"div\", { className: styles.dashboardBaselinePicker, \"data-dashboard-baseline-modal\": true, children: [_jsx(Input, { icon: _jsx(IconSearchOutline16, {}), className: styles.dashboardBaselineSearch, \"aria-label\": t('dashboard.searchBranches'), role: \"combobox\", \"aria-autocomplete\": \"list\", \"aria-controls\": listOpen ? `${pickerId}-options` : undefined, \"aria-expanded\": listOpen, \"aria-haspopup\": \"listbox\", \"aria-activedescendant\": listOpen && activeIndex >= 0 ? `${pickerId}-option-${activeIndex}` : undefined, \"data-dashboard-baseline-search\": true, disabled: pending || disabled, placeholder: t('dashboard.searchBranches'), value: search, onKeyDown: onSearchKeyDown, onChange: (event) => setSearch(event.currentTarget.value) }), _jsx(\"div\", { className: styles.dashboardBaselineOptions, \"data-dashboard-baseline-options\": true, children: listOpen ? (_jsx(\"div\", { id: `${pickerId}-options`, className: styles.dashboardBaselineList, role: \"listbox\", \"aria-label\": t('dashboard.searchBranches'), children: filteredOptions.map((branch, index) => (_jsxs(\"button\", { type: \"button\", ref: (element) => {\n optionRefs.current[index] = element;\n }, id: `${pickerId}-option-${index}`, className: styles.dashboardBaselineOption, \"data-dashboard-baseline-option\": branch.name, \"data-highlighted\": activeIndex === index ? true : undefined, role: \"option\", \"aria-selected\": branch.name === draft, onClick: () => selectOption(index), children: [_jsx(IconBranchOutline16, {}), _jsx(\"span\", { className: styles.dashboardBaselineOptionLabel, children: branch.name }), branch.name === draft && _jsx(IconCheckOutline16, {})] }, branch.name))) })) : (_jsx(\"div\", { className: styles.dashboardBaselineEmpty, \"data-dashboard-baseline-empty\": true, role: \"status\", \"aria-live\": \"polite\", children: t('dashboard.noMatchingBranches') })) }), _jsx(\"div\", { className: styles.dashboardBaselineStatus, \"data-dashboard-baseline-status\": true, children: error && (_jsx(\"span\", { className: styles.dashboardBaselineError, \"data-dashboard-baseline-error\": true, role: \"alert\", children: t('dashboard.baseSaveFailed') })) })] }) })] }));\n}\n/** A managed Worktree or browser Main projection with explicit unavailable states for inapplicable facts. */\nexport function WorktreeDashboard({ manager, record, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onOpenFile, onSaveInstructions, onSaveBaseline, branches = [], }) {\n const surface = useRef(null);\n const heading = useRef(null);\n const [placement, setPlacement] = useState();\n const [rightSidebarOpen, setRightSidebarOpen] = useState(Boolean(isRightSidebarExpanded?.()));\n const [tab, setTab] = useState('overview');\n const [baselineBranch, setBaselineBranch] = useState(record.baseBranch);\n const [copyState, setCopyState] = useState('idle');\n const [branchCopyState, setBranchCopyState] = useState('idle');\n const copyGeneration = useRef(0);\n const branchCopyGeneration = useRef(0);\n const copyPending = useRef(false);\n const branchCopyPending = useRef(false);\n const id = useId();\n useEffect(() => {\n setBaselineBranch(record.baseBranch);\n }, [record.baseBranch]);\n useLayoutEffect(() => {\n const element = surface.current;\n if (!element)\n return;\n return mountDashboardOverlay(element, (next) => setPlacement((previous) => JSON.stringify(previous) === JSON.stringify(next) ? previous : next), {\n onRightSidebarChange: (open) => setRightSidebarOpen(open),\n isRightSidebarExpanded,\n });\n }, [isRightSidebarExpanded]);\n useLayoutEffect(() => {\n if (!placement)\n return;\n const previous = document.activeElement;\n const element = surface.current;\n heading.current?.focus({ preventScroll: true });\n return () => {\n if (previous instanceof HTMLElement &&\n previous.isConnected &&\n (element?.contains(document.activeElement) || document.activeElement === document.body)) {\n previous.focus({ preventScroll: true });\n }\n };\n }, [placement !== undefined]);\n useEffect(() => {\n copyGeneration.current += 1;\n copyPending.current = false;\n setCopyState('idle');\n return () => {\n copyGeneration.current += 1;\n };\n }, [record.absolutePath]);\n useEffect(() => {\n branchCopyGeneration.current += 1;\n branchCopyPending.current = false;\n setBranchCopyState('idle');\n return () => {\n branchCopyGeneration.current += 1;\n };\n }, [record.branch]);\n const copyPath = async () => {\n if (copyPending.current)\n return;\n copyPending.current = true;\n const generation = copyGeneration.current;\n setCopyState('pending');\n try {\n const copied = await writeClipboard(record.absolutePath);\n if (generation === copyGeneration.current)\n setCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === copyGeneration.current)\n setCopyState('failed');\n }\n finally {\n if (generation === copyGeneration.current)\n copyPending.current = false;\n }\n };\n const branchAvailable = record.branch.length > 0;\n const displayBranch = branchAvailable ? record.branch : t('dashboard.branchUnavailable');\n const copyBranch = async () => {\n if (!branchAvailable || branchCopyPending.current)\n return;\n branchCopyPending.current = true;\n const generation = branchCopyGeneration.current;\n setBranchCopyState('pending');\n try {\n const copied = await writeClipboard(record.branch);\n if (generation === branchCopyGeneration.current)\n setBranchCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === branchCopyGeneration.current)\n setBranchCopyState('failed');\n }\n finally {\n if (generation === branchCopyGeneration.current)\n branchCopyPending.current = false;\n }\n };\n const healthKey = record.health === 'ready'\n ? 'worktree.ready'\n : record.health === 'repair'\n ? 'worktree.repair'\n : record.health === 'recovery-needed'\n ? 'worktree.recovery'\n : record.health === 'branch-drift'\n ? 'worktree.branchDrift'\n : record.health === 'cleaned'\n ? 'dashboard.cleaned'\n : 'dashboard.unknown';\n const liveBranch = record.currentBranch === null\n ? t('dashboard.detached')\n : (record.currentBranch ??\n (branchAvailable ? record.branch : t('dashboard.branchUnavailable')));\n const baselineCurrentBranch = record.currentBranch === undefined ? record.branch : record.currentBranch ?? undefined;\n const persistBaseline = onSaveBaseline === undefined\n ? undefined\n : async (baseBranch, expectedBaseBranch) => {\n const result = await onSaveBaseline(baseBranch, expectedBaseBranch);\n setBaselineBranch(result);\n return result;\n };\n const displayedBaseline = onSaveBaseline === undefined ? record.baseBranch : baselineBranch;\n const gitOverview = useWorktreeGitOverview({\n manager,\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n defaultBaselineBranch: displayedBaseline,\n currentBranch: baselineCurrentBranch,\n capturedBaseline: record.baseCommit !== undefined,\n });\n const acquisitionFacts = selectWorktreeAcquisitionFacts(record);\n const acquisitionLabel = acquisitionFacts.timestampKind === 'imported' ? 'dashboard.imported' : 'dashboard.created';\n const tabLabel = (value) => t(`dashboard.tab.${value}`);\n const placeholder = _jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.soon') });\n const selectTab = (next, focus = false) => {\n setTab(next);\n if (focus)\n document.getElementById(`${id}-${next}`)?.focus();\n };\n const tabLink = (next, label) => (_jsxs(\"button\", { type: \"button\", className: styles.dashboardLink, onClick: () => selectTab(next, true), children: [label, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }));\n const sessionList = (ids) => ids.length === 0 ? (_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.noSessions') }) })) : (_jsx(\"ul\", { className: styles.dashboardSessions, children: ids.map((sessionId) => {\n const presentation = sessionPresentations[sessionId];\n const blank = isBlankSession(sessionId, sessions);\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { type: \"button\", \"data-dashboard-session\": sessionId, \"aria-current\": currentSessionIdFromList(sessions) === sessionId ? 'page' : undefined, onClick: () => onOpenSession(sessionId), children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsx(\"span\", { className: styles.dashboardSessionLabel, children: sessionDisplayLabel(sessionId, sessions, t('session.new')) }), !blank && (_jsx(\"span\", { className: styles.dashboardSessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionStatus, \"data-dashboard-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionTime, \"data-dashboard-session-time\": true, children: timeLabel })) : null })), _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }) }, sessionId));\n }) }));\n const topActionIsCreateSession = sessionIds.length === 0 && onCreateSession !== undefined;\n return (_jsx(\"section\", { ref: surface, className: styles.dashboardSurface, \"data-worktree-dashboard\": record.worktreeId, \"aria-labelledby\": `${id}-title`, style: placement ?? { visibility: 'hidden', height: 0 }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n // Other dashboard menus own Escape even when focus remains elsewhere in the surface.\n if (event.currentTarget.querySelector('[role=\"menu\"]'))\n return;\n event.stopPropagation();\n onClose();\n }\n }, children: _jsxs(\"div\", { className: styles.dashboardPage, children: [_jsxs(\"div\", { className: styles.dashboardTopline, children: [_jsxs(\"span\", { children: [workspaceTitle, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \" / \" }), t('dashboard.preview')] }), _jsxs(\"div\", { className: styles.dashboardToplineActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, \"aria-label\": t(topActionIsCreateSession ? 'dashboard.newSession' : 'dashboard.back'), onClick: () => {\n if (topActionIsCreateSession)\n onCreateSession?.();\n else\n onClose();\n }, children: topActionIsCreateSession ? t('dashboard.newSession') : _jsxs(_Fragment, { children: [\"\\u2190 \", t('dashboard.back')] }) }), !rightSidebarOpen && onOpenSidebar !== undefined && (_jsx(Tooltip, { label: t('dashboard.openSidebar'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.dashboardSidebarButton, \"aria-label\": t('dashboard.openSidebar'), title: t('dashboard.openSidebar'), \"data-sidebar-right-expand\": true, onClick: () => {\n onOpenSidebar();\n setRightSidebarOpen(true);\n }, children: _jsx(IconPanelLeftOutline16, {}) }) }))] })] }), _jsxs(\"header\", { className: styles.dashboardHeader, children: [_jsxs(\"div\", { className: styles.dashboardIdentity, children: [_jsxs(\"div\", { className: styles.dashboardTitleRow, \"data-dashboard-copy\": \"branch\", role: branchAvailable ? 'button' : undefined, tabIndex: branchAvailable ? 0 : undefined, \"aria-label\": branchAvailable ? t('dashboard.copyBranch') : undefined, title: branchAvailable ? t('dashboard.copyBranch') : undefined, \"aria-busy\": branchAvailable && branchCopyState === 'pending' ? true : undefined, onClick: branchAvailable ? () => void copyBranch() : undefined, onKeyDown: branchAvailable\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n void copyBranch();\n }\n }\n : undefined, children: [_jsx(IconBranchOutline16, {}), _jsx(\"h1\", { id: `${id}-title`, ref: heading, tabIndex: -1, children: displayBranch }), _jsxs(\"span\", { className: styles.dashboardHealth, \"data-health\": record.health ?? 'unknown', children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u25CF\" }), t(healthKey)] }), record.status === 'removed' && (_jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.archived') }))] }), _jsxs(\"div\", { className: styles.dashboardPath, children: [_jsx(\"span\", { className: styles.dashboardFieldLabel, children: \"cwd\" }), _jsx(\"code\", { children: record.absolutePath }), _jsx(\"button\", { type: \"button\", className: styles.dashboardIconButton, \"aria-label\": t('worktree.copyPath'), title: t('worktree.copyPath'), disabled: copyState === 'pending', onClick: () => {\n void copyPath();\n }, children: _jsx(IconCopyOutline16, {}) })] }), _jsx(\"p\", { className: styles.dashboardCopyStatus, role: branchCopyState === 'failed' ||\n (branchCopyState === 'idle' && copyState === 'failed')\n ? 'alert'\n : 'status', children: branchCopyState === 'pending'\n ? '\\u00a0'\n : branchCopyState === 'copied'\n ? t('dashboard.branchCopied')\n : branchCopyState === 'failed'\n ? t('dashboard.branchCopyFailed')\n : copyState === 'copied'\n ? t('dashboard.copied')\n : copyState === 'failed'\n ? t('dashboard.copyFailed')\n : '\\u00a0' })] }), _jsxs(\"div\", { className: styles.dashboardHeaderAside, children: [_jsx(OpenInAppButton, { path: record.absolutePath, t: t }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t(acquisitionLabel), children: acquisitionFacts.timestamp ? (_jsx(\"time\", { dateTime: acquisitionFacts.timestamp, children: new Date(acquisitionFacts.timestamp).toLocaleString() })) : (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), !isMainWorktreeId(record.worktreeId) && persistBaseline !== undefined ? (_jsx(WorktreeBaselineEditor, { value: baselineBranch, branches: branches, currentBranch: baselineCurrentBranch, onSave: persistBaseline, t: t, disabled: record.status !== 'active' || record.health === 'recovery-needed' })) : (_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) })), _jsx(DashboardFactRow, { label: t('dashboard.source'), children: isMainWorktreeId(record.worktreeId)\n ? t('worktree.main')\n : t(record.source === 'external' ? 'dashboard.external' : 'dashboard.plugin') })] })] })] }), _jsx(\"div\", { className: styles.dashboardTabs, role: \"tablist\", \"aria-label\": t('dashboard.title'), children: TABS.map((value) => (_jsxs(\"button\", { type: \"button\", id: `${id}-${value}`, role: \"tab\", \"aria-selected\": tab === value, \"aria-controls\": `${id}-panel`, tabIndex: tab === value ? 0 : -1, onClick: () => selectTab(value), onKeyDown: (event) => {\n const index = TABS.indexOf(value);\n const next = event.key === 'ArrowRight'\n ? TABS[(index + 1) % TABS.length]\n : event.key === 'ArrowLeft'\n ? TABS[(index + TABS.length - 1) % TABS.length]\n : event.key === 'Home'\n ? TABS[0]\n : event.key === 'End'\n ? TABS[TABS.length - 1]\n : undefined;\n if (next) {\n event.preventDefault();\n selectTab(next, true);\n }\n }, children: [_jsx(DashboardIcon, { kind: value }), tabLabel(value)] }, value))) }), _jsx(\"div\", { id: `${id}-panel`, role: \"tabpanel\", \"aria-labelledby\": `${id}-${tab}`, tabIndex: 0, className: styles.dashboardPanel, children: tab === 'overview' ? (_jsxs(\"div\", { className: styles.dashboardGrid, children: [_jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(\"section\", { className: styles.dashboardStart, children: [_jsxs(\"h2\", { children: [_jsx(IconBranchOutline16, {}), t('dashboard.start')] }), _jsx(\"p\", { children: t('dashboard.startDescription') }), _jsxs(\"div\", { className: styles.dashboardStartActions, children: [_jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateWorktree, onClick: onCreateWorktree, \"data-dashboard-action\": \"create-worktree\", children: [_jsx(DashboardIcon, { kind: \"git\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newWorktree') }), _jsx(\"small\", { children: t('dashboard.newWorktreeDescription') })] })] }), _jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateSession, onClick: onCreateSession, \"data-dashboard-action\": \"create-session\", children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newSession') }), _jsx(\"small\", { children: t('dashboard.newSessionDescription') })] })] })] })] }), _jsxs(Card, { title: t('dashboard.instructions'), icon: _jsx(DashboardIcon, { kind: \"instructions\" }), children: [_jsx(\"p\", { children: t('dashboard.instructionsDescription') }), _jsx(WorktreeInstructions, { value: record.instructions ?? '', onSave: onSaveInstructions, t: t, disabled: actionPending || record.health === 'recovery-needed' })] }), _jsxs(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"span\", { children: sessionIds.length }), children: [sessionList(sessionIds.slice(0, 5)), tabLink('sessions', t('dashboard.viewSessions'))] })] }), _jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(Card, { title: t('dashboard.status'), icon: _jsx(DashboardIcon, { kind: \"git\" }), children: [_jsx(\"p\", { children: t('dashboard.statusHint') }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t('dashboard.health'), children: t(healthKey) }), _jsx(DashboardFactRow, { label: t('dashboard.branch'), children: liveBranch }), _jsx(DashboardFactRow, { label: t('dashboard.base'), children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), _jsx(DashboardFactRow, { label: t('dashboard.aheadBehind'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"aheadBehind\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.committedChanges'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"committed\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.workingTree'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"workingTree\", t: t }) })] }), tabLink('git', t('dashboard.viewDetails'))] }), _jsxs(Card, { title: t('dashboard.derived'), icon: _jsx(DashboardIcon, { kind: \"children\" }), action: placeholder, children: [_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.childrenHint') }) }), tabLink('children', t('dashboard.viewChildren'))] }), _jsx(Card, { title: t('dashboard.quickActions'), icon: _jsx(DashboardIcon, { kind: \"actions\" }), children: _jsxs(\"div\", { className: styles.dashboardQuickActions, children: [['terminal', 'diff', 'pullRequest', 'tests', 'sync'].map((action) => (_jsx(PlaceholderButton, { t: t, children: t(`dashboard.action.${action}`) }, action))), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onArchiveWorktree, onClick: onArchiveWorktree, \"data-dashboard-action\": \"archive-worktree\", children: t('dashboard.action.archive') })] }) })] })] })) : tab === 'git' ? (_jsx(WorktreeGitPanel, { manager: manager, workspaceId: record.workspaceId, worktreeId: record.worktreeId, defaultBaselineBranch: displayedBaseline, currentBranch: baselineCurrentBranch, capturedBaseline: record.baseCommit !== undefined, onOpenFile: (filePath) => {\n onOpenFile?.(filePath);\n setRightSidebarOpen(true);\n }, t: t })) : tab === 'sessions' ? (_jsx(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onCreateSession, onClick: onCreateSession, children: t('dashboard.newSession') }), children: sessionList(sessionIds) })) : (_jsxs(\"section\", { className: styles.dashboardTabPlaceholder, children: [_jsx(DashboardIcon, { kind: tab }), _jsx(\"h2\", { children: tabLabel(tab) }), _jsx(\"p\", { children: t(`dashboard.hint.${tab}`) }), placeholder] })) }), _jsx(\"p\", { className: styles.dashboardFooter, children: t('dashboard.mvpHint') })] }) }));\n}\n//# sourceMappingURL=WorktreeDashboard.js.map","import { filterVisibleSessionIds } from '../session/session-view.js';\nimport { filterArchivedSessionIds } from '../view/worktree-view.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\n/** Join retained snapshots without reading, mutating, or applying Sidebar search. */\nexport function dashboardSessionIds(record, sessions, bindings, archivedSessionIds, orderedIds = [], workspaceSessionIds = []) {\n if (isMainWorktreeId(record.worktreeId)) {\n const boundSessionIds = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.status !== 'detached')\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(workspaceSessionIds.filter((sessionId) => !boundSessionIds.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n }\n const members = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.worktreeId === record.worktreeId)\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(sessions.ids.filter((sessionId) => members.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n}\n//# sourceMappingURL=dashboard-sessions.js.map","/**\n * Keep Dashboard and the native Session sidebars on one Session identity.\n *\n * Keep the current Session when it belongs to the target; otherwise use the\n * first visible id in the Worktree's retained head order. An empty list is\n * still a valid page-level dashboard target: it carries no native Session identity\n * and leaves Session creation to the explicit Dashboard action.\n */\nexport function prepareDashboardNavigation(record, sessionIds, currentSessionId, phase = 'ready') {\n if (phase === 'pending') {\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: undefined,\n },\n sessionIdToOpen: undefined,\n waitForSessionList: true,\n };\n }\n const sessionIdToOpen = currentSessionId !== undefined && sessionIds.includes(currentSessionId)\n ? currentSessionId\n : sessionIds[0];\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: sessionIdToOpen,\n },\n sessionIdToOpen: sessionIdToOpen === undefined || sessionIdToOpen === currentSessionId\n ? undefined\n : sessionIdToOpen,\n };\n}\n/**\n * Settle a pending Session switch without resurrecting it after an unrelated switch.\n */\nexport function settlePendingDashboardNavigation(pending, currentSessionId) {\n if (pending === undefined)\n return { kind: 'wait' };\n if (currentSessionId === pending.selection.sessionId) {\n return { kind: 'open', selection: pending.selection };\n }\n if (currentSessionId !== pending.originSessionId)\n return { kind: 'clear' };\n return { kind: 'wait' };\n}\n//# sourceMappingURL=dashboard-navigation.js.map","/**\n * Canonical DSH session file address constructor.\n * Equivalent to `sessionFileAddress` from `@deepseek-ai/dsh-util-workspace-path`.\n * Address grammar: `dsh-resource://file/session/<sessionId>/<encodedPath>`\n */\nfunction encodeSegment(segment) {\n return encodeURIComponent(segment).replace(/%3A/gi, ':');\n}\nfunction encodePath(path) {\n return path.split('/').map(encodeSegment).join('/');\n}\nexport function buildSessionFileAddress(sessionId, path) {\n const normalized = path.replace(/\\\\/g, '/').replace(/^(?:\\.\\/)+/, '');\n return `dsh-resource://file/session/${encodeSegment(sessionId)}/${encodePath(normalized)}`;\n}\n//# sourceMappingURL=file-address.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { AccessConfirmation } from './surface/components/AccessConfirmation.js';\nimport { LifecycleDialogs } from './surface/components/LifecycleDialogs.js';\nimport { NativeDialogs } from './surface/components/NativeDialogs.js';\nimport { RegistrationDialog } from './surface/components/RegistrationDialog.js';\nimport { SurfaceContent } from './surface/components/SurfaceContent.js';\nimport { SurfaceHeader } from './surface/components/SurfaceHeader.js';\nimport { useDragActions } from './surface/actions/useDragActions.js';\nimport { useLifecycleActions } from './surface/actions/useLifecycleActions.js';\nimport { useLifecycleState } from './surface/state/useLifecycleState.js';\nimport { useNativeActions } from './surface/actions/useNativeActions.js';\nimport { useRegistrationState } from './surface/state/useRegistrationState.js';\nimport { useSessionActions } from './surface/actions/useSessionActions.js';\nimport { useSessionExpansion } from './surface/state/useSessionExpansion.js';\nimport { useSessionOrdering } from './surface/state/useSessionOrdering.js';\nimport { useSurfaceMenus } from './surface/state/useSurfaceMenus.js';\nimport { useSurfaceMutation } from './surface/actions/useSurfaceMutation.js';\nimport { useSurfaceRefresh } from './surface/state/useSurfaceRefresh.js';\nimport { useSurfaceSources } from './surface/state/useSurfaceSources.js';\nimport { useWorktreeRegistration } from './surface/actions/useWorktreeRegistration.js';\nimport styles from './worktree.css';\nimport { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { WorktreeDashboard } from './dashboard/WorktreeDashboard.js';\nimport { createMainWorktreeRecord, isMainWorktreeId, isManagedDashboardRecord, resolveDashboardRecord, } from './dashboard/dashboard-selection.js';\nimport { dashboardSessionIds } from './dashboard/dashboard-sessions.js';\nimport { prepareDashboardNavigation, settlePendingDashboardNavigation, } from './dashboard/dashboard-navigation.js';\nimport { buildSessionFileAddress } from './dashboard/git/file-address.js';\nimport { createNumberedWorktreeName } from './view/worktree-view.js';\nimport { workspaceSessionIds } from './view/view-mode.js';\n/** Composes independent surface state/action domains into the sidebar overlay. */\nexport function WorktreeSurface(inputProps) {\n const [internalDashboard, setInternalDashboard] = useState();\n const pendingDashboard = useRef();\n const pendingDashboardRecord = useRef();\n const openDashboardRef = useRef();\n const externalDashboard = inputProps.dashboardStore\n ? useSyncExternalStore(inputProps.dashboardStore.subscribe, inputProps.dashboardStore.getSnapshot, () => undefined)\n : undefined;\n const dashboard = inputProps.dashboardStore !== undefined ? externalDashboard : internalDashboard;\n const setDashboard = useCallback((selection) => {\n if (inputProps.dashboardStore !== undefined) {\n inputProps.dashboardStore.set(selection);\n }\n setInternalDashboard(selection);\n }, [inputProps.dashboardStore]);\n const closeDashboard = useCallback(() => {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = undefined;\n setDashboard(undefined);\n }, [setDashboard]);\n const source = useSurfaceSources({ props: inputProps });\n useEffect(() => {\n if (source.mode !== 'worktree')\n closeDashboard();\n }, [source.mode, closeDashboard]);\n useEffect(() => () => {\n inputProps.dashboardStore?.set(undefined);\n }, [inputProps.dashboardStore]);\n const props = {\n ...inputProps,\n openDashboard: (record) => openDashboardRef.current?.(record),\n openSession: (sessionId) => {\n closeDashboard();\n inputProps.openSession(sessionId);\n },\n createMainSession: inputProps.createMainSession === undefined\n ? undefined\n : (workspaceId) => {\n closeDashboard();\n inputProps.createMainSession?.(workspaceId);\n },\n };\n const registrationState = useRegistrationState({ props });\n const read = useSurfaceRefresh({ source, props, registrationState });\n const targetWorkspace = dashboard === undefined\n ? undefined\n : source.workspaces.items.find((workspace) => workspace.workspaceId === dashboard.workspaceId);\n const targetView = dashboard === undefined ? undefined : read.viewByWorkspace.get(dashboard.workspaceId);\n const dashboardMainBranch = targetView?.branches.find((branch) => branch.isCurrent)?.name;\n const dashboardMainRecord = targetWorkspace === undefined\n ? undefined\n : createMainWorktreeRecord(targetWorkspace, dashboardMainBranch, targetView?.mainInstructions);\n const dashboardRecord = resolveDashboardRecord(dashboard, source.mode, source.currentSessionId, source.workspaceIds, dashboard === undefined\n ? undefined\n : targetView?.worktrees, dashboardMainRecord);\n useEffect(() => {\n if (dashboard !== undefined && dashboardRecord === undefined) {\n // A target Session switch can invalidate the old Dashboard in the same\n // commit that settles a new Worktree navigation. Do not cancel that\n // pending navigation while dismissing the stale page.\n setDashboard(undefined);\n }\n }, [dashboard, dashboardRecord, setDashboard]);\n const mutation = useSurfaceMutation({ read });\n const lifecycleState = useLifecycleState({ props, source, mutation });\n const menus = useSurfaceMenus();\n const ordering = useSessionOrdering({ read, source, props });\n const openDashboard = useCallback((record) => {\n const workspace = source.workspaces.items.find((candidate) => candidate.workspaceId === record.workspaceId);\n const view = read.viewByWorkspace.get(record.workspaceId);\n const sessionIds = dashboardSessionIds(record, source.sessions, view?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(record.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${record.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${record.worktreeId}`), workspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, workspace.workspaceId, source.sessions.ids));\n const navigation = prepareDashboardNavigation(record, sessionIds, source.currentSessionId, source.sessions.phase ?? 'ready');\n if (navigation.waitForSessionList === true) {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = record;\n return;\n }\n pendingDashboardRecord.current = undefined;\n if (navigation.sessionIdToOpen !== undefined) {\n pendingDashboard.current = {\n selection: navigation.selection,\n originSessionId: source.currentSessionId,\n };\n inputProps.openSession(navigation.sessionIdToOpen);\n return;\n }\n pendingDashboard.current = undefined;\n if (navigation.selection.sessionId === undefined)\n inputProps.closeRightSidebar?.();\n setDashboard(navigation.selection);\n }, [\n inputProps.closeRightSidebar,\n inputProps.openSession,\n ordering.orderedSessionIdsByAccount,\n read.viewByWorkspace,\n setDashboard,\n source.archivedSessionIds,\n source.currentSessionId,\n source.sessions,\n source.workspaces,\n ]);\n openDashboardRef.current = openDashboard;\n useEffect(() => {\n if (source.sessions.phase === 'pending')\n return;\n const pendingRecord = pendingDashboardRecord.current;\n if (pendingRecord === undefined)\n return;\n pendingDashboardRecord.current = undefined;\n openDashboard(pendingRecord);\n }, [openDashboard, source.sessions.phase]);\n useEffect(() => {\n const settlement = settlePendingDashboardNavigation(pendingDashboard.current, source.currentSessionId);\n if (settlement.kind === 'open') {\n pendingDashboard.current = undefined;\n setDashboard(settlement.selection);\n }\n else if (settlement.kind === 'clear') {\n pendingDashboard.current = undefined;\n }\n }, [setDashboard, source.currentSessionId]);\n const expansion = useSessionExpansion({ read, source, props });\n const native = useNativeActions({ source, props, mutation });\n const drag = useDragActions({\n source,\n orderedSessionIdsByAccount: ordering.orderedSessionIdsByAccount,\n props,\n mutation,\n read,\n });\n const session = useSessionActions({ source, props, mutation, read });\n const registration = useWorktreeRegistration({\n source,\n registrationState,\n read,\n props,\n mutation,\n session,\n });\n const lifecycle = useLifecycleActions({ read, lifecycleState, source, props, mutation });\n const dashboardWorkspace = source.workspaces.items.find((workspace) => workspace.workspaceId === dashboardRecord?.workspaceId);\n const dashboardView = dashboardRecord === undefined\n ? undefined\n : read.viewByWorkspace.get(dashboardRecord.workspaceId);\n const dashboardCanCreate = dashboardRecord?.status === 'active' &&\n dashboardRecord.diskCleanup !== 'completed' &&\n dashboardRecord.health !== 'cleaned' &&\n dashboardRecord.health !== 'repair' &&\n dashboardRecord.health !== 'recovery-needed';\n const dashboardManagedRecord = dashboardRecord !== undefined && isManagedDashboardRecord(dashboardRecord)\n ? dashboardRecord\n : undefined;\n const onOpenFile = useCallback((filePath, options) => {\n if (typeof props.openResource !== 'function' || dashboardRecord === undefined)\n return;\n const worktreeSessions = dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids));\n // A file opened from Git must stay inside the Dashboard Worktree.\n // Never fall back to the current or another Workspace Session.\n const targetSessionId = source.currentSessionId !== undefined &&\n worktreeSessions.includes(source.currentSessionId)\n ? source.currentSessionId\n : undefined;\n if (targetSessionId === undefined)\n return;\n const address = buildSessionFileAddress(targetSessionId, filePath);\n props.openResource(address, options);\n }, [\n props.openResource,\n dashboardRecord,\n source.currentSessionId,\n source.sessions,\n source.archivedSessionIds,\n source.workspaces,\n dashboardView?.bindings,\n ordering.orderedSessionIdsByAccount,\n dashboardWorkspace,\n ]);\n if (source.mode !== 'worktree')\n return null;\n const { ref, width, bounds, collapsed } = source;\n const { t } = props;\n return (_jsxs(_Fragment, { children: [_jsxs(\"aside\", { ref: ref, className: styles.surface, \"data-worktree-surface\": true, \"data-collapsed\": collapsed || undefined, \"aria-label\": t('mode.navigation'), style: {\n width: `${width}px`,\n ...(bounds.ready\n ? { top: `${bounds.top}px`, height: `${bounds.height}px` }\n : { height: '0px', visibility: 'hidden' }),\n }, children: [_jsxs(\"div\", { className: styles.wideContent, children: [_jsx(SurfaceHeader, { expansion: expansion, props: props, source: source, read: read, mutation: mutation }), _jsx(SurfaceContent, { source: source, props: props, lifecycle: lifecycle, mutation: mutation, session: session, read: read, expansion: expansion, ordering: ordering, drag: drag, menus: menus, registration: registration, native: native, lifecycleState: lifecycleState })] }), _jsx(NativeDialogs, { props: props, native: native }), _jsx(RegistrationDialog, { props: props, registration: registration, registrationState: registrationState, mutation: mutation, read: read }), _jsx(LifecycleDialogs, { props: props, lifecycleState: lifecycleState, mutation: mutation, lifecycle: lifecycle, expansion: expansion, read: read, session: session }), _jsx(AccessConfirmation, { source: source, props: props })] }), dashboardRecord !== undefined && (_jsx(WorktreeDashboard, { manager: props.manager, record: dashboardRecord, onSaveInstructions: props.manager\n ? async (instructions, expectedInstructions) => {\n try {\n return await props.manager.updateWorktreeInstructions({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n instructions,\n expectedInstructions,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, onSaveBaseline: props.manager &&\n typeof props.manager.updateWorktreeBaseBranch === 'function' &&\n dashboardManagedRecord !== undefined &&\n dashboardCanCreate\n ? async (baseBranch, expectedBaseBranch) => {\n try {\n return await props.manager.updateWorktreeBaseBranch({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n baseBranch,\n expectedBaseBranch,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, branches: dashboardView?.branches ?? [], workspaceTitle: dashboardWorkspace?.title ?? '', sessions: source.sessions, sessionPresentations: source.sessionPresentations, sessionIds: dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids)), actionPending: mutation.actionPending, onOpenFile: typeof props.openResource === 'function' ? onOpenFile : undefined, onOpenSession: (sessionId) => session.openWorkspaceSession(dashboardRecord.workspaceId, sessionId), onCreateSession: dashboardCanCreate &&\n (isMainWorktreeId(dashboardRecord.worktreeId)\n ? props.createMainSession !== undefined\n : props.createSessionForWorktree !== undefined)\n ? () => {\n if (mutation.actionPending)\n return;\n closeDashboard();\n if (isMainWorktreeId(dashboardRecord.worktreeId)) {\n props.createMainSession?.(dashboardRecord.workspaceId);\n }\n else {\n void session.createSession({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n cwd: dashboardRecord.absolutePath,\n });\n }\n }\n : undefined, onCreateWorktree: dashboardCanCreate &&\n dashboardRecord.currentBranch !== null &&\n dashboardRecord.branch.length > 0 &&\n dashboardWorkspace !== undefined &&\n dashboardView !== undefined\n ? () => {\n if (mutation.actionPending)\n return;\n const branch = dashboardRecord.currentBranch ?? dashboardRecord.branch;\n registration.openWorktreeCreator(dashboardWorkspace, {\n baseBranch: branch,\n newBranch: createNumberedWorktreeName(branch, [\n ...dashboardView.branches.map((candidate) => candidate.name),\n ...dashboardView.worktrees.map((candidate) => candidate.branch),\n ]),\n });\n }\n : undefined, onArchiveWorktree: dashboardManagedRecord !== undefined &&\n dashboardManagedRecord.status === 'active' &&\n dashboardManagedRecord.health !== 'recovery-needed'\n ? () => {\n if (mutation.actionPending)\n return;\n lifecycleState.setWorktreeRemoval(dashboardManagedRecord);\n mutation.setActionError(undefined);\n }\n : undefined, t: t, onClose: closeDashboard, onOpenSidebar: source.currentSessionId === undefined ? undefined : props.openRightSidebar, isRightSidebarExpanded: props.isRightSidebarExpanded }, `${dashboardRecord.workspaceId}:${dashboardRecord.worktreeId}`))] }));\n}\n//# sourceMappingURL=WorktreeSurface.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeHeroContext } from '../context/WorktreeHeroContext.js';\nimport { WorktreeSurface } from '../WorktreeSurface.js';\n/** Compose the independent Hero context and Worktree navigation overlays. */\nexport function WorktreeOverlay(props) {\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeHeroContext, { ...props }), _jsx(WorktreeSurface, { ...props })] }));\n}\n//# sourceMappingURL=WorktreeOverlay.js.map","const none = (reason) => ({\n kind: 'none',\n reason,\n});\n/** Resolve the branch or active Worktree label for one current DSH Session. */\nexport function resolveWorktreeSessionContext(input) {\n const sessionId = input.currentSessionId;\n if (sessionId === undefined && input.currentWorkspaceId === undefined)\n return none('no-session');\n const workspace = sessionId === undefined\n ? input.workspaces.find(({ workspaceId }) => workspaceId === input.currentWorkspaceId)\n : input.workspaces.find(({ sessionIds }) => sessionIds.includes(sessionId));\n if (workspace === undefined)\n return none('unbound');\n const binding = sessionId === undefined\n ? undefined\n : input.bindings.find((candidate) => candidate.sessionId === sessionId);\n if (binding !== undefined) {\n if (binding.workspaceId !== workspace.workspaceId)\n return none('workspace-mismatch');\n if (binding.status === 'detached')\n return none('detached');\n const record = input.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId);\n if (record === undefined || record.workspaceId !== workspace.workspaceId) {\n return none(record === undefined ? 'stale' : 'workspace-mismatch');\n }\n if (record.diskCleanup === 'completed' || record.health === 'cleaned') {\n return none('detached');\n }\n if (record.health === 'repair' || record.health === 'recovery-needed') {\n return none('repair');\n }\n if (record.branch.length === 0)\n return none('not-ready');\n return {\n kind: 'worktree',\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n label: record.branch,\n source: 'active-binding',\n };\n }\n const currentBranch = input.branches.find(({ isCurrent }) => isCurrent);\n if (currentBranch === undefined || currentBranch.name.length === 0)\n return none('not-ready');\n return {\n kind: 'main',\n workspaceId: workspace.workspaceId,\n label: currentBranch.name,\n source: 'current-branch',\n };\n}\n//# sourceMappingURL=worktree-context.js.map","import { currentSessionIdFromList } from '../session/session-selection.js';\nimport { resolveWorktreeSessionContext, } from './worktree-context.js';\nimport { deriveRecentWorkspaceId } from '../view/view-mode.js';\nimport { toWorktreeViewError, } from '../view/worktree-view.js';\nconst notReady = () => ({ kind: 'none', reason: 'not-ready' });\nfunction scheduledRefresh() {\n let resolve;\n const promise = new Promise((resolvePromise) => {\n resolve = resolvePromise;\n });\n return { promise, resolve };\n}\nfunction identityFrom(sessions, workspaces) {\n const sessionSnapshot = sessions.getSnapshot();\n const workspaceSnapshot = workspaces.getSnapshot();\n const sessionId = currentSessionIdFromList(sessionSnapshot);\n if (sessionId === undefined) {\n return {\n workspaceId: deriveRecentWorkspaceId({ items: workspaceSnapshot.items }, sessionSnapshot.byId),\n };\n }\n const workspace = workspaceSnapshot.items.find((candidate) => candidate.sessionIds.includes(sessionId));\n return { sessionId, workspaceId: workspace?.workspaceId };\n}\n/**\n * Build one browser-local current-Session projection shared by the header\n * consumer. Superseded requests may still finish on the transport, but their\n * results never become visible in the current snapshot.\n */\nexport function createWorktreeContextProjection(input) {\n const store = input.storeFactory({\n status: 'idle',\n value: notReady(),\n });\n let disposed = false;\n let generation = 0;\n let scheduled = false;\n let scheduleTicket = 0;\n let scheduledCompletion;\n let latestRefresh = Promise.resolve();\n let lastObservedIdentity;\n const sameIdentity = (left, right) => left?.sessionId === right.sessionId\n && left?.workspaceId === right.workspaceId;\n const workspaceTitleFor = (workspaceId) => input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === workspaceId)\n ?.title;\n const valueFrom = (identity, data) => resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: data.branches,\n worktrees: data.worktrees,\n bindings: data.bindings,\n });\n const syncWorkspaceTitle = (identity) => {\n const current = store.getSnapshot();\n if (current.sessionId !== identity.sessionId ||\n current.workspaceId !== identity.workspaceId ||\n identity.workspaceId === undefined)\n return;\n const workspaceTitle = workspaceTitleFor(identity.workspaceId);\n if (current.workspaceTitle === workspaceTitle)\n return;\n store.set({ ...current, workspaceTitle });\n };\n const setPending = (identity) => {\n if (identity.workspaceId === undefined) {\n store.set({\n status: 'ready',\n value: resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: [],\n worktrees: [],\n bindings: [],\n }),\n });\n return;\n }\n const current = store.getSnapshot();\n if (current.status === 'ready' && current.workspaceId !== identity.workspaceId) {\n // Keep the last valid context visible until the new Workspace facts arrive.\n return;\n }\n if (current.status === 'ready' && current.workspaceId === identity.workspaceId) {\n store.set({\n status: 'ready',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: current.value,\n });\n return;\n }\n store.set({\n status: 'loading',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: notReady(),\n });\n };\n const matchesCurrent = (request, requestGeneration) => {\n if (disposed || generation !== requestGeneration)\n return false;\n const current = identityFrom(input.sessions, input.workspaces);\n return current.sessionId === request.sessionId && current.workspaceId === request.workspaceId;\n };\n const runRefresh = async () => {\n if (disposed)\n return;\n const requestGeneration = ++generation;\n const identity = identityFrom(input.sessions, input.workspaces);\n lastObservedIdentity = identity;\n setPending(identity);\n if (identity.workspaceId === undefined)\n return;\n const request = {\n sessionId: identity.sessionId,\n workspaceId: identity.workspaceId,\n };\n try {\n const data = await input.viewReader.read(request.workspaceId);\n if (!matchesCurrent(request, requestGeneration))\n return;\n const workspace = input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId);\n if ('error' in data.readiness) {\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: notReady(),\n error: data.readiness.error,\n });\n return;\n }\n store.set({\n status: 'ready',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: valueFrom(request, data),\n });\n }\n catch (error) {\n if (!matchesCurrent(request, requestGeneration))\n return;\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId)?.title,\n value: notReady(),\n error: toWorktreeViewError(error),\n });\n }\n };\n const cancelScheduledRefresh = () => {\n scheduleTicket += 1;\n scheduled = false;\n const completion = scheduledCompletion;\n scheduledCompletion = undefined;\n completion?.resolve();\n };\n const refresh = () => {\n cancelScheduledRefresh();\n lastObservedIdentity = identityFrom(input.sessions, input.workspaces);\n const completion = runRefresh();\n latestRefresh = completion;\n return completion;\n };\n const scheduleRefresh = () => {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (sameIdentity(lastObservedIdentity, identity)) {\n syncWorkspaceTitle(identity);\n return;\n }\n lastObservedIdentity = identity;\n generation += 1;\n setPending(identity);\n if (scheduled)\n return;\n scheduled = true;\n const ticket = ++scheduleTicket;\n const completion = scheduledRefresh();\n scheduledCompletion = completion;\n latestRefresh = completion.promise;\n queueMicrotask(() => {\n if (disposed || ticket !== scheduleTicket) {\n completion.resolve();\n return;\n }\n scheduled = false;\n void runRefresh().finally(() => {\n if (scheduledCompletion === completion)\n scheduledCompletion = undefined;\n completion.resolve();\n });\n });\n };\n const waitForLatestRefresh = async (workspaceId) => {\n let observed;\n while (!disposed) {\n if (workspaceId !== undefined\n && identityFrom(input.sessions, input.workspaces).workspaceId !== workspaceId) {\n return;\n }\n const completion = latestRefresh;\n if (completion === observed)\n return;\n observed = completion;\n await completion;\n }\n };\n const unsubscribeSessions = input.sessions.subscribe(scheduleRefresh);\n const unsubscribeWorkspaces = input.workspaces.subscribe(scheduleRefresh);\n return {\n store,\n refresh,\n async invalidate(workspaceId) {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (workspaceId !== undefined && workspaceId !== identity.workspaceId)\n return;\n if (identity.workspaceId === undefined)\n return;\n input.viewReader.invalidate(identity.workspaceId);\n await refresh();\n await waitForLatestRefresh(workspaceId ?? identity.workspaceId);\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n generation += 1;\n cancelScheduledRefresh();\n unsubscribeSessions();\n unsubscribeWorkspaces();\n store.set({ status: 'idle', value: notReady() });\n },\n };\n}\n//# sourceMappingURL=worktree-context-store.js.map","import { defineStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_VIEW_MODE_STORAGE_KEY, } from './view-mode.js';\n/** Create one root-scoped, browser-local view-mode store for the two slot entries. */\nexport function createWorktreeViewStore() {\n return defineStore({\n init: () => ({ viewMode: 'workspace-session' }),\n persist: WORKTREE_VIEW_MODE_STORAGE_KEY,\n actions: {\n setViewMode: (draft, mode) => {\n draft.viewMode = mode;\n },\n },\n });\n}\n//# sourceMappingURL=view-mode-store.js.map","import { projectVirtualWorkspaceMembership, } from '../view/view-mode.js';\nfunction normalizeBindings(bindings) {\n const bySession = new Map();\n for (const binding of bindings) {\n if (binding.workspaceId.length === 0 || binding.sessionId.length === 0)\n continue;\n bySession.set(binding.sessionId, binding);\n }\n return [...bySession.values()];\n}\nfunction sameBindings(left, right) {\n return left.length === right.length && left.every((binding, index) => {\n const other = right[index];\n return binding.workspaceId === other.workspaceId && binding.sessionId === other.sessionId;\n });\n}\n/**\n * Decorate DSH's read-only WorkspaceSource with a browser-local membership\n * projection. The source's native model is never written: the wrapper keeps\n * the current sidecar bindings in memory, reprojects every native snapshot,\n * and publishes only the projected view to subscribers.\n */\nexport function createVirtualWorkspaceMembership(list) {\n if (!Object.isExtensible(list)) {\n throw new Error('Workspace membership projection requires an extensible WorkspaceSource');\n }\n const nativeGetSnapshot = list.getSnapshot.bind(list);\n const nativeSubscribe = list.subscribe.bind(list);\n const originalGetSnapshot = Object.getOwnPropertyDescriptor(list, 'getSnapshot');\n const originalSubscribe = Object.getOwnPropertyDescriptor(list, 'subscribe');\n const listeners = new Set();\n let bindings = [];\n let nativeSnapshot = nativeGetSnapshot();\n let projectedSnapshot = projectVirtualWorkspaceMembership(nativeSnapshot, [], bindings);\n let disposed = false;\n const project = (nextNativeSnapshot, previousBindings, nextBindings) => projectVirtualWorkspaceMembership(nextNativeSnapshot, previousBindings, nextBindings);\n const refreshSnapshot = () => {\n const nextNativeSnapshot = nativeGetSnapshot();\n if (nextNativeSnapshot === nativeSnapshot)\n return false;\n nativeSnapshot = nextNativeSnapshot;\n const nextProjectedSnapshot = project(nextNativeSnapshot, bindings, bindings);\n const changed = nextProjectedSnapshot !== projectedSnapshot;\n projectedSnapshot = nextProjectedSnapshot;\n return changed;\n };\n const notify = () => {\n if (disposed)\n return;\n if (!refreshSnapshot())\n return;\n for (const listener of [...listeners])\n listener();\n };\n const getSnapshot = () => {\n if (disposed)\n return nativeGetSnapshot();\n refreshSnapshot();\n return projectedSnapshot;\n };\n const subscribe = (listener) => {\n if (disposed)\n return () => undefined;\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n Object.defineProperty(list, 'getSnapshot', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: getSnapshot,\n });\n Object.defineProperty(list, 'subscribe', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: subscribe,\n });\n const unsubscribeNative = nativeSubscribe(notify);\n const sync = (nextBindings) => {\n if (disposed)\n return;\n const normalized = normalizeBindings(nextBindings);\n if (sameBindings(bindings, normalized))\n return;\n const previousBindings = bindings;\n bindings = normalized;\n nativeSnapshot = nativeGetSnapshot();\n const previousProjectedSnapshot = projectedSnapshot;\n projectedSnapshot = project(nativeSnapshot, previousBindings, bindings);\n if (projectedSnapshot === previousProjectedSnapshot)\n return;\n for (const listener of [...listeners])\n listener();\n };\n const restoreMethod = (name, descriptor) => {\n if (descriptor === undefined) {\n delete list[name];\n return;\n }\n Object.defineProperty(list, name, descriptor);\n };\n return {\n ensure(binding) {\n if (disposed)\n return;\n if (bindings.some((current) => current.workspaceId === binding.workspaceId && current.sessionId === binding.sessionId)) {\n return;\n }\n sync([...bindings.filter((current) => current.sessionId !== binding.sessionId), binding]);\n },\n sync,\n removeSession(sessionId) {\n sync(bindings.filter((binding) => binding.sessionId !== sessionId));\n },\n dispose() {\n if (disposed)\n return;\n bindings = [];\n projectedSnapshot = nativeGetSnapshot();\n disposed = true;\n for (const listener of [...listeners])\n listener();\n unsubscribeNative();\n listeners.clear();\n restoreMethod('getSnapshot', originalGetSnapshot);\n restoreMethod('subscribe', originalSubscribe);\n },\n };\n}\n//# sourceMappingURL=virtual-workspace-membership.js.map","/** Rename a listed Session across DSH generations with different retention semantics. */\nexport async function renameWorktreeSession(sessions, sessionId, title) {\n const compatibleSessions = sessions;\n if (typeof compatibleSessions.using === 'function') {\n const result = await compatibleSessions.using(sessionId, { source: 'workspaceOperation' }, (reference) => reference.binding.session.rename(title));\n if (!result.ok)\n throw new Error(result.error.message);\n return;\n }\n // DSH versions before borrow-only bindings expose a live Session for a listed id.\n const session = compatibleSessions.binding(sessionId)?.session;\n if (session === undefined)\n throw new Error(`unknown session \"${sessionId}\"`);\n const result = await session.rename(title);\n if (!result.ok)\n throw new Error(result.error.message);\n}\n//# sourceMappingURL=session-rename.js.map","/** Use DSH-owned navigation in 1.7; keep the older Session-controller fallback. */\nexport function openWorktreeSession(uiWorkspace, sessions, sessionId) {\n const compatibleUiWorkspace = uiWorkspace;\n if (typeof compatibleUiWorkspace.openSession === 'function') {\n compatibleUiWorkspace.openSession(sessionId);\n return;\n }\n const legacyOpen = sessions.open;\n if (typeof legacyOpen === 'function') {\n legacyOpen(sessionId);\n return;\n }\n throw new Error('DSH Client does not expose a Session navigation method');\n}\n//# sourceMappingURL=session-navigation.js.map","const englishReason = 'This Worktree Session may need Git metadata and linked Worktree files outside the Session directory. '\n + 'Full Access disables filesystem confinement for this Session; approval prompts remain enabled, '\n + 'and network and process policy is unchanged. Continue?';\nconst chineseReason = '这个 Worktree Session 可能需要访问 Session 目录之外的 Git 元数据和关联 Worktree 文件。'\n + '完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示,网络和进程策略不变。'\n + '是否继续?';\nexport function worktreeFullAccessConfirmationMessage(input, locale = globalThis.navigator?.language) {\n const reason = locale?.toLocaleLowerCase().startsWith('zh') === true\n ? chineseReason\n : englishReason;\n return `${reason}\\n\\nWorktree: ${input.cwd}`;\n}\n/**\n * Coordinate async permission requests with the one in-page confirmation\n * rendered by the Worktree surface. Requests are serialized so concurrent\n * Worktree Session creations cannot replace one another's dialog.\n */\nexport function createWorktreeFullAccessConfirmationController() {\n let active;\n const queue = [];\n const listeners = new Set();\n let disposed = false;\n const notify = () => {\n for (const listener of listeners)\n listener();\n };\n const showNext = () => {\n if (active !== undefined)\n return;\n active = queue.shift();\n notify();\n };\n const controller = {\n getSnapshot: () => active?.input,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n request: (input) => {\n if (disposed)\n return Promise.resolve(false);\n return new Promise((resolve) => {\n queue.push({ input, resolve });\n showNext();\n });\n },\n resolve: (confirmed) => {\n if (active === undefined)\n return;\n const current = active;\n active = undefined;\n current.resolve(confirmed);\n showNext();\n },\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n active?.resolve(false);\n active = undefined;\n for (const pending of queue.splice(0))\n pending.resolve(false);\n notify();\n },\n };\n return controller;\n}\n//# sourceMappingURL=worktree-permission.js.map","const PLUGIN_ID = '@cerbur/clutch-dsh-worktree';\nconst STYLE_ID = `${PLUGIN_ID}/permission-icon`;\nconst WORKTREE_PERMISSION_LABEL = 'Worktree Full Access';\n/** DOM marker owned only by this plugin's permission icon decorator. */\nexport const WORKTREE_PERMISSION_ICON_ATTRIBUTE = 'data-clutch-dsh-worktree-permission-icon';\n// The native DSH menu has no icon extension point for host-configured values.\n// A branch glyph keeps the custom option visually distinct while preserving\n// the same 16px geometry as the built-in permission glyphs.\nconst ICON_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M13.0762 1.37207C14.0846 1.37228 14.9021 2.19077 14.9023 3.19922C14.9022 4.20772 14.0847 5.02518 13.0762 5.02539C12.2967 5.02539 11.6325 4.53691 11.3701 3.84961H4.35547C4.79397 4.26458 5.15861 4.7644 5.41699 5.33496L7.10645 9.06738C7.88526 10.7875 9.55104 11.9228 11.4189 12.0371C11.7085 11.4109 12.3411 10.9756 13.0762 10.9756C14.0843 10.9759 14.9023 11.7936 14.9023 12.8018C14.9023 13.81 14.0843 14.6277 13.0762 14.6279C12.2534 14.6279 11.5574 14.0832 11.3291 13.335C8.9868 13.1879 6.89981 11.7612 5.92285 9.60352L4.23242 5.87109C3.67503 4.64033 2.44878 3.84961 1.09766 3.84961V2.54883C1.10665 2.54883 1.11601 2.54975 1.125 2.5498L11.3701 2.54883C11.6326 1.86151 12.2969 1.37207 13.0762 1.37207ZM13.0762 12.2764C12.7858 12.2764 12.5508 12.5114 12.5508 12.8018C12.5508 13.0921 12.7858 13.3281 13.0762 13.3281C13.3664 13.3279 13.6025 13.092 13.6025 12.8018C13.6025 12.5115 13.3664 12.2766 13.0762 12.2764ZM13.0762 2.67285C12.7855 2.67285 12.55 2.90861 12.5498 3.19922C12.5499 3.48987 12.7855 3.72559 13.0762 3.72559C13.3667 3.72538 13.6024 3.48975 13.6025 3.19922C13.6023 2.90874 13.3666 2.67306 13.0762 2.67285Z\" fill=\"black\"/></svg>';\nfunction iconStyles() {\n const mask = `url(\"data:image/svg+xml,${encodeURIComponent(ICON_SVG)}\")`;\n return `\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]::before {\n content: \"\";\n display: inline-block;\n flex: 0 0 auto;\n width: 16px;\n height: 16px;\n background-color: var(--dsw-alias-label-tertiary, currentColor);\n -webkit-mask-image: ${mask};\n mask-image: ${mask};\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n}\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"]::before {\n width: 14px;\n height: 14px;\n}\n@container (max-width: 460px) {\n [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"] > span:first-of-type {\n display: none;\n }\n}\n`;\n}\nfunction normalizedText(element) {\n return (element.textContent ?? '').replace(/\\s+/g, ' ').trim();\n}\nfunction isWorktreeMenuItem(element) {\n return element.matches('button[role=\"menuitem\"]') &&\n normalizedText(element) === WORKTREE_PERMISSION_LABEL &&\n element.closest('[role=\"menu\"]') !== null;\n}\nfunction isWorktreeTrigger(element) {\n if (!element.matches('button[aria-label]'))\n return false;\n const label = element.getAttribute('aria-label') ?? '';\n return /^(?:access mode,\\s*current:\\s*|访问模式,当前:\\s*)worktree full access$/iu.test(label.trim());\n}\n/** Mark the native custom permission row and trigger for CSS decoration. */\nexport function decorateWorktreePermissionIcons(document) {\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n const kind = marked.getAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n if ((kind === 'menu' && !isWorktreeMenuItem(marked)) ||\n (kind === 'trigger' && !isWorktreeTrigger(marked))) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n }\n for (const item of document.querySelectorAll('button[role=\"menuitem\"]')) {\n if (isWorktreeMenuItem(item)) {\n item.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'menu');\n }\n }\n for (const button of document.querySelectorAll('button[aria-label]')) {\n if (isWorktreeTrigger(button)) {\n button.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'trigger');\n }\n }\n}\n/** Install the Worktree permission icon and return a plugin-local disposer. */\nexport function installWorktreePermissionIcon(document) {\n for (const existing of document.querySelectorAll('style[data-plugin-css]')) {\n if (existing.getAttribute('data-plugin-css') === STYLE_ID)\n existing.remove();\n }\n const style = document.createElement('style');\n style.setAttribute('data-plugin', PLUGIN_ID);\n style.setAttribute('data-plugin-css', STYLE_ID);\n style.textContent = iconStyles();\n document.head.appendChild(style);\n let active = true;\n let queued = false;\n const scan = () => {\n if (!active || queued)\n return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n if (active)\n decorateWorktreePermissionIcons(document);\n });\n };\n decorateWorktreePermissionIcons(document);\n const observer = typeof MutationObserver === 'function'\n ? new MutationObserver(scan)\n : undefined;\n observer?.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['aria-label'],\n characterData: true,\n childList: true,\n subtree: true,\n });\n return () => {\n if (!active)\n return;\n active = false;\n observer?.disconnect();\n style.remove();\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n };\n}\n//# sourceMappingURL=worktree-permission-icon.js.map","function reconciliationSnapshot(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n snapshot.phase === 'pending' ||\n (snapshot.phase !== undefined && snapshot.phase !== 'ready') ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n for (const sessionId of snapshot.ids) {\n if (typeof sessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[sessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentId = summary?.parentId;\n const origin = summary?.origin;\n const blank = summary?.blank;\n if ((parentId !== undefined && typeof parentId !== 'string') ||\n (origin !== undefined && typeof origin !== 'string') ||\n (blank !== undefined && typeof blank !== 'boolean')) {\n return undefined;\n }\n }\n const candidates = snapshot.ids.flatMap((childSessionId) => {\n const summary = snapshot.byId[childSessionId];\n if (summary?.parentId === undefined ||\n summary.parentId === childSessionId ||\n summary.blank === true ||\n summary.origin === 'subagent' ||\n snapshot.byId[summary.parentId] === undefined) {\n return [];\n }\n return [{ childSessionId, sourceSessionId: summary.parentId }];\n });\n const candidateFacts = candidates\n .map(({ childSessionId, sourceSessionId }) => [childSessionId, sourceSessionId])\n .sort(([leftChild, leftSource], [rightChild, rightSource]) => leftChild < rightChild || (leftChild === rightChild && leftSource < rightSource)\n ? -1\n : leftChild === rightChild && leftSource === rightSource\n ? 0\n : 1);\n return {\n // Ordinary Session notifications must not invalidate persisted Fork candidates.\n signature: JSON.stringify([snapshot.phase ?? 'ready', candidateFacts]),\n candidates,\n };\n}\nfunction recoveryKey(sourceSessionId, childSessionId) {\n return `${sourceSessionId}\\u0000${childSessionId}`;\n}\n/**\n * Coordinate native Session fork with the plugin-owned Worktree relation.\n * Native Session creation always wins: plugin lookup/bind failures are kept as\n * recovery state and never turn an already-created child into a failed fork.\n */\nexport function createWorktreeSessionForkCoordinator(options) {\n let disposed = false;\n let revision = 0;\n let pending = new Map();\n let recoverySnapshot = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n };\n const subscribers = new Set();\n const boundChildren = new Set();\n const bindingInFlight = new Map();\n let reconciliationInFlight;\n let reconciliationAgain = false;\n let reconciliationForce = false;\n let lastSessionLineageSignature;\n const sourceGeneration = new Map();\n const worktreeGeneration = new Map();\n const keyOf = (workspaceId, worktreeId) => JSON.stringify([workspaceId, worktreeId]);\n const versionOf = (versions, key) => versions.get(key) ?? 0;\n const publish = (affectedWorkspaceIds = []) => {\n revision += 1;\n recoverySnapshot = {\n revision,\n pending: [...pending.values()],\n affectedWorkspaceIds: [...new Set(affectedWorkspaceIds)],\n };\n for (const subscriber of subscribers)\n subscriber();\n };\n const setRecovery = (sourceSessionId, childSessionId, error, target) => {\n if (disposed)\n return;\n const key = recoveryKey(sourceSessionId, childSessionId);\n pending = new Map(pending).set(key, {\n key,\n sourceSessionId,\n childSessionId,\n ...(target === undefined ? {} : { binding: target }),\n error,\n });\n publish(target === undefined ? [] : [target.workspaceId]);\n };\n const clearRecovery = (sourceSessionId, childSessionId) => {\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = pending.get(key);\n if (current === undefined)\n return { cleared: false };\n const next = new Map(pending);\n next.delete(key);\n pending = next;\n return { cleared: true, workspaceId: current.binding?.workspaceId };\n };\n const lookupBinding = async (sourceSessionId) => {\n try {\n const index = await options.findBindings([sourceSessionId]);\n return index.bySessionId.get(sourceSessionId) ?? { status: 'missing' };\n }\n catch (error) {\n return { status: 'error', error };\n }\n };\n const attemptBinding = async (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId))\n return { bound: false };\n const initialSourceGen = versionOf(sourceGeneration, sourceSessionId);\n const lookup = providedLookup ?? (await lookupBinding(sourceSessionId));\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen) {\n return { bound: false };\n }\n if (lookup.status === 'error') {\n setRecovery(sourceSessionId, childSessionId, lookup.error);\n return { bound: false };\n }\n if (lookup.status === 'missing' || lookup.binding.status !== 'active') {\n const cleared = clearRecovery(sourceSessionId, childSessionId);\n if (cleared.cleared) {\n publish(cleared.workspaceId === undefined ? [] : [cleared.workspaceId]);\n }\n return { bound: false };\n }\n const target = lookup.binding;\n const wtKey = keyOf(target.workspaceId, target.worktreeId);\n const initialWtGen = versionOf(worktreeGeneration, wtKey);\n try {\n await options.bindSession({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n });\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n const childBinding = {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n status: 'active',\n };\n boundChildren.add(childSessionId);\n const { workspaceId: previousWorkspaceId } = clearRecovery(sourceSessionId, childSessionId);\n options.onBound?.(childBinding);\n publish([target.workspaceId, ...(previousWorkspaceId === undefined ? [] : [previousWorkspaceId])]);\n return { bound: true };\n }\n catch (error) {\n if (disposed ||\n versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n setRecovery(sourceSessionId, childSessionId, error, target);\n return { bound: false };\n }\n };\n const bindChild = (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId)) {\n return Promise.resolve({ bound: false });\n }\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = bindingInFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = attemptBinding(sourceSessionId, childSessionId, providedLookup).finally(() => {\n if (bindingInFlight.get(key) === promise)\n bindingInFlight.delete(key);\n });\n bindingInFlight.set(key, promise);\n return promise;\n };\n const reconcileNow = async (force) => {\n if (disposed || options.sessions === undefined)\n return;\n const snapshot = options.sessions.getSnapshot();\n const normalized = reconciliationSnapshot(snapshot);\n if (normalized === undefined)\n return;\n if (!force && normalized.signature === lastSessionLineageSignature)\n return;\n lastSessionLineageSignature = normalized.signature;\n const candidates = normalized.candidates.filter(({ childSessionId }) => !boundChildren.has(childSessionId));\n if (candidates.length === 0)\n return;\n const sourceSessionIds = [...new Set(candidates.map(({ sourceSessionId }) => sourceSessionId))];\n const lookupGenerations = new Map(sourceSessionIds.map((id) => [id, versionOf(sourceGeneration, id)]));\n let index;\n try {\n index = await options.findBindings(sourceSessionIds);\n }\n catch (error) {\n const bySessionId = new Map();\n for (const sourceSessionId of sourceSessionIds) {\n bySessionId.set(sourceSessionId, { status: 'error', error });\n }\n index = { bySessionId };\n }\n if (disposed)\n return;\n await Promise.all(candidates.filter(({ sourceSessionId }) => lookupGenerations.get(sourceSessionId) === versionOf(sourceGeneration, sourceSessionId)).map(({ childSessionId, sourceSessionId }) => bindChild(sourceSessionId, childSessionId, index.bySessionId.get(sourceSessionId) ?? { status: 'missing' }).then(() => undefined)));\n };\n const reconcile = (input = {}) => {\n const force = input.force === true;\n if (reconciliationInFlight !== undefined) {\n reconciliationAgain = true;\n reconciliationForce ||= force;\n return reconciliationInFlight;\n }\n let nextForce = force;\n const run = async () => {\n do {\n const forceThisPass = nextForce || reconciliationForce;\n nextForce = false;\n reconciliationForce = false;\n reconciliationAgain = false;\n await reconcileNow(forceThisPass);\n } while (!disposed && reconciliationAgain);\n };\n const promise = run().finally(() => {\n if (reconciliationInFlight === promise)\n reconciliationInFlight = undefined;\n });\n reconciliationInFlight = promise;\n return promise;\n };\n return {\n recovery: {\n getSnapshot() {\n return recoverySnapshot;\n },\n subscribe(listener) {\n subscribers.add(listener);\n return () => subscribers.delete(listener);\n },\n },\n async fork(input) {\n const generation = versionOf(sourceGeneration, input.sessionId);\n const childSessionId = await options.fork(input);\n if (!disposed && generation === versionOf(sourceGeneration, input.sessionId)) {\n await bindChild(input.sessionId, childSessionId);\n }\n return childSessionId;\n },\n reconcile,\n async retry(key) {\n const item = pending.get(key);\n if (item === undefined || disposed)\n return false;\n const providedLookup = item.binding === undefined\n ? undefined\n : { status: 'found', binding: item.binding };\n return (await bindChild(item.sourceSessionId, item.childSessionId, providedLookup)).bound;\n },\n forgetWorktree(input) {\n if (disposed)\n return;\n const wtKey = keyOf(input.workspaceId, input.worktreeId);\n worktreeGeneration.set(wtKey, versionOf(worktreeGeneration, wtKey) + 1);\n for (const sid of input.sessionIds) {\n sourceGeneration.set(sid, versionOf(sourceGeneration, sid) + 1);\n }\n let changed = false;\n const next = new Map(pending);\n for (const [key, item] of pending.entries()) {\n const matchWorktree = item.binding?.workspaceId === input.workspaceId &&\n item.binding?.worktreeId === input.worktreeId;\n const matchSession = input.sessionIds.includes(item.sourceSessionId);\n if (matchWorktree || matchSession) {\n next.delete(key);\n changed = true;\n }\n }\n if (changed) {\n pending = next;\n publish([input.workspaceId]);\n }\n },\n dispose() {\n disposed = true;\n bindingInFlight.clear();\n subscribers.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session-fork.js.map","import { createElement } from 'react';\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_NS, en, zh } from './locales.js';\nimport { createWorktreeConnectionAdapter } from './worktree-connection.js';\nimport { WorktreeHeaderContext } from './context/WorktreeContext.js';\nimport { WorktreeModeAction } from './view/WorktreeModeAction.js';\nimport { switchViewMode } from './view/view-mode-dispatch.js';\nimport { IconDashboard } from './dashboard/dashboard-icon.js';\nimport { DashboardHeaderAction } from './dashboard/DashboardHeaderAction.js';\nimport { WorktreeOverlay } from './overlay/WorktreeOverlay.js';\nimport { createWorktreeContextProjection } from './context/worktree-context-store.js';\nimport { createWorktreeExpandStateStore } from './view/worktree-expand-state.js';\nimport { createWorktreeSessionOrderStore } from './session/worktree-session-order.js';\nimport { createWorktreeViewStore } from './view/view-mode-store.js';\nimport { createWorktreeViewReader } from './view/worktree-view-read.js';\nimport { createVirtualWorkspaceMembership, } from './session/virtual-workspace-membership.js';\nimport { createWorktreeSessionConnector, } from './session/worktree-session.js';\nimport { renameWorktreeSession } from './session/session-rename.js';\nimport { openWorktreeSession } from './session/session-navigation.js';\nimport { createWorktreeFullAccessConfirmationController, } from './permission/worktree-permission.js';\nimport { installWorktreePermissionIcon } from './permission/worktree-permission-icon.js';\nimport { createWorktreeSessionForkCoordinator, } from './session/worktree-session-fork.js';\nexport { WORKTREE_CONNECTION_CHANNEL, WORKTREE_CONNECTION_ENDPOINTS, WorktreeConnectionError, createWorktreeConnectionAdapter, } from './worktree-connection.js';\nfunction sidebarRightController(ctx) {\n // Optional sibling service: property access requires a declared Cordis injection.\n // Resolve at action time so late registration/disposal is reflected without\n // making the whole Worktree navigation depend on the rightbar plugin.\n return ctx.get('sidebarRight');\n}\nfunction forkRelatedSessionIds(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n const related = new Set();\n for (const childSessionId of snapshot.ids) {\n if (typeof childSessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[childSessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentSessionId = summary?.parentId;\n if (parentSessionId === undefined ||\n parentSessionId === childSessionId ||\n summary?.blank === true ||\n summary?.origin === 'subagent' ||\n snapshot.byId[parentSessionId] === undefined) {\n continue;\n }\n related.add(childSessionId);\n related.add(parentSessionId);\n }\n return related;\n}\nfunction workspaceMembershipSignature(snapshot, sessions) {\n const relatedSessionIds = forkRelatedSessionIds(sessions);\n if (relatedSessionIds === undefined)\n return undefined;\n if (typeof snapshot !== 'object' || snapshot === null || !Array.isArray(snapshot.items)) {\n return undefined;\n }\n const facts = [];\n for (const workspace of snapshot.items) {\n if (typeof workspace !== 'object' ||\n workspace === null ||\n typeof workspace.workspaceId !== 'string' ||\n !Array.isArray(workspace.sessionIds) ||\n workspace.sessionIds.some((sessionId) => typeof sessionId !== 'string')) {\n return undefined;\n }\n facts.push([\n workspace.workspaceId,\n workspace.sessionIds.filter((sessionId) => relatedSessionIds.has(sessionId)).sort(),\n ]);\n }\n // This signature tracks membership, not presentation order.\n facts.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n return JSON.stringify(facts);\n}\n/** Required DSH Client services; Connection is the sole Worktree wire dependency. */\nexport const inject = ['connection', 'locale', 'slots', 'sessions', 'workspaces', 'uiWorkspace'];\n/**\n * DSH Client entry. The adapter is composed once per plugin fiber and is disposed\n * with that fiber, so slot consumers share one manager and one request lifetime.\n */\nexport function apply(ctx) {\n const locale = ctx.locale;\n if (typeof document !== 'undefined') {\n ctx.effect(() => installWorktreePermissionIcon(document), 'clutch-dsh-worktree: permission icon cleanup');\n }\n ctx.effect(() => locale.register(WORKTREE_NS, { zh, en }), 'clutch-dsh-worktree: locale dictionaries');\n const manager = createWorktreeConnectionAdapter(ctx.connection.rpc);\n const viewReader = createWorktreeViewReader(manager);\n const fullAccessConfirmation = createWorktreeFullAccessConfirmationController();\n const permissionNotice = createSnapshotStore(undefined);\n const permissionManager = typeof document !== 'undefined' ? manager : undefined;\n const dashboardStore = createSnapshotStore(undefined);\n const reportPermissionNotice = (input, result) => {\n const visible = result.status === 'fallback-workspace-write' ||\n result.status === 'user-restricted' ||\n result.status === 'unverified';\n permissionNotice.set(visible ? { ...input, result } : undefined);\n };\n const sessions = ctx.sessions;\n const slots = ctx.slots;\n const virtualWorkspaceMembership = createVirtualWorkspaceMembership(ctx.workspaces.list);\n const contextProjection = createWorktreeContextProjection({\n sessions: ctx.sessions.list,\n workspaces: ctx.workspaces.list,\n viewReader,\n storeFactory: createSnapshotStore,\n });\n ctx.effect(() => () => manager.dispose(), 'clutch-dsh-worktree: connection cleanup');\n ctx.effect(() => () => viewReader.dispose(), 'clutch-dsh-worktree: view reader cleanup');\n ctx.effect(() => () => fullAccessConfirmation.dispose(), 'clutch-dsh-worktree: Full Access confirmation cleanup');\n ctx.effect(() => () => virtualWorkspaceMembership.dispose(), 'clutch-dsh-worktree: Workspace membership cleanup');\n ctx.effect(() => () => contextProjection.dispose(), 'clutch-dsh-worktree: Session context cleanup');\n void contextProjection.refresh();\n const viewStore = createWorktreeViewStore();\n const expandState = createWorktreeExpandStateStore(createSnapshotStore);\n const sessionOrder = createWorktreeSessionOrderStore(createSnapshotStore);\n ctx.effect(() => () => sessionOrder.dispose(), 'clutch-dsh-worktree: Session order cleanup');\n const ensureSessionWorkspace = (workspaceId, sessionId) => {\n virtualWorkspaceMembership.ensure({ workspaceId, sessionId });\n };\n const syncSessionWorkspaces = (bindings) => {\n virtualWorkspaceMembership.sync(bindings);\n };\n const forkableSessions = ctx.sessions;\n const nativeFork = forkableSessions.fork;\n const workspaceBindingReads = new Map();\n const readWorkspaceBindings = (workspaceId) => {\n const current = workspaceBindingReads.get(workspaceId);\n if (current !== undefined)\n return current;\n const promise = manager.listBindings({ workspaceId }).finally(() => {\n if (workspaceBindingReads.get(workspaceId) === promise) {\n workspaceBindingReads.delete(workspaceId);\n }\n });\n workspaceBindingReads.set(workspaceId, promise);\n return promise;\n };\n const findWorktreeSessionBindings = async (sessionIds) => {\n const requested = [...new Set(sessionIds)];\n const requestedSet = new Set(requested);\n const workspaces = ctx.workspaces.list.getSnapshot().items;\n const workspaceIds = [\n ...new Set(workspaces.map((workspace) => workspace.workspaceId)),\n ];\n const owners = new Map();\n for (const workspace of workspaces) {\n for (const sessionId of workspace.sessionIds) {\n if (!requestedSet.has(sessionId))\n continue;\n const workspaceOwners = owners.get(sessionId) ?? [];\n if (!workspaceOwners.includes(workspace.workspaceId)) {\n workspaceOwners.push(workspace.workspaceId);\n owners.set(sessionId, workspaceOwners);\n }\n }\n }\n const unknownScope = requested.some((sessionId) => (owners.get(sessionId)?.length ?? 0) === 0);\n const selectedWorkspaceIds = unknownScope\n ? workspaceIds\n : workspaceIds.filter((workspaceId) => requested.some((sessionId) => owners.get(sessionId)?.includes(workspaceId) === true));\n const results = await Promise.allSettled(selectedWorkspaceIds.map((workspaceId) => readWorkspaceBindings(workspaceId)));\n const resultByWorkspaceId = new Map(selectedWorkspaceIds.map((workspaceId, index) => [workspaceId, results[index]]));\n const bySessionId = new Map();\n for (const sessionId of requested) {\n const relevantWorkspaceIds = owners.get(sessionId) ?? selectedWorkspaceIds;\n let found;\n let failed;\n for (const workspaceId of relevantWorkspaceIds) {\n const result = resultByWorkspaceId.get(workspaceId);\n if (result === undefined)\n continue;\n if (result.status === 'rejected') {\n failed ??= result.reason;\n continue;\n }\n const binding = result.value.find((candidate) => candidate.sessionId === sessionId && candidate.status === 'active');\n if (binding !== undefined) {\n found = binding;\n break;\n }\n }\n bySessionId.set(sessionId, found === undefined\n ? failed === undefined ? { status: 'missing' } : { status: 'error', error: failed }\n : { status: 'found', binding: found });\n }\n return { bySessionId };\n };\n const forkCoordinator = typeof nativeFork !== 'function'\n ? undefined\n : createWorktreeSessionForkCoordinator({\n fork: (input) => nativeFork.call(ctx.sessions, input),\n findBindings: findWorktreeSessionBindings,\n bindSession: (input) => manager.bindSession(input),\n sessions: ctx.sessions.list,\n });\n if (forkCoordinator !== undefined) {\n forkableSessions.fork = (input) => forkCoordinator.fork(input);\n const reconcileForkChildren = () => {\n void forkCoordinator.reconcile();\n };\n let lastWorkspaceMembershipSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const reconcileForkChildrenForWorkspace = () => {\n const nextSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const changed = nextSignature !== undefined && nextSignature !== lastWorkspaceMembershipSignature;\n if (nextSignature !== undefined)\n lastWorkspaceMembershipSignature = nextSignature;\n void forkCoordinator.reconcile({ force: changed });\n };\n const unsubscribeSessionList = ctx.sessions.list.subscribe(reconcileForkChildren);\n const unsubscribeWorkspaceList = ctx.workspaces.list.subscribe(reconcileForkChildrenForWorkspace);\n ctx.effect(() => () => {\n unsubscribeSessionList();\n unsubscribeWorkspaceList();\n forkCoordinator.dispose();\n forkableSessions.fork = nativeFork;\n }, 'clutch-dsh-worktree: Session fork cleanup');\n void forkCoordinator.reconcile();\n }\n const worktreeSessionConnector = createWorktreeSessionConnector({\n manager,\n sessions: ctx.sessions.list,\n archivedSessionIds: () => ctx.workspaces.list.getSnapshot().archivedSessionIds,\n createSession: async (input) => String(await sessions.create(input)),\n ensureSessionWorkspace,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n onPermissionResult: reportPermissionNotice,\n openSession: (sessionId) => openWorktreeSession(ctx.uiWorkspace, ctx.sessions, sessionId),\n });\n ctx.effect(() => () => worktreeSessionConnector.dispose(), 'clutch-dsh-worktree: Worktree Session connector cleanup');\n const openDashboardForSession = (sessionId) => {\n switchViewMode('worktree');\n const contextSnapshot = contextProjection.store.getSnapshot();\n let targetWorkspaceId;\n let targetWorktreeId;\n if (contextSnapshot.sessionId === sessionId) {\n if (contextSnapshot.value.kind === 'worktree') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = contextSnapshot.value.worktreeId;\n }\n else if (contextSnapshot.value.kind === 'main') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId === undefined) {\n const workspaces = ctx.workspaces.list.getSnapshot()?.items ?? [];\n const workspace = workspaces.find((candidate) => candidate.sessionIds?.includes(sessionId));\n if (workspace !== undefined) {\n targetWorkspaceId = workspace.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId !== undefined && targetWorktreeId !== undefined) {\n dashboardStore.set({\n workspaceId: targetWorkspaceId,\n worktreeId: targetWorktreeId,\n sessionId,\n });\n }\n };\n slots.inject('conversation.session.header.actions', () => slots.register({\n name: 'conversation.session.header.actions',\n id: 'clutch-dsh-worktree-context-header',\n order: -5,\n locale: WORKTREE_NS,\n inject: () => ({ hooks: { worktreeContext: contextProjection.store } }),\n }, WorktreeHeaderContext));\n slots.inject('conversation.session.header.utilities', () => slots.register({\n name: 'conversation.session.header.utilities',\n id: 'clutch-dsh-worktree-dashboard-header',\n order: -10,\n locale: WORKTREE_NS,\n inject: () => ({\n hooks: { worktreeContext: contextProjection.store },\n openDashboard: openDashboardForSession,\n }),\n }, DashboardHeaderAction));\n slots.inject('sidebar.footer.action', () => slots.register({\n name: 'sidebar.footer.action',\n id: 'clutch-dsh-worktree-mode-action',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({ available: true }),\n }, WorktreeModeAction));\n slots.inject('shell.overlay', () => slots.register({\n name: 'shell.overlay',\n id: 'clutch-dsh-worktree-navigation',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({\n available: true,\n openResource: (address, options) => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar && typeof sidebar.openResource === 'function') {\n sidebar.openResource(address, options?.line !== undefined ? { params: { line: options.line } } : undefined);\n return true;\n }\n return false;\n },\n closeRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === true)\n sidebar.toggleExpanded?.();\n },\n openRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === false)\n sidebar.toggleExpanded?.();\n },\n isRightSidebarExpanded: () => {\n const sidebar = sidebarRightController(ctx);\n return sidebar?.isExpanded?.() === true;\n },\n expandState,\n sessionOrder,\n dashboardStore,\n hooks: { worktreeContext: contextProjection.store },\n manager,\n viewReader,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n fullAccessConfirmation: typeof document === 'undefined'\n ? undefined\n : fullAccessConfirmation,\n onPermissionResult: reportPermissionNotice,\n onPermissionNotice: reportPermissionNotice,\n permissionNotice,\n createWorkspace: async () => {\n const workspacePath = await ctx.uiWorkspace.pickDirectory();\n if (workspacePath !== null)\n await ctx.workspaces.create({ path: workspacePath });\n },\n createSessionForWorktree: (input) => worktreeSessionConnector.create(input),\n invalidateWorktreeContext: (workspaceId) => contextProjection.invalidate(workspaceId),\n createMainSession: (workspaceId) => {\n ctx.uiWorkspace.startSession(workspaceId);\n },\n renameWorkspace: async (workspaceId, title) => {\n await ctx.workspaces.rename(workspaceId, title);\n },\n deleteWorkspace: async (workspaceId) => {\n await ctx.workspaces.delete(workspaceId);\n },\n insertWorkspaceBefore: async (workspaceId, beforeWorkspaceId) => {\n await ctx.workspaces.insertBefore(workspaceId, beforeWorkspaceId);\n },\n insertSessionBefore: async (workspaceId, sessionId, beforeSessionId) => {\n await ctx.workspaces.insertSessionBefore(workspaceId, sessionId, beforeSessionId);\n },\n insertWorktreeBefore: (workspaceId, worktreeId, beforeWorktreeId) => manager.insertWorktreeBefore({\n workspaceId,\n worktreeId,\n beforeWorktreeId,\n }),\n renameSession: (sessionId, title) => renameWorktreeSession(ctx.sessions, sessionId, title),\n forkSession: (sessionId) => {\n if (forkableSessions.fork === undefined)\n return;\n void ctx.sessions.fork({\n sessionId: sessionId,\n increaseTitle: true,\n })\n .then((childId) => {\n openWorktreeSession(ctx.uiWorkspace, ctx.sessions, childId);\n })\n .catch(() => {\n // Fork failure leaves the current Session and Worktree projection unchanged.\n });\n },\n archiveSession: (sessionId) => ctx.workspaces.archiveSession(sessionId),\n ensureSessionWorkspace,\n syncSessionWorkspaces,\n forkRecovery: forkCoordinator?.recovery,\n retryForkSession: forkCoordinator === undefined\n ? undefined\n : async (key) => {\n await forkCoordinator.retry(key);\n },\n openSession: (sessionId) => openWorktreeSession(ctx.uiWorkspace, ctx.sessions, sessionId),\n onWorktreeForgotten: (input) => {\n forkCoordinator?.forgetWorktree(input);\n for (const sessionId of input.sessionIds) {\n virtualWorkspaceMembership.removeSession(sessionId);\n }\n const currentNotice = permissionNotice.getSnapshot();\n if (currentNotice !== undefined &&\n (currentNotice.worktreeId === input.worktreeId ||\n (currentNotice.sessionId !== undefined && input.sessionIds.includes(currentNotice.sessionId)))) {\n permissionNotice.set(undefined);\n }\n },\n }),\n }, WorktreeOverlay));\n if (typeof ctx.inject === 'function') {\n ctx.inject(['sessionLogDownload'], (innerCtx) => {\n const sessionLogDownload = innerCtx.get('sessionLogDownload');\n if (typeof sessionLogDownload?.registerMoreItem !== 'function')\n return;\n innerCtx.effect(() => {\n return sessionLogDownload.registerMoreItem({\n id: 'clutch-dsh-worktree-dashboard',\n label: () => innerCtx.locale.getLocale().active === 'zh'\n ? '前往 Dashboard'\n : 'Go to Dashboard',\n icon: createElement(IconDashboard, { size: 16 }),\n order: -1,\n onSelect: openDashboardForSession,\n });\n }, 'clutch-dsh-worktree: session header more item');\n });\n }\n}\n//# sourceMappingURL=entry.js.map"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["isRecord","Toast","exports","primitives","HoverCard","styles","styles","Tooltip","styles","styles","HoverCard","_Fragment","RiskConfirmation","Toast","Modal","_Fragment","Button","Input","styles","_Fragment","_Fragment","_Fragment","openWorktreeSession","emptyState","isRecord","normalizeIds","isMainWorktreeId","sessionStatusLabel","sessionTimeLabel","styles","StateDot","Menu","HoverCard","_Fragment","styles","styles","styles","Component","styles","_Fragment","styles","styles","styles","_Fragment","styles","Tooltip","emptyState","concealNativeContent","css","Menu","_Fragment","styles","normalizeBranch","primitives","styles","shortCommit","_Fragment","styles","styles","_Fragment","shortCommit","styles","_Fragment","styles","_Fragment","styles","styles","Tag","Switch","_Fragment","Button","styles","_Fragment","Tooltip","Modal","Button","Input","StateDot","isMainWorktreeId","styles","isMainWorktreeId","isMainWorktreeId","styles","_Fragment","styles","SegmentedTabs","_Fragment","Button","Tag","styles"],"sources":["../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.3.31_immer@10.2.0_react@18.3.1/node_modules/zustand/esm/middleware.mjs","../../../node_modules/.pnpm/immer@10.2.0/node_modules/immer/dist/immer.mjs","../../../node_modules/.pnpm/@deepseek-ai+dsh-client-store@0.2.0-rc.1_@deepseek-ai+cordis@4.0.4/node_modules/@deepseek-ai/dsh-client-store/lib/index.js","client/locales.js","client/worktree-connection.js","client/worktree-tool-changes.js","client/restart-notice.js","client/surface/components/RestartToast.js","client/dsh-icon-compat.js","client/dsh-icons.js","client/context/WorktreeContext.js","client/view/view-mode-dispatch.js","client/view/WorktreeModeAction.js","client/dashboard/dashboard-icon.js","client/dashboard/DashboardHeaderAction.js","client/context/WorktreeHeroContext.js","client/surface/components/AccessConfirmation.js","contract/tool-settings.js","contract/windows-path.js","contract/index.js","client/surface/notification-queue.js","client/view/worktree-error-copy.js","client/settings/diagnostics.js","client/surface/components/NotificationToasts.js","client/view/worktree-view-errors.js","client/view/worktree-view-actions.js","client/view/worktree-view-read.js","client/session/session-selection.js","client/session/session-view.js","client/surface/selectors.js","client/surface/components/dialogs.js","client/surface/actions/worktree-cleanup-flow.js","client/surface/actions/lifecycle-commands.js","client/surface/components/LifecycleDialogs.js","client/surface/components/NativeDialogs.js","client/surface/components/RegistrationDialog.js","client/surface/shared.js","client/view/navigation.js","client/view/view-mode.js","client/view/worktree-expand-state.js","client/dashboard/dashboard-selection.js","client/surface/state/useTitleMarquee.js","client/surface/components/rows.js","client/surface/components/ActiveWorktree.js","client/surface/components/ArchivedWorktree.js","client/surface/components/ArchivedWorktrees.js","client/surface/components/AnimatedTree.js","client/surface/components/WorkspaceTree.js","client/surface/components/OverlayScrollbar.js","client/surface/components/SurfaceContent.js","client/surface/components/SurfaceHeader.js","client/session/worktree-session-order.js","client/surface/actions/useDragActions.js","client/surface/actions/useLifecycleActions.js","client/surface/state/useLifecycleState.js","client/surface/actions/useNativeActions.js","client/surface/state/useRegistrationState.js","client/session/worktree-session.js","client/surface/actions/useSessionActions.js","client/session/worktree-session-position.js","client/surface/state/useSessionExpansion.js","client/surface/state/useSessionOrdering.js","client/surface/state/useSurfaceMenus.js","client/surface/actions/useSurfaceMutation.js","client/surface/state/useSurfaceRefresh.js","client/overlay/overlay-bounds.js","client/layout/app-frame.js","client/dashboard/dashboard-overlay.js","client/overlay/sidebar-overlay-geometry.js","client/surface/state/useSurfaceSources.js","client/surface/actions/useWorktreeRegistration.js","client/session/session-labels.js","client/dashboard/vscode-url.js","client/dashboard/open-in-app-controller.js","client/dashboard/OpenInAppButton.js","client/dashboard/worktree-acquisition-facts.js","client/dashboard/WorktreeInstructions.js","client/dashboard/git/git-facts.js","client/dashboard/git/git-file-tree.js","client/dashboard/git/GitFileTypeIcon.js","client/dashboard/git/GitLineStats.js","client/dashboard/git/GitChangedFiles.js","client/dashboard/git/GitCommitList.js","client/dashboard/git/git-diff-parser.js","client/dashboard/git/GitDiffView.js","client/dashboard/git/git-column-split.js","client/dashboard/git/useGitPaneSplit.js","client/dashboard/git/git-state-cache.js","client/dashboard/git/useWorktreeGitState.js","client/dashboard/git/WorktreeGitPanel.js","client/dashboard/git/WorktreeGitOverview.js","client/settings/ToolSettings.js","client/dashboard/WorktreeDashboard.js","client/dashboard/DashboardRequest.js","client/dashboard/dashboard-sessions.js","client/dashboard/dashboard-navigation.js","../../../node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.0-rc.1_@deepseek-ai+cordis@4.0.4/node_modules/@deepseek-ai/dsh-util-workspace-path/lib/index.js","client/dashboard/git/file-address.js","client/WorktreeSurface.js","client/overlay/WorktreeOverlay.js","client/settings/WorktreeSettings.js","client/settings/WorktreeSettingsNavIcon.js","client/command-activity.js","client/settings/settings-navigation.js","client/context/worktree-context.js","client/context/worktree-context-store.js","client/view/view-mode-store.js","client/session/virtual-workspace-membership.js","client/session/session-rename.js","client/session/session-navigation.js","client/permission/worktree-permission.js","client/permission/worktree-permission-icon.js","client/session/worktree-session-fork.js","client/entry.js"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api)\n return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording)\n return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools)\n return;\n if (typeof api.dispatch !== \"function\")\n return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState)\n return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0)\n f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null || proto === Object.prototype)\n return true;\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n if (typeof Ctor !== \"function\")\n return false;\n let ctorString = cachedCtorStrings.get(Ctor);\n if (ctorString === void 0) {\n ctorString = Function.toString.call(Ctor);\n cachedCtorStrings.set(Ctor, ctorString);\n }\n return ctorString === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n if (getArchtype(obj) === 0 /* Object */) {\n const keys = strict ? Reflect.ownKeys(obj) : Object.keys(obj);\n keys.forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: dontMutateMethodOverride,\n add: dontMutateMethodOverride,\n clear: dontMutateMethodOverride,\n delete: dontMutateMethodOverride\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nvar dontMutateMethodOverride = {\n value: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n if (obj === null || typeof obj !== \"object\")\n return true;\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const useStrictIteration = rootScope.immer_.shouldUseStrictIteration();\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path),\n useStrictIteration\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(\n rootScope,\n state,\n result,\n key,\n childValue,\n path,\n isSet2\n ),\n useStrictIteration\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (childValue == null) {\n return;\n }\n if (typeof childValue !== \"object\" && !targetIsSet) {\n return;\n }\n const childIsFrozen = isFrozen(childValue);\n if (childIsFrozen && !targetIsSet) {\n return;\n }\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !childIsFrozen) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n if (parentState && parentState.base_ && parentState.base_[prop] === childValue && childIsFrozen) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n this.useStrictIteration_ = true;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n if (typeof config?.useStrictIteration === \"boolean\")\n this.setUseStrictIteration(config.useStrictIteration);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n /**\n * Pass false to use faster iteration that skips non-enumerable properties\n * but still handles symbols for compatibility.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\n setUseStrictIteration(value) {\n this.useStrictIteration_ = value;\n }\n shouldUseStrictIteration() {\n return this.useStrictIteration_;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n let strict = true;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n strict = state.scope_.immer_.shouldUseStrictIteration();\n } else {\n copy = shallowCopy(value, true);\n }\n each(\n copy,\n (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n },\n strict\n );\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictIteration,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { createStore } from \"zustand/vanilla\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { shallow } from \"zustand/shallow\";\nimport { freeze, produce } from \"immer\";\n//#region lib/types/index.js\n/**\n* React-free snapshot store engine (zustand vanilla + immer + subscribeWithSelector +\n* rafFlush middleware + opt-in persist + dev freeze) plus the declarative\n* shell over it: {@link defineStore} bakes an init/persist/actions literal\n* into a {@link StoreHandle}, the registration-side store seat of slot\n* terminals. Engine products are bare observables — subscribe/getSnapshot/\n* update/set, NO selector hook. Hook synthesis is ui-renderer's (the one\n* uSES bridge, cached per source at the binding site).\n*/\n/**\n* Notify an observer set without allowing one callback to starve the rest.\n* @param listeners - current observer callbacks; copied before dispatch.\n* @param label - diagnostic owner prefix.\n* @param args - callback arguments.\n*/\nfunction notifySubscribers(listeners, label, ...args) {\n\tfor (const listener of [...listeners]) try {\n\t\tlistener(...args);\n\t} catch (error) {\n\t\tconsole.error(`${label} subscriber failed:`, error);\n\t}\n}\n/**\n* Shallow equality for selector slices (zustand/shallow semantics; travels\n* with the engine so hook consumers need no zustand dependency).\n* @param a - left value.\n* @param b - right value.\n* @returns whether the values are shallowly equal.\n*/\nfunction shallowEqual(a, b) {\n\treturn shallow(a, b);\n}\n/** Batches subscriber notification into one flush per animation frame. */\nfunction rafBatch(notify) {\n\tconst schedule = typeof requestAnimationFrame === \"function\" ? (fn) => {\n\t\trequestAnimationFrame(() => {\n\t\t\tfn();\n\t\t});\n\t} : (fn) => {\n\t\tqueueMicrotask(fn);\n\t};\n\tlet scheduled = false;\n\treturn () => {\n\t\tif (scheduled) return;\n\t\tscheduled = true;\n\t\tschedule(() => {\n\t\t\tscheduled = false;\n\t\t\tnotify();\n\t\t});\n\t};\n}\n/**\n* Create a snapshot store.\n*\n* Flush default is 'sync' (controlled inputs need same-tick echo); frame-driven\n* stores opt into 'raf', where a frame's worth of updates coalesces into one\n* notification. Known raf-mode tradeoff: a component mounting mid-frame reads\n* fresh state while existing subscribers hear it next flush — transient\n* frame-level skew, same nature as the object layer's microtask batching.\n*\n* @param init - initial state.\n* @param opts - flush mode and opt-in persistence (localStorage, keyed by name).\n* @returns the store.\n*/\nfunction createSnapshotStore(init, opts) {\n\tconst withSelector = subscribeWithSelector(() => init);\n\tconst api = createStore()(withSelector);\n\tif (opts?.persist) attachPersistence(api, opts.persist.name);\n\tlet subscribe = (fn) => api.subscribe(() => {\n\t\tnotifySubscribers([fn], \"[client-store]\");\n\t});\n\tif (opts?.flush === \"raf\") {\n\t\tconst listeners = /* @__PURE__ */ new Set();\n\t\tconst flush = rafBatch(() => {\n\t\t\tnotifySubscribers(listeners, \"[client-store]\");\n\t\t});\n\t\tapi.subscribe(flush);\n\t\tsubscribe = (fn) => {\n\t\t\tlisteners.add(fn);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(fn);\n\t\t\t};\n\t\t};\n\t}\n\treturn {\n\t\tgetSnapshot: () => api.getState(),\n\t\tsubscribe: (fn) => subscribe(fn),\n\t\tupdate: (mutator) => {\n\t\t\tapi.setState(produce(api.getState(), (draft) => {\n\t\t\t\tmutator(draft);\n\t\t\t}), true);\n\t\t},\n\t\tset: (next) => {\n\t\t\tapi.setState(devFreeze(next), true);\n\t\t}\n\t};\n}\n/**\n* Whole-value JSON persistence to localStorage. Hand-rolled instead of the\n* zustand persist middleware: its write path spreads state into an object\n* (`partialize({ ...get() })`), exploding primitive state (a persisted string\n* draft becomes {0:'h',1:'e',...}) — not fixable via merge/deserialize options\n* because the corruption happens before serialization. Storage failures\n* (quota, private mode) only disable persistence, never break the store.\n*/\nfunction attachPersistence(api, name) {\n\tif (typeof localStorage === \"undefined\") return;\n\ttry {\n\t\tconst raw = localStorage.getItem(name);\n\t\tif (raw !== null) api.setState(devFreeze(JSON.parse(raw)), true);\n\t} catch (error) {\n\t\tconsole.error(`snapshot store '${name}' rehydration failed:`, error);\n\t}\n\tapi.subscribe((state) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(name, JSON.stringify(state));\n\t\t} catch (error) {\n\t\t\tconsole.error(`snapshot store '${name}' persistence failed:`, error);\n\t\t}\n\t});\n}\n/** Deep-freeze draftable wholesale-set state outside production: set() bypasses immer's freeze. */\nfunction devFreeze(value) {\n\treturn freeze(value, true);\n}\n/**\n* Declare a store: initial state, optional persistence, and the full write\n* set as pure draft mutators. The returned handle is the registration\n* currency of the store seat — its identity keys instance sharing. Satisfies\n* ui-slots' DefineStore contract (the handle/instance are the engine-extended\n* subtypes).\n*\n* The `A & ActionsDecl<T>` actions position is load-bearing: T resolves from\n* `init` in the first inference round, and the intersection then contextually\n* types each mutator's draft parameter (context-sensitive functions defer),\n* so call sites write `(d, x: X) => { ... }` with no draft annotation. If a\n* future TS version breaks this single-literal inference, the design's\n* documented fallback is currying (`defineStore(init).actions({...})`).\n* @param decl - init lambda (fresh state per instance), optional persist key, actions table.\n* @returns the store handle.\n*/\nfunction defineStore(decl) {\n\treturn {\n\t\tspec: decl,\n\t\tcreate(scopeKey) {\n\t\t\tconst persistKey = decl.persist === void 0 ? void 0 : scopeKey === void 0 ? decl.persist : `${decl.persist}.${scopeKey}`;\n\t\t\tconst store = createSnapshotStore(decl.init(), persistKey !== void 0 ? { persist: { name: persistKey } } : void 0);\n\t\t\tconst actions = {};\n\t\t\tfor (const key of Object.keys(decl.actions)) {\n\t\t\t\tconst mutate = decl.actions[key];\n\t\t\t\tactions[key] = (...params) => {\n\t\t\t\t\tstore.update((draft) => {\n\t\t\t\t\t\tmutate(draft, ...params);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tactions,\n\t\t\t\tgetSnapshot: () => store.getSnapshot(),\n\t\t\t\tsubscribe: (fn) => store.subscribe(fn),\n\t\t\t\tstore,\n\t\t\t\tclearPersisted: () => {\n\t\t\t\t\tif (persistKey === void 0 || typeof localStorage === \"undefined\") return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlocalStorage.removeItem(persistKey);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\nexport { createSnapshotStore, defineStore, notifySubscribers, shallowEqual };\n\n//# sourceMappingURL=index.js.map","export const WORKTREE_NS = 'worktree';\nexport const zh = {\n 'tools.experimental': '实验性',\n 'tools.loading': '正在加载工具设置…',\n \"settings.general\": \"通用\",\n \"tools.command\": \"Worktree 工具\",\n \"tools.commandHint\": \"开启后可输入 /cluworktree,为当前会话启用下方选中的能力。关闭后不提供该指令。\",\n \"tools.auto\": \"自动注入 Worktree 工具\",\n \"tools.autoHint\": \"此 Worktree 的会话执行前自动注入所选工具,与通用设置独立。\",\n 'tools.localAutoHint': '此 Workspace 的 Local/Main 会话执行前自动注入所选工具,与通用设置独立。',\n 'tools.selection': '工具选择',\n 'tools.commandSelectionHint': '/cluworktree 仅补齐未启用项。',\n 'tools.autoSelectionHint': '按需选择此 Worktree 自动注入的能力。',\n 'tools.localAutoSelectionHint': '仅自动注入此 Workspace 的 Local/Main 会话。',\n \"tools.runtimeHint\": \"取消全部会关闭总开关。更改影响后续注入,已启用工具保留至 Agent 结束。\",\n \"tools.reportHint\": \"委派会话默认仅启用结果回报。\",\n \"tools.failed\": \"无法读取或保存工具设置。请重试以加载最新配置。\",\n \"tools.create.title\": \"创建 Worktree\",\n \"tools.create.hint\": \"从当前已提交状态创建独立分支与工作目录,可附带共享指令。\",\n \"tools.worktrees.title\": \"查找 Worktree\",\n \"tools.worktrees.hint\": \"查看当前 Workspace 中的 Worktree、分支、路径与可用状态。\",\n \"tools.delegate.title\": \"委派任务\",\n \"tools.delegate.hint\": \"在指定 Worktree 中创建并绑定会话、选择模型并投递任务,执行方可主动回报结果。\",\n \"tools.models.title\": \"选择模型\",\n \"tools.models.hint\": \"查询可用模型与推理选项,为委派任务选择合适的模型。\",\n \"tools.sessions.title\": \"查找会话\",\n \"tools.sessions.hint\": \"查看当前 Workspace 或指定 Worktree 的会话身份、标题与执行状态。\",\n \"tools.message.title\": \"继续会话\",\n \"tools.message.hint\": \"向已有会话发送后续任务,或在原生执行边界调整正在进行的任务。\",\n 'settings.title': 'Worktree',\n 'settings.overview': '概览',\n 'settings.errors': '报错与修复',\n 'settings.description': 'Worktree 模式按 Git 工作树组织会话。操作失败时通过 toast 提示,错误说明、诊断详情和恢复操作集中在「报错与修复」。',\n 'settings.retention': '错误记录保留在当前页面内存中,刷新页面后清空。修复前请先阅读问题说明和解决建议。',\n 'settings.clearHistory': '清除历史记录',\n 'settings.empty': '暂无错误记录。',\n 'settings.operation': 'Worktree 操作',\n 'settings.active': '待处理',\n 'settings.resolved': '历史记录',\n 'settings.inactive': '操作视图已关闭',\n 'settings.reopen': '请重新打开对应 Workspace、Dashboard 或操作弹窗,以加载当前状态并启用恢复操作。',\n 'settings.diagnostics': '原始诊断详情',\n 'settings.toastHint': '错误详情和恢复操作:设置 → Worktree → 报错与修复。',\n 'settings.read': '读取 Worktree 列表',\n 'settings.binding': '绑定 Session',\n 'settings.permission': '调整 Worktree 权限',\n 'settings.git': 'Git:{operation}',\n 'settings.adopt': '采用当前分支',\n 'settings.import': '读取可导入的 Worktree',\n 'settings.create': '准备创建 Worktree',\n 'error.gitTimeout': 'Git 操作超时。请检查仓库是否可访问,以及是否有其他 Git 操作卡住;处理后再重试。',\n 'error.gitLocalChanges': 'Git 检测到未提交或未跟踪的文件,已阻止此操作。请先提交或备份需要保留的改动,再检查目录并重试。',\n 'error.gitAccessDenied': 'Git 无法访问仓库或目录。请检查文件权限、仓库所有权和 DSH 的访问范围,修复后重试。',\n 'error.gitLocked': 'Git 仓库正被其他操作锁定。请等待其他 Git 操作结束后重试;若锁仍存在,请确认没有 Git 进程运行后在终端检查锁文件。',\n 'error.gitInvalidBranch': '分支名称不符合 Git 的命名规则。请改用有效名称,例如 feature/my-task,再重试。',\n restartRequired: 'Worktree 插件已安装。请重启 DSH Desktop,或重启 DSH Web 服务后刷新页面,以启用插件。',\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard 预览',\n 'dashboard.open': '打开 Dashboard',\n 'dashboard.copyBranch': '复制分支名称',\n 'dashboard.branchCopied': '已复制分支名称',\n 'dashboard.branchCopyFailed': \"无法复制分支名称。请允许剪贴板访问后重试,或手动复制标题中的分支名称。\",\n 'dashboard.tab.overview': \"概览\",\n 'dashboard.tab.git': \"Git 与变更\",\n 'dashboard.git.title': 'Git 与变更',\n 'dashboard.git.baselineSelector': '基线分支',\n 'dashboard.git.selectBaseline': '选择基线分支',\n 'dashboard.git.selectBaselineTitle': '请选择基线分支',\n 'dashboard.git.selectBaselineDescription': '选择一个本地 branch 作为比较起点,然后查看提交、变更文件和 Diff。',\n 'dashboard.git.base': '基线',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': '提交',\n 'dashboard.git.commits': '提交',\n 'dashboard.git.commitCount': '{n} 个提交',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} 个提交 + 工作区改动',\n 'dashboard.git.uncommittedChanges': '未提交的改动',\n 'dashboard.git.workingTree': '工作区',\n 'dashboard.git.changedFiles': '变更文件',\n 'dashboard.git.lineStats': '+{additions} 行,-{deletions} 行',\n 'dashboard.git.aheadBehindStats': '+{ahead} 领先,-{behind} 落后',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': '拖动调整上下两栏高度,双击恢复默认',\n 'dashboard.git.resizeColumns': '拖动调整左右两栏宽度,双击恢复默认',\n 'dashboard.git.openInSidebar': '在侧栏打开',\n 'dashboard.git.summaryDiff': '汇总 Diff',\n 'dashboard.git.baselineSummary': '基线汇总',\n 'dashboard.git.baselineSummaryDescription': '查看基线比较边界到 HEAD 的全部已提交变更(基线 branch 已分叉时取两者共同祖先,默认不含工作区)。',\n 'dashboard.git.includeWorkingTree': '包含工作区改动',\n 'dashboard.git.includeWorkingTreeDescription': '加入 staged、unstaged 和 untracked 文件。',\n 'dashboard.git.selectedCommitCount': '已选择 {n} 个提交',\n 'dashboard.git.multiSelectCommits': '多选提交',\n 'dashboard.git.multiSelectCommitsDescription': '关闭时点击提交查看该提交自己的 Diff;打开后可同时选择多个提交并查看合并结果。',\n 'dashboard.git.commitSelectionHint': '可多选提交;工作区改动不能与提交混合选择。',\n 'dashboard.git.clearCommitSelection': '清除选择',\n 'dashboard.git.commitDiffSection': '提交变更',\n 'dashboard.git.loadingSummaryFiles': '正在加载基线汇总变更…',\n 'dashboard.git.loadingSummaryDiff': '正在加载基线汇总 Diff…',\n 'dashboard.git.noBaselineChanges': '基线与 HEAD 没有已提交的净变更。',\n 'dashboard.git.noLiveBaselineChanges': '基线与当前工作区没有净变更。',\n 'dashboard.git.refresh': '刷新',\n 'dashboard.git.refreshing': '刷新中…',\n 'dashboard.git.retry': '重试',\n 'dashboard.git.loading': '正在加载 Git 历史和工作区改动…',\n 'dashboard.git.loadingFiles': '正在加载变更文件…',\n 'dashboard.git.loadingDiff': '正在加载 Diff…',\n 'dashboard.git.loadFailed': 'Git 数据加载失败:{reason}',\n 'dashboard.git.refreshFailed': '刷新 Git 数据失败:{reason}',\n 'dashboard.git.baselineUnknownTitle': '历史基线无法获取',\n 'dashboard.git.baselineUnknownDescription': '无法安全确定所选 branch 与当前 HEAD 的比较范围;请确认基线 branch 仍是当前 HEAD 的 ancestor。',\n 'dashboard.git.mainUnavailableTitle': '本地 Workspace 不适用',\n 'dashboard.git.mainUnavailableDescription': 'Git Dashboard 的 branch 基线选择仅适用于已登记 Worktree。',\n 'dashboard.git.derived': '运行时推导',\n 'dashboard.git.noCommits': '没有超出基线的提交。',\n 'dashboard.git.noFiles': '此项没有可显示的变更文件。',\n 'dashboard.git.selectCommit': '选择一个提交或工作区改动查看详情。',\n 'dashboard.git.selectFile': '选择一个文件查看 Diff。',\n 'dashboard.git.untitledCommit': '(无提交标题)',\n 'dashboard.git.truncatedHistory': '仅显示前 200 个提交。',\n 'dashboard.git.truncatedFiles': '变更文件过多,无法完整列出。',\n 'dashboard.git.binary': '二进制文件没有可显示的文本 Diff。',\n 'dashboard.git.diffTruncated': 'Diff 太大,无法在 Dashboard 中完整显示;请在 IDE 中检查完整变更。',\n 'dashboard.git.diffLinesHidden': '为保持滚动流畅,暂时折叠了 {n} 行 Diff。',\n 'dashboard.git.showFullDiff': '显示完整 Diff',\n 'dashboard.git.emptyDiff': '没有可显示的 Diff。',\n 'dashboard.git.status.added': '新增',\n 'dashboard.git.status.modified': '修改',\n 'dashboard.git.status.deleted': '删除',\n 'dashboard.git.status.renamed': '重命名',\n 'dashboard.git.status.copied': '复制',\n 'dashboard.git.status.typeChanged': '类型变化',\n 'dashboard.tab.sessions': \"会话\",\n 'dashboard.tab.children': \"派生 Worktree\",\n 'dashboard.tab.settings': \"设置\",\n 'dashboard.back': \"返回会话\",\n 'dashboard.openSidebar': '打开侧栏',\n 'dashboard.soon': \"即将推出\",\n 'dashboard.notConnected': \"待接入\",\n 'dashboard.unknown': \"未知\",\n 'dashboard.unknownError': '未知错误',\n 'dashboard.historicalUnavailable': \"历史 Worktree 无法获取\",\n 'dashboard.detached': \"分离 HEAD\",\n 'dashboard.cleaned': \"已清理\",\n 'dashboard.archived': \"已归档\",\n 'dashboard.copied': \"已复制完整路径\",\n 'dashboard.copyFailed': \"复制失败,请重试或手动选择上方路径。\",\n 'dashboard.openEditor': \"在 VS Code 中打开\",\n 'dashboard.openIn': \"在 {app} 中打开\",\n 'dashboard.created': \"创建时间\",\n 'dashboard.imported': '登记时间',\n 'dashboard.editorMenu': '选择打开应用',\n 'dashboard.saveInstructions': '保存',\n 'dashboard.savingInstructions': '保存中…',\n 'dashboard.cancelInstructions': '取消',\n 'dashboard.instructionsSaveFailed': '保存失败,草稿已保留。可重试;若其他窗口已修改指令,请取消并重新打开编辑。',\n 'dashboard.editBase': '编辑基线',\n 'dashboard.editBaseDescription': '选择一个本地 branch 作为 Git 与变更的比较基线。',\n 'dashboard.searchBranches': '搜索 branch',\n 'dashboard.noMatchingBranches': '没有匹配的 branch',\n 'dashboard.selectBaseBranch': '选择基线分支',\n 'dashboard.saveBase': '保存基线',\n 'dashboard.savingBase': '保存中…',\n 'dashboard.cancelBase': '取消',\n 'dashboard.baseSaveFailed': '基线保存失败,草稿已保留。请重试;如果其他窗口已修改基线,请取消并重新编辑。',\n 'dashboard.base': \"基线\",\n 'dashboard.source': \"来源\",\n 'dashboard.external': \"外部导入\",\n 'dashboard.plugin': \"插件创建\",\n 'dashboard.start': \"开始新的工作\",\n 'dashboard.startDescription': \"从这个 Worktree 继续工作\",\n 'dashboard.newWorktree': \"新建 Worktree\",\n 'dashboard.newSession': \"新建会话\",\n 'dashboard.newWorktreeDescription': \"基于当前分支创建独立的工作目录\",\n 'dashboard.newSessionDescription': \"在这个 Worktree 中开始新的会话\",\n 'dashboard.instructions': \"Worktree / Main 指令\",\n 'dashboard.edit': \"编辑\",\n 'dashboard.instructionsDescription': \"为这个 Worktree 或 Main Workspace 设置共享的工作指引。\",\n 'dashboard.noInstructions': \"尚未设置指令\",\n 'dashboard.instructionsHint': \"最多 32,000 字符。保存后在这个 Worktree 或 Main Workspace 中运行的会话下一次模型请求中以 <system-reminder> 生效;清空并保存可停用。\",\n 'dashboard.noSessions': \"此 Worktree 暂无可显示的会话。\",\n 'dashboard.viewSessions': \"查看全部会话\",\n 'dashboard.status': \"Worktree 状态\",\n 'dashboard.statusHint': \"目录可用性来自现有检查;选择 branch 基线后,Git 与变更页展示其之后的提交,状态区分别显示已提交和未提交的行数。\",\n 'dashboard.health': \"可用性\",\n 'dashboard.branch': \"当前分支\",\n 'dashboard.branchUnavailable': '当前分支无法获取',\n 'dashboard.aheadBehind': \"领先 / 落后\",\n 'dashboard.committedChanges': \"已提交变更\",\n 'dashboard.workingTree': \"未提交变更\",\n 'dashboard.viewDetails': \"查看详情\",\n 'dashboard.derived': \"派生 Worktree\",\n 'dashboard.childrenHint': \"派生关系尚未接入,不代表没有其他 Worktree。\",\n 'dashboard.viewChildren': \"查看派生 Worktree\",\n 'dashboard.quickActions': \"快捷操作\",\n 'dashboard.action.terminal': \"在终端中打开\",\n 'dashboard.action.diff': \"查看 Git Diff\",\n 'dashboard.action.pullRequest': \"创建 Pull Request\",\n 'dashboard.action.tests': \"运行测试\",\n 'dashboard.action.sync': \"同步基线\",\n 'dashboard.action.archive': \"归档 Worktree\",\n 'dashboard.hint.git': \"这里展示相对于所选 branch 基线的提交、已提交和未提交的变化行数、变更文件和统一 Diff。\",\n 'dashboard.hint.children': \"这里将展示基于此 Worktree 派生的工作目录与关系。\",\n 'dashboard.hint.settings': \"这里将提供 Worktree 指令与偏好设置。当前不会保存任何更改。\",\n 'dashboard.mvpHint': \"MVP · 会话、新建 Worktree、归档、Git 变更和 VS Code 已接入;其余标记为“即将推出”的操作暂不可用。\",\n 'mode.open': '打开 Worktree 模式',\n 'mode.exit': '退出 Worktree 模式',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree 导航',\n 'context.main': '当前分支:{name}',\n 'context.worktree': 'Worktree:{name}',\n 'workspace.rename': '重命名',\n 'workspace.delete': '删除',\n 'workspace.expand': '展开 {name}',\n 'workspace.collapse': '收起 {name}',\n 'workspace.collapseAll': '全部折叠',\n 'workspace.options': '工作区选项:{name}',\n 'workspace.addWorktree': '向 {name} 添加 Worktree',\n 'workspace.add': '添加工作区',\n 'workspace.search': '搜索工作区和会话',\n 'search.clear': '清除搜索',\n 'workspace.noMatches': '没有匹配的工作区',\n 'workspace.renameTitle': '重命名工作区',\n 'workspace.name': '工作区名称',\n 'workspace.duplicate': '已存在同名 Workspace,请使用不同的名称。',\n 'workspace.deleteTitle': '删除工作区',\n 'workspace.deleteDescription': '删除“{name}”?这只会移除 DSH 工作区注册。目录、会话和 Git Worktree 会保留。',\n 'worktree.title': 'Worktree',\n 'worktree.main': '本地',\n 'worktree.mainWithBranch': '本地({branch})',\n 'worktree.detached': '已分离 Worktree',\n 'worktree.repair': 'Worktree 需要修复',\n 'worktree.repairGuidance': '检查此路径的目录、.git 入口和 Git Worktree 登记是否完整。若目录被移动,请先恢复到原路径;目录仍存在但 Git 关联异常时,可在该目录运行 git worktree repair 后刷新。若已删除且不再需要,请先归档,再选择清理磁盘同步移除状态,或移出管理。',\n 'worktree.recoveryGuidance': '上次操作尚未完成,或目录与仓库身份无法确认。请确认原目录和仓库可访问,再从此 Worktree 菜单选择“重试恢复”。若仍失败,请保留错误详情排查,不要手动删除插件索引。',\n 'worktree.branchDriftGuidance': '实际分支与记录不一致。若切换符合预期,请从此 Worktree 菜单选择“采用当前分支”;否则在 Git 中切回原分支后刷新。会话绑定和工作目录保持不变。',\n 'worktree.detachedGuidance': '此目录处于分离 HEAD。请先在 Git 中切换到所需的本地分支,再刷新;如与原记录不同,选择“采用当前分支”。',\n 'notice.details': '提示详情与恢复操作',\n 'worktree.recovery': 'Worktree 需要恢复',\n 'worktree.ready': '活动 Worktree 已就绪',\n 'worktree.branchDrift': 'Git 分支已变化',\n 'worktree.detachedHead': '分离 HEAD',\n 'worktree.adoptBranch': '采用当前分支',\n 'worktree.retryRecovery': '重试恢复',\n 'worktree.adoptDescription': '将记录分支从“{previous}”更新为“{current}”?只更新插件索引,会话绑定和磁盘文件保持不变。',\n 'worktree.adoptBeforeClean': '请先采用当前分支;分离 HEAD 时请先在 Git 中切换到分支。',\n 'worktree.cleaned': 'Worktree 已移除',\n 'worktree.archivedGroup': '已归档',\n 'worktree.cleanDisk': '清理磁盘',\n 'worktree.cleanDiskTitle': '清理 Worktree 磁盘',\n 'worktree.cleanDiskDescription': '从磁盘删除“{name}”({path})?此操作不可逆。插件不会检查 Session 或子代理是否正在运行,请自行确认所有使用此目录的任务均已停止;否则删除可能导致任务失败或数据丢失。若目录或 .git 已不存在,仅同步 Worktree 移除状态,剩余文件不会删除。关联 Session 与历史会保留。',\n 'worktree.forget': '移出管理',\n 'worktree.forgetTitle': '移出管理',\n 'worktree.forgetDescription': '将“{name}”从 Worktree 插件管理中移除?磁盘目录和 DSH 中的 Session 均会保留。',\n 'worktree.expand': '展开 {name}',\n 'worktree.collapse': '收起 {name}',\n 'worktree.options': 'Worktree 选项:{name}',\n 'worktree.copyPath': '复制路径',\n 'worktree.createNew': '创建新的 Worktree',\n 'worktree.archive': '归档 Worktree',\n 'worktree.archiveDescription': '归档“{name}”?它会移入“已归档”分组。磁盘目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.unarchive': '取消归档',\n 'worktree.unarchiveDisabledRepair': '目录或 Git 登记异常,无法取消归档',\n 'worktree.archiveExternalDescription': '归档“{name}”?它会移入“已归档”分组。外部目录、会话绑定和工作目录保持不变,已有会话仍可继续使用。删除目录需另行选择“清理磁盘”。',\n 'worktree.remove': '归档 Worktree',\n 'worktree.removeDescription': '归档“{name}”?目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.removeExternalDescription': '归档“{name}”?外部目录、会话绑定和工作目录保持不变。删除目录需另行选择“清理磁盘”。',\n 'worktree.addSession': '向 {name} 添加会话',\n 'worktree.noWorktrees': '暂无 Worktree',\n 'worktree.createTitle': '新建 Worktree',\n 'worktree.createDescription': '“{name}” · Worktree 路径由 DSH 管理。',\n 'worktree.tabCreate': '创建',\n 'worktree.tabImport': '导入',\n 'worktree.importDescription': '向“{name}”注册已有的 Worktree。注册和归档均保留原目录;只有另行确认“清理磁盘”才会删除目录。',\n 'worktree.importLoading': '正在查找可导入的 Worktree…',\n 'worktree.importEmpty': '没有可导入的 Worktree。',\n 'worktree.importPlaceholder': '请选择要导入的 Worktree',\n 'worktree.importSelected': '已选择',\n 'worktree.baseBranch': 'Worktree 基线分支',\n 'worktree.noLocalBranch': '没有本地分支',\n 'worktree.noBranches': '此工作区中没有找到本地分支。',\n 'worktree.setup.workspaceMissing': '此 Workspace 的本地目录已不存在。请恢复该目录,或在 DSH 中移除该 Workspace 后重试。',\n 'worktree.setup.gitNotInstalled': 'Git 未安装或不在 PATH 中。请先安装 Git,然后重启 DSH 再重试。',\n 'worktree.setup.noRepository': '此 Workspace 不是 Git 仓库。请在 Workspace 目录执行以下命令:',\n 'worktree.setup.noInitialCommit': '此 Git 仓库还没有首次 commit。请先执行以下命令:',\n 'worktree.setup.noLocalBranch': '此 Git 仓库没有本地分支。请先创建一个本地分支:',\n 'worktree.setup.commands': '可复制的命令',\n 'worktree.name': 'Worktree 名称',\n 'worktree.create': '创建 Worktree',\n 'worktree.import': '导入 Worktree',\n 'session.options': '会话选项:{name}',\n 'session.new': '新会话',\n 'session.rename': '重命名会话',\n 'session.fork': 'Fork 会话',\n 'session.archive': '归档会话',\n 'session.copyId': '复制 Session ID',\n 'session.expandMore': '展开其余 {count} 个会话',\n 'session.collapse': '收起',\n 'session.name': '会话名称',\n 'session.status.running': '进行中',\n 'session.status.subagentsRunning.one': '{n} 个子代理运行中',\n 'session.status.subagentsRunning.other': '{n} 个子代理运行中',\n 'session.status.idle': '空闲',\n 'session.status.waitingApproval': '等待审批',\n 'session.status.planReview': '计划待审',\n 'session.status.waitingAnswer': '等待回答',\n 'session.status.completed': '已完成',\n copy: '复制',\n 'hover.copied': '已复制',\n 'session.time.now': '刚刚',\n 'session.time.minutes': '{n}分钟',\n 'session.time.hours': '{n}小时',\n 'session.time.days': '{n}天',\n 'session.time.months': '{n}个月',\n 'session.time.years': '{n}年',\n 'session.time.ago': '{t}前',\n 'dialog.close': '关闭',\n 'dialog.closeBaseline': '关闭编辑基线对话框',\n 'dialog.closeWorkspaceRename': '关闭重命名工作区对话框',\n 'dialog.closeWorkspaceDelete': '关闭删除工作区对话框',\n 'dialog.closeWorktreeCreate': '关闭创建 Worktree 对话框',\n 'dialog.closeWorktreeArchive': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeRemove': '关闭归档 Worktree 对话框',\n 'dialog.closeWorktreeCleanDisk': '关闭清理 Worktree 磁盘对话框',\n 'dialog.closeWorktreeForget': '关闭移出管理对话框',\n 'dialog.cleanDisk': '清理磁盘',\n 'dialog.forget': '移出管理',\n 'dialog.cancel': '取消',\n 'dialog.rename': '重命名',\n 'dialog.delete': '删除',\n 'action.retry': '重试',\n 'action.retryBinding': '重试绑定',\n 'action.openCreatedSession': '打开已创建的 Session',\n 'permission.presetRestartRequired': 'Worktree Full Access 预设不可用。如果刚安装或更新了 Worktree,请重启 DSH Desktop;使用 DSH Web 时,请重启服务并刷新页面。当前仍使用 workspace-write 降级权限。',\n 'permission.fallbackWorkspaceWrite': 'Worktree 完全访问预设不可用,已使用 workspace-write 并保留审批提示。如果刚安装或更新了 Worktree,请重启 DSH Desktop,或重启 DSH Web 服务后刷新页面。若重启后预设仍不可用或 Git 操作遇到访问限制,请检查 DSH 的插件配置与 Session 权限设置。',\n 'permission.userRestricted': '已保留你在 DSH 中选择的权限限制。若任务需要更高权限,请在该 Session 的原生权限设置中调整后重试。',\n 'permission.unverified': \"无法确认 Session 权限,会话已保留。请检查 DSH 的权限设置;清理后的权限调整可在设置 → Worktree → 报错与修复中重试。\",\n 'permission.unavailable': '暂时无法读取 Worktree Session 权限。请检查 DSH 连接和 Session 权限设置后重试。',\n 'permission.fullAccessTitle': '确认启用 Worktree Full access?',\n 'permission.fullAccessDescription': '启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示;网络和进程策略不变。目标 Worktree:{cwd}',\n 'permission.fullAccessAcknowledge': '我已了解风险,并愿意继续',\n 'permission.fullAccessEnable': '启用 Worktree Full access',\n 'status.loading': '正在加载工作区…',\n 'error.worktreeDataUnavailable': \"暂时无法读取 Worktree 数据。请确认 DSH 服务已连接,再重试;已有列表会保留。\",\n 'error.gitNotInstalled': \"找不到 Git。请安装 Git 或将其加入 PATH,重启 DSH 后重试。\",\n 'error.connectionDisposed': \"Worktree 连接已关闭。请刷新页面或重启 DSH 后重试。\",\n 'error.connectionFailed': \"无法连接 Worktree 服务。请确认 DSH 正在运行且连接正常,再重试;刚安装插件时请先重启 DSH。\",\n 'error.invalidResult': \"Worktree 服务返回了无法识别的数据。请重启 DSH 并刷新页面;若仍失败,请检查插件与 DSH 的版本兼容性。\",\n 'error.workspaceOrderingUnavailable': '工作区排序不可用,请重新连接后重试。',\n 'error.sessionOrderingUnavailable': '会话排序不可用,请重新连接后重试。',\n 'error.worktreeOrderingUnavailable': 'Worktree 排序不可用,请重新连接后重试。',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree 已创建,但 Session 创建不可用,请重新连接后重试。',\n 'error.sessionCreationUnavailable': 'Session 创建不可用,请重新连接后重试。',\n 'error.worktreeRecordMissing': \"未能确认 Worktree 登记结果。请先刷新列表检查是否已创建或导入,避免重复操作;若未出现,再重试。\",\n 'error.worktreeImportInvalid': \"所选目录无法导入。请从导入列表选择同一 Git 仓库中有分支、尚未登记且不是主目录的 Worktree,然后重试。\",\n 'error.worktreeAlreadyManaged': \"这个 Worktree 已在管理列表中。请刷新列表并打开已有项,无需重复导入。\",\n 'error.worktreeMutationBusy': \"另一个操作正在修改此 Worktree 的状态。请等待它完成后再重试;若长时间未结束,请检查其他 DSH 实例。\",\n 'error.worktreeStateConflict': \"Worktree、分支或保存内容已变化。请刷新后重新选择并确认操作;正在编辑时请先复制草稿,再取消并重新打开。\",\n 'error.worktreeRecoveryRequired': \"上次 Worktree 操作尚未完成恢复,当前操作已阻止。请在设置 → Worktree → 报错与修复中选择重试恢复,完成后再重试。\",\n 'error.worktreeIdentityChanged': \"Worktree 或 Git 仓库的实际位置与登记信息不一致。请检查目录,移动过的 Worktree 先执行 git worktree repair,再刷新并重试恢复。\",\n 'error.worktreeSessionBusy': \"关联 Session 或子代理仍在运行。请等待任务结束,或在 DSH 中停止任务后重试。\",\n 'error.worktreeActivityUnavailable': \"暂时无法确认关联 Session 的运行状态。请确认 DSH 连接正常,刷新 Session 列表后重试。\",\n 'error.worktreeRegistrationSessionUnavailable': 'Worktree 已注册,但 Session 创建不可用,请重新连接后重试。',\n 'error.workspaceRenameUnavailable': '工作区重命名不可用,请重新连接后重试。',\n 'error.workspaceDeleteUnavailable': '工作区删除不可用,请重新连接后重试。',\n 'error.workspaceRootMissing': \"Workspace 目录不存在:{rootPath}。请恢复目录,或在 DSH 中移除这个 Workspace 并重新添加正确目录,再重试。\",\n 'error.sessionRenameUnavailable': '会话重命名不可用,请重新连接后重试。',\n 'error.sessionBindingFailed': \"Session {sessionId} 已保留,但未能绑定 Worktree。{reason}\",\n 'error.sessionAlreadyBound': \"这个 Session 已绑定到另一个 Worktree。请打开它原来所属的 Worktree,或在目标 Worktree 中创建新会话。\",\n 'error.worktreePermissionConfirmationRequired': \"Session 和绑定已保留,尚未确认完全访问权限。请在设置 → Worktree → 报错与修复中重试绑定并完成权限确认;无需新建会话。\",\n 'error.worktreePermissionFailed': \"Worktree Session 权限设置失败,会话已保留。请检查 DSH 的会话权限设置,并从设置 → Worktree → 报错与修复中重试。\",\n 'error.sessionListNotReady': \"Session 列表仍在加载。请稍等片刻后重试;若一直未就绪,请重新连接 DSH。\",\n 'error.sessionFactsIncomplete': \"Session 信息尚未完整加载,无法确认其工作目录。请稍等并刷新列表后重试。\",\n 'error.worktreeSessionRepairRequired': \"Session 与 Worktree 的绑定需要修复。请在设置 → Worktree → 报错与修复中重试绑定;若目录被移动,请先执行 git worktree repair。\",\n 'error.worktreeSessionUnavailable': \"这个 Worktree 无法用于打开或创建 Session。请确认目录存在、尚未清理且无需恢复,再刷新列表重试。\",\n 'error.sessionArchived': \"这个 Session 已归档,无法重新绑定。请先在 DSH 中恢复它,或在目标 Worktree 中创建新会话。\",\n 'branch.current': '(当前)',\n 'branch.checkedOut': '(已检出)',\n 'notice.recovery': \"恢复操作\",\n 'notice.sessionRecovery': \"Session:{sessionId}\",\n 'notice.workspaceRecovery': \"Workspace:{workspaceId}\",\n 'error.workspaceNotFound': \"无法访问这个 Workspace。请在 DSH 中确认它仍存在、目录路径有效且有读取权限,再刷新列表。\",\n 'error.workspaceNotGitRepository': \"这个 Workspace 尚不是 Git 仓库。请打开创建 Worktree 弹窗,按其中的指引初始化 Git 并创建首次提交。\",\n 'error.initialCommitRequired': \"Git 仓库还没有提交。请先在 Workspace 目录创建首次提交,再重试。\",\n 'error.branchConflict': \"分支名称已存在或已被其他 Worktree 使用。创建时请改用新的名称;需要已有 Worktree 时请使用导入。\",\n 'error.worktreeNotFound': \"找不到这个 Worktree 或无法访问其目录。请确认目录存在且有读取权限,再刷新;若目录被移动,请先在终端执行 git worktree repair。\",\n 'error.worktreeOrderInvalid': \"Worktree 列表已变化,无法保存排序。请刷新列表后重新拖动排序。\",\n 'error.worktreeRemoved': \"这个 Worktree 已归档或已清理,无法执行此操作。归档项请先恢复;已清理项请创建或导入另一个 Worktree。\",\n 'error.sessionNotFound': \"找不到这个 Session。请刷新 DSH 的 Session 列表,再选择仍存在的会话。\",\n 'error.sessionCwdMismatch': \"Session 的工作目录与目标 Worktree 不一致,无法绑定。请在目标 Worktree 中新建 Session,或选择工作目录匹配的会话。\",\n 'error.sidecarUnavailable': \"无法读写 Worktree 管理索引。请检查 DSH 数据目录的权限和磁盘空间,再重试;原生 Session 仍可使用。\",\n 'error.sidecarCorrupt': \"Worktree 管理索引损坏或格式不兼容,插件已停止修改数据。请保留索引备份并联系维护者恢复;可继续使用 DSH 原生 Session。\",\n 'error.sidecarSyncRequired': \"Git 操作与管理索引尚未同步。请在设置 → Worktree → 报错与修复中选择重试恢复,完成后刷新列表;不要重复创建或清理。\",\n 'error.gitOperationFailed': \"Git 操作失败。请确认 Git 可用、目录可访问,并在终端检查 git status;修复 Git 报错后再重试。\",\n 'error.permissionBindingRequired': \"Session 尚未绑定到有效的 Worktree,无法设置权限。请先在设置 → Worktree → 报错与修复中重试绑定,再确认完全访问。\",\n 'error.unexpected': \"操作失败(错误码:{code})。请刷新后重试;若仍失败,请将错误码和 DSH 日志提供给维护者。\",\n};\nexport const en = {\n 'tools.experimental': 'Experimental',\n 'tools.loading': 'Loading tool settings…',\n \"settings.general\": \"General\",\n \"tools.command\": \"Worktree tools\",\n \"tools.commandHint\": \"Enable /cluworktree to activate the selected capabilities in the current conversation. Turning this off removes the command.\",\n \"tools.auto\": \"Automatically inject Worktree tools\",\n \"tools.autoHint\": \"Inject selected tools before Sessions in this Worktree execute, independently of General settings.\",\n 'tools.localAutoHint': 'Inject selected tools before Local/Main Sessions in this Workspace execute, independently of General settings.',\n 'tools.selection': 'Tool selection',\n 'tools.commandSelectionHint': '/cluworktree adds only missing capabilities.',\n 'tools.autoSelectionHint': 'Choose capabilities to inject into this Worktree.',\n 'tools.localAutoSelectionHint': 'Apply only to Local/Main Sessions in this Workspace.',\n \"tools.runtimeHint\": \"Deselecting all turns the switch off. Changes affect future injection; active tools remain until the Agent ends.\",\n \"tools.reportHint\": \"Delegated Sessions receive only result reporting by default.\",\n \"tools.failed\": \"Unable to read or save tool settings. Retry to load the latest configuration.\",\n \"tools.create.title\": \"Create Worktrees\",\n \"tools.create.hint\": \"Create an isolated branch and working directory from committed state, with optional shared instructions.\",\n \"tools.worktrees.title\": \"Discover Worktrees\",\n \"tools.worktrees.hint\": \"Find Worktrees, branches, paths and availability in the current Workspace.\",\n \"tools.delegate.title\": \"Delegate tasks\",\n \"tools.delegate.hint\": \"Create and bind a Session in a Worktree, select its model and dispatch a task. The executing Session can report results.\",\n \"tools.models.title\": \"Discover models\",\n \"tools.models.hint\": \"Find available models and reasoning options for delegated tasks.\",\n \"tools.sessions.title\": \"Discover Sessions\",\n \"tools.sessions.hint\": \"Find Session identities, titles and execution status in the current Workspace or a selected Worktree.\",\n \"tools.message.title\": \"Continue Sessions\",\n \"tools.message.hint\": \"Send follow-up tasks to existing Sessions or steer running work at a native step boundary.\",\n 'settings.title': 'Worktree',\n 'settings.overview': 'Overview',\n 'settings.errors': 'Errors & recovery',\n 'settings.description': 'Worktree mode groups Sessions by Git worktree. Failures appear as toasts; explanations, diagnostics and recovery actions are collected in Errors & recovery.',\n 'settings.retention': 'Records stay in memory for this page and clear on reload. Read the problem and suggested solution before retrying.',\n 'settings.clearHistory': 'Clear history',\n 'settings.empty': 'No error records.',\n 'settings.operation': 'Worktree operation',\n 'settings.active': 'Needs attention',\n 'settings.resolved': 'History',\n 'settings.inactive': 'Operation view closed',\n 'settings.reopen': 'Reopen the corresponding Workspace, Dashboard or operation dialog to load its current state and enable recovery actions.',\n 'settings.diagnostics': 'Original diagnostics',\n 'settings.toastHint': 'Details and recovery: Settings → Worktree → Errors & recovery.',\n 'settings.read': 'Read Worktree list',\n 'settings.binding': 'Bind Session',\n 'settings.permission': 'Adjust Worktree permissions',\n 'settings.git': 'Git: {operation}',\n 'settings.adopt': 'Adopt current branch',\n 'settings.import': 'Read importable Worktrees',\n 'settings.create': 'Prepare Worktree creation',\n 'error.gitTimeout': 'The Git operation timed out. Check that the repository is accessible and that no other Git operation is stuck, then retry.',\n 'error.gitLocalChanges': 'Git found uncommitted or untracked files and blocked this action. Commit or back up changes you want to keep, then inspect the directory and retry.',\n 'error.gitAccessDenied': 'Git cannot access the repository or directory. Check file permissions, repository ownership, and the DSH access scope, then retry.',\n 'error.gitLocked': 'Another operation has locked the Git repository. Wait for other Git operations to finish, then retry. If the lock remains, check the lock file in a terminal after confirming no Git process is running.',\n 'error.gitInvalidBranch': 'The branch name does not meet Git naming rules. Choose a valid name, such as feature/my-task, then retry.',\n restartRequired: 'Worktree is installed. Restart DSH Desktop, or restart the DSH Web server and refresh this page, to enable it.',\n 'dashboard.title': \"Dashboard\",\n 'dashboard.preview': 'Dashboard preview',\n 'dashboard.open': 'Open Dashboard',\n 'dashboard.copyBranch': 'Copy branch name',\n 'dashboard.branchCopied': 'Branch name copied',\n 'dashboard.branchCopyFailed': \"The branch name could not be copied. Allow clipboard access and retry, or copy the branch name from the title manually.\",\n 'dashboard.tab.overview': \"Dashboard\",\n 'dashboard.tab.git': \"Git & Changes\",\n 'dashboard.git.title': 'Git & Changes',\n 'dashboard.git.baselineSelector': 'Baseline branch',\n 'dashboard.git.selectBaseline': 'Select a baseline branch',\n 'dashboard.git.selectBaselineTitle': 'Select a baseline branch',\n 'dashboard.git.selectBaselineDescription': 'Choose a local branch as the comparison point to view commits, changed files, and diffs.',\n 'dashboard.git.base': 'Base',\n 'dashboard.git.head': 'HEAD',\n 'dashboard.git.commit': 'Commit',\n 'dashboard.git.commits': 'Commits',\n 'dashboard.git.commitCount': '{n} commits',\n 'dashboard.git.commitCountWithWorkingTree': '{commits} commits + working tree changes',\n 'dashboard.git.uncommittedChanges': 'Uncommitted changes',\n 'dashboard.git.workingTree': 'Working tree',\n 'dashboard.git.changedFiles': 'Changed files',\n 'dashboard.git.lineStats': '+{additions} lines, -{deletions} lines',\n 'dashboard.git.aheadBehindStats': '+{ahead} ahead, -{behind} behind',\n 'dashboard.git.diff': 'Diff',\n 'dashboard.git.resizeRows': 'Drag to resize the stacked panes; double-click to reset',\n 'dashboard.git.resizeColumns': 'Drag to resize the side-by-side panes; double-click to reset',\n 'dashboard.git.openInSidebar': 'Open in Sidebar',\n 'dashboard.git.summaryDiff': 'Summary diff',\n 'dashboard.git.baselineSummary': 'Baseline summary',\n 'dashboard.git.baselineSummaryDescription': 'View all committed changes from the resolved baseline boundary (the shared ancestor when the baseline branch has diverged) to HEAD, excluding the working tree by default.',\n 'dashboard.git.includeWorkingTree': 'Include working tree',\n 'dashboard.git.includeWorkingTreeDescription': 'Include staged, unstaged, and untracked files.',\n 'dashboard.git.selectedCommitCount': '{n} commits selected',\n 'dashboard.git.multiSelectCommits': 'Multi-select commits',\n 'dashboard.git.multiSelectCommitsDescription': 'When off, clicking a commit shows its own diff; when on, several commits can be selected together.',\n 'dashboard.git.commitSelectionHint': 'Select multiple commits; working-tree changes cannot be mixed with commits.',\n 'dashboard.git.clearCommitSelection': 'Clear selection',\n 'dashboard.git.commitDiffSection': 'Commit change',\n 'dashboard.git.loadingSummaryFiles': 'Loading baseline summary changes…',\n 'dashboard.git.loadingSummaryDiff': 'Loading baseline summary diff…',\n 'dashboard.git.noBaselineChanges': 'The baseline and HEAD have no committed net changes.',\n 'dashboard.git.noLiveBaselineChanges': 'The baseline and current working tree have no net changes.',\n 'dashboard.git.refresh': 'Refresh',\n 'dashboard.git.refreshing': 'Refreshing…',\n 'dashboard.git.retry': 'Retry',\n 'dashboard.git.loading': 'Loading Git history and working tree changes…',\n 'dashboard.git.loadingFiles': 'Loading changed files…',\n 'dashboard.git.loadingDiff': 'Loading diff…',\n 'dashboard.git.loadFailed': 'Git data failed to load: {reason}',\n 'dashboard.git.refreshFailed': 'Git refresh failed: {reason}',\n 'dashboard.git.baselineUnknownTitle': 'Historical baseline unavailable',\n 'dashboard.git.baselineUnknownDescription': 'The selected branch cannot be safely compared with the current HEAD; confirm that it is still an ancestor of HEAD.',\n 'dashboard.git.mainUnavailableTitle': 'Not available for the local Workspace',\n 'dashboard.git.mainUnavailableDescription': 'Branch baseline selection in the Git Dashboard applies only to registered Worktrees.',\n 'dashboard.git.derived': 'Derived at runtime',\n 'dashboard.git.noCommits': 'No commits are ahead of the baseline.',\n 'dashboard.git.noFiles': 'This entry has no displayable changed files.',\n 'dashboard.git.selectCommit': 'Select a commit or working-tree change to view its details.',\n 'dashboard.git.selectFile': 'Select a file to view its diff.',\n 'dashboard.git.untitledCommit': '(untitled commit)',\n 'dashboard.git.truncatedHistory': 'Showing the first 200 commits.',\n 'dashboard.git.truncatedFiles': 'Too many changed files to list completely.',\n 'dashboard.git.binary': 'Binary files have no text diff to display.',\n 'dashboard.git.diffTruncated': 'The diff is too large to display completely; inspect the full change in your IDE.',\n 'dashboard.git.diffLinesHidden': 'Folded {n} diff lines to keep scrolling responsive.',\n 'dashboard.git.showFullDiff': 'Show full diff',\n 'dashboard.git.emptyDiff': 'No diff to display.',\n 'dashboard.git.status.added': 'Added',\n 'dashboard.git.status.modified': 'Modified',\n 'dashboard.git.status.deleted': 'Deleted',\n 'dashboard.git.status.renamed': 'Renamed',\n 'dashboard.git.status.copied': 'Copied',\n 'dashboard.git.status.typeChanged': 'Type changed',\n 'dashboard.tab.sessions': \"Sessions\",\n 'dashboard.tab.children': \"Children\",\n 'dashboard.tab.settings': \"Settings\",\n 'dashboard.back': \"Back to session\",\n 'dashboard.openSidebar': 'Open sidebar',\n 'dashboard.soon': \"Coming soon\",\n 'dashboard.notConnected': \"Not connected\",\n 'dashboard.unknown': \"Unknown\",\n 'dashboard.unknownError': 'Unknown error',\n 'dashboard.historicalUnavailable': \"Unavailable for historical Worktrees\",\n 'dashboard.detached': \"Detached HEAD\",\n 'dashboard.cleaned': \"Cleaned\",\n 'dashboard.archived': \"Archived\",\n 'dashboard.copied': \"Full path copied\",\n 'dashboard.copyFailed': \"Copy failed. Try again or select the path above.\",\n 'dashboard.openEditor': \"Open in VS Code\",\n 'dashboard.openIn': \"Open in {app}\",\n 'dashboard.created': \"Created\",\n 'dashboard.imported': 'Imported',\n 'dashboard.editorMenu': 'Choose application',\n 'dashboard.saveInstructions': 'Save',\n 'dashboard.savingInstructions': 'Saving…',\n 'dashboard.cancelInstructions': 'Cancel',\n 'dashboard.instructionsSaveFailed': 'Save failed; your draft is retained. Retry, or cancel and reopen if another window changed the instructions.',\n 'dashboard.editBase': 'Edit baseline',\n 'dashboard.editBaseDescription': 'Choose a local branch as the Git & Changes comparison baseline.',\n 'dashboard.searchBranches': 'Search branches',\n 'dashboard.noMatchingBranches': 'No matching branches',\n 'dashboard.selectBaseBranch': 'Select a baseline branch',\n 'dashboard.saveBase': 'Save baseline',\n 'dashboard.savingBase': 'Saving…',\n 'dashboard.cancelBase': 'Cancel',\n 'dashboard.baseSaveFailed': 'Baseline save failed; your draft is retained. Retry, or cancel and reopen if another window changed the baseline.',\n 'dashboard.base': \"Base\",\n 'dashboard.source': \"Source\",\n 'dashboard.external': \"Imported\",\n 'dashboard.plugin': \"Plugin-created\",\n 'dashboard.start': \"Start a new work\",\n 'dashboard.startDescription': \"Choose how to continue from this worktree\",\n 'dashboard.newWorktree': \"New Worktree\",\n 'dashboard.newSession': \"New Session\",\n 'dashboard.newWorktreeDescription': \"Create an isolated worktree from this branch\",\n 'dashboard.newSessionDescription': \"Start another session in this worktree\",\n 'dashboard.instructions': \"Worktree / Main Instructions\",\n 'dashboard.edit': \"Edit\",\n 'dashboard.instructionsDescription': \"A place for shared guidance for this Worktree or Main Workspace.\",\n 'dashboard.noInstructions': \"No instructions yet\",\n 'dashboard.instructionsHint': \"Up to 32,000 characters. Saved instructions enter the next model request for Sessions using this Worktree or Main Workspace as <system-reminder>. Clear and save to disable.\",\n 'dashboard.noSessions': \"No visible sessions in this worktree.\",\n 'dashboard.viewSessions': \"View all sessions\",\n 'dashboard.status': \"Worktree Status\",\n 'dashboard.statusHint': \"Availability comes from existing checks; after you choose a branch baseline, Git & Changes shows later commits, while the status facts separate committed and uncommitted line counts.\",\n 'dashboard.health': \"Availability\",\n 'dashboard.branch': \"Current branch\",\n 'dashboard.branchUnavailable': 'Current branch unavailable',\n 'dashboard.aheadBehind': \"Ahead / Behind\",\n 'dashboard.committedChanges': \"Committed changes\",\n 'dashboard.workingTree': \"Uncommitted changes\",\n 'dashboard.viewDetails': \"View details\",\n 'dashboard.derived': \"Derived Worktrees\",\n 'dashboard.childrenHint': \"Parent and child relationships are not connected yet.\",\n 'dashboard.viewChildren': \"View all children\",\n 'dashboard.quickActions': \"Quick Actions\",\n 'dashboard.action.terminal': \"Open in Terminal\",\n 'dashboard.action.diff': \"View Git Diff\",\n 'dashboard.action.pullRequest': \"Create Pull Request\",\n 'dashboard.action.tests': \"Run Tests\",\n 'dashboard.action.sync': \"Sync with Base\",\n 'dashboard.action.archive': \"Archive Worktree\",\n 'dashboard.hint.git': \"View commits, committed and uncommitted line totals, changed files, and unified diffs relative to the selected branch baseline.\",\n 'dashboard.hint.children': \"Derived worktrees and their relationships will appear here.\",\n 'dashboard.hint.settings': \"Worktree instructions and preferences will appear here. No changes are saved yet.\",\n 'dashboard.mvpHint': \"MVP · Sessions, Worktree creation, archive, Git changes, and VS Code are connected. Other actions marked Coming soon are unavailable.\",\n 'mode.open': 'Open Worktree mode',\n 'mode.exit': 'Exit Worktree mode',\n 'mode.label': 'Worktree',\n 'mode.navigation': 'Worktree navigation',\n 'context.main': 'Current branch: {name}',\n 'context.worktree': 'Worktree: {name}',\n 'workspace.rename': 'Rename',\n 'workspace.delete': 'Delete',\n 'workspace.expand': 'Expand {name}',\n 'workspace.collapse': 'Collapse {name}',\n 'workspace.collapseAll': 'Collapse All',\n 'workspace.options': 'Workspace options for {name}',\n 'workspace.addWorktree': 'Add Worktree to {name}',\n 'workspace.add': 'Add Workspace',\n 'workspace.search': 'Search Workspaces and Sessions',\n 'search.clear': 'Clear search',\n 'workspace.noMatches': 'No matching Workspaces',\n 'workspace.renameTitle': 'Rename Workspace',\n 'workspace.name': 'Workspace name',\n 'workspace.duplicate': 'A Workspace with this name already exists. Choose a different name.',\n 'workspace.deleteTitle': 'Delete Workspace',\n 'workspace.deleteDescription': 'Delete {name}? This removes only the DSH Workspace registration. The directory, Sessions, and Git Worktrees will be retained.',\n 'worktree.title': 'Worktrees',\n 'worktree.main': 'Local',\n 'worktree.mainWithBranch': 'Local ({branch})',\n 'worktree.detached': 'Detached Worktree',\n 'worktree.repair': 'Worktree needs repair',\n 'worktree.repairGuidance': 'Check the directory, .git entry, and Git Worktree registration at this path. Restore a moved directory to its original path. If it still exists but Git links are broken, run git worktree repair there and refresh. If it was deleted and is no longer needed, archive it, then use Clean Disk to reconcile removal or Remove from Management.',\n 'worktree.recoveryGuidance': 'A previous operation is incomplete, or the directory and repository identity could not be verified. Check that the original directory and repository are accessible, then choose Retry Recovery from this Worktree menu. If it still fails, keep the error details for diagnosis; do not delete the plugin index manually.',\n 'worktree.branchDriftGuidance': 'The current branch differs from the recorded branch. If intentional, choose Adopt Current Branch from this Worktree menu; otherwise switch back in Git and refresh. Session bindings and working directories are preserved.',\n 'worktree.detachedGuidance': 'This directory has a detached HEAD. Switch to the intended local branch in Git and refresh, then choose Adopt Current Branch if it differs from the recorded branch.',\n 'notice.details': 'Notification details and recovery',\n 'worktree.recovery': 'Worktree requires recovery',\n 'worktree.ready': 'Active Worktree ready',\n 'worktree.branchDrift': 'Git branch changed',\n 'worktree.detachedHead': 'Detached HEAD',\n 'worktree.adoptBranch': 'Adopt current branch',\n 'worktree.retryRecovery': 'Retry recovery',\n 'worktree.adoptDescription': 'Update the recorded branch from “{previous}” to “{current}”? Only the plugin index changes; Session bindings and disk files are preserved.',\n 'worktree.adoptBeforeClean': 'Adopt the current branch first; for detached HEAD, check out a branch in Git first.',\n 'worktree.cleaned': 'Worktree removed',\n 'worktree.archivedGroup': 'Archived',\n 'worktree.cleanDisk': 'Clean Up Disk',\n 'worktree.cleanDiskTitle': 'Clean Up Worktree Disk',\n 'worktree.cleanDiskDescription': 'Delete {name} ({path}) from disk? This operation cannot be undone. The plugin does not check whether Sessions or subagents are running. Confirm that all tasks using this directory have stopped; otherwise deletion may cause task failures or data loss. If the directory or .git is already absent, only the Worktree removal status is synchronized; remaining files are not deleted. Linked Sessions and history are preserved.',\n 'worktree.forget': 'Remove from Management',\n 'worktree.forgetTitle': 'Remove from Management',\n 'worktree.forgetDescription': 'Remove {name} from Worktree plugin management? Disk directories and Sessions in DSH will be retained.',\n 'worktree.expand': 'Expand {name}',\n 'worktree.collapse': 'Collapse {name}',\n 'worktree.options': 'Worktree options for {name}',\n 'worktree.copyPath': 'Copy path',\n 'worktree.createNew': 'Create new Worktree',\n 'worktree.archive': 'Archive Worktree',\n 'worktree.archiveDescription': 'Archive {name}? It moves to the Archived group. Disk files, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.unarchive': 'Unarchive Worktree',\n 'worktree.unarchiveDisabledRepair': 'Cannot unarchive because directory or Git registration is abnormal',\n 'worktree.archiveExternalDescription': 'Archive {name}? It moves to the Archived group. The external directory, Session bindings, and working directories are preserved; existing Sessions remain usable. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.remove': 'Archive Worktree',\n 'worktree.removeDescription': 'Archive {name}? The directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.removeExternalDescription': 'Archive {name}? The external directory, Session bindings, and working directories are preserved. Deleting the directory requires the separate Clean Disk action.',\n 'worktree.addSession': 'Add Session to {name}',\n 'worktree.noWorktrees': 'No Worktrees',\n 'worktree.createTitle': 'New Worktree',\n 'worktree.createDescription': '{name} · the Worktree path is managed by DSH.',\n 'worktree.tabCreate': 'Create',\n 'worktree.tabImport': 'Import',\n 'worktree.importDescription': 'Register an existing Worktree for {name}. Registration and archiving preserve the directory; only a separately confirmed Clean Disk action deletes it.',\n 'worktree.importLoading': 'Finding importable Worktrees…',\n 'worktree.importEmpty': 'No importable Worktrees found.',\n 'worktree.importPlaceholder': 'Select a Worktree to import',\n 'worktree.importSelected': 'Selected',\n 'worktree.baseBranch': 'Worktree base branch',\n 'worktree.noLocalBranch': 'No local branch',\n 'worktree.noBranches': 'No local branches found in this Workspace.',\n 'worktree.setup.workspaceMissing': 'The local directory for this Workspace no longer exists. Restore it, or remove the Workspace in DSH and retry.',\n 'worktree.setup.gitNotInstalled': 'Git is not installed or is not available on PATH. Install Git, restart DSH, and retry.',\n 'worktree.setup.noRepository': 'This Workspace is not a Git repository. Run these commands in the Workspace directory:',\n 'worktree.setup.noInitialCommit': 'This Git repository has no initial commit. Run these commands first:',\n 'worktree.setup.noLocalBranch': 'This Git repository has no local branch. Create one first:',\n 'worktree.setup.commands': 'Copyable commands',\n 'worktree.name': 'Worktree name',\n 'worktree.create': 'Create Worktree',\n 'worktree.import': 'Import Worktree',\n 'session.options': 'Session options for {name}',\n 'session.new': 'New Session',\n 'session.rename': 'Rename session',\n 'session.fork': 'Fork session',\n 'session.archive': 'Archive session',\n 'session.copyId': 'Copy session ID',\n 'session.expandMore': 'Expand {count} more',\n 'session.collapse': 'Collapse',\n 'session.name': 'Session name',\n 'session.status.running': 'Running',\n 'session.status.subagentsRunning.one': '{n} subagent running',\n 'session.status.subagentsRunning.other': '{n} subagents running',\n 'session.status.idle': 'Idle',\n 'session.status.waitingApproval': 'Waiting for approval',\n 'session.status.planReview': 'Plan awaiting review',\n 'session.status.waitingAnswer': 'Waiting for answer',\n 'session.status.completed': 'Completed',\n copy: 'Copy',\n 'hover.copied': 'Copied',\n 'session.time.now': 'now',\n 'session.time.minutes': '{n}min',\n 'session.time.hours': '{n}h',\n 'session.time.days': '{n}d',\n 'session.time.months': '{n}mo',\n 'session.time.years': '{n}y',\n 'session.time.ago': '{t} ago',\n 'dialog.close': 'Close',\n 'dialog.closeBaseline': 'Close Edit baseline dialog',\n 'dialog.closeWorkspaceRename': 'Close Rename Workspace dialog',\n 'dialog.closeWorkspaceDelete': 'Close Delete Workspace dialog',\n 'dialog.closeWorktreeCreate': 'Close Create Worktree dialog',\n 'dialog.closeWorktreeArchive': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeRemove': 'Close Archive Worktree dialog',\n 'dialog.closeWorktreeCleanDisk': 'Close Clean Up Worktree Disk dialog',\n 'dialog.closeWorktreeForget': 'Close Remove from Management dialog',\n 'dialog.cleanDisk': 'Clean Up Disk',\n 'dialog.forget': 'Remove from Management',\n 'dialog.cancel': 'Cancel',\n 'dialog.rename': 'Rename',\n 'dialog.delete': 'Delete',\n 'action.retry': 'Retry',\n 'action.retryBinding': 'Retry Binding',\n 'action.openCreatedSession': 'Open Created Session',\n 'permission.presetRestartRequired': 'The Worktree Full Access preset is unavailable. If you just installed or updated Worktree, restart DSH Desktop, or restart the DSH Web server and refresh this page. The workspace-write fallback remains in use.',\n 'permission.fallbackWorkspaceWrite': 'The Worktree Full Access preset is unavailable; workspace-write is active with approval prompts enabled. If you just installed or updated Worktree, restart DSH Desktop, or restart the DSH Web server and refresh this page. If the preset is still unavailable after restart or Git encounters access restrictions, check the DSH plugin configuration and Session permission settings.',\n 'permission.userRestricted': 'Your selected DSH permission restrictions were preserved. If the task needs more access, adjust this Session’s native permission settings and retry.',\n 'permission.unverified': \"Session permissions could not be verified; the Session was retained. Check the permission settings in DSH. Permission updates after cleanup can be retried in Settings → Worktree → Errors & recovery.\",\n 'permission.unavailable': 'Worktree Session permissions could not be read. Check your DSH connection and the Session permission settings, then retry.',\n 'permission.fullAccessTitle': 'Enable Worktree Full access?',\n 'permission.fullAccessDescription': 'Worktree Full access lets this Session access linked Git metadata and Worktree files outside the Session directory. It disables filesystem confinement for this Session while keeping approval prompts enabled; network and process policy are unchanged. Target Worktree: {cwd}',\n 'permission.fullAccessAcknowledge': 'I understand the risks and want to continue',\n 'permission.fullAccessEnable': 'Enable Worktree Full access',\n 'status.loading': 'Loading Workspaces…',\n 'error.worktreeDataUnavailable': \"Worktree data could not be loaded. Check your connection to DSH, then retry. The existing list is preserved.\",\n 'error.gitNotInstalled': \"Git could not be found. Install Git or add it to PATH, restart DSH, then retry.\",\n 'error.connectionDisposed': \"The Worktree connection has closed. Refresh the page or restart DSH, then retry.\",\n 'error.connectionFailed': \"The Worktree service could not be reached. Check that DSH is running and connected, then retry. Restart DSH first if you just installed the plugin.\",\n 'error.invalidResult': \"The Worktree service returned unrecognized data. Restart DSH and refresh the page. If it still fails, check that your plugin and DSH versions are compatible.\",\n 'error.workspaceOrderingUnavailable': 'Workspace ordering is unavailable; retry after reconnecting.',\n 'error.sessionOrderingUnavailable': 'Session ordering is unavailable; retry after reconnecting.',\n 'error.worktreeOrderingUnavailable': 'Worktree ordering is unavailable; retry after reconnecting.',\n 'error.worktreeCreatedSessionUnavailable': 'Worktree created, but Session creation is unavailable; retry after reconnecting.',\n 'error.sessionCreationUnavailable': 'Session creation is unavailable; retry after reconnecting.',\n 'error.worktreeRecordMissing': \"The Worktree registration result could not be confirmed. Refresh the list to check whether creation or import succeeded before repeating the operation. Retry if it is absent.\",\n 'error.worktreeImportInvalid': \"This directory cannot be imported. Select a branch-attached, unmanaged Worktree from the import list in the same Git repository, excluding the main directory, then retry.\",\n 'error.worktreeAlreadyManaged': \"This Worktree is already managed. Refresh the list and open its existing entry instead of importing it again.\",\n 'error.worktreeMutationBusy': \"Another operation is changing this Worktree. Wait for it to finish, then retry. If it remains busy, check your other DSH instances.\",\n 'error.worktreeStateConflict': \"The Worktree, branch, or saved content changed. Refresh, select again, and reconfirm the action. If editing, copy your draft before cancelling and reopening the editor.\",\n 'error.worktreeRecoveryRequired': \"A previous Worktree operation still needs recovery, so this action is blocked. Choose Retry Recovery in Settings → Worktree → Errors & recovery, then retry once recovery completes.\",\n 'error.worktreeIdentityChanged': \"The Worktree or repository no longer matches its registered location. Check the directories; if a Worktree was moved, run git worktree repair, then refresh and retry recovery.\",\n 'error.worktreeSessionBusy': \"A linked Session or subagent is still running. Wait for it to finish or stop the task in DSH, then retry.\",\n 'error.worktreeActivityUnavailable': \"Linked Session activity could not be checked. Check your DSH connection, refresh the Session list, then retry.\",\n 'error.worktreeRegistrationSessionUnavailable': 'The Worktree was registered, but Session creation is unavailable; retry after reconnecting.',\n 'error.workspaceRenameUnavailable': 'Workspace rename is unavailable; retry after reconnecting.',\n 'error.workspaceDeleteUnavailable': 'Workspace delete is unavailable; retry after reconnecting.',\n 'error.workspaceRootMissing': \"The Workspace directory is missing: {rootPath}. Restore it, or remove this Workspace in DSH and add the correct directory, then retry.\",\n 'error.sessionRenameUnavailable': 'Session rename is unavailable; retry after reconnecting.',\n 'error.sessionBindingFailed': \"Session {sessionId} was retained, but its Worktree binding failed. {reason}\",\n 'error.sessionAlreadyBound': \"This Session is already bound to another Worktree. Open its original Worktree or create a new Session in the target Worktree.\",\n 'error.worktreePermissionConfirmationRequired': \"The Session and binding were retained, but Full Access has not been confirmed. Retry Binding in Settings → Worktree → Errors & recovery and complete the permission confirmation; no new Session is needed.\",\n 'error.worktreePermissionFailed': \"Worktree Session permissions could not be set; the Session was retained. Check the Session permission settings in DSH, then retry from Settings → Worktree → Errors & recovery.\",\n 'error.sessionListNotReady': \"The Session list is still loading. Wait a moment, then retry. Reconnect to DSH if it does not finish loading.\",\n 'error.sessionFactsIncomplete': \"The Session details have not fully loaded, so its working directory cannot be verified. Wait and refresh the list, then retry.\",\n 'error.worktreeSessionRepairRequired': \"The Session binding needs repair. Use Retry Binding in Settings → Worktree → Errors & recovery. If the directory was moved, run git worktree repair first.\",\n 'error.worktreeSessionUnavailable': \"This Worktree cannot open or create a Session. Check that its directory exists, has not been cleaned up, and does not need recovery, then refresh and retry.\",\n 'error.sessionArchived': \"This Session is archived and cannot be rebound. Restore it in DSH or create a new Session in the target Worktree.\",\n 'branch.current': ' (current)',\n 'branch.checkedOut': ' (checked out)',\n 'notice.recovery': \"Recovery actions\",\n 'notice.sessionRecovery': \"Session: {sessionId}\",\n 'notice.workspaceRecovery': \"Workspace: {workspaceId}\",\n 'error.workspaceNotFound': \"This Workspace cannot be accessed. Check that it still exists in DSH and that its directory path and read permissions are valid, then refresh the list.\",\n 'error.workspaceNotGitRepository': \"This Workspace is not a Git repository. Open Create Worktree and follow the setup guidance to initialize Git and make the first commit.\",\n 'error.initialCommitRequired': \"The Git repository has no commits yet. Make the first commit in the Workspace directory, then retry.\",\n 'error.branchConflict': \"The branch name already exists or is in use by another Worktree. Choose a new name when creating, or use Import for an existing Worktree.\",\n 'error.worktreeNotFound': \"This Worktree or its directory cannot be accessed. Check that the directory exists and is readable, then refresh. If it was moved, run git worktree repair in a terminal first.\",\n 'error.worktreeOrderInvalid': \"The Worktree list changed, so the order could not be saved. Refresh the list, then drag the rows again.\",\n 'error.worktreeRemoved': \"This Worktree is archived or cleaned up and cannot perform this action. Restore an archived Worktree, or create or import another one if its disk files were cleaned up.\",\n 'error.sessionNotFound': \"This Session could not be found. Refresh the DSH Session list, then select an existing Session.\",\n 'error.sessionCwdMismatch': \"The Session working directory does not match this Worktree, so it cannot be bound. Create a Session in the target Worktree or select one with a matching directory.\",\n 'error.sidecarUnavailable': \"The Worktree management index cannot be read or written. Check permissions and free space in the DSH data directory, then retry. Native Sessions remain available.\",\n 'error.sidecarCorrupt': \"The Worktree management index is damaged or incompatible, so changes are blocked. Keep a backup and contact the maintainer for recovery. You can continue using native DSH Sessions.\",\n 'error.sidecarSyncRequired': \"The Git operation and management index are out of sync. Choose Retry Recovery in Settings → Worktree → Errors & recovery, then refresh the list. Avoid repeating creation or cleanup.\",\n 'error.gitOperationFailed': \"The Git operation failed. Check that Git is available and the directory is accessible, then inspect git status in a terminal. Resolve the Git error before retrying.\",\n 'error.permissionBindingRequired': \"Permissions cannot be set until the Session is bound to a valid Worktree. Retry Binding in Settings → Worktree → Errors & recovery, then confirm Full Access.\",\n 'error.unexpected': \"The operation failed (error code: {code}). Refresh and retry. If it still fails, share the error code and DSH logs with the maintainer.\",\n};\n//# sourceMappingURL=locales.js.map","/** The one logical channel shared by the DSH Connection and Typert Gateway. */\nexport const WORKTREE_CONNECTION_CHANNEL = '/api';\n/**\n * Canonical Worktree endpoints owned by this adapter. Keeping the table here makes\n * the browser call surface auditable without making React know wire names.\n */\nexport const WORKTREE_CONNECTION_ENDPOINTS = Object.freeze({\n getToolSettings: 'worktreeManager/getToolSettings',\n updateToolSettings: 'worktreeManager/updateToolSettings',\n watchToolChanges: 'worktreeManager/watchToolChanges',\n listWorktrees: 'worktreeManager/listWorktrees',\n listWorktreeCommits: 'worktreeManager/listWorktreeCommits',\n listWorktreeCommitFiles: 'worktreeManager/listWorktreeCommitFiles',\n getWorktreeCommitFileDiff: 'worktreeManager/getWorktreeCommitFileDiff',\n listImportCandidates: 'worktreeManager/listImportCandidates',\n listBranches: 'worktreeManager/listBranches',\n createWorktree: 'worktreeManager/createWorktree',\n importWorktree: 'worktreeManager/importWorktree',\n removeWorktree: 'worktreeManager/removeWorktree',\n unarchiveWorktree: 'worktreeManager/unarchiveWorktree',\n cleanWorktree: 'worktreeManager/cleanWorktree',\n adoptWorktreeBranch: 'worktreeManager/adoptWorktreeBranch',\n recoverWorktrees: 'worktreeManager/recoverWorktrees',\n forgetWorktree: 'worktreeManager/forgetWorktree',\n insertWorktreeBefore: 'worktreeManager/insertWorktreeBefore',\n getWorktreeInstructions: 'worktreeManager/getWorktreeInstructions',\n updateWorktreeInstructions: 'worktreeManager/updateWorktreeInstructions',\n updateWorktreeBaseBranch: 'worktreeManager/updateWorktreeBaseBranch',\n listBindings: 'worktreeManager/listBindings',\n bindSession: 'worktreeManager/bindSession',\n ensureWorktreePermission: 'worktreeManager/ensureWorktreePermission',\n normalizeDetachedWorktreePermissions: 'worktreeManager/normalizeDetachedWorktreePermissions',\n});\n/** Browser-safe error shared by transport, Gateway, endpoint and domain failures. */\nexport class WorktreeConnectionError extends Error {\n code;\n details;\n retryable;\n constructor(options) {\n super(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'WorktreeConnectionError';\n this.code = options.code;\n this.details = Object.freeze({ ...(options.details ?? {}) });\n this.retryable = options.retryable;\n }\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isWorktreeError(value) {\n return (isRecord(value) &&\n typeof value.code === 'string' &&\n typeof value.message === 'string' &&\n isRecord(value.details));\n}\nfunction isWorktreeRemoteResult(value) {\n if (!isRecord(value) || typeof value.ok !== 'boolean')\n return false;\n return value.ok || (isWorktreeError(value.error) && value.error.details !== undefined);\n}\nfunction disposedError() {\n return new WorktreeConnectionError({\n code: 'CLIENT_DISPOSED',\n message: '',\n details: {},\n retryable: false,\n });\n}\nfunction connectionFailure(endpoint, error, code = 'CONNECTION_CALL_FAILED') {\n const message = error instanceof Error ? error.message : String(error);\n return new WorktreeConnectionError({\n code,\n message,\n details: { endpoint },\n retryable: true,\n cause: error,\n });\n}\nfunction gatewayFailure(endpoint, result) {\n const rawDetails = isRecord(result.error.details) ? result.error.details : {};\n throw new WorktreeConnectionError({\n code: result.error.code,\n message: result.error.message,\n details: { endpoint, ...rawDetails },\n retryable: true,\n });\n}\nfunction invalidResult(endpoint) {\n return new WorktreeConnectionError({\n code: 'WORKTREE_RPC_INVALID_RESULT',\n message: '',\n details: { endpoint },\n retryable: true,\n });\n}\nfunction unwrap(endpoint, result) {\n if (!result.ok)\n gatewayFailure(endpoint, result);\n if (!isWorktreeRemoteResult(result.value))\n throw invalidResult(endpoint);\n if (!result.value.ok) {\n throw new WorktreeConnectionError({\n code: result.value.error.code,\n message: result.value.error.message,\n details: result.value.error.details,\n retryable: false,\n });\n }\n return result.value.value;\n}\n/**\n * Adapt the shared DSH Connection RPC into the existing WorktreeManager contract.\n * All wire details and request cancellation live behind this one deep module.\n */\nexport function createWorktreeConnectionAdapter(rpc) {\n const inFlight = new Set();\n let disposed = false;\n async function call(method, input, signal) {\n if (disposed)\n throw disposedError();\n const controller = new AbortController();\n const abort = () => controller.abort();\n if (signal?.aborted)\n controller.abort();\n else\n signal?.addEventListener('abort', abort, { once: true });\n inFlight.add(controller);\n const endpoint = WORKTREE_CONNECTION_ENDPOINTS[method];\n try {\n let result;\n try {\n result = await rpc.call(WORKTREE_CONNECTION_CHANNEL, endpoint, { args: { input } }, controller.signal);\n }\n catch (error) {\n if (disposed && controller.signal.aborted)\n throw disposedError();\n throw connectionFailure(endpoint, error);\n }\n return result;\n }\n finally {\n signal?.removeEventListener('abort', abort);\n inFlight.delete(controller);\n }\n }\n async function invoke(method, input) {\n return unwrap(WORKTREE_CONNECTION_ENDPOINTS[method], await call(method, input));\n }\n return {\n getToolSettings: (input) => invoke('getToolSettings', input),\n updateToolSettings: (input) => invoke('updateToolSettings', input),\n watchToolChanges: async (afterRevision, signal) => unwrap(WORKTREE_CONNECTION_ENDPOINTS.watchToolChanges, await call('watchToolChanges', { afterRevision }, signal)),\n // Empty Workspace identity reaches the existing read endpoint but cannot select user data.\n // An outer success (including inner WORKSPACE_NOT_FOUND) proves the Host is composed.\n probeHost: (signal) => call('listBindings', { workspaceId: '' }, signal),\n listWorktrees: (input) => invoke('listWorktrees', input),\n listWorktreeCommits: (input) => invoke('listWorktreeCommits', input),\n listWorktreeCommitFiles: (input) => invoke('listWorktreeCommitFiles', input),\n getWorktreeCommitFileDiff: (input) => invoke('getWorktreeCommitFileDiff', input),\n listImportCandidates: (input) => invoke('listImportCandidates', input),\n listBranches: (input) => invoke('listBranches', input),\n createWorktree: (input) => invoke('createWorktree', input),\n importWorktree: (input) => invoke('importWorktree', input),\n async removeWorktree(input) {\n await invoke('removeWorktree', input);\n },\n async unarchiveWorktree(input) {\n await invoke('unarchiveWorktree', input);\n },\n async adoptWorktreeBranch(input) { await invoke('adoptWorktreeBranch', input); },\n async recoverWorktrees(input) { await invoke('recoverWorktrees', input); },\n async cleanWorktree(input) {\n await invoke('cleanWorktree', input);\n },\n async forgetWorktree(input) {\n await invoke('forgetWorktree', input);\n },\n async insertWorktreeBefore(input) {\n return invoke('insertWorktreeBefore', input);\n },\n async getWorktreeInstructions(input) {\n return invoke('getWorktreeInstructions', input);\n },\n async updateWorktreeInstructions(input) {\n return invoke('updateWorktreeInstructions', input);\n },\n async updateWorktreeBaseBranch(input) {\n return invoke('updateWorktreeBaseBranch', input);\n },\n listBindings: (input) => invoke('listBindings', input),\n bindSession: (input) => invoke('bindSession', input),\n ensureWorktreePermission: (input) => invoke('ensureWorktreePermission', input),\n normalizeDetachedWorktreePermissions: (input) => invoke('normalizeDetachedWorktreePermissions', input),\n dispose() {\n if (disposed)\n return;\n disposed = true;\n for (const controller of inFlight)\n controller.abort();\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-connection.js.map","/** One cancellable long-poll per Client fiber, shared by Context and Surface. */\nexport function createWorktreeToolChangeMonitor(options) {\n const listeners = new Set();\n let controller = new AbortController();\n let started = false;\n let disposed = false;\n async function run(active) {\n let revision = 0;\n while (!active.signal.aborted) {\n try {\n const batch = await options.read(revision, active.signal);\n if (active.signal.aborted)\n return;\n revision = batch.revision;\n for (const change of batch.changes) {\n options.changed(change);\n for (const listener of listeners)\n listener(change);\n }\n }\n catch {\n if (active.signal.aborted)\n return;\n await new Promise((resolve) => {\n const wake = () => {\n clearTimeout(timer);\n active.signal.removeEventListener('abort', wake);\n resolve();\n };\n const timer = setTimeout(wake, options.retryMs ?? 5000);\n active.signal.addEventListener('abort', wake, { once: true });\n });\n }\n }\n }\n return {\n start() {\n if (started || controller.signal.aborted)\n return;\n started = true;\n void run(controller);\n },\n reset() {\n if (disposed)\n return;\n controller.abort();\n controller = new AbortController();\n if (started)\n void run(controller);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n dispose() {\n disposed = true;\n controller.abort();\n listeners.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-tool-changes.js.map","const MISSING_HOST_CODES = new Set([\n 'gateway/service-unavailable',\n 'gateway/definition-unavailable',\n 'gateway/invocation-unavailable',\n]);\n/** A transient reminder owned by one Client fiber, independent of ready view content. */\nexport class RestartNotice {\n probe;\n reason;\n notified = new Set();\n disposed = false;\n pending;\n listeners = new Set();\n constructor(probe) {\n this.probe = probe;\n }\n getSnapshot = () => this.reason !== undefined;\n getReasonSnapshot = () => this.reason;\n subscribe = (listener) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n dismiss = () => this.setReason(undefined);\n dismissReason = (reason) => {\n if (this.reason === reason)\n this.dismiss();\n };\n /** Only this domain result establishes that the named preset is missing. */\n reportPermissionResult(result) {\n if (this.disposed)\n return;\n if (result.status === 'fallback-workspace-write' ||\n result.status === 'full-applied' || result.status === 'already-full') {\n // These native results are newer evidence of a live Host. A pending probe\n // must not overwrite them with an earlier missing-Host response.\n this.pending?.abort();\n if (this.reason === 'host-unavailable')\n this.dismiss();\n }\n if (result.status === 'fallback-workspace-write') {\n this.show('permission-preset-unavailable');\n }\n else if (this.reason === 'permission-preset-unavailable' &&\n (result.status === 'full-applied' || result.status === 'already-full')) {\n this.dismiss();\n }\n }\n async check() {\n if (this.disposed)\n return;\n this.pending?.abort();\n const controller = new AbortController();\n this.pending = controller;\n const timer = setTimeout(() => controller.abort(), 5_000);\n try {\n const result = await this.probe(controller.signal);\n if (this.disposed || controller.signal.aborted || this.pending !== controller)\n return;\n if (result.ok) {\n // Host composition does not establish native preset availability.\n if (this.reason === 'host-unavailable')\n this.dismiss();\n }\n else if (MISSING_HOST_CODES.has(result.error?.code ?? '')) {\n this.show('host-unavailable');\n }\n }\n catch {\n // A transport failure does not establish that a restart is needed.\n }\n finally {\n clearTimeout(timer);\n if (this.pending === controller)\n this.pending = undefined;\n }\n }\n dispose() {\n this.disposed = true;\n this.reason = undefined;\n this.pending?.abort();\n this.listeners.clear();\n }\n show(reason) {\n if (this.disposed || this.notified.has(reason))\n return;\n this.notified.add(reason);\n this.setReason(reason);\n }\n setReason(reason) {\n if (this.reason === reason || this.disposed)\n return;\n this.reason = reason;\n for (const listener of this.listeners)\n listener();\n }\n}\n//# sourceMappingURL=restart-notice.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useSyncExternalStore } from 'react';\nimport { Toast } from '@deepseek-ai/dsh-client-ui-primitives';\nexport function RestartToast({ notice, t, }) {\n const reason = useSyncExternalStore(notice.subscribe, notice.getReasonSnapshot, notice.getReasonSnapshot);\n if (reason === undefined)\n return null;\n const presetMissing = reason === 'permission-preset-unavailable';\n return _jsx(Toast, { text: t(presetMissing ? 'permission.presetRestartRequired' : 'restartRequired'), holdMs: presetMissing ? 12_000 : 8_000, onDone: () => notice.dismissReason(reason) }, reason);\n}\n//# sourceMappingURL=RestartToast.js.map","import { createElement } from 'react';\n/** Resolve a legacy size-named export or the equivalent DSH 1.7 weighted export. */\nexport function createDshIconAlias(exports, legacyName, currentName) {\n return function DshIconAlias(props) {\n const candidate = exports[legacyName] ?? exports[currentName];\n if (typeof candidate !== 'function') {\n throw new Error(`Missing DSH icon export: ${legacyName} or ${currentName}`);\n }\n return createElement(candidate, props);\n };\n}\n//# sourceMappingURL=dsh-icon-compat.js.map","import * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nimport { createDshIconAlias } from './dsh-icon-compat.js';\nconst exports = primitives;\nexport const IconArchiveOutline20 = createDshIconAlias(exports, 'IconArchiveOutline20', 'IconArchiveOutlineRegular');\nexport const IconBranchOutline16 = createDshIconAlias(exports, 'IconBranchOutline16', 'IconBranchOutlineRegular');\nexport const IconChevronDownOutline14 = createDshIconAlias(exports, 'IconChevronDownOutline14', 'IconChevronDownOutlineRegular');\nexport const IconChevronRightOutline14 = createDshIconAlias(exports, 'IconChevronRightOutline14', 'IconChevronRightOutlineRegular');\nexport const IconCheckOutline16 = createDshIconAlias(exports, 'IconCheckOutline16', 'IconCheckOutlineRegular');\nexport const IconCloseFill14 = createDshIconAlias(exports, 'IconCloseFill14', 'IconCloseFillRegular');\nexport const IconCloseOutline16 = createDshIconAlias(exports, 'IconCloseOutline16', 'IconCloseOutlineRegular');\nexport const IconCopyOutline16 = createDshIconAlias(exports, 'IconCopyOutline16', 'IconCopyOutlineRegular');\nexport const IconEditOutline16 = createDshIconAlias(exports, 'IconEditOutline16', 'IconEditOutlineRegular');\nexport const IconEllipsisOutline16 = createDshIconAlias(exports, 'IconEllipsisOutline16', 'IconEllipsisOutlineRegular');\nexport const IconFolderClose16 = createDshIconAlias(exports, 'IconFolderClose16', 'IconFolderCloseRegular');\nexport const IconFolderOpen16 = createDshIconAlias(exports, 'IconFolderOpenRegular', 'IconFolderOpen16');\nexport const IconNewChatOutline16 = createDshIconAlias(exports, 'IconNewChatOutlineRegular', 'IconNewChatOutline16');\nexport const IconTriangleRightFill14 = createDshIconAlias(exports, 'IconTriangleRightFill14', 'IconTriangleRightFillRegular');\nexport const IconPanelLeftOutline16 = createDshIconAlias(exports, 'IconPanelLeftOutline16', 'IconPanelLeftOutlineRegular');\nexport const IconPlusOutline16 = createDshIconAlias(exports, 'IconPlusOutline16', 'IconPlusOutlineRegular');\nexport const IconProjectAddOutline16 = createDshIconAlias(exports, 'IconProjectAddOutline16', 'IconProjectAddOutlineRegular');\nexport const IconRefreshOutline16 = createDshIconAlias(exports, 'IconRefreshOutline16', 'IconRefreshOutlineRegular');\nexport const IconRightUpOutline16 = createDshIconAlias(exports, 'IconRightUpOutline16', 'IconRightUpOutlineRegular');\nexport const IconSearchOutline16 = createDshIconAlias(exports, 'IconSearchOutline16', 'IconSearchOutlineRegular');\nexport const IconTrashOutline16 = createDshIconAlias(exports, 'IconTrashOutline16', 'IconTrashOutlineRegular');\n//# sourceMappingURL=dsh-icons.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport styles from './worktree-context.css';\nfunction WorktreeContextLabel({ value, t, }) {\n if (value.kind === 'none')\n return null;\n const ariaLabel = value.kind === 'main'\n ? t('context.main', { name: value.label })\n : t('context.worktree', { name: value.label });\n return (_jsx(HoverCard, { anchor: _jsxs(\"span\", { className: styles.headerContext, title: value.label, \"aria-label\": ariaLabel, children: [_jsx(IconBranchOutline16, { size: 14, className: styles.contextIcon }), _jsx(\"span\", { className: styles.contextLabel, children: value.label })] }), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: value.label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Render the current branch or active Worktree branch beside the Session title. */\nexport function WorktreeHeaderContext({ sessionId, useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.sessionId !== sessionId)\n return null;\n return _jsx(WorktreeContextLabel, { value: state.value, t: t });\n}\n//# sourceMappingURL=WorktreeContext.js.map","let globalSetViewMode;\nexport function registerViewModeSetter(setter) {\n globalSetViewMode = setter;\n}\nexport function getViewModeSetter() {\n return globalSetViewMode;\n}\nexport function switchViewMode(mode) {\n globalSetViewMode?.(mode);\n}\n//# sourceMappingURL=view-mode-dispatch.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport { registerViewModeSetter } from './view-mode-dispatch.js';\nimport styles from '../worktree.css';\n/** Footer action that enters/exits the peer Worktree navigation mode. */\nexport function WorktreeModeAction({ wide, useStore, actions, t, available, }) {\n useEffect(() => {\n registerViewModeSetter(actions.setViewMode);\n return () => {\n registerViewModeSetter(undefined);\n };\n }, [actions.setViewMode]);\n if (!available)\n return null;\n const mode = useStore((state) => state.viewMode);\n const active = mode === 'worktree';\n return (_jsxs(\"button\", { type: \"button\", className: styles.action, \"data-worktree-mode-action\": true, \"data-active\": active || undefined, \"data-collapsed\": !wide || undefined, \"aria-label\": active ? t('mode.exit') : t('mode.open'), \"aria-pressed\": active, title: active ? t('mode.exit') : t('mode.label'), onClick: () => {\n actions.setViewMode(active ? 'workspace-session' : 'worktree');\n }, children: [_jsx(IconBranchOutline16, { size: wide ? 16 : 18 }), wide && _jsx(\"span\", { className: styles.actionLabel, children: t('mode.label') })] }));\n}\n//# sourceMappingURL=WorktreeModeAction.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** 4-quadrant layout glyph representing dashboard / overview. */\nexport function IconDashboard({ size = 16, className, }) {\n return (_jsxs(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.5\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"rect\", { x: \"2\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"2\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"2\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" }), _jsx(\"rect\", { x: \"9\", y: \"9\", width: \"5\", height: \"5\", rx: \"1\" })] }));\n}\n//# sourceMappingURL=dashboard-icon.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconDashboard } from './dashboard-icon.js';\nimport styles from './dashboard-header-action.css';\n/**\n * Render a quick Dashboard action for the current Session's resolved context.\n * The entry only appears after the shared context read is ready and points at\n * the same Session that owns the native header.\n */\nexport function DashboardHeaderAction({ sessionId, useWorktreeContext, openDashboard, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n if (state.status !== 'ready' || state.sessionId !== sessionId || state.value.kind === 'none') {\n return null;\n }\n return (_jsx(Tooltip, { label: t('dashboard.open'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.headerDashboardButton, \"aria-label\": t('dashboard.open'), onClick: () => {\n openDashboard(String(sessionId));\n }, children: _jsx(IconDashboard, { size: 16 }) }) }));\n}\n//# sourceMappingURL=DashboardHeaderAction.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { HoverCard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport styles from './worktree-context.css';\nfunction labelFor(state) {\n if (state.status !== 'ready' ||\n state.workspaceTitle === undefined ||\n state.value.kind === 'none') {\n return undefined;\n }\n return `${state.workspaceTitle} (${state.value.label})`;\n}\nfunction elementWithClassSuffix(root, suffix) {\n const candidates = root.querySelectorAll('[class]');\n for (const candidate of candidates) {\n if ([...candidate.classList].some((token) => token === suffix || token.endsWith(`_${suffix}`))) {\n return candidate;\n }\n }\n return null;\n}\nfunction headlineElement(root) {\n // Anchor to the visible end of the native title line. The headline wrapper\n // spans the whole content column, so using it would place the suffix at the\n // far edge instead of immediately after the title and preview badge.\n return elementWithClassSuffix(root, 'previewBadge')\n ?? elementWithClassSuffix(root, 'headlineText')\n ?? elementWithClassSuffix(root, 'headline');\n}\nfunction positionedAncestor(element) {\n if (element.offsetParent instanceof HTMLElement)\n return element.offsetParent;\n for (let ancestor = element.parentElement; ancestor !== null; ancestor = ancestor.parentElement) {\n if (getComputedStyle(ancestor).position !== 'static')\n return ancestor;\n }\n return null;\n}\nfunction overlayFor(element) {\n const host = element.closest('[data-worktree-hero-host]');\n return positionedAncestor(host ?? element);\n}\nfunction measurePlacement(element) {\n const hero = document.querySelector('[data-phase=\"hero\"]');\n // The Slot renderer inserts a display: contents wrapper before the actual\n // shell overlay layer, so the direct parent is not the containing block.\n const overlay = overlayFor(element);\n const headline = hero === null ? null : headlineElement(hero);\n if (hero === null || headline === null || overlay === null)\n return null;\n const anchor = headline.getBoundingClientRect();\n const frame = overlay.getBoundingClientRect();\n const width = element.getBoundingClientRect().width;\n const afterHeadlineLeft = anchor.right - frame.left + 8;\n const fitsAfterHeadline = afterHeadlineLeft + width <= frame.width - 8;\n return {\n left: fitsAfterHeadline\n ? afterHeadlineLeft\n : Math.max(8, frame.width - width - 8),\n top: fitsAfterHeadline\n ? Math.max(8, anchor.top - frame.top + (anchor.height - 22) / 2)\n : Math.max(8, anchor.bottom - frame.top + 8),\n };\n}\nfunction contextAriaLabel(state, t) {\n if (state.value.kind === 'main')\n return t('context.main', { name: state.value.label });\n if (state.value.kind === 'worktree')\n return t('context.worktree', { name: state.value.label });\n return undefined;\n}\nfunction heroContainer() {\n if (typeof document === 'undefined')\n return null;\n const el = document.querySelector('[data-phase=\"hero\"]');\n return el && el.isConnected ? el : null;\n}\n/**\n * Browser-local Hero suffix. Portaled directly into the native Hero container\n * so its stacking context stays within the conversation column instead of\n * floating above overlays, menus, and dropdowns.\n */\nexport function WorktreeHeroContext({ useWorktreeContext, t, }) {\n const state = useWorktreeContext((snapshot) => snapshot);\n const label = labelFor(state);\n const [placement, setPlacement] = useState(null);\n const [heroTarget, setHeroTarget] = useState(() => heroContainer());\n const measure = useCallback((element) => {\n if (element === null) {\n setPlacement(null);\n return;\n }\n setPlacement(measurePlacement(element));\n }, []);\n useLayoutEffect(() => {\n if (typeof document === 'undefined' || typeof window === 'undefined')\n return undefined;\n let frameRequest;\n const schedule = () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n frameRequest = window.requestAnimationFrame(() => {\n frameRequest = undefined;\n const currentHero = heroContainer();\n setHeroTarget((prev) => (prev === currentHero ? prev : currentHero));\n const element = document.querySelector('[data-worktree-hero-context]');\n if (element !== null) {\n measure(element);\n }\n else {\n setPlacement(null);\n }\n });\n };\n const mutationObserver = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(schedule);\n mutationObserver?.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['class', 'data-phase'],\n });\n const element = document.querySelector('[data-worktree-hero-context]');\n const observedAncestor = element !== null ? (overlayFor(element) ?? element) : (heroTarget ?? document.body);\n const resizeObserver = typeof ResizeObserver === 'undefined'\n ? undefined\n : new ResizeObserver(schedule);\n if (observedAncestor !== null) {\n resizeObserver?.observe(observedAncestor);\n }\n window.addEventListener('resize', schedule);\n schedule();\n return () => {\n if (frameRequest !== undefined)\n window.cancelAnimationFrame(frameRequest);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n window.removeEventListener('resize', schedule);\n };\n }, [label, measure, heroTarget]);\n const ariaLabel = contextAriaLabel(state, t);\n if (label === undefined || heroTarget === null)\n return null;\n return createPortal(_jsx(\"span\", { className: styles.heroContextHost, \"data-worktree-hero-host\": true, style: placement === null ? { visibility: 'hidden' } : {\n left: `${placement.left}px`,\n top: `${placement.top}px`,\n }, children: _jsx(HoverCard, { anchor: (_jsx(\"span\", { ref: measure, className: styles.heroContext, \"data-worktree-hero-context\": true, \"aria-label\": ariaLabel, title: label, children: label })), content: _jsx(\"div\", { className: styles.contextHoverTitle, children: label }), openDelayMs: 500, copyLabel: t('copy'), copiedLabel: t('hover.copied') }) }), heroTarget);\n}\n//# sourceMappingURL=WorktreeHeroContext.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { RiskConfirmation } from '@deepseek-ai/dsh-client-ui-primitives';\nexport function AccessConfirmation({ source, props }) {\n const { fullAccessConfirmationSnapshot, fullAccessAcknowledged, setFullAccessAcknowledged } = source;\n const { t, fullAccessConfirmation } = props;\n return (_jsx(_Fragment, { children: _jsx(RiskConfirmation, { open: fullAccessConfirmationSnapshot !== undefined, title: t('permission.fullAccessTitle'), description: fullAccessConfirmationSnapshot === undefined\n ? ''\n : t('permission.fullAccessDescription', {\n cwd: fullAccessConfirmationSnapshot.cwd,\n }), acknowledgeLabel: t('permission.fullAccessAcknowledge'), cancelLabel: t('dialog.cancel'), closeLabel: t('dialog.close'), confirmLabel: t('permission.fullAccessEnable'), acknowledged: fullAccessAcknowledged, onAcknowledgedChange: setFullAccessAcknowledged, onCancel: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(false);\n }, onConfirm: () => {\n setFullAccessAcknowledged(false);\n fullAccessConfirmation?.resolve(true);\n } }) }));\n}\n//# sourceMappingURL=AccessConfirmation.js.map","/** Browser-safe capability identities shared by preferences and the Agent catalog. */\nexport const WORKTREE_TOOL_IDS = [\n 'clutch_new_worktree',\n 'clutch_list_worktrees',\n 'clutch_span_worktree',\n 'clutch_list_models',\n 'clutch_list_sessions',\n 'clutch_send_message',\n];\n//# sourceMappingURL=tool-settings.js.map","/**\n * Browser-safe Windows path identity helpers. They intentionally do not touch\n * the filesystem; Provider adds physical stat/realpath checks where it has\n * access to Node APIs.\n */\nconst EXTENDED_PATH_PREFIX = '//?/';\nconst EXTENDED_UNC_PREFIX = '//?/UNC/';\nexport function isWindowsPath(value) {\n return /^[A-Za-z]:[\\\\/]/u.test(value) ||\n value.startsWith('\\\\\\\\') ||\n /^\\/\\/\\?(?:\\/|\\\\)/u.test(value);\n}\n/** Strip only the extended drive/UNC prefixes supported by the browser boundary. */\nexport function stripExtendedWindowsPrefix(value) {\n const normalized = value.replaceAll('\\\\', '/');\n const normalizedUncPrefix = EXTENDED_UNC_PREFIX.toLowerCase();\n if (normalized.toLowerCase().startsWith(normalizedUncPrefix)) {\n return '//' + normalized.slice(EXTENDED_UNC_PREFIX.length);\n }\n if (normalized.startsWith(EXTENDED_PATH_PREFIX)) {\n const drivePath = normalized.slice(EXTENDED_PATH_PREFIX.length);\n if (/^[A-Za-z]:\\//u.test(drivePath))\n return drivePath;\n }\n return value;\n}\nexport function normalizeWindowsPath(value) {\n let normalized = stripExtendedWindowsPrefix(value).replaceAll('\\\\', '/');\n const unc = normalized.startsWith('//');\n normalized = normalized.replace(/\\/{2,}/gu, '/');\n if (unc && normalized.startsWith('/'))\n normalized = '/' + normalized;\n if (normalized.length > 3)\n normalized = normalized.replace(/\\/+$/u, '');\n return normalized.toLowerCase();\n}\nexport function sameWindowsPath(left, right) {\n return (isWindowsPath(left) || isWindowsPath(right)) &&\n normalizeWindowsPath(left) === normalizeWindowsPath(right);\n}\n//# sourceMappingURL=windows-path.js.map","/**\n * 插件的稳定、浏览器安全契约层;这里只定义领域值与服务形状,不依赖 Git、sidecar 或 Node runtime。\n * Stable, browser-safe contract layer for the plugin; it defines domain values and service shapes without Git, sidecar, or Node runtime dependencies.\n *\n * @packageDocumentation\n */\n/**\n * 跨 Host/浏览器边界保持稳定的领域错误码;新增、删除或重命名成员都属于公开契约变更。\n * Stable domain error codes shared across the Host/browser boundary; adding, removing, or renaming a member is a public contract change.\n */\nexport const WORKTREE_ERROR_CODES = Object.freeze([\n 'WORKSPACE_NOT_FOUND',\n 'WORKSPACE_ROOT_MISSING',\n 'WORKSPACE_NOT_GIT_REPOSITORY',\n 'GIT_NOT_INSTALLED',\n 'WORKTREE_REQUIRES_INITIAL_COMMIT',\n 'WORKTREE_BRANCH_CONFLICT',\n 'WORKTREE_NOT_FOUND',\n 'WORKTREE_ORDER_INVALID',\n 'WORKTREE_REMOVED',\n 'WORKTREE_IMPORT_INVALID',\n 'WORKTREE_ALREADY_MANAGED',\n 'SESSION_NOT_FOUND',\n 'SESSION_CWD_MISMATCH',\n 'SESSION_ALREADY_BOUND',\n 'SIDECAR_UNAVAILABLE',\n 'SIDECAR_CORRUPT',\n 'SIDECAR_SYNC_REQUIRED',\n 'GIT_OPERATION_FAILED',\n 'WORKTREE_MUTATION_BUSY',\n 'WORKTREE_STATE_CONFLICT',\n 'WORKTREE_RECOVERY_REQUIRED',\n 'WORKTREE_IDENTITY_CHANGED',\n 'WORKTREE_PERMISSION_BINDING_REQUIRED',\n 'WORKTREE_SESSION_BUSY',\n 'WORKTREE_ACTIVITY_UNAVAILABLE',\n]);\n/** Stable synthetic commit id used for the current uncommitted working tree entry. */\nexport const WORKTREE_GIT_WORKING_TREE = 'working-tree';\n/** Stable synthetic id used by the Dashboard's baseline-wide summary view. */\nexport const WORKTREE_GIT_SUMMARY = 'summary';\n/**\n * Git object-name guard shared by the Contract, Provider, Manage and Client\n * seams so commit-SHA validation cannot drift between layers. SHA-1 and SHA-256\n * repository formats are both accepted.\n */\nexport const WORKTREE_GIT_COMMIT_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/iu;\n/** True when the value is a full-length Git commit SHA. */\nexport function isWorktreeGitCommit(value) {\n return typeof value === 'string' && WORKTREE_GIT_COMMIT_PATTERN.test(value);\n}\nexport * from './worktree-permission.js';\nexport * from './worktree-tool-changes.js';\nexport * from './tool-settings.js';\nexport * from './windows-path.js';\n/** Git identity and disk lifecycle always target the complete checkout. Browser-safe. */\nexport function gitWorktreeRoot(record) {\n return record.gitRootPath ?? record.absolutePath;\n}\n/**\n * 创建错误 DTO 而不抛出异常,供 Host 将已识别的领域失败投影到 Remote result。\n * Creates an error DTO without throwing, allowing the Host to project recognized domain failures into a Remote result.\n */\nexport function createWorktreeError(code, message, details = {}) {\n return { code, message, details };\n}\n/**\n * Browser Remote 可调用的方法白名单;runtime cwd 解析刻意不进入该边界。\n * Allowlist of Browser Remote methods; runtime cwd resolution is intentionally excluded from this boundary.\n */\nexport const WORKTREE_REMOTE_METHODS = Object.freeze([\n 'getToolSettings',\n 'updateToolSettings',\n 'watchToolChanges',\n 'getWorktreeInstructions',\n 'updateWorktreeInstructions',\n 'updateWorktreeBaseBranch',\n 'listWorktrees',\n 'listWorktreeCommits',\n 'listWorktreeCommitFiles',\n 'getWorktreeCommitFileDiff',\n 'listImportCandidates',\n 'listBranches',\n 'createWorktree',\n 'importWorktree',\n 'removeWorktree',\n 'unarchiveWorktree',\n 'cleanWorktree',\n 'adoptWorktreeBranch',\n 'recoverWorktrees',\n 'forgetWorktree',\n 'insertWorktreeBefore',\n 'listBindings',\n 'bindSession',\n 'ensureWorktreePermission',\n 'normalizeDetachedWorktreePermissions',\n]);\n//# sourceMappingURL=index.js.map","/** Group a root Git failure without conflating unrelated repositories or diagnostics. */\nexport function failureToastKey(error, scope) {\n const details = Object.fromEntries(Object.entries(error.details ?? {})\n .filter(([name]) => !['gitArgs', 'gitStdout', 'operation'].includes(name)));\n return JSON.stringify([scope, error.code, details,\n typeof details.gitStderr === 'string' && details.gitStderr.length > 0 || details.gitTimedOut === true\n ? undefined : error.message]);\n}\n/** Resolved notices leave the queue; unchanged snapshots never announce twice. */\nexport function reconcileNotifications(state, notices) {\n const unique = [...new Map(notices.map((notice) => {\n const key = notice.toastKey ?? notice.key;\n return [key, { ...notice, key }];\n })).values()];\n const active = new Set(unique.map((notice) => notice.key));\n const seen = new Set(state.seen);\n const pending = state.pending.filter((notice) => active.has(notice.key));\n for (const notice of unique) {\n if (!seen.has(notice.key))\n pending.push(notice);\n }\n const nextSeen = [...active];\n if (nextSeen.length === state.seen.length &&\n nextSeen.every((key, index) => key === state.seen[index]) &&\n pending.length === state.pending.length &&\n pending.every((notice, index) => notice.key === state.pending[index]?.key))\n return state;\n return { seen: nextSeen, pending };\n}\n//# sourceMappingURL=notification-queue.js.map","function detail(error, name) {\n const value = error.details?.[name];\n return typeof value === 'string' ? value : '';\n}\nconst DOMAIN_ERROR_COPY = {\n WORKSPACE_NOT_FOUND: 'error.workspaceNotFound',\n WORKSPACE_ROOT_MISSING: 'error.workspaceRootMissing',\n WORKSPACE_NOT_GIT_REPOSITORY: 'error.workspaceNotGitRepository',\n GIT_NOT_INSTALLED: 'error.gitNotInstalled',\n WORKTREE_REQUIRES_INITIAL_COMMIT: 'error.initialCommitRequired',\n WORKTREE_BRANCH_CONFLICT: 'error.branchConflict',\n WORKTREE_NOT_FOUND: 'error.worktreeNotFound',\n WORKTREE_ORDER_INVALID: 'error.worktreeOrderInvalid',\n WORKTREE_REMOVED: 'error.worktreeRemoved',\n WORKTREE_IMPORT_INVALID: 'error.worktreeImportInvalid',\n WORKTREE_ALREADY_MANAGED: 'error.worktreeAlreadyManaged',\n SESSION_NOT_FOUND: 'error.sessionNotFound',\n SESSION_CWD_MISMATCH: 'error.sessionCwdMismatch',\n SESSION_ALREADY_BOUND: 'error.sessionAlreadyBound',\n SIDECAR_UNAVAILABLE: 'error.sidecarUnavailable',\n SIDECAR_CORRUPT: 'error.sidecarCorrupt',\n SIDECAR_SYNC_REQUIRED: 'error.sidecarSyncRequired',\n GIT_OPERATION_FAILED: 'error.gitOperationFailed',\n WORKTREE_MUTATION_BUSY: 'error.worktreeMutationBusy',\n WORKTREE_STATE_CONFLICT: 'error.worktreeStateConflict',\n WORKTREE_RECOVERY_REQUIRED: 'error.worktreeRecoveryRequired',\n WORKTREE_IDENTITY_CHANGED: 'error.worktreeIdentityChanged',\n WORKTREE_PERMISSION_BINDING_REQUIRED: 'error.permissionBindingRequired',\n WORKTREE_SESSION_BUSY: 'error.worktreeSessionBusy',\n WORKTREE_ACTIVITY_UNAVAILABLE: 'error.worktreeActivityUnavailable',\n};\nfunction reason(error, t) {\n const causeCode = detail(error, 'causeCode');\n const key = Object.hasOwn(DOMAIN_ERROR_COPY, causeCode)\n ? DOMAIN_ERROR_COPY[causeCode]\n : undefined;\n return key === undefined\n ? t('error.worktreeDataUnavailable')\n : causeCode === 'WORKSPACE_ROOT_MISSING'\n ? t(key, { rootPath: detail(error, 'rootPath') })\n : t(key);\n}\n/** Recognize actionable Git diagnostics without displaying untranslated stderr. */\nfunction gitErrorCopy(error) {\n if (error.details?.gitTimedOut === true)\n return 'error.gitTimeout';\n const diagnostic = detail(error, 'gitStderr');\n if (/contains modified or untracked files|uncommitted changes|local changes.*overwritten/i.test(diagnostic))\n return 'error.gitLocalChanges';\n if (/permission denied|access is denied|operation not permitted|dubious ownership/i.test(diagnostic))\n return 'error.gitAccessDenied';\n if (/is locked|cannot lock|unable to create.*\\.lock|another git process/i.test(diagnostic))\n return 'error.gitLocked';\n if (/not a valid branch name|invalid branch name|not a valid ref/i.test(diagnostic))\n return 'error.gitInvalidBranch';\n return 'error.gitOperationFailed';\n}\nexport function formatWorktreePermissionNotice(result, t) {\n switch (result.status) {\n case 'fallback-workspace-write':\n return t('permission.fallbackWorkspaceWrite');\n case 'user-restricted':\n return t('permission.userRestricted');\n case 'unverified':\n return t('permission.unverified');\n default:\n return t('permission.unavailable');\n }\n}\nexport function formatWorktreeViewError(error, t) {\n if (error.code === 'GIT_OPERATION_FAILED')\n return t(gitErrorCopy(error));\n const domainKey = Object.hasOwn(DOMAIN_ERROR_COPY, error.code)\n ? DOMAIN_ERROR_COPY[error.code]\n : undefined;\n if (domainKey !== undefined)\n return error.code === 'WORKSPACE_ROOT_MISSING'\n ? t(domainKey, { rootPath: detail(error, 'rootPath') })\n : t(domainKey);\n switch (error.code) {\n case 'CLIENT_DISPOSED':\n return t('error.connectionDisposed');\n case 'gateway/service-unavailable':\n case 'gateway/definition-unavailable':\n case 'gateway/invocation-unavailable':\n case 'CONNECTION_CALL_FAILED':\n return t('error.connectionFailed');\n case 'WORKTREE_RPC_INVALID_RESULT':\n return t('error.invalidResult');\n case 'WORKSPACE_ORDER_UNAVAILABLE':\n return t('error.workspaceOrderingUnavailable');\n case 'SESSION_ORDER_UNAVAILABLE':\n return t('error.sessionOrderingUnavailable');\n case 'WORKTREE_ORDER_UNAVAILABLE':\n return t('error.worktreeOrderingUnavailable');\n case 'SESSION_CREATE_UNAVAILABLE':\n return t('error.sessionCreationUnavailable');\n case 'WORKTREE_CREATED_SESSION_UNAVAILABLE':\n return t('error.worktreeCreatedSessionUnavailable');\n case 'WORKTREE_RECORD_MISSING':\n return t('error.worktreeRecordMissing');\n case 'WORKTREE_IMPORT_INVALID':\n return t('error.worktreeImportInvalid');\n case 'WORKTREE_ALREADY_MANAGED':\n return t('error.worktreeAlreadyManaged');\n case 'WORKTREE_MUTATION_BUSY':\n return t('error.worktreeMutationBusy');\n case 'WORKTREE_STATE_CONFLICT':\n return t('error.worktreeStateConflict');\n case 'WORKTREE_RECOVERY_REQUIRED':\n return t('error.worktreeRecoveryRequired');\n case 'WORKTREE_IDENTITY_CHANGED':\n return t('error.worktreeIdentityChanged');\n case 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE':\n return t('error.worktreeRegistrationSessionUnavailable');\n case 'WORKSPACE_RENAME_UNAVAILABLE':\n return t('error.workspaceRenameUnavailable');\n case 'WORKSPACE_DELETE_UNAVAILABLE':\n return t('error.workspaceDeleteUnavailable');\n case 'SESSION_RENAME_UNAVAILABLE':\n return t('error.sessionRenameUnavailable');\n case 'SESSION_BINDING_FAILED':\n return t('error.sessionBindingFailed', {\n sessionId: detail(error, 'sessionId'),\n reason: reason(error, t),\n });\n case 'SESSION_ALREADY_BOUND':\n return t('error.sessionAlreadyBound');\n case 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED':\n return t('error.worktreePermissionConfirmationRequired');\n case 'WORKTREE_PERMISSION_FAILED':\n return t('error.worktreePermissionFailed');\n case 'SESSION_LIST_NOT_READY':\n return t('error.sessionListNotReady');\n case 'SESSION_FACTS_INCOMPLETE':\n return t('error.sessionFactsIncomplete');\n case 'WORKTREE_SESSION_REPAIR_REQUIRED':\n return t('error.worktreeSessionRepairRequired');\n case 'WORKTREE_SESSION_UNAVAILABLE':\n return t('error.worktreeSessionUnavailable');\n case 'SESSION_ARCHIVED':\n return t('error.sessionArchived');\n case 'GIT_NOT_INSTALLED':\n return t('error.gitNotInstalled');\n default:\n return error.code === 'WORKTREE_VIEW_FAILED'\n ? t('error.worktreeDataUnavailable')\n : t('error.unexpected', { code: error.code });\n }\n}\n//# sourceMappingURL=worktree-error-copy.js.map","/** Browser-memory history. Unmount is not proof of recovery; stale actions are revoked. */\nexport function createWorktreeDiagnostics() {\n let snapshot = [];\n const sources = new Map();\n const listeners = new Set();\n const emit = () => listeners.forEach((listener) => listener());\n const limitHistory = () => {\n const history = snapshot.filter((entry) => entry.status !== 'active').slice(-100);\n snapshot = [...history, ...snapshot.filter((entry) => entry.status === 'active')];\n };\n const retire = (source, status, keys = new Set()) => {\n snapshot = snapshot.map((entry) => entry.source === source && entry.status === 'active' && !keys.has(entry.key)\n ? { ...entry, status, actions: [] }\n : entry);\n limitHistory();\n };\n return {\n getSnapshot: () => snapshot,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n publish(source, notices) {\n sources.set(source, notices);\n retire(source, 'resolved', new Set(notices.map((notice) => notice.key)));\n for (const notice of notices) {\n const entry = {\n ...notice, source, status: 'active',\n actions: (notice.actions ?? []).map((action) => ({\n ...action,\n onClick: () => {\n const current = sources.get(source)?.find((item) => item.key === notice.key)?.actions\n ?.find((item) => item.label === action.label);\n if (current !== undefined && !current.disabled)\n current.onClick();\n },\n })),\n };\n snapshot = [...snapshot.filter((item) => item.key !== notice.key), entry];\n }\n // Keep active recoveries even when many historical failures have accumulated.\n limitHistory();\n emit();\n },\n deactivate(source) {\n sources.delete(source);\n retire(source, 'inactive');\n emit();\n },\n clearHistory() {\n snapshot = snapshot.filter((entry) => entry.status === 'active');\n emit();\n },\n dispose() {\n sources.clear();\n snapshot = [];\n emit();\n },\n };\n}\n// Shared by the native Settings seat and surface within one loaded Client module.\nexport const worktreeDiagnostics = createWorktreeDiagnostics();\n//# sourceMappingURL=diagnostics.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Toast } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { createContext, useCallback, useContext, useEffect, useId, useRef, useState, } from 'react';\nimport { reconcileNotifications, failureToastKey, } from '../notification-queue.js';\nimport { formatWorktreeViewError } from '../../view/worktree-error-copy.js';\nimport { worktreeDiagnostics } from '../../settings/diagnostics.js';\nconst Notifications = createContext(undefined);\n/** One queue for the list, dialogs and Dashboard; unmount removes a source's notices. */\nexport function NotificationProvider({ children, t, openSettings }) {\n const [sources, setSources] = useState(new Map());\n const publish = useCallback((source, notices) => {\n setSources((current) => {\n if (!current.has(source) && notices.length === 0)\n return current;\n const next = new Map(current);\n if (notices.length === 0)\n next.delete(source);\n else\n next.set(source, notices);\n return next;\n });\n }, []);\n return (_jsxs(Notifications.Provider, { value: publish, children: [children, _jsx(ToastQueue, { notices: [...sources.values()].flat(), hint: t('settings.toastHint'), settingsAction: openSettings === undefined ? undefined\n : { label: t('settings.errors'), onClick: openSettings } })] }));\n}\n/** Register resolved copy while retaining live callbacks for recovery actions. */\nexport function NotificationToasts({ notices }) {\n const publish = useContext(Notifications);\n const id = useId();\n const latest = useRef(notices);\n const alive = useRef(true);\n latest.current = notices;\n const signature = JSON.stringify(notices.map(({ key, text, context, error, actions }) => [\n key, text, context, error, actions?.map(({ label, disabled, leaveSettings }) => [label, disabled, leaveSettings]),\n ]));\n useEffect(() => {\n const registered = latest.current.map((notice) => ({\n ...notice,\n actions: notice.actions?.map((action) => ({\n leaveSettings: action.leaveSettings,\n disabled: action.disabled,\n label: action.label,\n onClick: () => {\n const current = latest.current.find((item) => item.key === notice.key)?.actions\n ?.find((item) => item.label === action.label);\n if (alive.current && !current?.disabled)\n current?.onClick();\n },\n })),\n }));\n worktreeDiagnostics.publish(id, registered);\n publish?.(id, registered);\n }, [publish, id, signature]);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n worktreeDiagnostics.deactivate(id);\n publish?.(id, []);\n };\n }, [publish, id]);\n return publish === undefined ? _jsx(ToastQueue, { notices: notices }) : null;\n}\nexport function ErrorToast({ error, t, scope, context, actions, describe, }) {\n const text = error === undefined ? undefined : formatWorktreeViewError(error, t);\n return (_jsx(NotificationToasts, { notices: text === undefined ? [] : [{\n key: JSON.stringify([scope, error?.code, error?.details]), text, error, context, actions, describe,\n toastKey: failureToastKey(error),\n }] }));\n}\nfunction ToastQueue({ notices, hint, settingsAction }) {\n const [queue, setQueue] = useState({ seen: [], pending: [] });\n useEffect(() => {\n setQueue((current) => reconcileNotifications(current, notices));\n }, [notices]);\n const current = queue.pending[0];\n const key = current?.key;\n const onDone = useCallback(() => {\n setQueue((state) => ({\n ...state,\n pending: state.pending.filter((notice) => notice.key !== key),\n }));\n }, [key]);\n if (current === undefined)\n return null;\n // Never truncate recovery guidance. Resolve actions from the current render.\n const active = notices.find((notice) => (notice.toastKey ?? notice.key) === current.key);\n return (_jsx(Toast, { text: [active?.text ?? current.text, hint].filter(Boolean).join(' '), actions: settingsAction === undefined ? undefined : [settingsAction], holdMs: 8000, onDone: onDone }, current.key));\n}\n//# sourceMappingURL=NotificationToasts.js.map","/** A DSH Session exists even when the external Worktree binding needs repair. */\nexport class WorktreeSessionBindingError extends Error {\n code;\n retryable;\n details;\n sessionId;\n cause;\n constructor(sessionId, cause) {\n const candidate = typeof cause === 'object' && cause !== null\n ? cause\n : undefined;\n const reason = cause instanceof Error\n ? cause.message\n : typeof candidate?.message === 'string'\n ? candidate.message\n : String(cause);\n super(reason);\n this.name = 'WorktreeSessionBindingError';\n const conflict = candidate?.code === 'SESSION_ALREADY_BOUND';\n const incompatible = conflict || candidate?.code === 'SESSION_CWD_MISMATCH' ||\n candidate?.code === 'SESSION_NOT_FOUND';\n this.code = conflict ? 'SESSION_ALREADY_BOUND' : 'SESSION_BINDING_FAILED';\n this.retryable = !incompatible && candidate?.retryable !== false;\n this.details =\n typeof candidate?.details === 'object' &&\n candidate.details !== null &&\n !Array.isArray(candidate.details)\n ? candidate.details\n : {};\n this.details = {\n ...this.details,\n ...(typeof candidate?.code === 'string' ? { causeCode: candidate.code } : {}),\n };\n this.sessionId = sessionId;\n this.cause = cause;\n }\n}\n/** A Session is retained after permission confirmation or permission setup needs retry. */\nexport class WorktreeSessionPermissionError extends Error {\n code;\n retryable = true;\n details;\n sessionId;\n createdSession;\n cause;\n constructor(sessionId, createdSession, cause) {\n const reason = cause instanceof Error ? cause.message : cause === undefined ? '' : String(cause);\n super(reason);\n this.name = 'WorktreeSessionPermissionError';\n this.code = cause === undefined\n ? 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED'\n : 'WORKTREE_PERMISSION_FAILED';\n this.details = { sessionId };\n this.sessionId = sessionId;\n this.createdSession = createdSession;\n this.cause = cause;\n }\n}\nfunction recordDetails(value) {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return undefined;\n const details = value.details;\n if (typeof details !== 'object' || details === null || Array.isArray(details))\n return undefined;\n return details;\n}\n/** Convert any adapter/Gateway failure into renderable, retry-aware UI data. */\nexport function toWorktreeViewError(error) {\n if (typeof error === 'object' && error !== null) {\n const candidate = error;\n const details = error instanceof WorktreeSessionBindingError || error instanceof WorktreeSessionPermissionError\n ? { ...(recordDetails(error) ?? {}), sessionId: error.sessionId }\n : recordDetails(error);\n return {\n code: typeof candidate.code === 'string' ? candidate.code : 'WORKTREE_VIEW_FAILED',\n message: typeof candidate.message === 'string' ? candidate.message : '',\n retryable: candidate.retryable !== false,\n ...(details === undefined ? {} : { details }),\n };\n }\n return {\n code: 'WORKTREE_VIEW_FAILED',\n message: '',\n retryable: true,\n };\n}\n/** Keep ordering mutation/refresh failures reachable from the surface Retry control. */\nexport function toRetryableWorktreeOrderError(error) {\n return {\n ...toWorktreeViewError(error),\n retryable: true,\n };\n}\n//# sourceMappingURL=worktree-view-errors.js.map","import { WorktreeSessionBindingError } from './worktree-view-errors.js';\nfunction browserRandomUuid() {\n const randomUUID = globalThis.crypto?.randomUUID;\n if (typeof randomUUID === 'function')\n return randomUUID.call(globalThis.crypto);\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n/** Generate a short, editable default branch name without colliding with known local names. */\nexport function createDefaultWorktreeName(existingNames, randomUuid = browserRandomUuid) {\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n for (let attempt = 0; attempt < 100; attempt += 1) {\n const suffix = randomUuid().replace(/[^a-z0-9]/gi, '').slice(0, 8).toLowerCase();\n if (suffix.length < 8)\n continue;\n const candidate = `dsh/${suffix}`;\n if (!usedNames.has(candidate))\n return candidate;\n }\n throw new Error('Unable to generate an available default Worktree name.');\n}\n/** Generate the next available numeric sibling name for a selected Worktree. */\nexport function createNumberedWorktreeName(baseName, existingNames) {\n const normalizedBaseName = baseName.trim();\n const usedNames = new Set([...existingNames].map((name) => name.trim()));\n const numberedBase = normalizedBaseName.match(/^(.*)-(\\d+)$/);\n const prefix = numberedBase?.[1] || normalizedBaseName || 'worktree';\n const parsedNumber = numberedBase === null ? 1 : Number(numberedBase[2]);\n let number = Number.isSafeInteger(parsedNumber) ? parsedNumber + 1 : 2;\n for (let attempt = 0; attempt < 10000; attempt += 1) {\n const candidate = `${prefix}-${number}`;\n if (!usedNames.has(candidate))\n return candidate;\n number += 1;\n }\n throw new Error('Unable to generate an available numbered Worktree name.');\n}\n/** Resolve a row-half drop target to native-style optional before-anchor semantics. */\nexport function resolveWorktreeMove(worktreeIds, sourceWorktreeId, targetWorktreeId, half) {\n const sourceIndex = worktreeIds.indexOf(sourceWorktreeId);\n const targetIndex = worktreeIds.indexOf(targetWorktreeId);\n if (sourceIndex === -1 || targetIndex === -1)\n return undefined;\n const beforeWorktreeId = half === 'before'\n ? targetWorktreeId\n : worktreeIds[targetIndex + 1];\n if (beforeWorktreeId === sourceWorktreeId)\n return undefined;\n const anchorIndex = beforeWorktreeId === undefined\n ? worktreeIds.length\n : worktreeIds.indexOf(beforeWorktreeId);\n if (anchorIndex === sourceIndex || anchorIndex === sourceIndex + 1)\n return undefined;\n return beforeWorktreeId === undefined ? {} : { beforeWorktreeId };\n}\n/** Keep mutation routing in the browser Consumer while leaving wire details to the adapter. */\nexport async function executeWorktreeAction(manager, action) {\n if (action.type === 'createWorktree') {\n return manager.createWorktree(action.input);\n }\n if (action.type === 'importWorktree') {\n return manager.importWorktree(action.input);\n }\n if (action.type === 'removeWorktree') {\n await manager.removeWorktree(action.input);\n return;\n }\n if (action.type === 'unarchiveWorktree') {\n await manager.unarchiveWorktree(action.input);\n return;\n }\n if (action.type === 'cleanWorktree') {\n await manager.cleanWorktree(action.input);\n return;\n }\n if (action.type === 'forgetWorktree') {\n await manager.forgetWorktree(action.input);\n return;\n }\n}\n/**\n * Create a normal DSH Session at a Worktree cwd, then add the external binding.\n * A binding failure deliberately leaves the DSH-created Session intact.\n */\nexport async function createSessionForWorktree(input) {\n const sessionId = await input.createSession({ cwd: input.cwd });\n try {\n await input.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(sessionId, error);\n }\n await input.beforeOpen?.(sessionId);\n input.openSession(sessionId);\n return sessionId;\n}\n//# sourceMappingURL=worktree-view-actions.js.map","import { toWorktreeViewError } from './worktree-view-errors.js';\n/** Merge one freshly read Workspace projection without clearing other ready views. */\nexport function mergeWorktreeView(views, nextView) {\n const index = views.findIndex((view) => view.workspaceId === nextView.workspaceId);\n if (index === -1)\n return [...views, nextView];\n const merged = [...views];\n merged[index] = nextView;\n return merged;\n}\n/** Merge explicit Workspace updates while preserving current order and ready references. */\nexport function mergeWorktreeViews(existing, workspaceIds, updates) {\n const byWorkspaceId = new Map(existing.map((view) => [view.workspaceId, view]));\n for (const update of updates)\n byWorkspaceId.set(update.workspaceId, update);\n return [...new Set(workspaceIds)].flatMap((workspaceId) => {\n const view = byWorkspaceId.get(workspaceId);\n return view === undefined ? [] : [view];\n });\n}\n/** Reuse the previous ID snapshot when DSH republishes equivalent Workspace items. */\nexport function stableWorkspaceIds(previous, next) {\n if (previous.length !== next.length)\n return next;\n for (let index = 0; index < previous.length; index += 1) {\n if (previous[index] !== next[index])\n return next;\n }\n return previous;\n}\n/** Keep only the most recently started Worktree surface refresh authoritative. */\nexport function createWorktreeRefreshGuard() {\n let latestGeneration = 0;\n const begin = () => {\n latestGeneration += 1;\n return latestGeneration;\n };\n const isCurrent = (generation) => generation === latestGeneration;\n const invalidate = () => {\n latestGeneration += 1;\n };\n return {\n begin,\n isCurrent,\n invalidate,\n async run(load, onSuccess, onError) {\n const generation = begin();\n let value;\n try {\n value = await load();\n }\n catch (error) {\n if (!isCurrent(generation))\n return;\n onError(error);\n return;\n }\n if (!isCurrent(generation))\n return;\n onSuccess(value);\n },\n };\n}\n/** Prefer the branch checked out by the DSH Workspace, then fall back to any local branch. */\nexport function selectDefaultBaseBranch(branches) {\n return branches.find((branch) => branch.isCurrent)?.name ?? branches[0]?.name ?? '';\n}\n/** Keep a valid user choice across branch-list refreshes, otherwise choose the current branch. */\nexport function reconcileBaseBranchSelection(selectedBranch, branches) {\n if (branches.some((branch) => branch.name === selectedBranch))\n return selectedBranch;\n return selectDefaultBaseBranch(branches);\n}\n/** Return copyable, read-only setup commands for a Git readiness state. */\nexport function worktreeSetupCommands(status) {\n switch (status) {\n case 'workspaceMissing':\n return [];\n case 'gitNotInstalled':\n return [];\n case 'noRepository':\n return [\n 'git init',\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noInitialCommit':\n return [\n 'printf \"# README\\\\n\" > README.md',\n 'git add README.md',\n 'git commit -m \"Initial commit\"',\n ];\n case 'noLocalBranch':\n return ['git switch -c main'];\n case 'ready':\n return [];\n }\n}\nfunction readinessFromBranchError(error) {\n const viewError = toWorktreeViewError(error);\n // 只有确认根目录缺失才降级为 workspaceMissing;未知 Workspace、无效或无法解析的\n // root 继续以自身错误语义上抛,不被误报成目录缺失。\n // Only a confirmed-missing root degrades to workspaceMissing; an unknown Workspace and an\n // invalid or unresolvable root keep their own error semantics instead of being misreported.\n if (viewError.code === 'WORKSPACE_ROOT_MISSING') {\n return { status: 'workspaceMissing', error: viewError };\n }\n if (viewError.code === 'GIT_NOT_INSTALLED') {\n return { status: 'gitNotInstalled', error: viewError };\n }\n if (viewError.code === 'WORKSPACE_NOT_GIT_REPOSITORY') {\n return { status: 'noRepository', error: viewError };\n }\n if (viewError.code === 'WORKTREE_REQUIRES_INITIAL_COMMIT') {\n return { status: 'noInitialCommit', error: viewError };\n }\n return undefined;\n}\n/** Share complete Workspace reads without allowing stale generations to repopulate the cache. */\nexport function createWorktreeViewReader(manager) {\n const entries = new Map();\n let disposed = false;\n const entryFor = (workspaceId) => {\n const current = entries.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = { generation: 0, stale: false };\n entries.set(workspaceId, created);\n return created;\n };\n const read = (workspaceId) => {\n if (disposed)\n return Promise.reject(new Error('Worktree view reader disposed'));\n const entry = entryFor(workspaceId);\n if (!entry.stale && entry.view !== undefined)\n return Promise.resolve(entry.view);\n if (entry.inFlight?.generation === entry.generation)\n return entry.inFlight.promise;\n const generation = entry.generation;\n const promise = loadWorktreeView(manager, workspaceId)\n .then((data) => {\n const view = { workspaceId, ...data };\n if (!disposed && entries.get(workspaceId) === entry && entry.generation === generation) {\n entry.view = view;\n entry.stale = false;\n }\n return view;\n })\n .finally(() => {\n if (entry.inFlight?.promise === promise)\n entry.inFlight = undefined;\n });\n entry.inFlight = { generation, promise };\n return promise;\n };\n return {\n invalidate(workspaceId, options) {\n if (disposed)\n return;\n const entry = entryFor(workspaceId);\n // Read-only menu opens may share a current read. Mutations must retire it.\n if (options?.reuseInFlight && entry.inFlight?.generation === entry.generation)\n return;\n entry.generation += 1;\n entry.stale = true;\n entry.view = undefined;\n },\n read,\n readMany(workspaceIds) {\n const uniqueIds = [...new Set(workspaceIds)];\n return Promise.all(uniqueIds.map((workspaceId) => read(workspaceId)));\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n entries.clear();\n },\n };\n}\n/** Read the Worktree, branch, binding, and Workspace-root Main projections in one refresh. */\nexport async function loadWorktreeView(manager, workspaceId) {\n const [worktreesResult, branchesResult, bindingsResult, mainInstructionsResult] = await Promise.allSettled([\n manager.listWorktrees({ workspaceId }),\n manager.listBranches({ workspaceId }),\n manager.listBindings({ workspaceId }),\n typeof manager.getWorktreeInstructions === 'function'\n ? manager.getWorktreeInstructions({ workspaceId, worktreeId: `main:${workspaceId}` })\n : Promise.resolve(''),\n ]);\n if (worktreesResult.status === 'rejected')\n throw worktreesResult.reason;\n if (bindingsResult.status === 'rejected')\n throw bindingsResult.reason;\n if (mainInstructionsResult.status === 'rejected')\n throw mainInstructionsResult.reason;\n if (branchesResult.status === 'rejected') {\n const readiness = readinessFromBranchError(branchesResult.reason);\n if (readiness !== undefined) {\n return {\n worktrees: worktreesResult.value,\n branches: [],\n bindings: bindingsResult.value,\n mainInstructions: mainInstructionsResult.value,\n readiness,\n };\n }\n throw branchesResult.reason;\n }\n return {\n worktrees: worktreesResult.value,\n branches: branchesResult.value,\n bindings: bindingsResult.value,\n mainInstructions: mainInstructionsResult.value,\n readiness: branchesResult.value.length > 0\n ? { status: 'ready' }\n : { status: 'noLocalBranch' },\n };\n}\n/** Isolate modal-target callbacks while sharing the Client Workspace reader. */\nexport function createWorktreeModalViewLoader(reader) {\n const guard = createWorktreeRefreshGuard();\n return {\n invalidate: guard.invalidate,\n load(workspaceId, onSuccess, onError) {\n return guard.run(() => reader.read(workspaceId), onSuccess, (error) => onError(toWorktreeViewError(error)));\n },\n };\n}\n/** Load one independent projection per DSH Workspace for the flat sidebar hierarchy. */\nexport async function loadWorktreeViews(manager, workspaceIds) {\n return Promise.all(workspaceIds.map(async (workspaceId) => ({\n workspaceId,\n ...(await loadWorktreeView(manager, workspaceId)),\n })));\n}\n/** Hide DSH-archived Sessions from the browser-local Worktree projection. */\nexport function filterArchivedSessionIds(sessionIds, archivedSessionIds) {\n return sessionIds.filter((sessionId) => !archivedSessionIds.includes(sessionId));\n}\n//# sourceMappingURL=worktree-view-read.js.map","/** Prefer the legacy selected-id field; DSH 1.7 represents selection by mainView retention. */\nexport function currentSessionIdFromList(sessions) {\n if (sessions.current !== undefined)\n return sessions.current;\n const sessionIds = Object.keys(sessions.byId);\n return sessionIds.find((sessionId) => (sessions.byId[sessionId]?.retainedBy?.mainView ?? 0) > 0);\n}\n//# sourceMappingURL=session-selection.js.map","import { currentSessionIdFromList } from './session-selection.js';\nfunction isPendingInteractionStatus(value) {\n return value === 'approval' || value === 'plan-review' || value === 'question';\n}\nfunction validUpdatedAt(value) {\n return value !== undefined && Number.isFinite(value);\n}\n/**\n * Native-compatible subagent lineage index. The upstream runtime's public client\n * entry is a browser module-loader bundle, so keeping this pure mirror local lets\n * the browser Consumer and its Node tests share the same status semantics.\n */\nfunction indexSubagentDescendants(summaries) {\n const indexed = new Map();\n for (const descendant of Object.values(summaries)) {\n if (descendant.origin !== 'subagent')\n continue;\n const seen = new Set();\n let current = descendant;\n while (current?.origin === 'subagent' &&\n current.parentId !== undefined &&\n !seen.has(current.id)) {\n seen.add(current.id);\n const aggregate = indexed.get(current.parentId);\n if (aggregate === undefined) {\n indexed.set(current.parentId, {\n count: 1,\n runningCount: descendant.running ? 1 : 0,\n });\n }\n else {\n aggregate.count += 1;\n if (descendant.running)\n aggregate.runningCount += 1;\n }\n current = summaries[current.parentId];\n }\n }\n return indexed;\n}\n/** Native Workspace relative-time buckets, kept pure for deterministic rendering/tests. */\nexport function relativeTime(updatedAt, now) {\n if (!validUpdatedAt(updatedAt) || !Number.isFinite(now))\n return undefined;\n const MIN = 60_000;\n const HOUR = 3_600_000;\n const DAY = 86_400_000;\n const diff = Math.max(0, now - updatedAt);\n if (diff < MIN)\n return { unit: 'now', n: 0 };\n if (diff < HOUR)\n return { unit: 'minutes', n: Math.floor(diff / MIN) };\n if (diff < DAY)\n return { unit: 'hours', n: Math.floor(diff / HOUR) };\n if (diff < 30 * DAY)\n return { unit: 'days', n: Math.floor(diff / DAY) };\n if (diff < 365 * DAY)\n return { unit: 'months', n: Math.floor(diff / (30 * DAY)) };\n return { unit: 'years', n: Math.floor(diff / (365 * DAY)) };\n}\n/** Match native Workspace status priority while retaining the aggregate subagent count. */\nexport function sessionStatus(session, runningSubagentCount) {\n const count = Number.isFinite(runningSubagentCount) && runningSubagentCount > 0\n ? Math.floor(runningSubagentCount)\n : 0;\n if (isPendingInteractionStatus(session.pendingInteraction)) {\n const labelKey = session.pendingInteraction === 'approval'\n ? 'waitingApproval'\n : session.pendingInteraction === 'plan-review'\n ? 'planReview'\n : 'waitingAnswer';\n return { state: 'warning', labelKey, runningSubagentCount: count };\n }\n if (session.running === true) {\n return { state: 'ongoing', labelKey: 'running', runningSubagentCount: count };\n }\n if (count > 0) {\n return { state: 'ongoing', labelKey: 'subagentsRunning', runningSubagentCount: count };\n }\n if (session.completed === true) {\n return { state: 'done', labelKey: 'completed', runningSubagentCount: 0 };\n }\n return { state: 'done', labelKey: 'idle', runningSubagentCount: 0 };\n}\nfunction toLineageSummary(sessionId, summary) {\n return {\n id: sessionId,\n running: summary.running === true,\n ...(summary.parentId === undefined ? {} : { parentId: summary.parentId }),\n ...(summary.origin === 'subagent' ? { origin: 'subagent' } : {}),\n };\n}\n/**\n * Derive one ephemeral row/group projection. An available native status source\n * owns pending/completion facts, even for absent entries; legacy summary fields\n * are used only when that source is unavailable. Never infer completion from idle.\n */\nexport function deriveSessionPresentationIndex(sessions, sessionStatuses) {\n const statusFacts = (sessionId, summary) => {\n if (sessionStatuses === undefined)\n return summary;\n const native = sessionStatuses.get(sessionId);\n const kind = native?.pendingInteraction?.kind;\n return {\n running: native?.running ?? summary.running,\n pendingInteraction: isPendingInteractionStatus(kind) ? kind : undefined,\n completed: native?.completionUnread === true,\n };\n };\n const lineageSummaries = Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => [\n sessionId,\n toLineageSummary(sessionId, { ...summary, running: statusFacts(sessionId, summary).running }),\n ]));\n const descendants = indexSubagentDescendants(lineageSummaries);\n return Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => {\n const runningSubagentCount = descendants.get(sessionId)?.runningCount ?? 0;\n const facts = statusFacts(sessionId, summary);\n const status = sessionStatus(facts, runningSubagentCount);\n return [\n sessionId,\n {\n status,\n running: facts.running === true,\n ongoing: facts.running === true || runningSubagentCount > 0,\n runningSubagentCount,\n completed: facts.completed === true,\n ...(validUpdatedAt(summary.updatedAt) ? { updatedAt: summary.updatedAt } : {}),\n },\n ];\n }));\n}\n/** Aggregate only live ongoing activity; callers decide which IDs are in the group. */\nexport function hasOngoingSession(sessionIds, presentations) {\n return sessionIds.some((sessionId) => presentations[sessionId]?.ongoing === true);\n}\nfunction pendingStatusRank(status) {\n switch (status.labelKey) {\n case 'waitingApproval':\n return 3;\n case 'planReview':\n return 2;\n case 'waitingAnswer':\n return 1;\n default:\n return 0;\n }\n}\nfunction ongoingStatusRank(status) {\n return status.labelKey === 'running' ? 2 : status.labelKey === 'subagentsRunning' ? 1 : 0;\n}\n/**\n * Select the single Session status that a collapsed group should expose.\n *\n * The result is a representative status rather than a list: callers render at most one\n * StateDot. Pending interaction warnings outrank live activity, which outranks a completed\n * reminder. Idle Sessions do not contribute a group status.\n */\nexport function aggregateSessionStatus(sessionIds, presentations) {\n let pending;\n let pendingRank = 0;\n let ongoing;\n let ongoingRank = 0;\n let completed = false;\n for (const sessionId of sessionIds) {\n const presentation = presentations[sessionId];\n if (presentation === undefined)\n continue;\n if (presentation.status.state === 'warning') {\n const rank = pendingStatusRank(presentation.status);\n if (pending === undefined || rank > pendingRank) {\n pending = presentation.status;\n pendingRank = rank;\n }\n }\n else if (presentation.ongoing === true) {\n const rank = ongoingStatusRank(presentation.status);\n if (ongoing === undefined || rank > ongoingRank) {\n ongoing = presentation.status;\n ongoingRank = rank;\n }\n }\n if (presentation.completed === true)\n completed = true;\n }\n if (pending !== undefined)\n return pending;\n if (ongoing !== undefined)\n return ongoing;\n return completed ? { state: 'done', labelKey: 'completed', runningSubagentCount: 0 } : undefined;\n}\n/** Read the native blank flag without inferring blankness from title or id. */\nexport function isBlankSession(sessionId, sessions) {\n return sessions.byId[sessionId]?.blank === true;\n}\n/** Native tree visibility: ordinary rows plus the currently selected blank row. */\nfunction isVisibleSession(sessionId, sessions) {\n return !isBlankSession(sessionId, sessions) || currentSessionIdFromList(sessions) === sessionId;\n}\n/** Filter a group without mutating its source order. */\nexport function filterVisibleSessionIds(sessionIds, sessions) {\n return sessionIds.filter((sessionId) => isVisibleSession(sessionId, sessions));\n}\n/** Resolve a row title while keeping the blank label outside the DSH summary. */\nexport function sessionDisplayLabel(sessionId, sessions, blankLabel) {\n const summary = sessions.byId[sessionId];\n return summary?.blank === true ? blankLabel : (summary?.displayTitle ?? sessionId);\n}\n/** Match only durable Session titles or the final diagnostic id fallback. */\nexport function sessionMatchesQuery(sessionId, sessions, normalizedQuery) {\n const summary = sessions.byId[sessionId];\n if (summary?.blank === true)\n return false;\n const label = summary?.displayTitle ?? sessionId;\n return label.toLocaleLowerCase().includes(normalizedQuery);\n}\n//# sourceMappingURL=session-view.js.map","import { sessionDisplayLabel, sessionMatchesQuery, } from '../session/session-view.js';\n/** Native activity changes invalidate only the archived Worktrees' owning reads. */\nexport function worktreeActivityRefreshWorkspaceIds(views, previous, next) {\n return views\n .filter((view) => view.bindings.some((binding) => previous[binding.sessionId]?.ongoing !== next[binding.sessionId]?.ongoing &&\n view.worktrees.some((record) => record.worktreeId === binding.worktreeId && record.status === 'removed')))\n .map((view) => view.workspaceId);\n}\nexport function sessionLabel(sessionId, sessions, t) {\n return sessionDisplayLabel(sessionId, sessions, t('session.new'));\n}\nexport function bindingIdsFor(bindings, worktreeId) {\n return bindings\n .filter((binding) => binding.worktreeId === worktreeId)\n .map((binding) => binding.sessionId);\n}\nexport function clearSessionGroupExpansion(current, groupKeys) {\n const next = { ...current };\n for (const key of groupKeys)\n delete next[key];\n return next;\n}\n/** DSH list snapshots report a monotone `pending` → `ready` arrival phase. */\nexport function isPendingListPhase(phase) {\n return phase !== undefined && phase !== 'ready';\n}\n/**\n * True only for an authoritative Worktree projection: the confirmed Workspace list is\n * non-empty and every Workspace in it has a ready view.\n *\n * An empty `workspaceIds` means the Workspace list has not arrived yet — never that every\n * Workspace disappeared. Callers prune browser-local preferences on `true`, so an empty or\n * partial read must stay incomplete and keep those preferences untouched.\n */\nexport function isCompleteWorktreeWorkspaceSnapshot(workspaceIds, views) {\n if (workspaceIds.length === 0)\n return false;\n if (views.length !== workspaceIds.length)\n return false;\n const expected = new Set(workspaceIds);\n const actual = new Set(views.map((view) => view.workspaceId));\n return actual.size === expected.size && [...expected].every((id) => actual.has(id));\n}\nexport function includesText(value, query) {\n return value.toLocaleLowerCase().includes(query);\n}\nexport function workspaceMatches(workspace, view, sessions, query) {\n if (query.length === 0)\n return true;\n if (includesText(workspace.title, query))\n return true;\n if (workspace.sessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return true;\n }\n if (view === undefined)\n return false;\n if (view.worktrees.some((record) => includesText(record.branch, query) || includesText(record.absolutePath, query))) {\n return true;\n }\n return view.bindings.some((binding) => sessionMatchesQuery(binding.sessionId, sessions, query));\n}\nexport function resolveCurrentSessionLocation(currentSessionId, workspaces, views) {\n if (currentSessionId === undefined)\n return undefined;\n const workspace = workspaces.find((candidate) => candidate.sessionIds.includes(currentSessionId));\n if (workspace === undefined)\n return undefined;\n const view = views.find((candidate) => candidate.workspaceId === workspace.workspaceId);\n if (view === undefined)\n return undefined;\n const binding = view.bindings.find((candidate) => candidate.sessionId === currentSessionId);\n if (binding === undefined) {\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'main:' + workspace.workspaceId,\n kind: 'main',\n };\n }\n const worktree = view.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId &&\n candidate.workspaceId === workspace.workspaceId);\n if (worktree === undefined)\n return undefined;\n return {\n sessionId: currentSessionId,\n workspaceId: workspace.workspaceId,\n groupKey: 'worktree:' + worktree.worktreeId,\n kind: 'worktree',\n worktreeId: worktree.worktreeId,\n ...(worktree.status === 'removed' ? { archived: true } : {}),\n };\n}\nexport function currentSessionRevealKeys(location) {\n if (location === undefined)\n return [];\n return [\n 'workspace:' + location.workspaceId,\n ...(location.kind === 'worktree' && location.archived\n ? ['archived:' + location.workspaceId]\n : []),\n location.kind === 'main' ? 'main:' + location.workspaceId : 'worktree:' + location.worktreeId,\n 'session-group:' + location.groupKey,\n ];\n}\nexport function shouldRevealCurrentSessionGroup(sessionIds, currentSessionId) {\n if (currentSessionId === undefined || sessionIds.length <= 5)\n return false;\n return sessionIds.indexOf(currentSessionId) >= 5;\n}\nexport function isSessionGroupAutoExpanded(sessionIds, currentSessionId, currentSessionRevealActive) {\n return (currentSessionRevealActive && shouldRevealCurrentSessionGroup(sessionIds, currentSessionId));\n}\n/** Lifecycle mutations rely on user confirmation, not Session activity coverage. */\nexport function worktreeLifecycleBlockReason(actionPending, health) {\n if (actionPending)\n return 'pending';\n if (health === 'recovery-needed')\n return 'recovery';\n return undefined;\n}\n//# sourceMappingURL=selectors.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Input, Modal } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { gitWorktreeRoot } from '../../../contract/index.js';\nimport { ErrorToast, NotificationToasts } from './NotificationToasts.js';\nimport { worktreeSetupCommands } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { worktreeLifecycleBlockReason } from '../selectors.js';\nexport function WorktreeAdoptBranchDialog({ t, worktree, actionPending, error, onClose, onSubmit, onRetry, }) {\n if (worktree === undefined || typeof worktree.currentBranch !== 'string')\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (!actionPending)\n onClose();\n }, closeLabel: t('dialog.cancel'), title: t('worktree.adoptBranch'), description: t('worktree.adoptDescription', {\n previous: worktree.branch,\n current: worktree.currentBranch,\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || error !== undefined, onClick: () => {\n void onSubmit();\n }, children: t('worktree.adoptBranch') })] }), children: _jsx(ErrorToast, { error: error, t: t, scope: 'adopt:' + worktree.worktreeId, context: t('settings.adopt') + ' · ' + worktree.branch + ' · ' + worktree.absolutePath, actions: [{ label: t('action.retry'), disabled: actionPending, onClick: onRetry }] }) }));\n}\nfunction worktreeSetupMessage(status, t) {\n switch (status) {\n case 'workspaceMissing':\n return t('worktree.setup.workspaceMissing');\n case 'gitNotInstalled':\n return t('worktree.setup.gitNotInstalled');\n case 'noRepository':\n return t('worktree.setup.noRepository');\n case 'noInitialCommit':\n return t('worktree.setup.noInitialCommit');\n case 'noLocalBranch':\n return t('worktree.setup.noLocalBranch');\n }\n}\nexport function WorktreeSessionRenameDialog({ t, target, draft, pending, error, onClose, onDraftChange, onSubmit, }) {\n return (_jsxs(Modal, { open: target !== undefined, onClose: onClose, closeLabel: t('dialog.close'), title: t('session.rename'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending || draft.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('session.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), _jsx(ErrorToast, { error: error, t: t, scope: 'rename-session:' + target?.sessionId, describe: (translate) => translate('session.rename') + ' · ' + (target?.currentTitle ?? '') })] }));\n}\nexport function WorktreeWorkspaceRenameDialog({ t, target, draft, pending, duplicate, error, onClose, onDraftChange, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsxs(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceRename'), title: t('workspace.renameTitle'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: pending ||\n draft.trim().length === 0 ||\n draft.trim() === target.currentTitle ||\n duplicate, onClick: () => {\n void onSubmit();\n }, children: t('dialog.rename') })] }), children: [_jsx(Input, { className: styles.renameInput, value: draft, \"aria-label\": t('workspace.name'), autoFocus: true, disabled: pending, onFocus: (event) => {\n event.currentTarget.select();\n }, onChange: (event) => {\n onDraftChange(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n void onSubmit();\n }\n } }), duplicate && (_jsx(NotificationToasts, { notices: [{ key: 'workspace-duplicate', text: t('workspace.duplicate'),\n context: target.currentTitle,\n message: (translate) => translate('workspace.duplicate') }] })), _jsx(ErrorToast, { error: error, t: t, scope: 'rename-workspace:' + target.workspaceId, describe: (translate) => translate('workspace.rename') + ' · ' + target.currentTitle })] }));\n}\nexport function WorktreeWorkspaceDeleteDialog({ t, target, pending, error, onClose, onSubmit, }) {\n if (target === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: onClose, closeLabel: t('dialog.closeWorkspaceDelete'), title: t('workspace.deleteTitle'), description: t('workspace.deleteDescription', { name: target.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"outline\", disabled: pending, onClick: () => {\n void onSubmit();\n }, children: t('dialog.delete') })] }), children: _jsx(ErrorToast, { error: error, t: t, scope: 'delete-workspace:' + target.workspaceId, describe: (translate) => translate('workspace.deleteTitle') + ' · ' + target.title }) }));\n}\nexport function WorktreeCreateDialog({ t, workspace, view, readError, setupStatus, canCreate, mode, importCandidates, selectedImportPath, selectedBranch, newBranch, actionPending, onClose, onRetry, onModeChange, onRetryImportCandidates, onSelectedImportPathChange, onSelectedBranchChange, onNewBranchChange, onSubmit, }) {\n if (workspace === undefined)\n return null;\n const setupCommands = setupStatus === undefined ? [] : worktreeSetupCommands(setupStatus);\n const importing = mode === 'import';\n const importBlocked = actionPending || importCandidates.status === 'loading' || selectedImportPath === undefined;\n return (_jsxs(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCreate'), title: t('worktree.createTitle'), description: importing\n ? t('worktree.importDescription', { name: workspace.title })\n : t('worktree.createDescription', { name: workspace.title }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: importing\n ? importBlocked\n : actionPending ||\n !canCreate ||\n selectedBranch.length === 0 ||\n newBranch.trim().length === 0, onClick: () => {\n void onSubmit();\n }, children: importing ? t('worktree.import') : t('worktree.create') })] }), children: [_jsxs(\"div\", { className: styles.worktreeModalTabs, role: \"tablist\", \"aria-label\": t('worktree.title'), children: [_jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'create', disabled: actionPending, onClick: () => {\n onModeChange('create');\n }, children: t('worktree.tabCreate') }), _jsx(\"button\", { className: styles.worktreeModalTab, type: \"button\", role: \"tab\", \"aria-selected\": mode === 'import', disabled: actionPending, onClick: () => {\n onModeChange('import');\n }, children: t('worktree.tabImport') })] }), importing ? (_jsxs(\"div\", { className: styles.worktreeImportCandidates, role: \"tabpanel\", children: [importCandidates.status === 'loading' && importCandidates.candidates.length === 0 && (_jsx(\"p\", { className: styles.message, children: t('worktree.importLoading') })), importCandidates.status === 'error' && (_jsx(\"div\", { className: styles.recoveryActions, children: _jsx(ErrorToast, { error: importCandidates.error, t: t, scope: 'import:' + workspace.workspaceId, context: t('settings.import') + ' · ' + workspace.title + ' · ' + workspace.path, actions: [{ label: t('action.retry'), disabled: actionPending, onClick: onRetryImportCandidates }] }) })), importCandidates.candidates.length === 0 && importCandidates.status === 'ready' && (_jsx(\"p\", { className: styles.message, children: t('worktree.importEmpty') })), importCandidates.candidates.length > 0 && (_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.tabImport'), _jsxs(\"select\", { className: styles.worktreeImportSelect, \"data-worktree-import-select\": true, \"aria-label\": t('worktree.tabImport'), value: selectedImportPath ?? '', disabled: actionPending, onChange: (event) => {\n onSelectedImportPathChange(event.currentTarget.value);\n }, children: [_jsx(\"option\", { value: \"\", disabled: true, children: t('worktree.importPlaceholder') }), importCandidates.candidates.map((candidate) => (_jsxs(\"option\", { value: candidate.absolutePath, children: [candidate.branch, \" \\u2014 \", candidate.absolutePath] }, candidate.absolutePath)))] })] }))] })) : readError !== undefined ? (_jsx(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": \"error\", children: _jsx(ErrorToast, { error: readError, t: t, scope: 'modal-read:' + workspace.workspaceId, context: t('settings.create') + ' · ' + workspace.title + ' · ' + workspace.path, actions: readError.retryable && onRetry !== undefined\n ? [{ label: t('action.retry'), disabled: actionPending, onClick: onRetry }] : [] }) })) : canCreate ? (_jsxs(_Fragment, { children: [_jsxs(\"label\", { className: styles.modalField, children: [t('worktree.baseBranch'), _jsx(\"select\", { className: styles.actionSelect, \"aria-label\": t('worktree.baseBranch'), value: selectedBranch, disabled: actionPending, onChange: (event) => {\n onSelectedBranchChange(event.currentTarget.value);\n }, children: view?.branches.map((branch) => (_jsxs(\"option\", { value: branch.name, children: [branch.name, branch.isCurrent ? t('branch.current') : '', branch.checkedOut ? t('branch.checkedOut') : ''] }, branch.name))) })] }), _jsxs(\"label\", { className: styles.modalField, children: [t('worktree.name'), _jsx(Input, { className: styles.renameInput, \"aria-label\": t('worktree.name'), value: newBranch, placeholder: \"dsh/12345678\", disabled: actionPending, onChange: (event) => {\n onNewBranchChange(event.currentTarget.value);\n } })] })] })) : (_jsxs(\"div\", { className: styles.gitReadiness, \"data-worktree-readiness\": setupStatus ?? 'loading', role: \"status\", children: [_jsx(\"p\", { className: styles.message, children: setupStatus === undefined ? t('status.loading') : worktreeSetupMessage(setupStatus, t) }), setupCommands.length > 0 && (_jsx(\"pre\", { className: styles.commandBlock, \"aria-label\": t('worktree.setup.commands'), children: setupCommands.join('\\n') }))] }))] }));\n}\nexport function WorktreeRemovalDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeArchive'), title: t('worktree.archive'), description: worktree.source === 'external'\n ? t('worktree.archiveExternalDescription', { name: worktree.branch })\n : t('worktree.archiveDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending, onClick: () => {\n void onSubmit();\n }, children: t('worktree.archive') })] }) }));\n}\nexport function WorktreeCleanDiskDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeCleanDisk'), title: t('worktree.cleanDiskTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.cleanDiskDescription', {\n name: worktree.branch,\n path: gitWorktreeRoot(worktree),\n }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.cleanDisk') })] }) }));\n}\nexport function WorktreeForgetDialog({ t, worktree, actionPending, onClose, onSubmit, }) {\n if (worktree === undefined)\n return null;\n const activityBlock = worktreeLifecycleBlockReason(actionPending, worktree.health);\n const isBlocked = activityBlock !== undefined;\n return (_jsx(Modal, { open: true, onClose: () => {\n if (actionPending)\n return;\n onClose();\n }, closeLabel: t('dialog.closeWorktreeForget'), title: t('worktree.forgetTitle'), description: activityBlock === 'recovery'\n ? t('worktree.recovery')\n : t('worktree.forgetDescription', { name: worktree.branch }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: actionPending, onClick: onClose, children: t('dialog.cancel') }), _jsx(Button, { variant: \"primary\", disabled: actionPending || isBlocked, onClick: () => {\n void onSubmit();\n }, children: t('dialog.forget') })] }) }));\n}\n//# sourceMappingURL=dialogs.js.map","export async function runWorktreeCleanupFlow(input) {\n await input.clean();\n if (!input.isCurrent())\n return;\n input.onCommitted();\n const follow = async (stage, operation) => {\n if (!input.isCurrent())\n return;\n try {\n await operation();\n }\n catch (error) {\n if (input.isCurrent())\n input.onFollowUpError(stage, error);\n }\n };\n await Promise.all([follow('refresh', input.refresh), follow('permission', input.normalize)]);\n}\n//# sourceMappingURL=worktree-cleanup-flow.js.map","import { runWorktreeCleanupFlow } from './worktree-cleanup-flow.js';\nimport { executeWorktreeAction, toWorktreeViewError } from '../../view/worktree-view.js';\nimport { bindingIdsFor } from '../selectors.js';\n/** Archive, disk cleanup and forget retain their separate commit/recovery semantics. */\nexport function createLifecycleCommands({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { manager, permission, onPermissionNotice, onWorktreeForgotten } = props;\n const { worktreeBranchAdoption, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, cleanupGuard, setWorktreeForget, } = lifecycleState;\n const { runMutation, setActionError, setActionPending } = mutation;\n const { cleanDiskTarget, forgetTarget } = lifecycle;\n const { suppressCurrentSessionReveal, clearSessionGroups } = expansion;\n const { readStateRef, setReadState, refresh, readState } = read;\n const { pendingSessionBinding, setPendingSessionBinding } = session;\n const confirmBranchAdoption = () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target?.mutationToken || typeof target.currentBranch !== 'string')\n return;\n const expectedBranch = target.currentBranch;\n const mutationToken = target.mutationToken;\n void runMutation(async () => {\n await manager.adoptWorktreeBranch({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n expectedBranch,\n });\n setWorktreeBranchAdoption(undefined);\n }, { scope: { kind: 'workspace', workspaceId: target.workspaceId }, preserveCurrent: true });\n };\n const confirmArchive = () => {\n if (manager === undefined || worktreeRemoval === undefined)\n return;\n const target = worktreeRemoval;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'removeWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n suppressCurrentSessionReveal('archived:' + target.workspaceId);\n setWorktreeRemoval(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n const confirmDiskCleanup = () => {\n if (manager === undefined || cleanDiskTarget === undefined)\n return;\n const target = cleanDiskTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId));\n setActionPending(true);\n setActionError(undefined);\n void runWorktreeCleanupFlow({\n clean: async () => {\n await executeWorktreeAction(manager, {\n type: 'cleanWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n },\n onCommitted: () => {\n setWorktreeCleanDisk(undefined);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.map((w) => {\n if (w.worktreeId !== target.worktreeId)\n return w;\n return {\n ...w,\n status: 'removed',\n diskCleanup: 'completed',\n health: 'cleaned',\n mutationToken: undefined,\n };\n }),\n bindings: v.bindings.map((b) => {\n if (b.worktreeId !== target.worktreeId)\n return b;\n return {\n ...b,\n status: 'detached',\n };\n }),\n };\n }),\n };\n });\n },\n refresh: async () => {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n },\n normalize: async () => {\n if (permission?.normalizeDetachedWorktreePermissions === undefined)\n return;\n try {\n const result = await permission.normalizeDetachedWorktreePermissions({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n });\n if (result !== undefined && isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, result);\n }\n }\n catch {\n if (isCurrent()) {\n onPermissionNotice?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n }, {\n status: 'unverified',\n retryable: true,\n });\n }\n }\n },\n isCurrent,\n onFollowUpError: () => {\n // Follow-up errors do not fail the clean mutation\n },\n })\n .catch((error) => {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n })\n .finally(() => {\n if (isCurrent())\n setActionPending(false);\n });\n };\n const confirmForget = () => {\n if (manager === undefined || forgetTarget === undefined)\n return;\n const target = forgetTarget;\n const mutationToken = target.mutationToken;\n if (mutationToken === undefined) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n },\n });\n return;\n }\n const targetBindings = readState.status === 'ready'\n ? (readState.views.find((v) => v.workspaceId === target.workspaceId)?.bindings ?? [])\n : [];\n const affectedSessionIds = bindingIdsFor(targetBindings, target.worktreeId);\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'forgetWorktree',\n input: {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n mutationToken,\n },\n });\n cleanupGuard.current.invalidate();\n onWorktreeForgotten?.({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionIds: affectedSessionIds,\n });\n if (pendingSessionBinding?.worktreeId === target.worktreeId) {\n setPendingSessionBinding(undefined);\n }\n clearSessionGroups(['worktree:' + target.worktreeId]);\n setReadState((current) => {\n if (current.status !== 'ready')\n return current;\n return {\n ...current,\n views: current.views.map((v) => {\n if (v.workspaceId !== target.workspaceId)\n return v;\n return {\n ...v,\n worktrees: v.worktrees.filter((w) => w.worktreeId !== target.worktreeId),\n bindings: v.bindings.filter((b) => b.worktreeId !== target.worktreeId),\n };\n }),\n };\n });\n setWorktreeForget(undefined);\n }, {\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n };\n return { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget };\n}\n//# sourceMappingURL=lifecycle-commands.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeAdoptBranchDialog, WorktreeCleanDiskDialog, WorktreeForgetDialog, WorktreeRemovalDialog, } from './dialogs.js';\nimport { createLifecycleCommands } from '../actions/lifecycle-commands.js';\nexport function LifecycleDialogs({ props, lifecycleState, mutation, lifecycle, expansion, read, session, }) {\n const { t } = props;\n const { worktreeBranchAdoption, branchAdoptionGuard, setWorktreeBranchAdoption, worktreeRemoval, setWorktreeRemoval, setWorktreeCleanDisk, setWorktreeForget, } = lifecycleState;\n const { actionPending, actionError } = mutation;\n const { refreshBranchAdoption, cleanDiskTarget, forgetTarget } = lifecycle;\n const { confirmBranchAdoption, confirmArchive, confirmDiskCleanup, confirmForget } = createLifecycleCommands({\n props,\n lifecycleState,\n mutation,\n lifecycle,\n expansion,\n read,\n session,\n });\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeAdoptBranchDialog, { t: t, worktree: worktreeBranchAdoption, actionPending: actionPending, error: actionError, onRetry: () => {\n void refreshBranchAdoption();\n }, onClose: () => {\n branchAdoptionGuard.current.invalidate();\n setWorktreeBranchAdoption(undefined);\n }, onSubmit: confirmBranchAdoption }), _jsx(WorktreeRemovalDialog, { t: t, worktree: worktreeRemoval, actionPending: actionPending, onClose: () => {\n setWorktreeRemoval(undefined);\n }, onSubmit: confirmArchive }), _jsx(WorktreeCleanDiskDialog, { t: t, worktree: cleanDiskTarget, actionPending: actionPending, onClose: () => {\n setWorktreeCleanDisk(undefined);\n }, onSubmit: confirmDiskCleanup }), _jsx(WorktreeForgetDialog, { t: t, worktree: forgetTarget, actionPending: actionPending, onClose: () => {\n setWorktreeForget(undefined);\n }, onSubmit: confirmForget })] }));\n}\n//# sourceMappingURL=LifecycleDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeSessionRenameDialog, WorktreeWorkspaceDeleteDialog, WorktreeWorkspaceRenameDialog, } from './dialogs.js';\nexport function NativeDialogs({ props, native }) {\n const { t } = props;\n const { sessionRenameTarget, sessionRenameDraft, sessionRenamePending, sessionRenameError, closeSessionRename, setSessionRenameDraft, setSessionRenameError, confirmSessionRename, workspaceRenameTarget, workspaceRenameDraft, workspaceRenamePending, workspaceRenameDuplicate, workspaceRenameError, closeWorkspaceRename, setWorkspaceRenameDraft, setWorkspaceRenameError, confirmWorkspaceRename, workspaceDeleteTarget, workspaceDeletePending, workspaceDeleteError, closeWorkspaceDelete, confirmWorkspaceDelete, } = native;\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeSessionRenameDialog, { t: t, target: sessionRenameTarget, draft: sessionRenameDraft, pending: sessionRenamePending, error: sessionRenameError, onClose: closeSessionRename, onDraftChange: (draft) => {\n setSessionRenameDraft(draft);\n setSessionRenameError(undefined);\n }, onSubmit: confirmSessionRename }), _jsx(WorktreeWorkspaceRenameDialog, { t: t, target: workspaceRenameTarget, draft: workspaceRenameDraft, pending: workspaceRenamePending, duplicate: workspaceRenameDuplicate, error: workspaceRenameError, onClose: closeWorkspaceRename, onDraftChange: (draft) => {\n setWorkspaceRenameDraft(draft);\n setWorkspaceRenameError(undefined);\n }, onSubmit: confirmWorkspaceRename }), _jsx(WorktreeWorkspaceDeleteDialog, { t: t, target: workspaceDeleteTarget, pending: workspaceDeletePending, error: workspaceDeleteError, onClose: closeWorkspaceDelete, onSubmit: confirmWorkspaceDelete })] }));\n}\n//# sourceMappingURL=NativeDialogs.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { WorktreeCreateDialog } from './dialogs.js';\nexport function RegistrationDialog({ props, registration, registrationState, mutation, read, }) {\n const { t } = props;\n const { modalWorkspace, modalView, modalSetupStatus, modalCanCreate, closeWorktreeCreator, changeWorktreeModalMode, loadImportCandidates, submitWorktree, } = registration;\n const { modalReadError, worktreeModalMode, importCandidates, selectedImportPath, selectedBranch, newBranch, worktreeModalWorkspaceId, modalReadViewRef, setSelectedBranch, setNewBranch, setSelectedImportPath, } = registrationState;\n const { actionPending } = mutation;\n const { loadModalWorktreeView } = read;\n return (_jsx(_Fragment, { children: _jsx(WorktreeCreateDialog, { t: t, workspace: modalWorkspace, view: modalView, readError: modalReadError, setupStatus: modalSetupStatus, canCreate: modalCanCreate, mode: worktreeModalMode, importCandidates: importCandidates, selectedImportPath: selectedImportPath, selectedBranch: selectedBranch, newBranch: newBranch, actionPending: actionPending, onClose: closeWorktreeCreator, onRetry: () => {\n if (worktreeModalWorkspaceId === undefined)\n return;\n modalReadViewRef.current = undefined;\n setSelectedBranch('');\n setNewBranch('');\n loadModalWorktreeView(worktreeModalWorkspaceId);\n }, onModeChange: changeWorktreeModalMode, onRetryImportCandidates: () => {\n if (worktreeModalWorkspaceId !== undefined) {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n }, onSelectedImportPathChange: setSelectedImportPath, onSelectedBranchChange: setSelectedBranch, onNewBranchChange: setNewBranch, onSubmit: submitWorktree }) }));\n}\n//# sourceMappingURL=RegistrationDialog.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport { stableWorkspaceIds, toWorktreeViewError, } from '../view/worktree-view.js';\nexport function toNativeWorktreeViewError(error) {\n const viewError = toWorktreeViewError(error);\n if (typeof error === 'object' && error !== null)\n return viewError;\n return { ...viewError, message: String(error) };\n}\nexport const EMPTY_READ_STATE = { status: 'idle', views: [] };\nexport const EMPTY_PERMISSION_NOTICE = undefined;\nexport const EMPTY_PERMISSION_NOTICE_SUBSCRIBE = () => () => { };\nexport const EMPTY_PERMISSION_NOTICE_SNAPSHOT = () => EMPTY_PERMISSION_NOTICE;\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE = () => () => { };\nexport const EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT = () => undefined;\nexport const EMPTY_FORK_RECOVERY_SNAPSHOT = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n};\nexport const EMPTY_FORK_RECOVERY_STORE = {\n getSnapshot: () => EMPTY_FORK_RECOVERY_SNAPSHOT,\n subscribe: () => () => { },\n};\nexport function cx(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nexport function updatedAtById(sessionIds, sessions) {\n return Object.fromEntries(sessionIds.map((sessionId) => [sessionId, sessions.byId[sessionId]?.updatedAt]));\n}\nexport function forkRecoveryError(recovery) {\n const error = toNativeWorktreeViewError(recovery.error);\n return {\n ...error,\n code: error.code === 'WORKTREE_VIEW_FAILED' ? 'SESSION_BINDING_FAILED' : error.code,\n details: {\n ...(error.details ?? {}),\n sessionId: recovery.childSessionId,\n },\n };\n}\nexport function useStableWorkspaceIds(workspaces) {\n const next = workspaces.map((workspace) => workspace.workspaceId);\n const previousRef = useRef([]);\n const stable = stableWorkspaceIds(previousRef.current, next);\n if (stable !== previousRef.current)\n previousRef.current = stable;\n return previousRef.current;\n}\nexport function IconCollapseAll16({ size = 16 }) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"currentColor\", children: _jsx(\"path\", { d: \"M9 11h6v1H9v-1zm6-3H9v1h6V8zm-6-3h6v1H9V5zM4.15 2.15l-.71.7L5.59 5H1v1h4.59L3.44 8.15l.71.7L7.5 5.5 4.15 2.15zm0 6l-.71.7L5.59 11H1v1h4.59l-2.15 2.15.71.7L7.5 11.5 4.15 8.15z\" }) }));\n}\n//# sourceMappingURL=shared.js.map","/** Open an existing Session through DSH without touching the peer view mode. */\nexport function openWorktreeSession(opener, sessionId) {\n opener.open(sessionId);\n}\n//# sourceMappingURL=navigation.js.map","import { currentSessionIdFromList } from '../session/session-selection.js';\n/** Browser-local storage key; it is never sent to DSH or the sidecar. */\nexport const WORKTREE_VIEW_MODE_STORAGE_KEY = 'clutch-dsh-worktree.view-mode';\n/** Guard persisted values before they become a visible mode. */\nexport function isWorktreeViewMode(value) {\n return value === 'workspace-session' || value === 'worktree';\n}\n/** Degraded/unavailable plugin state always exposes the original DSH view. */\nexport function effectiveViewMode(preferred, worktreeServiceAvailable) {\n if (!worktreeServiceAvailable || !isWorktreeViewMode(preferred))\n return 'workspace-session';\n return preferred;\n}\n/** Keep the Main bucket scoped to the selected DSH Workspace before filtering bindings. */\nexport function workspaceSessionIds(workspaces, workspaceId, sessionIds) {\n if (workspaceId === undefined)\n return [];\n const workspace = workspaces.items.find((candidate) => candidate.workspaceId === workspaceId);\n if (workspace === undefined)\n return [];\n const listed = new Set(sessionIds);\n return workspace.sessionIds.filter((sessionId) => listed.has(sessionId));\n}\nexport function unboundSessionIds(sessionIds, boundSessionIds) {\n const bound = new Set(boundSessionIds);\n return sessionIds.filter((sessionId) => !bound.has(sessionId));\n}\nexport function projectVirtualWorkspaceMembership(snapshot, previousBindings, nextBindings) {\n const previousSessionIds = new Set(previousBindings.map((binding) => binding.sessionId));\n const nextByWorkspace = new Map();\n for (const binding of nextBindings) {\n const sessionIds = nextByWorkspace.get(binding.workspaceId) ?? [];\n if (!sessionIds.includes(binding.sessionId))\n sessionIds.push(binding.sessionId);\n nextByWorkspace.set(binding.workspaceId, sessionIds);\n }\n const items = snapshot.items.map((workspace) => {\n const nativeSessionIds = workspace.sessionIds.filter((sessionId) => !previousSessionIds.has(sessionId));\n const virtualSessionIds = nextByWorkspace.get(workspace.workspaceId) ?? [];\n const sessionIds = [\n ...nativeSessionIds,\n ...virtualSessionIds.filter((sessionId) => !nativeSessionIds.includes(sessionId)),\n ];\n if (sessionIds.length === workspace.sessionIds.length &&\n sessionIds.every((sessionId, index) => sessionId === workspace.sessionIds[index])) {\n return workspace;\n }\n return { ...workspace, sessionIds };\n });\n if (items.every((workspace, index) => workspace === snapshot.items[index]))\n return snapshot;\n return { ...snapshot, items };\n}\nfunction validTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction createdAtTimestamp(createdAt) {\n const timestamp = Date.parse(createdAt);\n return Number.isFinite(timestamp) ? timestamp : undefined;\n}\n/**\n * Derive the most recent Workspace from rc.1 Session/Workspace metadata.\n * Host order is retained when timestamps tie, so equal activity never causes\n * the native Workspace order to oscillate.\n */\nexport function deriveRecentWorkspaceId(workspaces, sessionsById) {\n let recentWorkspaceId;\n let recentTimestamp = Number.NEGATIVE_INFINITY;\n for (const workspace of workspaces.items) {\n let workspaceTimestamp;\n for (const sessionId of workspace.sessionIds) {\n const updatedAt = sessionsById[sessionId]?.updatedAt;\n if (validTimestamp(updatedAt)) {\n workspaceTimestamp = Math.max(workspaceTimestamp ?? updatedAt, updatedAt);\n }\n }\n workspaceTimestamp ??= createdAtTimestamp(workspace.createdAt);\n if (workspaceTimestamp === undefined || workspaceTimestamp <= recentTimestamp)\n continue;\n recentWorkspaceId = workspace.workspaceId;\n recentTimestamp = workspaceTimestamp;\n }\n return recentWorkspaceId;\n}\n/**\n * Select the initial Worktree surface Workspace without navigating DSH:\n * current Session membership wins, then derived DSH recency, then the first available\n * Workspace keeps the surface usable in an empty/reconnecting fixture.\n */\nexport function initialWorkspaceId(workspaces, sessions) {\n const currentSessionId = currentSessionIdFromList(sessions);\n if (currentSessionId !== undefined) {\n const currentWorkspace = workspaces.items.find((workspace) => workspace.sessionIds.includes(currentSessionId));\n if (currentWorkspace !== undefined)\n return currentWorkspace.workspaceId;\n }\n const recentWorkspaceId = deriveRecentWorkspaceId(workspaces, sessions.byId);\n if (recentWorkspaceId !== undefined)\n return recentWorkspaceId;\n return workspaces.items[0]?.workspaceId;\n}\n//# sourceMappingURL=view-mode.js.map","/** Browser-local storage identity; never sent to DSH or the plugin sidecar. */\nexport const WORKTREE_EXPAND_STATE_STORAGE_KEY = 'clutch-dsh-worktree.expand-state';\nfunction emptyState() {\n return {\n collapsedWorkspaceIds: {},\n collapsedMainWorkspaceIds: {},\n collapsedWorktreeIds: {},\n };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction normalizeIds(value) {\n if (!isRecord(value))\n return {};\n return Object.fromEntries(Object.entries(value).filter(([id, collapsed]) => id.length > 0 && collapsed === true));\n}\n/** Turn any persisted JSON value into the current state shape. */\nexport function normalizeWorktreeExpandState(value) {\n const source = isRecord(value) ? value : {};\n return {\n collapsedWorkspaceIds: normalizeIds(source.collapsedWorkspaceIds),\n collapsedMainWorkspaceIds: normalizeIds(source.collapsedMainWorkspaceIds),\n collapsedWorktreeIds: normalizeIds(source.collapsedWorktreeIds),\n };\n}\nexport function isWorkspaceExpanded(state, workspaceId) {\n return state.collapsedWorkspaceIds[workspaceId] !== true;\n}\nexport function isMainExpanded(state, workspaceId) {\n return state.collapsedMainWorkspaceIds[workspaceId] !== true;\n}\nexport function isWorktreeExpanded(state, worktreeId) {\n return state.collapsedWorktreeIds[worktreeId] !== true;\n}\nfunction toggle(record, id) {\n if (record[id] === true)\n delete record[id];\n else\n record[id] = true;\n}\nfunction retain(record, ids) {\n const allowed = new Set(ids);\n for (const id of Object.keys(record)) {\n if (!allowed.has(id))\n delete record[id];\n }\n}\n/** Create one apply-scoped store; component remounts share this instance. */\nexport function createWorktreeExpandStateStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_EXPAND_STATE_STORAGE_KEY },\n });\n }\n catch {\n // A throwing browser storage getter can fail before runtime persistence's own guard.\n store = snapshotStoreFactory(emptyState());\n }\n // Runtime persistence handles invalid JSON; normalize valid but wrong-shaped JSON.\n store.set(normalizeWorktreeExpandState(store.getSnapshot()));\n const actions = {\n toggleWorkspace: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedWorkspaceIds, workspaceId); });\n },\n toggleMain: (workspaceId) => {\n store.update((draft) => { toggle(draft.collapsedMainWorkspaceIds, workspaceId); });\n },\n toggleWorktree: (worktreeId) => {\n store.update((draft) => { toggle(draft.collapsedWorktreeIds, worktreeId); });\n },\n collapseAll: (workspaceIds, worktreeIds = [], mainWorkspaceIds = workspaceIds) => {\n store.update((draft) => {\n for (const id of workspaceIds) {\n draft.collapsedWorkspaceIds[id] = true;\n }\n for (const id of mainWorkspaceIds) {\n draft.collapsedMainWorkspaceIds[id] = true;\n }\n for (const id of worktreeIds) {\n draft.collapsedWorktreeIds[id] = true;\n }\n });\n },\n retain: (workspaceIds, worktreeIds) => {\n // No Workspace IDs means the Workspace list has not arrived yet. Pruning from that\n // read would delete every stored preference, so refuse it outright: only a caller\n // holding a complete, non-empty snapshot may prune.\n if (workspaceIds.length === 0)\n return;\n store.update((draft) => {\n retain(draft.collapsedWorkspaceIds, workspaceIds);\n retain(draft.collapsedMainWorkspaceIds, workspaceIds);\n retain(draft.collapsedWorktreeIds, worktreeIds);\n });\n },\n };\n return Object.assign(store, { actions });\n}\n//# sourceMappingURL=worktree-expand-state.js.map","export function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\nexport function isManagedDashboardRecord(record) {\n return !isMainWorktreeId(record.worktreeId);\n}\nexport function createMainWorktreeRecord(workspace, currentBranch, instructions = '') {\n return {\n worktreeId: `main:${workspace.workspaceId}`,\n workspaceId: workspace.workspaceId,\n // Main is a browser-local projection, not a plugin-managed Worktree. Keep\n // unavailable branch and health facts empty instead of inventing values.\n branch: currentBranch ?? '',\n currentBranch,\n absolutePath: workspace.path,\n status: 'active',\n instructions,\n };\n}\nexport function resolveDashboardRecord(selection, mode, currentSessionId, workspaceIds, records, mainRecord) {\n if (selection === undefined ||\n mode !== 'worktree' ||\n (selection.sessionId !== undefined && selection.sessionId !== currentSessionId) ||\n !workspaceIds.includes(selection.workspaceId))\n return undefined;\n if (mainRecord !== undefined &&\n (isMainWorktreeId(selection.worktreeId) || selection.worktreeId === mainRecord.worktreeId)) {\n return mainRecord;\n }\n return records?.find((record) => record.workspaceId === selection.workspaceId && record.worktreeId === selection.worktreeId);\n}\n//# sourceMappingURL=dashboard-selection.js.map","import { useEffect, useMemo, useRef } from 'react';\n// Mirrors DSH ui-workspace rows/Rows.tsx: ignore tiny overflow, crawl at\n// 30px/s, hold the tail, and restore the resting ellipsis on pointer leave.\nconst MIN_TITLE_REVEAL_PX = 8;\nconst TITLE_MARQUEE_PX_PER_MS = 0.03;\nfunction placeTitle(title, left, range) {\n if (typeof title.scrollTo === 'function')\n title.scrollTo({ left, behavior: 'instant' });\n else\n title.scrollLeft = left;\n if (left > 0)\n title.dataset.scrolled = '';\n else\n delete title.dataset.scrolled;\n if (left < range)\n title.dataset.clipped = '';\n else\n delete title.dataset.clipped;\n}\nfunction restTitle(title) {\n placeTitle(title, 0, 0);\n}\n/** Native title reveal shared by Session and Worktree rows. */\nexport function useTitleMarquee(title) {\n const frame = useRef(0);\n useEffect(() => () => {\n cancelAnimationFrame(frame.current);\n }, []);\n return useMemo(() => ({\n enter: () => {\n cancelAnimationFrame(frame.current);\n const element = title.current;\n if (element === null)\n return;\n const range = element.scrollWidth - element.clientWidth;\n if (range <= MIN_TITLE_REVEAL_PX)\n return;\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n placeTitle(element, range, range);\n return;\n }\n let previous;\n let position = 0;\n const step = (now) => {\n position += previous === undefined ? 0 : (now - previous) * TITLE_MARQUEE_PX_PER_MS;\n previous = now;\n placeTitle(element, Math.min(position, range), range);\n if (position < range)\n frame.current = requestAnimationFrame(step);\n };\n frame.current = requestAnimationFrame(step);\n },\n leave: () => {\n cancelAnimationFrame(frame.current);\n if (title.current !== null)\n restTitle(title.current);\n },\n }), [title]);\n}\n//# sourceMappingURL=useTitleMarquee.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { HoverCard, Menu, StateDot, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconArchiveOutline20, IconBranchOutline16, IconTriangleRightFill14, IconCopyOutline16, IconEditOutline16, IconEllipsisOutline16, IconFolderClose16, IconFolderOpen16, IconNewChatOutline16, IconRefreshOutline16, IconTrashOutline16, } from '../../dsh-icons.js';\nimport { useRef, useState } from 'react';\nimport { useTitleMarquee } from '../state/useTitleMarquee.js';\nimport { IconDashboard } from '../../dashboard/dashboard-icon.js';\nimport { isBlankSession, relativeTime, } from '../../session/session-view.js';\nimport styles from '../../worktree.css';\nimport { sessionLabel } from '../selectors.js';\nfunction rowHalf(event) {\n const rect = event.currentTarget.getBoundingClientRect();\n return event.clientY < rect.top + rect.height / 2 ? 'before' : 'after';\n}\nfunction sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\nfunction sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Native Workspace hover-card time copy, including the trailing \"ago\" marker. */\nfunction sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n/** Native Workspace hover-card status list, including a secondary subagent status when relevant. */\nfunction sessionHoverStatuses(presentation) {\n if (presentation.runningSubagentCount === 0 ||\n presentation.status.labelKey === 'subagentsRunning') {\n return [presentation.status];\n }\n return [\n presentation.status,\n {\n state: 'ongoing',\n labelKey: 'subagentsRunning',\n runningSubagentCount: presentation.runningSubagentCount,\n },\n ];\n}\n/** Native Workspace Session hover-card details, adapted to the Worktree row projection. */\nfunction WorktreeSessionHoverContent({ label, blank, presentation, t, }) {\n const statuses = presentation === undefined ? [] : sessionHoverStatuses(presentation);\n const timeValue = !blank && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n return (_jsxs(\"div\", { className: styles.sessionHoverContent, children: [_jsx(\"div\", { className: styles.sessionHoverTitle, children: label }), !blank && timeValue !== undefined && (_jsx(\"div\", { className: styles.sessionHoverTime, children: sessionHoverTimeLabel(t, timeValue) })), statuses.map((status) => (_jsxs(\"div\", { className: styles.sessionHoverStatus, children: [_jsx(StateDot, { state: status.state }), _jsx(\"span\", { children: sessionStatusLabel(t, status) })] }, `${status.labelKey}-${status.runningSubagentCount}`)))] }));\n}\n/** Workspace row using the native DSH menu, fixed action column, and drag contract. */\nexport function WorktreeWorkspaceRow({ t, workspace, expanded, containsCurrentSession, groupActivityStatus, actionPending, menuOpen, drag, onToggle, onCreateWorktree, onRename, onDelete, onMenuOpenChange, }) {\n const workspaceMenuItems = [\n {\n id: 'rename',\n label: t('workspace.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: actionPending,\n },\n {\n id: 'delete',\n label: t('workspace.delete'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: actionPending,\n },\n ];\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n return (_jsxs(\"div\", { className: `${styles.workspaceRow} ${markerClass}`, \"data-worktree-motion-key\": `workspace:${workspace.workspaceId}`, \"data-workspace-drag\": drag.active ? 'active' : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menuOpen || undefined, draggable: true, onClick: () => {\n onToggle();\n }, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', workspace.workspaceId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.workspaceDisclosure}`, \"aria-label\": t(expanded ? 'workspace.collapse' : 'workspace.expand', {\n name: workspace.title,\n }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: _jsx(IconTriangleRightFill14, { className: styles.disclosureArrow }) }), _jsx(\"span\", { className: styles.workspaceIcon, \"data-workspace-active\": expanded && containsCurrentSession ? 'true' : undefined, \"aria-hidden\": \"true\", children: expanded ? _jsx(IconFolderOpen16, {}) : _jsx(IconFolderClose16, {}) }), _jsx(\"span\", { className: styles.workspaceTitle, children: workspace.title }), _jsxs(\"span\", { className: `${styles.treeActionSlot} ${styles.workspaceActions}`, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), _jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n onMenuOpenChange(false);\n }, items: workspaceMenuItems, onSelect: (id) => {\n onMenuOpenChange(false);\n if (id === 'rename')\n onRename();\n if (id === 'delete')\n onDelete();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-workspace-menu\": true, \"aria-label\": t('workspace.options', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onMenuOpenChange(!menuOpen);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) }), _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-worktree\": true, \"aria-label\": t('workspace.addWorktree', { name: workspace.title }), onClick: (event) => {\n event.stopPropagation();\n onCreateWorktree();\n }, children: _jsx(IconBranchOutline16, {}) })] })] }));\n}\n/** Shared Main/Worktree group row with parameterized icon, state, and actions. */\nexport function WorktreeGroupRow({ t, kind, label, worktreeId, expanded, groupActivityStatus, icon, workspaceTitle, state, stateLabel, repairGuidance, onToggle, onCreateSession, showDashboardAction, menu, drag, }) {\n const main = kind === 'main';\n const groupActivityVisible = !expanded && groupActivityStatus !== undefined;\n const groupActivityLabel = groupActivityStatus === undefined ? undefined : sessionStatusLabel(t, groupActivityStatus);\n const worktreeStateVisible = stateLabel !== undefined;\n const dashboardActionVisible = showDashboardAction === true && menu?.onDashboard !== undefined;\n const worktreeLabelRef = useRef(null);\n const marquee = useTitleMarquee(worktreeLabelRef);\n const markerClass = drag?.marker === 'before'\n ? styles.dropBefore\n : drag?.marker === 'after'\n ? styles.dropAfter\n : '';\n const dragProps = drag === undefined\n ? {}\n : {\n draggable: true,\n onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', worktreeId ?? label);\n drag.start();\n },\n onDragEnd: drag.end,\n onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n },\n onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n },\n };\n const row = (_jsxs(\"div\", { className: `${styles.worktreeRow} ${markerClass}`, \"data-worktree-motion-key\": `group:${kind}:${menu?.copyPath ?? ''}`, \"data-main-group\": main ? 'true' : undefined, \"data-main-expanded\": main ? String(expanded) : undefined, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, \"data-menu-open\": menu?.open ? 'true' : undefined, \"data-worktree-drag\": drag?.active ? 'active' : undefined, ...dragProps, onClick: onToggle, onPointerEnter: marquee.enter, onPointerLeave: marquee.leave, children: [_jsx(\"button\", { type: \"button\", className: `${styles.disclosureButton} ${styles.worktreeDisclosure}`, \"aria-label\": t(expanded ? 'worktree.collapse' : 'worktree.expand', { name: label }), \"aria-expanded\": expanded, onClick: (event) => {\n event.stopPropagation();\n onToggle();\n }, children: _jsx(IconTriangleRightFill14, { className: styles.disclosureArrow }) }), _jsx(\"span\", { className: styles.worktreeIcon, \"data-worktree-state\": state, \"aria-hidden\": \"true\", children: icon }), worktreeStateVisible && _jsx(\"span\", { className: styles.worktreeStateLabel, children: stateLabel }), _jsx(\"span\", { ref: worktreeLabelRef, className: styles.worktreeLabel, children: label }), _jsxs(\"span\", { className: styles.treeActionSlot, children: [_jsx(\"span\", { className: styles.groupActivity, \"data-group-activity\": groupActivityVisible ? 'true' : undefined, role: groupActivityVisible ? 'img' : undefined, \"aria-label\": groupActivityVisible ? groupActivityLabel : undefined, title: groupActivityVisible ? groupActivityLabel : undefined, children: groupActivityVisible && groupActivityStatus !== undefined && (_jsx(StateDot, { state: groupActivityStatus.state })) }), dashboardActionVisible && (_jsx(\"span\", { className: styles.dashboardAction, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-dashboard-action\": true, \"aria-label\": t('dashboard.title'), onClick: (event) => {\n event.stopPropagation();\n menu?.onDashboard?.();\n }, children: _jsx(IconDashboard, { size: 16 }) }) })), menu !== undefined && (_jsx(\"span\", { className: styles.menuAction, children: _jsx(Menu, { open: menu.open, onClose: () => {\n menu.onOpenChange(false);\n }, items: [\n ...(menu.onDashboard === undefined\n ? []\n : [\n {\n id: 'dashboard',\n label: t('dashboard.title'),\n icon: _jsx(IconDashboard, { size: 16 }),\n },\n ]),\n ...(menu.showCreate\n ? [\n {\n id: 'create',\n label: t('worktree.createNew'),\n icon: _jsx(IconBranchOutline16, {}),\n disabled: menu.disabled || menu.onCreateWorktree === undefined,\n },\n ]\n : []),\n {\n id: 'copy-path',\n label: t('worktree.copyPath'),\n icon: _jsx(IconCopyOutline16, {}),\n disabled: menu.disabled,\n },\n ...(menu.showRemove\n ? [\n {\n id: 'remove',\n label: t('worktree.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n danger: true,\n disabled: menu.disabled || menu.onRemove === undefined,\n },\n ]\n : []),\n ...(menu.onAdoptBranch\n ? [\n {\n id: 'adopt-branch',\n label: t('worktree.adoptBranch'),\n disabled: menu.disabled,\n },\n ]\n : []),\n ...(menu.onRecover\n ? [{ id: 'recover', label: t('worktree.retryRecovery'), disabled: menu.disabled }]\n : []),\n ...(menu.showUnarchive\n ? [\n {\n id: 'unarchive',\n label: menu.unarchiveDisabledReason\n ? `${t('worktree.unarchive')} (${menu.unarchiveDisabledReason})`\n : t('worktree.unarchive'),\n icon: _jsx(IconRefreshOutline16, {}),\n disabled: menu.disabled || menu.unarchiveDisabled || menu.onUnarchive === undefined,\n },\n ]\n : []),\n ...(menu.showCleanDisk\n ? [\n {\n id: 'clean-disk',\n label: menu.cleanDiskDisabledReason\n ? `${t('worktree.cleanDisk')} (${menu.cleanDiskDisabledReason})`\n : t('worktree.cleanDisk'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.cleanDiskDisabled || menu.onCleanDisk === undefined,\n },\n ]\n : []),\n ...(menu.showForget\n ? [\n {\n id: 'forget',\n label: menu.forgetDisabledReason\n ? `${t('worktree.forget')} (${menu.forgetDisabledReason})`\n : t('worktree.forget'),\n icon: _jsx(IconTrashOutline16, {}),\n danger: true,\n disabled: menu.disabled || menu.forgetDisabled || menu.onForget === undefined,\n },\n ]\n : []),\n ], onSelect: (id) => {\n menu.onOpenChange(false);\n if (id === 'create' && menu.showCreate)\n menu.onCreateWorktree?.();\n if (id === 'dashboard')\n menu.onDashboard?.();\n if (id === 'adopt-branch')\n menu.onAdoptBranch?.();\n if (id === 'recover')\n menu.onRecover?.();\n if (id === 'copy-path')\n void writeClipboard(menu.copyPath);\n if (id === 'remove' && menu.showRemove)\n menu.onRemove?.();\n if (id === 'unarchive' && menu.showUnarchive)\n menu.onUnarchive?.();\n if (id === 'clean-disk' && menu.showCleanDisk)\n menu.onCleanDisk?.();\n if (id === 'forget' && menu.showForget)\n menu.onForget?.();\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-worktree-menu\": true, \"aria-label\": t('worktree.options', { name: menu.label }), onClick: (event) => {\n event.stopPropagation();\n menu.onOpenChange(!menu.open);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })), onCreateSession !== undefined && (_jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-add-main-session\": main ? 'true' : undefined, \"data-add-session\": main ? undefined : 'true', \"aria-label\": t('worktree.addSession', { name: workspaceTitle }), onClick: (event) => {\n event.stopPropagation();\n onCreateSession();\n }, children: _jsx(IconNewChatOutline16, {}) }))] })] }));\n if (main)\n return row;\n return (_jsx(HoverCard, { anchor: row, content: _jsxs(\"div\", { className: styles.worktreeHoverDetails, children: [_jsx(\"div\", { className: styles.worktreeHoverTitle, children: label }), stateLabel !== undefined && state !== 'done' && (_jsx(\"p\", { className: styles.worktreeHoverTitle, children: stateLabel })), repairGuidance !== undefined && (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.worktreeHoverTitle, children: menu?.copyPath }), _jsx(\"p\", { className: styles.worktreeHoverTitle, children: repairGuidance })] }))] }), openDelayMs: 500, disabled: menu?.open === true || drag?.active === true, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\n/** Worktree-mode Session row with the same trailing options menu as native DSH rows. */\nexport function WorktreeSessionRow({ t, sessionId, blank, current, label, drag, actionPending, onOpen, onRename, onFork, onArchive, presentation, }) {\n const [menuOpen, setMenuOpen] = useState(false);\n const titleRef = useRef(null);\n const marquee = useTitleMarquee(titleRef);\n const markerClass = drag.marker === 'before' ? styles.dropBefore : drag.marker === 'after' ? styles.dropAfter : '';\n const sessionMenuItems = [\n {\n id: 'rename',\n label: t('session.rename'),\n icon: _jsx(IconEditOutline16, {}),\n disabled: onRename === undefined || actionPending,\n },\n {\n id: 'fork',\n label: t('session.fork'),\n icon: _jsx(IconBranchOutline16, {}),\n disabled: onFork === undefined || actionPending,\n },\n {\n id: 'archive',\n label: t('session.archive'),\n icon: _jsx(IconArchiveOutline20, { size: 16 }),\n disabled: onArchive === undefined || actionPending,\n },\n {\n id: 'copy-session-id',\n label: t('session.copyId'),\n icon: _jsx(IconCopyOutline16, {}),\n },\n ];\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n const row = (_jsxs(\"div\", { className: `${styles.treeSessionRow} ${markerClass}`, \"data-session-id\": sessionId, \"data-worktree-motion-key\": `session:${sessionId}`, \"data-session-blank\": blank ? 'true' : undefined, \"data-session-current\": current ? 'true' : undefined, \"data-session-drag\": drag.active ? 'active' : undefined, \"data-menu-open\": menuOpen || undefined, role: \"treeitem\", \"aria-current\": current ? 'true' : undefined, onPointerEnter: marquee.enter, onPointerLeave: marquee.leave, draggable: true, onDragStart: (event) => {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', sessionId);\n drag.start();\n }, onDragEnd: drag.end, onDragOver: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n drag.hover(rowHalf(event));\n }, onDrop: (event) => {\n if (!drag.active)\n return;\n event.preventDefault();\n drag.drop(rowHalf(event));\n }, children: [_jsx(\"button\", { type: \"button\", className: styles.treeSessionContent, onClick: onOpen, children: _jsx(\"span\", { ref: titleRef, className: styles.sessionLabel, children: label }) }), !blank && (_jsxs(\"span\", { className: styles.sessionTrailing, children: [_jsx(\"span\", { className: styles.sessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.sessionStatus, \"data-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.sessionTime, \"data-session-time\": true, children: timeLabel })) : null }), _jsx(\"span\", { className: styles.rowActions, children: _jsx(Menu, { open: menuOpen, onClose: () => {\n setMenuOpen(false);\n }, items: sessionMenuItems, onSelect: (id) => {\n setMenuOpen(false);\n if (id === 'rename')\n onRename?.(sessionId, label);\n if (id === 'fork')\n onFork?.(sessionId);\n if (id === 'archive')\n onArchive?.(sessionId);\n if (id === 'copy-session-id')\n void writeClipboard(sessionId);\n }, portal: true, closeOnPointerLeave: true, anchor: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"data-session-menu\": true, \"aria-label\": t('session.options', { name: label }), onClick: (event) => {\n event.stopPropagation();\n setMenuOpen((current) => !current);\n }, children: _jsx(IconEllipsisOutline16, {}) }) }) })] }))] }));\n return (_jsx(HoverCard, { anchor: row, content: _jsx(WorktreeSessionHoverContent, { label: label, blank: blank, presentation: presentation, t: t }), openDelayMs: 500, disabled: menuOpen || drag.active, copyText: blank ? undefined : label, copyLabel: t('copy'), copiedLabel: t('hover.copied') }));\n}\nexport function WorktreeSessionGroup({ t, groupKey, sessionIds, workspaceId, currentSessionId, expanded, actionPending, sessions, sessionPresentations, dragState, onToggleExpanded, onStartDrag, onHoverDrag, onClearDrag, onFinishDrag, onCommitDrag, onOpen, onRename, onFork, onArchive, }) {\n const visibleSessionIds = expanded ? sessionIds : sessionIds.slice(0, 5);\n const sameGroupDrag = dragState?.groupKey === groupKey;\n return (_jsxs(_Fragment, { children: [visibleSessionIds.map((sessionId) => (_jsx(WorktreeSessionRow, { t: t, sessionId: sessionId, blank: isBlankSession(sessionId, sessions), current: sessionId === currentSessionId, label: sessionLabel(sessionId, sessions, t), presentation: sessionPresentations[sessionId], drag: {\n active: sameGroupDrag,\n marker: sameGroupDrag && dragState.over?.sessionId === sessionId ? dragState.over.half : null,\n start: () => {\n onStartDrag(groupKey, sessionId);\n },\n hover: (half) => {\n onHoverDrag(sessionId, half);\n },\n drop: (half) => {\n if (dragState === undefined)\n return;\n onCommitDrag(dragState, { sessionId, half }, sessionIds, workspaceId);\n },\n end: () => {\n if (dragState?.over !== null && dragState?.over !== undefined) {\n onCommitDrag(dragState, dragState.over, sessionIds, workspaceId);\n }\n else {\n onClearDrag();\n }\n onFinishDrag();\n },\n }, actionPending: actionPending, onOpen: () => {\n onOpen(sessionId);\n }, onRename: onRename, onFork: onFork, onArchive: onArchive }, `${groupKey}:${sessionId}`))), sessionIds.length > 5 && (_jsx(\"button\", { type: \"button\", className: styles.sessionOverflowButton, \"aria-expanded\": expanded, onClick: onToggleExpanded, children: expanded\n ? t('session.collapse')\n : t('session.expandMore', { count: sessionIds.length - 5 }) }))] }));\n}\n//# sourceMappingURL=rows.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded } from '../selectors.js';\nexport function ActiveWorktree({ record, source, expansion, ordering, props, lifecycle, session, menus, mutation, read, registration, lifecycleState, drag, native, bindings, workspaceMatchesQuery, workspace, workspaceWorktreeNames, sameWorkspaceWorktreeDrag, activeWorktrees, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { createSession, openWorkspaceSession } = session;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { actionPending, setActionError } = mutation;\n const { refresh } = read;\n const { openWorktreeCreator } = registration;\n const { setWorktreeRemoval } = lifecycleState;\n const { worktreeDrag, worktreeDropCommitted, setWorktreeDrag, commitWorktreeDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = `worktree:${record.worktreeId}`;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'repair' || record.health === 'recovery-needed'\n ? 'error'\n : record.health === 'branch-drift'\n ? 'warning'\n : 'done';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.ready');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, repairGuidance: record.health === 'repair'\n ? t('worktree.repairGuidance')\n : record.health === 'recovery-needed'\n ? t('worktree.recoveryGuidance')\n : record.health === 'branch-drift'\n ? t(record.currentBranch === null ? 'worktree.detachedGuidance' : 'worktree.branchDriftGuidance')\n : undefined, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, onCreateSession: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed'\n ? () => {\n void createSession({\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n cwd: record.absolutePath,\n });\n }\n : undefined, menu: {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null,\n showRemove: record.status === 'active' && record.health !== 'recovery-needed',\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onCreateWorktree: record.status === 'active' &&\n record.health !== 'repair' &&\n record.health !== 'recovery-needed' &&\n record.currentBranch !== null\n ? () => {\n openWorktreeCreator(workspace, {\n baseBranch: record.currentBranch ?? record.branch,\n newBranch: createNumberedWorktreeName(record.currentBranch ?? record.branch, workspaceWorktreeNames),\n });\n }\n : undefined,\n onRemove: record.status === 'active'\n ? () => {\n setWorktreeRemoval(record);\n setActionError(undefined);\n }\n : undefined,\n }, drag: {\n active: sameWorkspaceWorktreeDrag,\n marker: worktreeDrag?.over?.worktreeId === record.worktreeId ? worktreeDrag.over.half : null,\n start: () => {\n worktreeDropCommitted.current = false;\n setWorktreeDrag({\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n over: null,\n });\n },\n hover: (half) => {\n setWorktreeDrag((current) => current === undefined || current.workspaceId !== workspace.workspaceId\n ? current\n : {\n ...current,\n over: { worktreeId: record.worktreeId, half },\n });\n },\n drop: (half) => {\n if (worktreeDrag === undefined)\n return;\n commitWorktreeDrag(worktreeDrag, { worktreeId: record.worktreeId, half }, activeWorktrees.map((candidate) => candidate.worktreeId), workspace.workspaceId);\n },\n end: () => {\n setWorktreeDrag(undefined);\n worktreeDropCommitted.current = false;\n },\n } }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ActiveWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { isWorktreeExpanded } from '../../view/worktree-expand-state.js';\nimport { executeWorktreeAction, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { WorktreeGroupRow, WorktreeSessionGroup } from './rows.js';\nimport { bindingIdsFor, includesText, isSessionGroupAutoExpanded, worktreeLifecycleBlockReason, } from '../selectors.js';\nexport function ArchivedWorktree({ record, source, expansion, ordering, props, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, bindings, workspaceMatchesQuery, workspace, }) {\n const { sessions, archivedSessionIds, currentSessionId, expandSnapshot, sessionPresentations } = source;\n const { query, isCurrentSessionReveal, expandedSessionGroups, toggleWorktree, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { t, manager, renameSession, forkSession, archiveSession } = props;\n const { branchLabel, branchActions } = lifecycle;\n const { actionPending, setActionError, runMutation } = mutation;\n const { openWorktreeMenuId, setOpenWorktreeMenuId } = menus;\n const { refresh } = read;\n const { setWorktreeCleanDisk, setWorktreeForget } = lifecycleState;\n const { sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag } = drag;\n const { openWorkspaceSession } = session;\n const { openSessionRename, archiveWorktreeSession } = native;\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n const worktreeMatchesQuery = workspaceMatchesQuery ||\n includesText(record.branch, query) ||\n includesText(record.absolutePath, query);\n if (query.length > 0 &&\n !worktreeMatchesQuery &&\n !worktreeSessionIds.some((sessionId) => sessionMatchesQuery(sessionId, sessions, query))) {\n return null;\n }\n const visibleWorktreeSessionIds = worktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const worktreeGroupKey = 'worktree:' + record.worktreeId;\n const orderedWorktreeSessionIds = orderedSessionIdsByAccount.get(worktreeGroupKey) ?? worktreeSessionIds;\n const orderedVisibleWorktreeSessionIds = orderedWorktreeSessionIds.filter((sessionId) => worktreeMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const sessionIds = orderedVisibleWorktreeSessionIds.length === visibleWorktreeSessionIds.length\n ? orderedVisibleWorktreeSessionIds\n : visibleWorktreeSessionIds;\n const sessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + worktreeGroupKey));\n const sessionGroupExpanded = expandedSessionGroups[worktreeGroupKey] === true || sessionGroupAutoExpanded;\n const state = record.health === 'recovery-needed'\n ? 'error'\n : record.diskCleanup === 'completed'\n ? undefined\n : record.health === 'repair'\n ? 'error'\n : 'warning';\n const stateLabel = record.health === 'recovery-needed'\n ? t('worktree.recovery')\n : record.diskCleanup === 'completed'\n ? t('worktree.cleaned')\n : record.health === 'repair'\n ? t('worktree.repair')\n : record.health === 'branch-drift'\n ? t('worktree.branchDrift')\n : t('worktree.detached');\n const worktreeExpanded = isWorktreeExpanded(expandSnapshot, record.worktreeId) ||\n isCurrentSessionReveal('worktree:' + record.worktreeId);\n return (_jsxs(\"div\", { className: styles.worktreeGroup, \"data-worktree-id\": record.worktreeId, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"worktree\", label: branchLabel(record), worktreeId: record.worktreeId, expanded: worktreeExpanded, groupActivityStatus: aggregateSessionStatus(worktreeSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, state: state, stateLabel: stateLabel, onToggle: () => {\n toggleWorktree(record.worktreeId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: (() => {\n const activityBlocked = worktreeLifecycleBlockReason(actionPending, record.health);\n const blockedReasonText = activityBlocked === 'recovery' ? t('worktree.recovery') : undefined;\n return {\n onDashboard: props.openDashboard === undefined ? undefined : () => props.openDashboard?.(record),\n ...branchActions(record),\n open: openWorktreeMenuId === record.worktreeId,\n label: record.branch,\n copyPath: record.absolutePath,\n showCreate: false,\n showRemove: false,\n showUnarchive: record.diskCleanup !== 'completed',\n showCleanDisk: record.diskCleanup !== 'completed',\n showForget: true,\n disabled: actionPending,\n unarchiveDisabled: activityBlocked !== undefined || record.health === 'repair',\n cleanDiskDisabled: activityBlocked !== undefined || record.health === 'branch-drift',\n forgetDisabled: activityBlocked !== undefined,\n unarchiveDisabledReason: record.health === 'repair'\n ? t('worktree.unarchiveDisabledRepair')\n : blockedReasonText,\n cleanDiskDisabledReason: record.health === 'branch-drift' ? t('worktree.adoptBeforeClean') : blockedReasonText,\n forgetDisabledReason: blockedReasonText,\n onOpenChange: (open) => {\n setOpenWorktreeMenuId(open ? record.worktreeId : undefined);\n if (open)\n void refresh({\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n reuseInFlight: true,\n invalidateContext: false,\n });\n },\n onUnarchive: () => {\n if (!manager)\n return;\n if (!record.mutationToken) {\n setActionError({\n code: 'WORKTREE_STATE_CONFLICT',\n message: '',\n retryable: true,\n details: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n },\n });\n return;\n }\n void runMutation(async () => {\n await executeWorktreeAction(manager, {\n type: 'unarchiveWorktree',\n input: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n mutationToken: record.mutationToken,\n },\n });\n }, {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n },\n onCleanDisk: () => {\n setWorktreeCleanDisk(record);\n setActionError(undefined);\n },\n onForget: () => {\n setWorktreeForget(record);\n setActionError(undefined);\n },\n };\n })() }), worktreeExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: worktreeGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: sessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(worktreeGroupKey, sessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined ? current : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorkspaceSession(workspace.workspaceId, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession }))] }, record.worktreeId));\n}\n//# sourceMappingURL=ArchivedWorktree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconArchiveOutline20 } from '../../dsh-icons.js';\nimport { aggregateSessionStatus } from '../../session/session-view.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport styles from '../../worktree.css';\nimport { ArchivedWorktree } from './ArchivedWorktree.js';\nimport { WorktreeGroupRow } from './rows.js';\nimport { bindingIdsFor } from '../selectors.js';\nexport function ArchivedWorktrees({ expansion, props, source, ordering, lifecycle, mutation, menus, read, lifecycleState, drag, session, native, workspace, archivedWorktrees, bindings, workspaceMatchesQuery, }) {\n const { isCurrentSessionReveal, expandedArchivedWorkspaces, toggleArchivedWorkspace } = expansion;\n const { t } = props;\n const { sessions, archivedSessionIds, sessionPresentations } = source;\n const archivedKey = 'archived:' + workspace.workspaceId;\n const isArchivedAutoExpanded = isCurrentSessionReveal(archivedKey);\n const isArchivedExpanded = expandedArchivedWorkspaces[workspace.workspaceId] === true || isArchivedAutoExpanded;\n return (_jsxs(\"div\", { className: styles.archivedGroup, \"data-archived-group\": true, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"archived-group\", label: `${t('worktree.archivedGroup')} (${archivedWorktrees.length})`, expanded: isArchivedExpanded, groupActivityStatus: aggregateSessionStatus(filterArchivedSessionIds(archivedWorktrees.flatMap((record) => bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId))), archivedSessionIds), sessionPresentations), icon: _jsx(IconArchiveOutline20, { size: 16 }), workspaceTitle: workspace.title, onToggle: () => {\n toggleArchivedWorkspace(workspace.workspaceId);\n } }), isArchivedExpanded && (_jsx(\"div\", { className: styles.treeChildren, children: archivedWorktrees.map((record) => (_jsx(ArchivedWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace }, record.worktreeId))) }))] }));\n}\n//# sourceMappingURL=ArchivedWorktrees.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Component, createRef } from 'react';\nimport styles from '../../worktree.css';\n/** Plugin-owned equivalent of native keyed-row fades and movement, without importing DSH internals. */\nexport class AnimatedTree extends Component {\n armed = false;\n list = createRef();\n exits = createRef();\n movements = new Map();\n removed = new Map();\n getSnapshotBeforeUpdate(previous) {\n if (!this.armed ||\n !previous.ready ||\n !this.props.ready ||\n previous.resetKey !== this.props.resetKey ||\n !this.list.current ||\n typeof this.list.current.animate !== 'function' ||\n window.matchMedia('(prefers-reduced-motion: reduce)').matches)\n return null;\n return this.positions();\n }\n componentDidUpdate(_previous, _state, snapshot) {\n if (!snapshot) {\n this.clear();\n return;\n }\n const next = this.positions();\n const keys = [...snapshot.keys()];\n const nextKeys = [...next.keys()];\n // Metadata refreshes must not restart an animation already in flight.\n if (keys.length === next.size && keys.every((key, index) => key === nextKeys[index]))\n return;\n this.cancelMovements();\n const list = this.list.current;\n const viewport = (list.closest('[data-worktree-scrollport]') ?? list).getBoundingClientRect();\n const visible = (rect) => rect.bottom > viewport.top && rect.top < viewport.bottom;\n for (const [key, row] of next) {\n this.removeExit(key);\n const old = snapshot.get(key);\n if (!visible(row.rect) && (!old || !visible(old.rect)))\n continue;\n if (!old) {\n this.move(row.element, [{ opacity: 0 }, { opacity: 1 }], 100);\n continue;\n }\n const dx = old.rect.left - row.rect.left;\n const dy = old.rect.top - row.rect.top;\n if (dx === 0 && dy === 0 && old.opacity === 1)\n continue;\n this.move(row.element, [\n { transform: `translate(${dx}px, ${dy}px)`, opacity: old.opacity },\n { transform: 'translate(0, 0)', opacity: 1 },\n ], 200);\n }\n const overlay = this.exits.current;\n const origin = overlay.getBoundingClientRect();\n for (const [key, row] of snapshot) {\n if (next.has(key) || !visible(row.rect))\n continue;\n this.removeExit(key);\n const clone = row.element.cloneNode(true);\n clone.removeAttribute('data-worktree-motion-key');\n clone.removeAttribute('id');\n clone.inert = true;\n Object.assign(clone.style, {\n position: 'absolute',\n margin: '0',\n transform: 'none',\n boxSizing: 'border-box',\n left: `${row.rect.left - origin.left}px`,\n top: `${row.rect.top - origin.top}px`,\n width: `${row.rect.width}px`,\n height: `${row.rect.height}px`,\n });\n overlay.append(clone);\n const animation = clone.animate([{ opacity: row.opacity }, { opacity: 0 }], {\n duration: 100,\n easing: 'ease-out',\n fill: 'forwards',\n });\n this.removed.set(key, { element: clone, animation });\n animation.onfinish = () => this.removeExit(key);\n }\n }\n componentWillUnmount() {\n this.clear();\n }\n positions() {\n const rows = this.list.current.querySelectorAll('[data-worktree-motion-key]');\n return new Map(Array.from(rows, (element) => {\n const workspace = element.closest('[data-workspace-id]')?.dataset.workspaceId ?? '';\n return [\n JSON.stringify([workspace, element.dataset.worktreeMotionKey]),\n {\n element,\n rect: element.getBoundingClientRect(),\n opacity: this.movements.has(element) ? Number(getComputedStyle(element).opacity) : 1,\n },\n ];\n }));\n }\n move(element, frames, duration) {\n const animation = element.animate(frames, { duration, easing: 'ease-out' });\n this.movements.set(element, animation);\n animation.onfinish = () => {\n this.movements.delete(element);\n animation.cancel();\n };\n }\n cancelMovements() {\n for (const animation of this.movements.values()) {\n animation.onfinish = null;\n animation.cancel();\n }\n this.movements.clear();\n }\n removeExit(key) {\n const exit = this.removed.get(key);\n if (!exit)\n return;\n exit.animation.onfinish = null;\n exit.animation.cancel();\n exit.element.remove();\n this.removed.delete(key);\n }\n clear() {\n this.cancelMovements();\n for (const key of this.removed.keys())\n this.removeExit(key);\n }\n render() {\n return (_jsxs(\"div\", { ref: this.list, className: this.props.className, onPointerDownCapture: () => {\n this.armed = true;\n }, onKeyDownCapture: () => {\n this.armed = true;\n }, children: [this.props.children, _jsx(\"div\", { ref: this.exits, className: styles.motionExits, \"aria-hidden\": \"true\" })] }));\n }\n}\n//# sourceMappingURL=AnimatedTree.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconBranchOutline16 } from '../../dsh-icons.js';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { filterVisibleSessionIds, aggregateSessionStatus, sessionMatchesQuery, } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { isMainExpanded, isWorkspaceExpanded } from '../../view/worktree-expand-state.js';\nimport { createNumberedWorktreeName, filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { createMainWorktreeRecord } from '../../dashboard/dashboard-selection.js';\nimport styles from '../../worktree.css';\nimport { ActiveWorktree } from './ActiveWorktree.js';\nimport { ArchivedWorktrees } from './ArchivedWorktrees.js';\nimport { AnimatedTree } from './AnimatedTree.js';\nimport { WorktreeGroupRow, WorktreeSessionGroup, WorktreeWorkspaceRow } from './rows.js';\nimport { includesText, isSessionGroupAutoExpanded, workspaceMatches } from '../selectors.js';\nexport function WorkspaceTree({ props, read, source, expansion, ordering, drag, mutation, menus, registration, native, lifecycle, session, lifecycleState, }) {\n const { t, createMainSession, openSession, renameSession, forkSession, archiveSession } = props;\n const { viewByWorkspace } = read;\n const { expandSnapshot, workspaces, sessions, archivedSessionIds, sessionPresentations, currentSessionId, } = source;\n const { isCurrentSessionReveal, query, expandedSessionGroups, toggleWorkspace, toggleMain, toggleSessionGroup, } = expansion;\n const { orderedSessionIdsByAccount } = ordering;\n const { worktreeDrag, workspaceDrag, workspaceDropCommitted, setWorkspaceDrag, commitWorkspaceDrag, sessionDrag, sessionDropCommitted, setSessionDrag, commitSessionDrag, } = drag;\n const { actionPending } = mutation;\n const { openWorkspaceMenuId, setOpenWorkspaceMenuId, openMainMenuId, setOpenMainMenuId } = menus;\n const { openWorktreeCreator } = registration;\n const { openWorkspaceRename, openWorkspaceDelete, openSessionRename, archiveWorktreeSession } = native;\n const visibleWorkspaces = workspaces.items.filter((workspace) => workspaceMatches(workspace, viewByWorkspace.get(workspace.workspaceId), sessions, query));\n return (_jsx(_Fragment, { children: _jsx(AnimatedTree, { className: styles.workspaceList, ready: sessions.phase !== 'pending' &&\n workspaceDrag === undefined &&\n worktreeDrag === undefined &&\n sessionDrag === undefined, resetKey: query, children: visibleWorkspaces.length === 0 ? (_jsx(\"p\", { className: styles.empty, children: t('workspace.noMatches') })) : (visibleWorkspaces.map((workspace) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n const currentBranch = view?.branches.find((branch) => branch.isCurrent)?.name;\n const mainLabel = currentBranch === undefined\n ? t('worktree.main')\n : t('worktree.mainWithBranch', { branch: currentBranch });\n const expanded = isWorkspaceExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('workspace:' + workspace.workspaceId);\n const workspaceMatchesQuery = includesText(workspace.title, query);\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const workspaceActivitySessionIds = filterVisibleSessionIds(allWorkspaceSessionIds, sessions);\n const workspaceGroupActivityStatus = aggregateSessionStatus(workspaceActivitySessionIds, sessionPresentations);\n const bindings = view?.bindings ?? [];\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n const mainGroupKey = `main:${workspace.workspaceId}`;\n const orderedMainSessionIds = orderedSessionIdsByAccount.get(mainGroupKey) ?? mainSessionIds;\n const visibleMainSessionIds = mainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const orderedVisibleMainSessionIds = orderedMainSessionIds.filter((sessionId) => workspaceMatchesQuery || sessionMatchesQuery(sessionId, sessions, query));\n const mainExpanded = isMainExpanded(expandSnapshot, workspace.workspaceId) ||\n isCurrentSessionReveal('main:' + workspace.workspaceId);\n const sessionIds = orderedVisibleMainSessionIds.length === visibleMainSessionIds.length\n ? orderedVisibleMainSessionIds\n : visibleMainSessionIds;\n const mainSessionGroupAutoExpanded = isSessionGroupAutoExpanded(sessionIds, currentSessionId, isCurrentSessionReveal('session-group:' + mainGroupKey));\n const mainSessionGroupExpanded = expandedSessionGroups[mainGroupKey] === true || mainSessionGroupAutoExpanded;\n const worktrees = view?.worktrees ?? [];\n const activeWorktrees = worktrees.filter((record) => record.status === 'active');\n const archivedWorktrees = worktrees.filter((record) => record.status === 'removed');\n const workspaceWorktreeNames = [\n ...(view?.branches.map((branch) => branch.name) ?? []),\n ...(view?.worktrees.map((worktree) => worktree.branch) ?? []),\n ];\n const sameWorkspaceWorktreeDrag = worktreeDrag?.workspaceId === workspace.workspaceId;\n return (_jsxs(\"section\", { className: styles.workspaceGroup, \"data-workspace-id\": workspace.workspaceId, children: [_jsx(WorktreeWorkspaceRow, { t: t, workspace: workspace, expanded: expanded, containsCurrentSession: currentSessionId !== undefined &&\n allWorkspaceSessionIds.includes(currentSessionId), groupActivityStatus: workspaceGroupActivityStatus, actionPending: actionPending, menuOpen: openWorkspaceMenuId === workspace.workspaceId, drag: {\n active: workspaceDrag !== undefined,\n marker: workspaceDrag?.over?.workspaceId === workspace.workspaceId\n ? workspaceDrag.over.half\n : null,\n start: () => {\n workspaceDropCommitted.current = false;\n setWorkspaceDrag({ workspaceId: workspace.workspaceId, over: null });\n },\n hover: (half) => {\n setWorkspaceDrag((current) => current === undefined\n ? current\n : {\n ...current,\n over: { workspaceId: workspace.workspaceId, half },\n });\n },\n drop: (half) => {\n if (workspaceDrag === undefined)\n return;\n commitWorkspaceDrag(workspaceDrag, {\n workspaceId: workspace.workspaceId,\n half,\n });\n },\n end: () => {\n if (workspaceDrag?.over !== null && workspaceDrag?.over !== undefined) {\n commitWorkspaceDrag(workspaceDrag, workspaceDrag.over);\n }\n else {\n setWorkspaceDrag(undefined);\n }\n workspaceDropCommitted.current = false;\n },\n }, onToggle: () => {\n toggleWorkspace(workspace.workspaceId);\n }, onCreateWorktree: () => {\n openWorktreeCreator(workspace);\n }, onRename: () => {\n openWorkspaceRename(workspace);\n }, onDelete: () => {\n openWorkspaceDelete(workspace);\n }, onMenuOpenChange: (open) => {\n setOpenWorkspaceMenuId(open ? workspace.workspaceId : undefined);\n } }), expanded && (_jsxs(\"div\", { className: styles.treeChildren, children: [_jsx(WorktreeGroupRow, { t: t, kind: \"main\", label: mainLabel, expanded: mainExpanded, groupActivityStatus: aggregateSessionStatus(mainSessionIds, sessionPresentations), icon: _jsx(IconBranchOutline16, {}), workspaceTitle: workspace.title, onToggle: () => {\n toggleMain(workspace.workspaceId);\n }, showDashboardAction: props.openDashboard !== undefined, menu: {\n onDashboard: props.openDashboard === undefined\n ? undefined\n : () => props.openDashboard?.(createMainWorktreeRecord(workspace, currentBranch)),\n open: openMainMenuId === workspace.workspaceId,\n label: mainLabel,\n copyPath: workspace.path,\n showCreate: currentBranch !== undefined,\n showRemove: false,\n disabled: actionPending,\n onOpenChange: (open) => {\n setOpenMainMenuId(open ? workspace.workspaceId : undefined);\n },\n onCreateWorktree: currentBranch === undefined\n ? undefined\n : () => {\n openWorktreeCreator(workspace, {\n baseBranch: currentBranch,\n newBranch: createNumberedWorktreeName(currentBranch, workspaceWorktreeNames),\n });\n },\n }, onCreateSession: createMainSession === undefined\n ? undefined\n : () => {\n createMainSession(workspace.workspaceId);\n } }), mainExpanded && (_jsx(WorktreeSessionGroup, { t: t, groupKey: mainGroupKey, sessionIds: sessionIds, workspaceId: workspace.workspaceId, currentSessionId: currentSessionId, expanded: mainSessionGroupExpanded, actionPending: actionPending, sessions: sessions, sessionPresentations: sessionPresentations, dragState: sessionDrag, onToggleExpanded: () => {\n toggleSessionGroup(mainGroupKey, mainSessionGroupAutoExpanded);\n }, onStartDrag: (groupKey, sessionId) => {\n sessionDropCommitted.current = false;\n setSessionDrag({ groupKey, sessionId, over: null });\n }, onHoverDrag: (sessionId, half) => {\n setSessionDrag((current) => current === undefined\n ? current\n : { ...current, over: { sessionId, half } });\n }, onClearDrag: () => {\n setSessionDrag(undefined);\n }, onFinishDrag: () => {\n sessionDropCommitted.current = false;\n }, onCommitDrag: commitSessionDrag, onOpen: (sessionId) => {\n openWorktreeSession({ open: openSession }, sessionId);\n }, onRename: renameSession === undefined ? undefined : openSessionRename, onFork: forkSession, onArchive: archiveSession === undefined ? undefined : archiveWorktreeSession })), activeWorktrees.length === 0 && archivedWorktrees.length === 0 && (_jsx(\"p\", { className: styles.emptyNested, children: t('worktree.noWorktrees') })), activeWorktrees.map((record) => (_jsx(ActiveWorktree, { record: record, source: source, expansion: expansion, ordering: ordering, props: props, lifecycle: lifecycle, session: session, menus: menus, mutation: mutation, read: read, registration: registration, lifecycleState: lifecycleState, drag: drag, native: native, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery, workspace: workspace, workspaceWorktreeNames: workspaceWorktreeNames, sameWorkspaceWorktreeDrag: sameWorkspaceWorktreeDrag, activeWorktrees: activeWorktrees }, record.worktreeId))), archivedWorktrees.length > 0 && (_jsx(ArchivedWorktrees, { expansion: expansion, props: props, source: source, ordering: ordering, lifecycle: lifecycle, mutation: mutation, menus: menus, read: read, lifecycleState: lifecycleState, drag: drag, session: session, native: native, workspace: workspace, archivedWorktrees: archivedWorktrees, bindings: bindings, workspaceMatchesQuery: workspaceMatchesQuery }))] }))] }, workspace.workspaceId));\n })) }) }));\n}\n//# sourceMappingURL=WorkspaceTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport styles from '../../worktree.css';\n/** A themed thumb over the native scrollport: the list keeps its full width. */\nexport function OverlayScrollbar({ scrollportRef, }) {\n const thumbRef = useRef(null);\n const dragRef = useRef(null);\n const [dragging, setDragging] = useState(false);\n const [geometry, setGeometry] = useState({ height: 0, top: 0, range: 0, travel: 0 });\n useLayoutEffect(() => {\n const scrollport = scrollportRef.current;\n const content = scrollport?.firstElementChild;\n if (scrollport === null || content == null)\n return;\n const measure = () => {\n const viewport = scrollport.clientHeight;\n const range = Math.max(0, scrollport.scrollHeight - viewport);\n const height = scrollport.scrollHeight === 0\n ? 0\n : Math.min(viewport, Math.max(24, (viewport * viewport) / scrollport.scrollHeight));\n const travel = viewport - height;\n setGeometry({\n height,\n range,\n travel,\n top: range === 0 ? 0 : Math.min(travel, Math.max(0, (scrollport.scrollTop / range) * travel)),\n });\n };\n const observer = new ResizeObserver(measure);\n observer.observe(scrollport);\n observer.observe(content);\n scrollport.addEventListener('scroll', measure, { passive: true });\n measure();\n return () => {\n observer.disconnect();\n scrollport.removeEventListener('scroll', measure);\n };\n }, [scrollportRef]);\n const releaseDrag = (event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n dragRef.current = null;\n setDragging(false);\n };\n return (_jsx(\"div\", { className: styles.overlayScrollbar, hidden: geometry.range === 0, \"aria-hidden\": \"true\", \"data-dragging\": dragging || undefined, onPointerDown: (event) => {\n const scrollport = scrollportRef.current;\n if (event.button !== 0 || scrollport === null || geometry.travel <= 0)\n return;\n event.preventDefault();\n if (event.target !== thumbRef.current) {\n const top = event.clientY - event.currentTarget.getBoundingClientRect().top - geometry.height / 2;\n scrollport.scrollTop =\n (Math.max(0, Math.min(geometry.travel, top)) / geometry.travel) * geometry.range;\n }\n dragRef.current = {\n pointerId: event.pointerId,\n y: event.clientY,\n scrollTop: scrollport.scrollTop,\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n }, onPointerMove: (event) => {\n const drag = dragRef.current;\n const scrollport = scrollportRef.current;\n if (drag === null ||\n drag.pointerId !== event.pointerId ||\n scrollport === null ||\n geometry.travel <= 0)\n return;\n scrollport.scrollTop =\n drag.scrollTop + ((event.clientY - drag.y) / geometry.travel) * geometry.range;\n }, onPointerUp: releaseDrag, onPointerCancel: releaseDrag, onLostPointerCapture: () => {\n dragRef.current = null;\n setDragging(false);\n }, onWheel: (event) => {\n const scrollport = scrollportRef.current;\n if (scrollport !== null) {\n const unit = event.deltaMode === 1 ? 20 : event.deltaMode === 2 ? scrollport.clientHeight : 1;\n scrollport.scrollTop += event.deltaY * unit;\n }\n }, children: _jsx(\"div\", { ref: thumbRef, className: styles.scrollbarThumb, style: { height: geometry.height, transform: `translateY(${geometry.top}px)` } }) }));\n}\n//# sourceMappingURL=OverlayScrollbar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { formatWorktreePermissionNotice, formatWorktreeViewError, } from '../../view/worktree-error-copy.js';\nimport styles from '../../worktree.css';\nimport { forkRecoveryError } from '../shared.js';\nimport { WorkspaceTree } from './WorkspaceTree.js';\nimport { OverlayScrollbar } from './OverlayScrollbar.js';\nimport { NotificationToasts } from './NotificationToasts.js';\nimport { failureToastKey } from '../notification-queue.js';\nexport function SurfaceContent({ source, props, lifecycle, mutation, session, read, expansion, ordering, drag, menus, registration, native, lifecycleState, }) {\n const { permissionNoticeSnapshot, forkRecoverySnapshot } = source;\n const { t, retryForkSession, openSession } = props;\n const { permissionRetryTarget, retryCleanupPermissions, recoveryAction } = lifecycle;\n const { actionPending, actionError, setActionError } = mutation;\n const { forkRetryKey, retryForkBinding, pendingSessionBinding, pendingSessionArchived, retrySessionBinding, setPendingSessionBinding, } = session;\n const { refresh, readState } = read;\n const notices = [];\n const workspaceLabel = (workspaceId) => {\n const workspace = source.workspaces.items.find((item) => item.workspaceId === workspaceId);\n return workspace === undefined ? workspaceId : `${workspace.title} · ${workspace.path}`;\n };\n const sessionLabel = (sessionId) => source.sessions.byId[sessionId]?.displayTitle ?? sessionId;\n const retryRead = (workspaceIds) => ({\n label: t('action.retry'), disabled: actionPending,\n onClick: () => {\n void refresh({\n scope: workspaceIds === undefined ? { kind: 'global' } : { kind: 'workspaces', workspaceIds },\n preserveCurrent: true,\n });\n },\n });\n const actionsFor = (error) => {\n const recovery = recoveryAction(error);\n return recovery === null ? [] : [recovery];\n };\n if (permissionNoticeSnapshot !== undefined) {\n notices.push({\n key: 'permission:' + permissionNoticeSnapshot.workspaceId + ':' + permissionNoticeSnapshot.worktreeId,\n text: formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t),\n message: (translate) => formatWorktreePermissionNotice(permissionNoticeSnapshot.result, translate),\n context: t('settings.permission') + ' · ' + workspaceLabel(permissionNoticeSnapshot.workspaceId),\n actions: permissionRetryTarget === undefined ? [] : [{\n label: t('action.retry'), disabled: actionPending, onClick: retryCleanupPermissions,\n }],\n });\n }\n for (const recovery of forkRecoverySnapshot.pending) {\n const error = forkRecoveryError(recovery);\n notices.push({\n key: 'fork:' + recovery.key, error, text: formatWorktreeViewError(error, t),\n toastKey: failureToastKey(error),\n context: t('settings.binding') + ' · ' + sessionLabel(recovery.childSessionId),\n actions: [\n ...(retryForkSession !== undefined && error.retryable ? [{\n label: t('action.retryBinding'), disabled: forkRetryKey !== undefined,\n onClick: () => { void retryForkBinding(recovery.key); },\n }] : []),\n { label: t('action.openCreatedSession'), disabled: forkRetryKey !== undefined,\n leaveSettings: true,\n onClick: () => openSession(recovery.childSessionId) },\n ],\n });\n }\n if (actionError !== undefined &&\n (pendingSessionBinding === undefined || actionError.details?.sessionId !== pendingSessionBinding.sessionId)) {\n const error = actionError;\n const workspaceId = error.details?.workspaceId;\n const context = typeof workspaceId === 'string' ? workspaceLabel(workspaceId) : '';\n notices.push({\n key: 'action:' + JSON.stringify([error.code, error.details]), error,\n toastKey: failureToastKey(error), text: formatWorktreeViewError(error, t),\n context: t('settings.operation') + ' · ' + context,\n describe: (translate) => translate('settings.operation') + ' · ' + context,\n actions: [\n ...actionsFor(error),\n ...(error.retryable ? [{\n label: t('action.retry'), disabled: actionPending,\n onClick: () => {\n setActionError(undefined);\n void refresh({\n scope: typeof workspaceId === 'string'\n ? { kind: 'workspace', workspaceId } : { kind: 'global' },\n preserveCurrent: true,\n });\n },\n }] : []),\n ],\n });\n }\n if (pendingSessionBinding !== undefined) {\n const binding = pendingSessionBinding;\n const error = binding.error ?? (actionError?.details?.sessionId === binding.sessionId\n ? actionError : { code: 'SESSION_BINDING_FAILED', message: '', retryable: true,\n details: { sessionId: binding.sessionId } });\n const context = [workspaceLabel(binding.workspaceId), sessionLabel(binding.sessionId), binding.cwd].filter(Boolean).join(' · ');\n notices.push({\n key: 'binding:' + binding.sessionId, error,\n toastKey: failureToastKey(error), text: formatWorktreeViewError(error, t),\n context: t('settings.binding') + ' · ' + context,\n describe: (translate) => translate('settings.binding') + ' · ' + context,\n actions: [\n { label: t('action.retryBinding'),\n disabled: actionPending || pendingSessionArchived || error.retryable === false,\n onClick: () => { void retrySessionBinding(); } },\n ...(binding.permissionRequired ? [] : [{\n label: t('action.openCreatedSession'), disabled: actionPending,\n leaveSettings: true,\n onClick: () => {\n setPendingSessionBinding(undefined);\n if (actionError?.details?.sessionId === binding.sessionId)\n setActionError(undefined);\n openSession(binding.sessionId);\n },\n }]),\n ],\n });\n }\n if (readState.targetError !== undefined) {\n const { error, workspaceIds } = readState.targetError;\n notices.push({\n key: 'target:' + JSON.stringify([workspaceIds, error.code, error.details]),\n error, text: formatWorktreeViewError(error, t),\n context: t('settings.read') + ' · ' + workspaceIds.map(workspaceLabel).join(', '),\n actions: [...actionsFor(error), retryRead(workspaceIds)],\n });\n }\n if (readState.status === 'error' && readState.error !== undefined) {\n const error = readState.error;\n notices.push({\n key: 'read:' + JSON.stringify([error.code, error.details]),\n error, text: formatWorktreeViewError(error, t), context: t('settings.read'),\n actions: [...actionsFor(error), retryRead()],\n });\n }\n return (_jsxs(\"div\", { className: styles.scrollFrame, children: [_jsx(\"div\", { ref: expansion.contentRef, className: styles.content, tabIndex: 0, \"data-worktree-scrollport\": true, children: _jsxs(\"div\", { className: styles.scrollContent, children: [_jsx(NotificationToasts, { notices: notices }), readState.status === 'loading' && (_jsx(\"p\", { className: styles.message, children: t('status.loading') })), readState.status === 'ready' ? (_jsx(WorkspaceTree, { props: props, read: read, source: source, expansion: expansion, ordering: ordering, drag: drag, mutation: mutation, menus: menus, registration: registration, native: native, lifecycle: lifecycle, session: session, lifecycleState: lifecycleState })) : null] }) }), _jsx(OverlayScrollbar, { scrollportRef: expansion.contentRef })] }));\n}\n//# sourceMappingURL=SurfaceContent.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconCloseFill14, IconCloseOutline16, IconProjectAddOutline16, IconSearchOutline16, } from '../../dsh-icons.js';\nimport styles from '../../worktree.css';\nimport { cx, IconCollapseAll16 } from '../shared.js';\nexport function SurfaceHeader({ expansion, props, source, read, mutation }) {\n const { searchExpanded, searchRoot, setSearchExpanded, searchInput, searchQuery, setSearchQuery, setExpandedArchivedWorkspaces, setExpandedSessionGroups, setCurrentSessionReveal, currentSessionLocation, } = expansion;\n const { t, expandState, createWorkspace, actions } = props;\n const { workspaceIds } = source;\n const { readState } = read;\n const { runMutation } = mutation;\n const currentWorkspaceId = currentSessionLocation?.workspaceId;\n const currentWorktreeId = currentSessionLocation?.kind === 'worktree' ? currentSessionLocation.worktreeId : undefined;\n const targetWorkspaceIds = workspaceIds.filter((id) => id !== currentWorkspaceId);\n const worktreeIds = readState.views\n .flatMap((view) => view.worktrees.map((record) => record.worktreeId))\n .filter((worktreeId) => worktreeId !== currentWorktreeId);\n return (_jsx(_Fragment, { children: _jsxs(\"header\", { className: styles.header, children: [_jsx(\"span\", { className: cx(styles.title, searchExpanded && styles.titleHidden), children: t('worktree.title') }), _jsx(\"div\", { className: cx(styles.searchSlot, searchExpanded && styles.searchSlotExpanded), children: _jsxs(\"div\", { ref: searchRoot, className: cx(styles.search, searchExpanded && styles.searchExpanded), onClick: () => {\n if (!searchExpanded) {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }\n }, children: [_jsx(Tooltip, { label: t('workspace.search'), side: \"bottom\", delayMs: 500, disabled: searchExpanded, children: _jsx(\"button\", { type: \"button\", className: styles.searchButton, \"aria-label\": t('workspace.search'), \"aria-expanded\": searchExpanded, onClick: () => {\n setSearchExpanded(true);\n searchInput.current?.focus();\n }, children: _jsx(IconSearchOutline16, { size: searchExpanded ? 12 : 14 }) }) }), _jsx(\"input\", { ref: searchInput, className: styles.searchInput, type: \"text\", \"aria-label\": t('workspace.search'), placeholder: t('workspace.search'), value: searchQuery, tabIndex: searchExpanded ? 0 : -1, onChange: (event) => {\n setSearchQuery(event.currentTarget.value);\n }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n } }), searchExpanded && (_jsx(\"button\", { type: \"button\", className: styles.clearButton, \"aria-label\": t('search.clear'), onClick: (event) => {\n event.stopPropagation();\n setSearchQuery('');\n setSearchExpanded(false);\n }, children: _jsx(IconCloseFill14, {}) }))] }) }), _jsxs(\"div\", { className: cx(styles.headerActions, searchExpanded && styles.headerActionsHidden), children: [_jsx(Tooltip, { label: t('workspace.collapseAll'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.collapseAll'), onClick: () => {\n // Keep the current Session's workspace and worktree expanded in state,\n // while collapsing all other unrelated workspaces and worktrees, and collapsing all Main groups.\n if (currentSessionLocation === undefined)\n setCurrentSessionReveal(undefined);\n expandState.actions.collapseAll(targetWorkspaceIds, worktreeIds, workspaceIds);\n setExpandedArchivedWorkspaces({});\n setExpandedSessionGroups({});\n }, children: _jsx(IconCollapseAll16, {}) }) }), _jsx(Tooltip, { label: t('workspace.add'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.iconButton, \"aria-label\": t('workspace.add'), onClick: () => {\n if (createWorkspace !== undefined)\n void runMutation(createWorkspace);\n }, children: _jsx(IconProjectAddOutline16, {}) }) }), _jsx(Tooltip, { label: t('mode.exit'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.closeButton, \"aria-label\": t('mode.exit'), onClick: () => {\n actions.setViewMode('workspace-session');\n }, children: _jsx(IconCloseOutline16, {}) }) })] })] }) }));\n}\n//# sourceMappingURL=SurfaceHeader.js.map","/** Browser-only persistence key; this state never crosses the DSH or sidecar boundary. */\nexport const WORKTREE_SESSION_ORDER_STORAGE_KEY = 'clutch-dsh-worktree.session-order';\nfunction emptyState() {\n return { accounts: {} };\n}\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction isValidTimestamp(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction normalizeIds(value) {\n if (!Array.isArray(value))\n return [];\n const seen = new Set();\n const ids = [];\n for (const id of value) {\n if (typeof id !== 'string' || id.length === 0 || seen.has(id))\n continue;\n seen.add(id);\n ids.push(id);\n }\n return ids;\n}\nfunction normalizeAccount(value) {\n if (!isRecord(value))\n return undefined;\n const order = normalizeIds(value.order);\n const allowed = new Set(order);\n const observedUpdatedAt = {};\n if (isRecord(value.observedUpdatedAt)) {\n for (const [id, timestamp] of Object.entries(value.observedUpdatedAt)) {\n if (allowed.has(id) && isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n }\n return { order, observedUpdatedAt };\n}\n/** Normalize persisted state without trusting any browser-local JSON shape. */\nexport function normalizeWorktreeSessionOrderState(value) {\n if (!isRecord(value) || !isRecord(value.accounts))\n return emptyState();\n const accounts = {};\n for (const [accountKey, account] of Object.entries(value.accounts)) {\n if (accountKey.length === 0)\n continue;\n const normalized = normalizeAccount(account);\n if (normalized !== undefined)\n accounts[accountKey] = normalized;\n }\n return { accounts };\n}\nfunction validIds(ids) {\n return normalizeIds([...ids]);\n}\nfunction sameRecord(left, right) {\n if (left === undefined)\n return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length)\n return false;\n return rightKeys.every((key) => left[key] === right[key]);\n}\nfunction sameAccount(left, right) {\n return (left !== undefined &&\n left.order.length === right.order.length &&\n left.order.every((id, index) => id === right.order[index]) &&\n sameRecord(left.observedUpdatedAt, right.observedUpdatedAt));\n}\nfunction orderByUpdatedAt(ids, updatedAtById) {\n return ids\n .map((id, index) => ({ id, index, timestamp: updatedAtById[id] }))\n .sort((left, right) => {\n const leftValid = isValidTimestamp(left.timestamp);\n const rightValid = isValidTimestamp(right.timestamp);\n if (leftValid && rightValid) {\n const difference = Number(right.timestamp) - Number(left.timestamp);\n if (difference !== 0)\n return difference;\n }\n if (leftValid !== rightValid)\n return leftValid ? -1 : 1;\n return left.index - right.index;\n })\n .map(({ id }) => id);\n}\n/** Native-style activity order transition driven by the latest Session timestamp. */\nexport function nextSessionOrderAccount(input) {\n const baseIds = validIds(input.baseIds);\n const previous = input.previous;\n if (previous === undefined) {\n const observedUpdatedAt = {};\n for (const id of baseIds) {\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(timestamp))\n observedUpdatedAt[id] = timestamp;\n }\n return { order: orderByUpdatedAt(baseIds, input.updatedAtById), observedUpdatedAt };\n }\n const available = new Set(baseIds);\n const order = [];\n const seen = new Set();\n for (const id of previous.order) {\n if (available.has(id) && !seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n for (const id of baseIds) {\n if (!seen.has(id)) {\n seen.add(id);\n order.push(id);\n }\n }\n const observedUpdatedAt = {};\n const previousIds = new Set(previous.order);\n const newlyObserved = [];\n const promoted = [];\n for (const [index, id] of order.entries()) {\n if (!previousIds.has(id))\n newlyObserved.push(id);\n const previousTimestamp = previous.observedUpdatedAt[id];\n const timestamp = input.updatedAtById[id];\n if (isValidTimestamp(previousTimestamp))\n observedUpdatedAt[id] = previousTimestamp;\n if (isValidTimestamp(timestamp)) {\n if (!isValidTimestamp(previousTimestamp) || timestamp > previousTimestamp) {\n if (isValidTimestamp(previousTimestamp)) {\n promoted.push({ id, timestamp, index });\n }\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const orderedNewlyObserved = orderByUpdatedAt(newlyObserved, input.updatedAtById);\n promoted.sort((left, right) => right.timestamp - left.timestamp || left.index - right.index);\n const promotedIds = new Set([\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ]);\n return {\n order: [\n ...orderedNewlyObserved,\n ...promoted.map(({ id }) => id),\n ...order.filter((id) => !promotedIds.has(id)),\n ],\n observedUpdatedAt,\n };\n}\n/** Apply a successful manual drag without dropping IDs hidden by search. */\nexport function reorderSessionIds(order, sessionId, overSessionId, half) {\n const next = order.filter((id) => id !== sessionId);\n const targetIndex = next.indexOf(overSessionId);\n if (targetIndex === -1)\n return [...order];\n next.splice(half === 'before' ? targetIndex : targetIndex + 1, 0, sessionId);\n return next;\n}\nfunction cloneAccount(account) {\n return {\n order: [...account.order],\n observedUpdatedAt: { ...account.observedUpdatedAt },\n };\n}\n/** Create one apply-scoped, browser-local Session ordering store. */\nexport function createWorktreeSessionOrderStore(snapshotStoreFactory) {\n let store;\n try {\n store = snapshotStoreFactory(emptyState(), {\n persist: { name: WORKTREE_SESSION_ORDER_STORAGE_KEY },\n });\n }\n catch {\n store = snapshotStoreFactory(emptyState());\n }\n store.set(normalizeWorktreeSessionOrderState(store.getSnapshot()));\n let disposed = false;\n const actions = {\n reconcile: (accountKey, baseIds, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const next = nextSessionOrderAccount({\n baseIds,\n updatedAtById,\n previous: draft.accounts[accountKey],\n });\n if (sameAccount(draft.accounts[accountKey], next))\n return;\n draft.accounts[accountKey] = cloneAccount(next);\n });\n },\n setOrder: (accountKey, order, updatedAtById) => {\n if (disposed || accountKey.length === 0)\n return;\n store.update((draft) => {\n const current = draft.accounts[accountKey] ?? {\n order: [],\n observedUpdatedAt: {},\n };\n const observedUpdatedAt = { ...current.observedUpdatedAt };\n if (updatedAtById !== undefined) {\n for (const [id, timestamp] of Object.entries(updatedAtById)) {\n if (isValidTimestamp(timestamp)) {\n observedUpdatedAt[id] = Math.max(observedUpdatedAt[id] ?? timestamp, timestamp);\n }\n }\n }\n const next = {\n order: validIds(order),\n observedUpdatedAt,\n };\n if (sameAccount(current, next))\n return;\n draft.accounts[accountKey] = next;\n });\n },\n retain: (accountKeys) => {\n if (disposed)\n return;\n const allowed = new Set(accountKeys);\n if (allowed.size === 0)\n return;\n store.update((draft) => {\n for (const accountKey of Object.keys(draft.accounts)) {\n if (!allowed.has(accountKey))\n delete draft.accounts[accountKey];\n }\n });\n },\n };\n return Object.assign(store, {\n actions,\n dispose: () => {\n disposed = true;\n },\n });\n}\n//# sourceMappingURL=worktree-session-order.js.map","import { useRef, useState } from 'react';\nimport { reorderSessionIds } from '../../session/worktree-session-order.js';\nimport { resolveWorktreeMove, toRetryableWorktreeOrderError, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { updatedAtById } from '../shared.js';\n/**\n * Persist one visual Session move without crossing the Worktree membership boundary.\n * Worktree Sessions are plugin-local projections, while Main Sessions remain native DSH members.\n */\nexport async function commitSessionOrder(input) {\n if (input.groupKey.startsWith('worktree:')) {\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n return;\n }\n if (input.insertSessionBefore === undefined) {\n throw new Error('Native Session ordering is unavailable');\n }\n await input.insertSessionBefore(input.workspaceId, input.sessionId, input.beforeSessionId);\n input.setOrder(input.groupKey, input.nextOrder, input.updatedAtById);\n}\n/** Resolve a visual drop against the full account order, retaining filtered IDs. */\nexport function resolveSessionDragOrder(input) {\n const targetIndex = input.visibleSessionIds.indexOf(input.over.sessionId);\n const sourceIndex = input.visibleSessionIds.indexOf(input.sessionId);\n if (targetIndex === -1 || sourceIndex === -1)\n return undefined;\n const currentOrder = [...input.currentOrder];\n const knownIds = new Set(currentOrder);\n for (const id of input.visibleSessionIds) {\n if (!knownIds.has(id)) {\n knownIds.add(id);\n currentOrder.push(id);\n }\n }\n const nextOrder = reorderSessionIds(currentOrder, input.sessionId, input.over.sessionId, input.over.half);\n if (nextOrder.length === currentOrder.length &&\n nextOrder.every((id, index) => id === currentOrder[index])) {\n return undefined;\n }\n const nextIndex = nextOrder.indexOf(input.sessionId);\n if (nextIndex === -1)\n return undefined;\n return {\n beforeSessionId: nextOrder[nextIndex + 1],\n nextOrder,\n };\n}\nexport function useDragActions({ source, orderedSessionIdsByAccount, props, mutation, read, }) {\n const { workspaces, sessionOrderSnapshot } = source;\n const { insertWorkspaceBefore, insertSessionBefore, sessionOrder, insertWorktreeBefore } = props;\n const { setActionError } = mutation;\n const { refresh } = read;\n const [workspaceDrag, setWorkspaceDrag] = useState();\n const workspaceDropCommitted = useRef(false);\n const [sessionDrag, setSessionDrag] = useState();\n const sessionDropCommitted = useRef(false);\n const [worktreeDrag, setWorktreeDrag] = useState();\n const worktreeDropCommitted = useRef(false);\n const commitWorkspaceDrag = (activeDrag, over) => {\n if (workspaceDropCommitted.current)\n return;\n workspaceDropCommitted.current = true;\n setWorkspaceDrag(undefined);\n const rows = workspaces.items;\n const targetIndex = rows.findIndex((workspace) => workspace.workspaceId === over.workspaceId);\n const sourceIndex = rows.findIndex((workspace) => workspace.workspaceId === activeDrag.workspaceId);\n if (targetIndex === -1 || sourceIndex === -1)\n return;\n const beforeWorkspaceId = over.half === 'before' ? over.workspaceId : rows[targetIndex + 1]?.workspaceId;\n const anchorIndex = beforeWorkspaceId === undefined\n ? rows.length\n : rows.findIndex((workspace) => workspace.workspaceId === beforeWorkspaceId);\n if (beforeWorkspaceId === activeDrag.workspaceId ||\n anchorIndex === sourceIndex ||\n anchorIndex === sourceIndex + 1) {\n return;\n }\n if (insertWorkspaceBefore === undefined) {\n setActionError({\n code: 'WORKSPACE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorkspaceBefore(activeDrag.workspaceId, beforeWorkspaceId).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitSessionDrag = (activeDrag, over, sessionIds, workspaceId) => {\n if (sessionDropCommitted.current)\n return;\n sessionDropCommitted.current = true;\n setSessionDrag(undefined);\n const currentOrder = orderedSessionIdsByAccount.get(activeDrag.groupKey) ??\n sessionOrderSnapshot.accounts[activeDrag.groupKey]?.order ??\n sessionIds;\n const move = resolveSessionDragOrder({\n visibleSessionIds: sessionIds,\n currentOrder,\n sessionId: activeDrag.sessionId,\n over,\n });\n if (move === undefined)\n return;\n const isWorktreeSession = activeDrag.groupKey.startsWith('worktree:');\n if (!isWorktreeSession && insertSessionBefore === undefined) {\n setActionError({\n code: 'SESSION_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void commitSessionOrder({\n groupKey: activeDrag.groupKey,\n workspaceId,\n sessionId: activeDrag.sessionId,\n beforeSessionId: move.beforeSessionId,\n nextOrder: move.nextOrder,\n insertSessionBefore,\n setOrder: sessionOrder.actions.setOrder,\n updatedAtById: updatedAtById(sessionIds, source.sessions),\n }).catch((error) => {\n setActionError(toWorktreeViewError(error));\n });\n };\n const commitWorktreeDrag = (activeDrag, over, worktreeIds, workspaceId) => {\n if (worktreeDropCommitted.current)\n return;\n worktreeDropCommitted.current = true;\n setWorktreeDrag(undefined);\n if (activeDrag.workspaceId !== workspaceId)\n return;\n const move = resolveWorktreeMove(worktreeIds, activeDrag.worktreeId, over.worktreeId, over.half);\n if (move === undefined)\n return;\n if (insertWorktreeBefore === undefined) {\n setActionError({\n code: 'WORKTREE_ORDER_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionError(undefined);\n void insertWorktreeBefore(workspaceId, activeDrag.worktreeId, move.beforeWorktreeId)\n .then(() => refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n invalidateContext: false,\n }))\n .catch((error) => {\n setActionError(toRetryableWorktreeOrderError(error));\n });\n };\n return {\n workspaceDrag,\n setWorkspaceDrag,\n workspaceDropCommitted,\n sessionDrag,\n setSessionDrag,\n sessionDropCommitted,\n worktreeDrag,\n setWorktreeDrag,\n worktreeDropCommitted,\n commitWorkspaceDrag,\n commitSessionDrag,\n commitWorktreeDrag,\n };\n}\n//# sourceMappingURL=useDragActions.js.map","import { mergeWorktreeView, toWorktreeViewError, } from '../../view/worktree-view.js';\nexport function useLifecycleActions({ read, lifecycleState, source, props, mutation }) {\n const { viewByWorkspace, readStateRef, refresh, setReadState } = read;\n const { worktreeCleanDisk, worktreeForget, permissionRetryPending, cleanupGuard, setWorktreeBranchAdoption, worktreeBranchAdoption, branchAdoptionGuard, } = lifecycleState;\n const { mode, permissionNoticeSnapshot, workspaceIdsRef } = source;\n const { permission, permissionNotice, onPermissionNotice, manager, t, viewReader } = props;\n const { actionPending, setActionPending, runMutation, setActionError } = mutation;\n const latestLifecycleTarget = (target) => target === undefined\n ? undefined\n : viewByWorkspace\n .get(target.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === target.worktreeId);\n const cleanDiskTarget = latestLifecycleTarget(worktreeCleanDisk);\n const forgetTarget = latestLifecycleTarget(worktreeForget);\n const permissionRetryTarget = mode === 'worktree' &&\n permissionNoticeSnapshot?.result.retryable === true &&\n permission?.normalizeDetachedWorktreePermissions !== undefined\n ? viewByWorkspace\n .get(permissionNoticeSnapshot.workspaceId)\n ?.worktrees.find((record) => record.worktreeId === permissionNoticeSnapshot.worktreeId &&\n record.diskCleanup === 'completed')\n : undefined;\n const retryCleanupPermissions = async () => {\n if (!permissionRetryTarget || !permission || actionPending || permissionRetryPending.current)\n return;\n const target = {\n workspaceId: permissionRetryTarget.workspaceId,\n worktreeId: permissionRetryTarget.worktreeId,\n };\n const notice = permissionNoticeSnapshot;\n const generation = cleanupGuard.current.begin();\n const isCurrent = () => cleanupGuard.current.isCurrent(generation) &&\n permissionNotice?.getSnapshot() === notice &&\n readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId &&\n view.worktrees.some((record) => record.worktreeId === target.worktreeId && record.diskCleanup === 'completed'));\n if (!isCurrent())\n return;\n permissionRetryPending.current = true;\n setActionPending(true);\n try {\n const result = await permission.normalizeDetachedWorktreePermissions(target);\n if (isCurrent())\n onPermissionNotice?.(target, result);\n }\n catch {\n if (isCurrent())\n onPermissionNotice?.(target, { status: 'unverified', retryable: true });\n }\n finally {\n if (cleanupGuard.current.isCurrent(generation)) {\n permissionRetryPending.current = false;\n setActionPending(false);\n }\n }\n };\n const recoveryAction = (error) => {\n const workspaceId = error?.details?.workspaceId;\n if (!manager ||\n error === undefined ||\n ![\n 'WORKTREE_RECOVERY_REQUIRED',\n 'SIDECAR_SYNC_REQUIRED',\n 'WORKTREE_IDENTITY_CHANGED',\n ].includes(error.code) ||\n typeof workspaceId !== 'string')\n return null;\n return {\n label: t('worktree.retryRecovery'),\n disabled: actionPending,\n onClick: () => {\n void runMutation(() => manager.recoverWorktrees({ workspaceId }), {\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n });\n },\n };\n };\n const branchActions = (record) => ({\n onAdoptBranch: record.health === 'branch-drift' && typeof record.currentBranch === 'string'\n ? () => {\n setWorktreeBranchAdoption(record);\n setActionError(undefined);\n }\n : undefined,\n onRecover: record.health === 'recovery-needed'\n ? () => {\n if (!manager)\n return;\n void runMutation(() => manager.recoverWorktrees({ workspaceId: record.workspaceId }), {\n scope: { kind: 'workspace', workspaceId: record.workspaceId },\n preserveCurrent: true,\n });\n }\n : undefined,\n });\n const refreshBranchAdoption = async () => {\n const target = worktreeBranchAdoption;\n if (!manager || !target)\n return;\n const generation = branchAdoptionGuard.current.begin();\n const isCurrent = () => branchAdoptionGuard.current.isCurrent(generation);\n setActionPending(true);\n try {\n await refresh({\n scope: { kind: 'workspace', workspaceId: target.workspaceId },\n preserveCurrent: true,\n });\n if (!isCurrent())\n return;\n const view = await viewReader.read(target.workspaceId);\n if (!isCurrent())\n return;\n if (!workspaceIdsRef.current.includes(target.workspaceId)) {\n setWorktreeBranchAdoption(undefined);\n setActionError(undefined);\n return;\n }\n const latest = view.worktrees.find((record) => record.worktreeId === target.worktreeId);\n setReadState((current) => ({ ...current, views: mergeWorktreeView(current.views, view) }));\n setWorktreeBranchAdoption(latest?.health === 'branch-drift' && typeof latest.currentBranch === 'string'\n ? latest\n : undefined);\n setActionError(undefined);\n }\n catch (error) {\n if (isCurrent())\n setActionError(toWorktreeViewError(error));\n }\n finally {\n if (isCurrent())\n setActionPending(false);\n }\n };\n const branchLabel = (record) => record.health === 'branch-drift'\n ? `${record.branch} → ${record.currentBranch ?? t('worktree.detachedHead')}`\n : record.branch;\n return {\n latestLifecycleTarget,\n cleanDiskTarget,\n forgetTarget,\n permissionRetryTarget,\n retryCleanupPermissions,\n recoveryAction,\n branchActions,\n refreshBranchAdoption,\n branchLabel,\n };\n}\n//# sourceMappingURL=useLifecycleActions.js.map","import { useEffect, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard } from '../../view/worktree-view.js';\nexport function useLifecycleState({ props, source, mutation }) {\n const { manager } = props;\n const { mode } = source;\n const { setActionPending } = mutation;\n const [worktreeBranchAdoption, setWorktreeBranchAdoption] = useState();\n const [worktreeRemoval, setWorktreeRemoval] = useState();\n const [worktreeCleanDisk, setWorktreeCleanDisk] = useState();\n const [worktreeForget, setWorktreeForget] = useState();\n const cleanupGuard = useRef(createWorktreeRefreshGuard());\n const branchAdoptionGuard = useRef(createWorktreeRefreshGuard());\n useEffect(() => {\n const guard = branchAdoptionGuard.current;\n setWorktreeBranchAdoption(undefined);\n return () => guard.invalidate();\n }, [manager, mode]);\n const permissionRetryPending = useRef(false);\n useEffect(() => {\n const guard = cleanupGuard.current;\n permissionRetryPending.current = false;\n setActionPending(false);\n return () => guard.invalidate();\n }, [manager, mode]);\n return {\n worktreeBranchAdoption,\n setWorktreeBranchAdoption,\n worktreeRemoval,\n setWorktreeRemoval,\n worktreeCleanDisk,\n setWorktreeCleanDisk,\n worktreeForget,\n setWorktreeForget,\n cleanupGuard,\n branchAdoptionGuard,\n permissionRetryPending,\n };\n}\n//# sourceMappingURL=useLifecycleState.js.map","import { useState } from 'react';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useNativeActions({ source, props, mutation }) {\n const { workspaces } = source;\n const { renameWorkspace, deleteWorkspace, renameSession, archiveSession } = props;\n const { runMutation } = mutation;\n const [sessionRenameTarget, setSessionRenameTarget] = useState();\n const [sessionRenameDraft, setSessionRenameDraft] = useState('');\n const [sessionRenamePending, setSessionRenamePending] = useState(false);\n const [sessionRenameError, setSessionRenameError] = useState();\n const [workspaceRenameTarget, setWorkspaceRenameTarget] = useState();\n const [workspaceRenameDraft, setWorkspaceRenameDraft] = useState('');\n const [workspaceRenamePending, setWorkspaceRenamePending] = useState(false);\n const [workspaceRenameError, setWorkspaceRenameError] = useState();\n const [workspaceDeleteTarget, setWorkspaceDeleteTarget] = useState();\n const [workspaceDeletePending, setWorkspaceDeletePending] = useState(false);\n const [workspaceDeleteError, setWorkspaceDeleteError] = useState();\n const workspaceRenameTrimmed = workspaceRenameDraft.trim();\n const workspaceRenameDuplicate = workspaceRenameTarget !== undefined &&\n workspaceRenameTrimmed.length > 0 &&\n workspaces.items.some((workspace) => workspace.workspaceId !== workspaceRenameTarget.workspaceId &&\n workspace.title === workspaceRenameTrimmed);\n const workspaceRenameBlocked = workspaceRenamePending ||\n workspaceRenameTarget === undefined ||\n workspaceRenameTrimmed.length === 0 ||\n workspaceRenameTrimmed === workspaceRenameTarget?.currentTitle ||\n workspaceRenameDuplicate;\n const openWorkspaceRename = (workspace) => {\n setWorkspaceRenameTarget({\n workspaceId: workspace.workspaceId,\n currentTitle: workspace.title,\n });\n setWorkspaceRenameDraft(workspace.title);\n setWorkspaceRenameError(undefined);\n };\n const closeWorkspaceRename = () => {\n if (workspaceRenamePending)\n return;\n setWorkspaceRenameTarget(undefined);\n setWorkspaceRenameError(undefined);\n };\n const confirmWorkspaceRename = async () => {\n const target = workspaceRenameTarget;\n if (workspaceRenameBlocked || target === undefined)\n return;\n if (renameWorkspace === undefined) {\n setWorkspaceRenameError({\n code: 'WORKSPACE_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceRenamePending(true);\n setWorkspaceRenameError(undefined);\n try {\n await renameWorkspace(target.workspaceId, workspaceRenameTrimmed);\n setWorkspaceRenameTarget(undefined);\n }\n catch (error) {\n setWorkspaceRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceRenamePending(false);\n }\n };\n const openWorkspaceDelete = (workspace) => {\n setWorkspaceDeleteTarget({ workspaceId: workspace.workspaceId, title: workspace.title });\n setWorkspaceDeleteError(undefined);\n };\n const closeWorkspaceDelete = () => {\n if (workspaceDeletePending)\n return;\n setWorkspaceDeleteTarget(undefined);\n setWorkspaceDeleteError(undefined);\n };\n const confirmWorkspaceDelete = async () => {\n const target = workspaceDeleteTarget;\n if (target === undefined || workspaceDeletePending)\n return;\n if (deleteWorkspace === undefined) {\n setWorkspaceDeleteError({\n code: 'WORKSPACE_DELETE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setWorkspaceDeletePending(true);\n setWorkspaceDeleteError(undefined);\n try {\n await deleteWorkspace(target.workspaceId);\n setWorkspaceDeleteTarget(undefined);\n }\n catch (error) {\n setWorkspaceDeleteError(toNativeWorktreeViewError(error));\n }\n finally {\n setWorkspaceDeletePending(false);\n }\n };\n const openSessionRename = (sessionId, currentTitle) => {\n setSessionRenameTarget({ sessionId, currentTitle });\n setSessionRenameDraft(currentTitle);\n setSessionRenameError(undefined);\n };\n const closeSessionRename = () => {\n if (sessionRenamePending)\n return;\n setSessionRenameTarget(undefined);\n setSessionRenameError(undefined);\n };\n const confirmSessionRename = async () => {\n const target = sessionRenameTarget;\n const title = sessionRenameDraft.trim();\n if (target === undefined || title.length === 0 || sessionRenamePending)\n return;\n if (renameSession === undefined) {\n setSessionRenameError({\n code: 'SESSION_RENAME_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setSessionRenamePending(true);\n setSessionRenameError(undefined);\n try {\n await renameSession(target.sessionId, title);\n setSessionRenameTarget(undefined);\n }\n catch (error) {\n setSessionRenameError(toNativeWorktreeViewError(error));\n }\n finally {\n setSessionRenamePending(false);\n }\n };\n const archiveWorktreeSession = async (sessionId) => {\n if (archiveSession === undefined)\n return;\n await runMutation(() => archiveSession(sessionId));\n };\n return {\n sessionRenameTarget,\n setSessionRenameTarget,\n sessionRenameDraft,\n setSessionRenameDraft,\n sessionRenamePending,\n setSessionRenamePending,\n sessionRenameError,\n setSessionRenameError,\n workspaceRenameTarget,\n setWorkspaceRenameTarget,\n workspaceRenameDraft,\n setWorkspaceRenameDraft,\n workspaceRenamePending,\n setWorkspaceRenamePending,\n workspaceRenameError,\n setWorkspaceRenameError,\n workspaceDeleteTarget,\n setWorkspaceDeleteTarget,\n workspaceDeletePending,\n setWorkspaceDeletePending,\n workspaceDeleteError,\n setWorkspaceDeleteError,\n workspaceRenameTrimmed,\n workspaceRenameDuplicate,\n workspaceRenameBlocked,\n openWorkspaceRename,\n closeWorkspaceRename,\n confirmWorkspaceRename,\n openWorkspaceDelete,\n closeWorkspaceDelete,\n confirmWorkspaceDelete,\n openSessionRename,\n closeSessionRename,\n confirmSessionRename,\n archiveWorktreeSession,\n };\n}\n//# sourceMappingURL=useNativeActions.js.map","import { useRef, useState } from 'react';\nimport { createWorktreeModalViewLoader, createWorktreeRefreshGuard, } from '../../view/worktree-view.js';\nexport function useRegistrationState({ props }) {\n const { viewReader } = props;\n const [worktreeModalWorkspaceId, setWorktreeModalWorkspaceId] = useState();\n const [modalReadError, setModalReadError] = useState();\n const [modalReadLoading, setModalReadLoading] = useState(false);\n const [worktreeModalMode, setWorktreeModalMode] = useState('create');\n const [importCandidates, setImportCandidates] = useState({\n status: 'idle',\n candidates: [],\n });\n const [selectedImportPath, setSelectedImportPath] = useState();\n const [selectedBranch, setSelectedBranch] = useState('');\n const [newBranch, setNewBranch] = useState('');\n const modalReadLoader = useRef(createWorktreeModalViewLoader(viewReader));\n const modalReadViewRef = useRef();\n const importCandidatesGuard = useRef(createWorktreeRefreshGuard());\n const modalWorkspaceIdRef = useRef(worktreeModalWorkspaceId);\n modalWorkspaceIdRef.current = worktreeModalWorkspaceId;\n return {\n worktreeModalWorkspaceId,\n setWorktreeModalWorkspaceId,\n modalReadError,\n setModalReadError,\n modalReadLoading,\n setModalReadLoading,\n worktreeModalMode,\n setWorktreeModalMode,\n importCandidates,\n setImportCandidates,\n selectedImportPath,\n setSelectedImportPath,\n selectedBranch,\n setSelectedBranch,\n newBranch,\n setNewBranch,\n modalReadLoader,\n modalReadViewRef,\n importCandidatesGuard,\n modalWorkspaceIdRef,\n };\n}\n//# sourceMappingURL=useRegistrationState.js.map","import { sameWindowsPath } from '../../contract/windows-path.js';\nimport { createSessionForWorktree, WorktreeSessionBindingError, } from '../view/worktree-view.js';\nimport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport { WorktreeSessionPermissionError } from '../view/worktree-view-errors.js';\nexport class WorktreeSessionActionError extends Error {\n code;\n retryable;\n details;\n constructor(code, message, retryable, details = {}) {\n super(message);\n this.code = code;\n this.retryable = retryable;\n this.name = 'WorktreeSessionActionError';\n this.details = details;\n }\n}\n/**\n * Keep the confirmation and second permission call in one place for new,\n * reused, and retried Sessions. The Host still validates the relation.\n */\nexport async function ensureWorktreeSessionPermission(input) {\n if (input.permission === undefined)\n return;\n const request = {\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n binding: 'active',\n };\n let result;\n try {\n result = await input.permission.ensureWorktreePermission(request);\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (result.status === 'confirmation-required') {\n let confirmed;\n try {\n confirmed = input.confirmFullAccess === undefined\n ? false\n : await input.confirmFullAccess({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n if (!confirmed) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n try {\n result = await input.permission.ensureWorktreePermission({ ...request, confirmed: true });\n }\n catch (error) {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession, error);\n }\n }\n if (result.status === 'confirmation-required') {\n throw new WorktreeSessionPermissionError(input.sessionId, input.createdSession);\n }\n input.onPermissionResult?.({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: input.sessionId,\n cwd: input.cwd,\n }, result);\n}\n/**\n * Compare paths for browser-side candidate filtering and the no-Host safety fallback.\n * When Host validation is available, it remains authoritative for physical aliases.\n */\nfunction sameWorktreePath(left, right) {\n return left === right || sameWindowsPath(left, right);\n}\nexport function resolveWorktreeSessionAction(input) {\n if (input.target.status !== 'active' ||\n input.target.health === 'repair' ||\n input.target.health === 'recovery-needed') {\n return { kind: 'reject', reason: 'worktree-not-available' };\n }\n if (input.sessions.phase !== 'ready') {\n return { kind: 'wait', reason: 'sessions-not-ready' };\n }\n const targetBinding = input.bindings.find((binding) => binding.worktreeId === input.target.worktreeId && binding.status === 'active');\n if (targetBinding !== undefined) {\n const summary = input.sessions.byId[targetBinding.sessionId];\n if (summary === undefined) {\n return {\n kind: 'repair',\n reason: 'active-binding-session-missing',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.cwd === undefined ||\n (!input.hostValidatesPhysicalPath &&\n !sameWorktreePath(summary.cwd, input.target.absolutePath) &&\n (input.target.gitRootPath === undefined || !sameWorktreePath(summary.cwd, input.target.gitRootPath)))) {\n return {\n kind: 'repair',\n reason: 'active-binding-cwd-mismatch',\n sessionId: targetBinding.sessionId,\n };\n }\n if (summary.blank === true &&\n !input.archivedSessionIds.includes(targetBinding.sessionId)) {\n return { kind: 'open-bound', sessionId: targetBinding.sessionId };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary === undefined ||\n summary.blank === undefined ||\n (summary.blank === true && summary.cwd === undefined)) {\n return { kind: 'wait', reason: 'session-facts-incomplete' };\n }\n }\n for (const sessionId of input.sessions.ids) {\n const summary = input.sessions.byId[sessionId];\n if (summary?.blank !== true ||\n summary.cwd === undefined ||\n !sameWorktreePath(summary.cwd, input.target.absolutePath) ||\n input.archivedSessionIds.includes(sessionId)) {\n continue;\n }\n if (!input.bindings.some((binding) => binding.sessionId === sessionId)) {\n return { kind: 'bind-existing', sessionId };\n }\n }\n return { kind: 'create' };\n}\nfunction actionError(action) {\n switch (action.kind) {\n case 'wait':\n return new WorktreeSessionActionError(action.reason === 'sessions-not-ready' ? 'SESSION_LIST_NOT_READY' : 'SESSION_FACTS_INCOMPLETE', '', true);\n case 'repair':\n return new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', action.reason, true, {\n ...(action.sessionId === undefined ? {} : { sessionId: action.sessionId }),\n });\n case 'reject':\n return new WorktreeSessionActionError('WORKTREE_SESSION_UNAVAILABLE', action.reason, false);\n default:\n return new WorktreeSessionActionError('WORKTREE_SESSION_ACTION_FAILED', '', true);\n }\n}\nexport async function retryWorktreeSessionBinding(input) {\n if (input.archived) {\n throw new WorktreeSessionActionError('SESSION_ARCHIVED', '', false, {\n sessionId: input.pending.sessionId,\n });\n }\n try {\n await input.manager.bindSession({\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n sessionId: input.pending.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(input.pending.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: input.permission,\n confirmFullAccess: input.confirmFullAccess,\n onPermissionResult: input.onPermissionResult,\n sessionId: input.pending.sessionId,\n workspaceId: input.pending.workspaceId,\n worktreeId: input.pending.worktreeId,\n cwd: input.pending.cwd,\n createdSession: true,\n });\n input.ensureSessionWorkspace(input.pending.workspaceId, input.pending.sessionId);\n input.openSession(input.pending.sessionId);\n return input.pending.sessionId;\n}\n/**\n * Browser-only Worktree `+` connector. It owns the read/resolve/bind/create/open\n * sequence and coalesces repeated calls for one Worktree within one Client fiber.\n */\nexport function createWorktreeSessionConnector(options) {\n const inFlight = new Map();\n let disposed = false;\n const run = async (input) => {\n const [worktrees, bindings] = await Promise.all([\n options.manager.listWorktrees({ workspaceId: input.workspaceId }),\n options.manager.listBindings({ workspaceId: input.workspaceId }),\n ]);\n if (disposed) {\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n }\n const target = worktrees.find((record) => record.worktreeId === input.worktreeId);\n if (target === undefined ||\n (options.permission === undefined && !sameWorktreePath(target.absolutePath, input.cwd))) {\n throw new WorktreeSessionActionError('WORKTREE_SESSION_REPAIR_REQUIRED', 'worktree target unavailable', true);\n }\n const action = resolveWorktreeSessionAction({\n target,\n sessions: options.sessions.getSnapshot(),\n archivedSessionIds: options.archivedSessionIds(),\n bindings,\n hostValidatesPhysicalPath: options.permission !== undefined,\n });\n if (action.kind === 'open-bound') {\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n return action.sessionId;\n }\n if (action.kind === 'bind-existing') {\n try {\n await options.manager.bindSession({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n sessionId: action.sessionId,\n });\n }\n catch (error) {\n throw new WorktreeSessionBindingError(action.sessionId, error);\n }\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId: action.sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: false,\n });\n if (!disposed) {\n options.ensureSessionWorkspace(input.workspaceId, action.sessionId);\n if (!disposed)\n options.openSession(action.sessionId);\n }\n return action.sessionId;\n }\n if (action.kind !== 'create')\n throw actionError(action);\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n return createSessionForWorktree({\n ...input,\n createSession: options.createSession,\n manager: options.manager,\n beforeOpen: async (sessionId) => {\n if (disposed)\n throw new WorktreeSessionActionError('CLIENT_DISPOSED', '', false);\n await ensureWorktreeSessionPermission({\n permission: options.permission,\n confirmFullAccess: options.confirmFullAccess,\n onPermissionResult: options.onPermissionResult,\n sessionId,\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n cwd: input.cwd,\n createdSession: true,\n });\n },\n openSession: (sessionId) => {\n if (!disposed)\n options.openSession(sessionId);\n },\n });\n };\n return {\n create(input) {\n const key = `${input.workspaceId}\\u0000${input.worktreeId}`;\n const current = inFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = run(input).finally(() => {\n if (inFlight.get(key) === promise)\n inFlight.delete(key);\n });\n inFlight.set(key, promise);\n return promise;\n },\n dispose() {\n disposed = true;\n inFlight.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session.js.map","import { useState } from 'react';\nimport { openWorktreeSession } from '../../view/navigation.js';\nimport { retryWorktreeSessionBinding } from '../../session/worktree-session.js';\nimport { toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nimport { toNativeWorktreeViewError } from '../shared.js';\nexport function useSessionActions({ source, props, mutation, read }) {\n const { archivedSessionIds } = source;\n const { createSessionForWorktree: createSessionCallback, manager, ensureSessionWorkspace, permission, confirmFullAccess, onPermissionResult, openSession, retryForkSession, } = props;\n const { setActionError, setActionPending } = mutation;\n const { refresh } = read;\n const [pendingSessionBinding, setPendingSessionBinding] = useState();\n const [forkRetryKey, setForkRetryKey] = useState();\n const pendingSessionArchived = pendingSessionBinding !== undefined &&\n archivedSessionIds.includes(pendingSessionBinding.sessionId);\n const createSession = async (input) => {\n if (createSessionCallback === undefined) {\n setActionError({\n code: 'SESSION_CREATE_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n await createSessionCallback(input);\n await refresh({\n scope: { kind: 'workspace', workspaceId: input.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError) {\n setPendingSessionBinding({ ...input, sessionId: error.sessionId, error: toWorktreeViewError(error) });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...input,\n sessionId: error.sessionId,\n permissionRequired: true,\n error: toWorktreeViewError(error),\n });\n }\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retrySessionBinding = async () => {\n if (manager === undefined || pendingSessionBinding === undefined || pendingSessionArchived ||\n pendingSessionBinding.error?.retryable === false)\n return;\n const pending = pendingSessionBinding;\n setActionPending(true);\n setActionError(undefined);\n try {\n await retryWorktreeSessionBinding({\n manager,\n pending,\n archived: false,\n ensureSessionWorkspace: (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n },\n permission,\n confirmFullAccess,\n onPermissionResult,\n openSession,\n });\n setPendingSessionBinding(undefined);\n await refresh({\n scope: { kind: 'workspace', workspaceId: pending.workspaceId },\n preserveCurrent: true,\n });\n }\n catch (error) {\n setPendingSessionBinding({ ...pending, error: toWorktreeViewError(error) });\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n const retryForkBinding = async (key) => {\n if (retryForkSession === undefined || forkRetryKey !== undefined)\n return;\n setForkRetryKey(key);\n try {\n await retryForkSession(key);\n }\n catch (error) {\n setActionError(toNativeWorktreeViewError(error));\n }\n finally {\n setForkRetryKey(undefined);\n }\n };\n const openWorkspaceSession = (workspaceId, sessionId) => {\n ensureSessionWorkspace?.(workspaceId, sessionId);\n openWorktreeSession({ open: openSession }, sessionId);\n };\n return {\n pendingSessionBinding,\n setPendingSessionBinding,\n forkRetryKey,\n setForkRetryKey,\n pendingSessionArchived,\n createSession,\n retrySessionBinding,\n retryForkBinding,\n openWorkspaceSession,\n };\n}\n//# sourceMappingURL=useSessionActions.js.map","/** Keep one current Session row in the Worktree content scrollport. */\nexport function scrollCurrentSessionIntoView(root, sessionId) {\n if (root === null)\n return false;\n const row = Array.from(root.querySelectorAll('[data-session-id]')).find((candidate) => candidate.dataset.sessionId === sessionId);\n if (row === undefined)\n return false;\n const rootRect = root.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n if (rowRect.top < rootRect.top) {\n root.scrollTop -= rootRect.top - rowRect.top;\n }\n else if (rowRect.bottom > rootRect.bottom) {\n root.scrollTop += rowRect.bottom - rootRect.bottom;\n }\n return true;\n}\n//# sourceMappingURL=worktree-session-position.js.map","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { isMainExpanded, isWorkspaceExpanded, isWorktreeExpanded, } from '../../view/worktree-expand-state.js';\nimport { scrollCurrentSessionIntoView } from '../../session/worktree-session-position.js';\nimport { clearSessionGroupExpansion, currentSessionRevealKeys, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, resolveCurrentSessionLocation, } from '../selectors.js';\nexport function useSessionExpansion({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { currentSessionId, workspaces, mode, expandSnapshot, workspaceIds } = source;\n const { expandState } = props;\n const [searchQuery, setSearchQuery] = useState('');\n const [searchExpanded, setSearchExpanded] = useState(false);\n const searchRoot = useRef(null);\n const searchInput = useRef(null);\n const contentRef = useRef(null);\n const [currentSessionReveal, setCurrentSessionReveal] = useState();\n const revealSessionIdRef = useRef(Symbol('initial'));\n const revealModeRef = useRef(Symbol('initial'));\n let activeReveal = currentSessionReveal;\n if (currentSessionId !== revealSessionIdRef.current || mode !== revealModeRef.current) {\n revealSessionIdRef.current = currentSessionId;\n revealModeRef.current = mode;\n activeReveal =\n currentSessionId === undefined || mode !== 'worktree'\n ? undefined\n : { sessionId: currentSessionId, suppressedKeys: {} };\n setCurrentSessionReveal(activeReveal);\n }\n const searchQueryRef = useRef(searchQuery);\n searchQueryRef.current = searchQuery;\n useEffect(() => {\n if (!searchExpanded)\n return;\n const onClick = (event) => {\n if (!(event.target instanceof Node) || searchRoot.current?.contains(event.target) === true)\n return;\n searchInput.current?.blur();\n if (searchQuery.trim() !== '')\n return;\n setSearchExpanded(false);\n };\n document.addEventListener('click', onClick);\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [searchExpanded, searchQuery]);\n useEffect(() => {\n if (searchExpanded) {\n searchInput.current?.focus({ preventScroll: true });\n }\n }, [searchExpanded]);\n const locateGenerationRef = useRef(0);\n const positionedLocateGenerationRef = useRef();\n const [expandedArchivedWorkspaces, setExpandedArchivedWorkspaces] = useState({});\n const [expandedSessionGroups, setExpandedSessionGroups] = useState({});\n const query = searchQuery.trim().toLocaleLowerCase();\n const currentSessionLocation = useMemo(() => readState.status === 'ready'\n ? resolveCurrentSessionLocation(currentSessionId, workspaces.items, readState.views)\n : undefined, [currentSessionId, readState.status, readState.views, workspaces.items]);\n const currentRevealKeys = useMemo(() => new Set(currentSessionRevealKeys(currentSessionLocation)), [currentSessionLocation]);\n const isCurrentSessionReveal = (key) => activeReveal !== undefined &&\n activeReveal.sessionId === currentSessionId &&\n currentRevealKeys.has(key) &&\n activeReveal.suppressedKeys[key] !== true;\n useLayoutEffect(() => {\n locateGenerationRef.current += 1;\n positionedLocateGenerationRef.current = undefined;\n if (mode !== 'worktree') {\n setSearchExpanded(false);\n return;\n }\n if (searchQueryRef.current.trim().length > 0) {\n setSearchQuery('');\n setSearchExpanded(false);\n }\n }, [currentSessionId, mode]);\n useLayoutEffect(() => {\n if (mode !== 'worktree' ||\n currentSessionId === undefined ||\n currentSessionLocation === undefined) {\n return;\n }\n const generation = locateGenerationRef.current;\n if (positionedLocateGenerationRef.current === generation)\n return;\n let cancelled = false;\n const frame = requestAnimationFrame(() => {\n if (cancelled || generation !== locateGenerationRef.current)\n return;\n if (!scrollCurrentSessionIntoView(contentRef.current, currentSessionId))\n return;\n positionedLocateGenerationRef.current = generation;\n });\n return () => {\n cancelled = true;\n cancelAnimationFrame(frame);\n };\n }, [\n currentSessionId,\n currentSessionLocation,\n activeReveal,\n expandSnapshot,\n mode,\n query,\n readState.status,\n ]);\n useEffect(() => {\n // Pruning is destructive: require a confirmed Workspace list whose projections all\n // arrived. A pending or partial read means \"nothing arrived yet\", not \"nothing exists\".\n if (readState.status !== 'ready' ||\n isPendingListPhase(workspaces.phase) ||\n !isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views))\n return;\n expandState.actions.retain(workspaceIds, readState.views.flatMap((view) => view.worktrees.map((record) => record.worktreeId)));\n }, [expandState, readState.status, readState.views, workspaceIds, workspaces.phase]);\n const clearSessionGroups = (groupKeys) => {\n if (groupKeys.length === 0)\n return;\n setExpandedSessionGroups((current) => clearSessionGroupExpansion(current, groupKeys));\n };\n const suppressCurrentSessionReveal = (key) => {\n if (!isCurrentSessionReveal(key))\n return false;\n setCurrentSessionReveal((current) => {\n if (current === undefined || current.sessionId !== currentSessionId)\n return current;\n return {\n ...current,\n suppressedKeys: { ...current.suppressedKeys, [key]: true },\n };\n });\n return true;\n };\n const toggleWorkspace = (workspaceId) => {\n const persistedExpanded = isWorkspaceExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('workspace:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('workspace:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n return;\n }\n expandState.actions.toggleWorkspace(workspaceId);\n if (visuallyExpanded) {\n clearSessionGroups([\n 'main:' + workspaceId,\n ...(viewByWorkspace.get(workspaceId)?.worktrees.map((record) => record.worktreeId) ?? []).map((worktreeId) => 'worktree:' + worktreeId),\n ]);\n }\n };\n const toggleMain = (workspaceId) => {\n const persistedExpanded = isMainExpanded(expandSnapshot, workspaceId);\n const autoExpanded = isCurrentSessionReveal('main:' + workspaceId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('main:' + workspaceId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['main:' + workspaceId]);\n return;\n }\n expandState.actions.toggleMain(workspaceId);\n if (visuallyExpanded)\n clearSessionGroups(['main:' + workspaceId]);\n };\n const toggleWorktree = (worktreeId) => {\n const persistedExpanded = isWorktreeExpanded(expandSnapshot, worktreeId);\n const autoExpanded = isCurrentSessionReveal('worktree:' + worktreeId);\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal('worktree:' + worktreeId);\n }\n if (visuallyExpanded && !persistedExpanded) {\n clearSessionGroups(['worktree:' + worktreeId]);\n return;\n }\n expandState.actions.toggleWorktree(worktreeId);\n if (visuallyExpanded)\n clearSessionGroups(['worktree:' + worktreeId]);\n };\n const toggleArchivedWorkspace = (workspaceId) => {\n const archivedKey = 'archived:' + workspaceId;\n const autoExpanded = isCurrentSessionReveal(archivedKey);\n const persistedExpanded = expandedArchivedWorkspaces[workspaceId] === true;\n const visuallyExpanded = persistedExpanded || autoExpanded;\n if (visuallyExpanded && autoExpanded) {\n suppressCurrentSessionReveal(archivedKey);\n }\n setExpandedArchivedWorkspaces((current) => ({\n ...current,\n [workspaceId]: !visuallyExpanded,\n }));\n };\n const toggleSessionGroup = (groupKey, autoExpanded) => {\n const transientExpanded = expandedSessionGroups[groupKey] === true;\n if (autoExpanded) {\n suppressCurrentSessionReveal('session-group:' + groupKey);\n setExpandedSessionGroups((current) => {\n const next = { ...current };\n delete next[groupKey];\n return next;\n });\n return;\n }\n setExpandedSessionGroups((current) => ({\n ...current,\n [groupKey]: !transientExpanded,\n }));\n };\n return {\n searchQuery,\n setSearchQuery,\n searchExpanded,\n setSearchExpanded,\n searchRoot,\n searchInput,\n contentRef,\n currentSessionReveal: activeReveal,\n setCurrentSessionReveal,\n searchQueryRef,\n locateGenerationRef,\n positionedLocateGenerationRef,\n expandedArchivedWorkspaces,\n setExpandedArchivedWorkspaces,\n expandedSessionGroups,\n setExpandedSessionGroups,\n query,\n currentSessionLocation,\n currentRevealKeys,\n isCurrentSessionReveal,\n clearSessionGroups,\n suppressCurrentSessionReveal,\n toggleWorkspace,\n toggleMain,\n toggleWorktree,\n toggleArchivedWorkspace,\n toggleSessionGroup,\n };\n}\n//# sourceMappingURL=useSessionExpansion.js.map","import { useEffect, useMemo } from 'react';\nimport { filterVisibleSessionIds } from '../../session/session-view.js';\nimport { unboundSessionIds, workspaceSessionIds } from '../../view/view-mode.js';\nimport { nextSessionOrderAccount, } from '../../session/worktree-session-order.js';\nimport { filterArchivedSessionIds } from '../../view/worktree-view.js';\nimport { bindingIdsFor, isCompleteWorktreeWorkspaceSnapshot, isPendingListPhase, } from '../selectors.js';\nimport { updatedAtById } from '../shared.js';\nexport function useSessionOrdering({ read, source, props }) {\n const { readState, viewByWorkspace } = read;\n const { workspaces, sessions, archivedSessionIds, sessionOrderSnapshot, mode, workspaceIds } = source;\n const { sessionOrder } = props;\n // DSH lists report a monotone `pending` → `ready` arrival phase, and an empty list in\n // the pending phase means \"nothing arrived yet\" rather than \"nothing exists\". Deriving\n // accounts from that read would reset every stored order to no order at all.\n const sourcesReady = readState.status === 'ready' &&\n !isPendingListPhase(sessions.phase) &&\n !isPendingListPhase(workspaces.phase);\n // Reconciling may run as soon as one Workspace projection is ready, but deleting accounts\n // for Workspaces that no longer exist requires the complete, non-empty projection.\n const canRetainAccounts = sourcesReady && isCompleteWorktreeWorkspaceSnapshot(workspaceIds, readState.views);\n const sessionOrderInputs = useMemo(() => {\n if (!sourcesReady)\n return [];\n const inputs = [];\n for (const workspace of workspaces.items) {\n // Before this Workspace's projection lands, which Sessions belong to a Worktree is\n // unknown. Skipping it keeps the stored order instead of rebuilding it from a guess.\n const view = viewByWorkspace.get(workspace.workspaceId);\n if (view === undefined)\n continue;\n const allWorkspaceSessionIds = filterArchivedSessionIds(workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), archivedSessionIds);\n const bindings = view.bindings;\n const boundSessionIds = new Set(bindings.map((binding) => binding.sessionId));\n const mainSessionIds = filterVisibleSessionIds(unboundSessionIds(allWorkspaceSessionIds, [...boundSessionIds]), sessions);\n inputs.push({\n accountKey: `main:${workspace.workspaceId}`,\n sessionIds: mainSessionIds,\n updatedAtById: updatedAtById(mainSessionIds, sessions),\n });\n for (const record of view.worktrees) {\n const worktreeSessionIds = filterVisibleSessionIds(filterArchivedSessionIds(bindingIdsFor(bindings, record.worktreeId).filter((sessionId) => sessions.ids.includes(sessionId)), archivedSessionIds), sessions);\n inputs.push({\n accountKey: `worktree:${record.worktreeId}`,\n sessionIds: worktreeSessionIds,\n updatedAtById: updatedAtById(worktreeSessionIds, sessions),\n });\n }\n }\n return inputs;\n }, [\n archivedSessionIds,\n sessions.byId,\n sessions.ids,\n sourcesReady,\n viewByWorkspace,\n workspaces,\n workspaces.items,\n ]);\n const orderedSessionIdsByAccount = useMemo(() => {\n const ordered = new Map();\n for (const input of sessionOrderInputs) {\n const previous = sessionOrderSnapshot.accounts[input.accountKey];\n ordered.set(input.accountKey, nextSessionOrderAccount({\n baseIds: input.sessionIds,\n updatedAtById: input.updatedAtById,\n previous,\n }).order);\n }\n return ordered;\n }, [sessionOrderInputs, sessionOrderSnapshot]);\n useEffect(() => {\n if (mode !== 'worktree' || sessionOrderInputs.length === 0)\n return;\n for (const input of sessionOrderInputs) {\n sessionOrder.actions.reconcile(input.accountKey, input.sessionIds, input.updatedAtById);\n }\n if (!canRetainAccounts)\n return;\n sessionOrder.actions.retain(sessionOrderInputs.map((input) => input.accountKey));\n }, [canRetainAccounts, mode, sessionOrder, sessionOrderInputs]);\n return { sessionOrderInputs, orderedSessionIdsByAccount };\n}\n//# sourceMappingURL=useSessionOrdering.js.map","import { useState } from 'react';\nexport function useSurfaceMenus() {\n const [openWorkspaceMenuId, setOpenWorkspaceMenuId] = useState();\n const [openMainMenuId, setOpenMainMenuId] = useState();\n const [openWorktreeMenuId, setOpenWorktreeMenuId] = useState();\n return {\n openWorkspaceMenuId,\n setOpenWorkspaceMenuId,\n openMainMenuId,\n setOpenMainMenuId,\n openWorktreeMenuId,\n setOpenWorktreeMenuId,\n };\n}\n//# sourceMappingURL=useSurfaceMenus.js.map","import { useState } from 'react';\nimport { toWorktreeViewError } from '../../view/worktree-view.js';\nexport function useSurfaceMutation({ read }) {\n const { refresh } = read;\n const [actionError, setActionError] = useState();\n const [actionPending, setActionPending] = useState(false);\n const runMutation = async (operation, refreshOptions) => {\n setActionPending(true);\n setActionError(undefined);\n try {\n await operation();\n if (refreshOptions !== undefined)\n await refresh(refreshOptions);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return { actionError, setActionError, actionPending, setActionPending, runMutation };\n}\n//# sourceMappingURL=useSurfaceMutation.js.map","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createWorktreeRefreshGuard, mergeWorktreeView, mergeWorktreeViews, toWorktreeViewError, } from '../../view/worktree-view.js';\nimport { worktreeActivityRefreshWorkspaceIds } from '../selectors.js';\nimport { EMPTY_READ_STATE } from '../shared.js';\nexport function useSurfaceRefresh({ source, props, registrationState }) {\n const { forkRecoverySnapshot, workspaceIdsRef, mode, workspaceIds, sessionPresentations } = source;\n const { manager, viewReader, invalidateWorktreeContext, syncSessionWorkspaces } = props;\n const { modalReadViewRef, setModalReadError, setModalReadLoading, modalReadLoader, setWorktreeModalWorkspaceId, } = registrationState;\n const [readState, setReadState] = useState(EMPTY_READ_STATE);\n const readStateRef = useRef(readState);\n readStateRef.current = readState;\n const refreshGuard = useRef(createWorktreeRefreshGuard());\n const targetRefreshGuards = useRef(new Map());\n const forkRecoveryRevisionRef = useRef(forkRecoverySnapshot.revision);\n const guardFor = (workspaceId) => {\n const current = targetRefreshGuards.current.get(workspaceId);\n if (current !== undefined)\n return current;\n const created = createWorktreeRefreshGuard();\n targetRefreshGuards.current.set(workspaceId, created);\n return created;\n };\n const refresh = useCallback(async (options = {}) => {\n if (manager === undefined) {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n setReadState(EMPTY_READ_STATE);\n return;\n }\n const scope = options.scope ?? { kind: 'global' };\n const preserveCurrent = options.preserveCurrent === true;\n const currentWorkspaceIds = workspaceIdsRef.current;\n if (scope.kind === 'global') {\n if (!preserveCurrent) {\n setReadState({ status: 'loading', views: [] });\n }\n const selectedWorkspaceIds = [...currentWorkspaceIds];\n for (const workspaceId of selectedWorkspaceIds) {\n viewReader.invalidate(workspaceId);\n }\n const contextRefresh = options.invalidateContext === false ? undefined : invalidateWorktreeContext?.();\n await refreshGuard.current.run(async () => {\n const [views] = await Promise.all([\n viewReader.readMany(selectedWorkspaceIds),\n contextRefresh ?? Promise.resolve(),\n ]);\n return views;\n }, (views) => {\n setReadState((current) => {\n const merged = mergeWorktreeViews(current.views, workspaceIdsRef.current, views);\n return {\n status: 'ready',\n views: modalReadViewRef.current === undefined\n ? merged\n : mergeWorktreeView(merged, modalReadViewRef.current),\n };\n });\n }, (error) => {\n if (preserveCurrent)\n throw error;\n setReadState({\n status: 'error',\n views: modalReadViewRef.current === undefined ? [] : [modalReadViewRef.current],\n error: toWorktreeViewError(error),\n });\n });\n return;\n }\n const requestedWorkspaceIds = scope.kind === 'workspace' ? [scope.workspaceId] : scope.workspaceIds;\n const selectedWorkspaceIds = [...new Set(requestedWorkspaceIds)].filter((workspaceId) => currentWorkspaceIds.includes(workspaceId));\n if (selectedWorkspaceIds.length === 0)\n return;\n await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {\n const guard = guardFor(workspaceId);\n if (!options.alreadyInvalidated) {\n viewReader.invalidate(workspaceId, { reuseInFlight: options.reuseInFlight });\n }\n const contextRefresh = options.invalidateContext === false\n ? undefined\n : invalidateWorktreeContext?.(workspaceId);\n const generation = guard.begin();\n try {\n const view = await viewReader.read(workspaceId);\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const remainingTargetError = current.targetError?.workspaceIds.filter((candidate) => candidate !== workspaceId) ?? [];\n const next = {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, [view]),\n error: undefined,\n };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n }\n catch (error) {\n if (!guard.isCurrent(generation))\n return;\n if (!workspaceIdsRef.current.includes(workspaceId))\n return;\n setReadState((current) => {\n const previousIds = current.targetError?.workspaceIds ?? [];\n return {\n ...current,\n status: 'ready',\n views: mergeWorktreeViews(current.views, workspaceIdsRef.current, []),\n error: undefined,\n targetError: {\n workspaceIds: [...new Set([...previousIds, workspaceId])],\n error: {\n ...toWorktreeViewError(error),\n retryable: true,\n },\n },\n };\n });\n }\n finally {\n await contextRefresh?.catch(() => undefined);\n }\n }));\n }, [invalidateWorktreeContext, manager, viewReader]);\n useEffect(() => props.subscribeToolChanges?.(({ workspaceId }) => {\n if (mode !== 'worktree')\n return;\n void refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n alreadyInvalidated: true,\n invalidateContext: false,\n });\n }), [props.subscribeToolChanges, mode, refresh]);\n const loadModalWorktreeView = useCallback((workspaceId) => {\n setModalReadError(undefined);\n setModalReadLoading(true);\n if (manager === undefined) {\n setModalReadLoading(false);\n setModalReadError({\n code: 'WORKTREE_VIEW_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n void modalReadLoader.current.load(workspaceId, (view) => {\n modalReadViewRef.current = view;\n setModalReadLoading(false);\n setReadState((current) => ({\n ...current,\n views: mergeWorktreeView(current.views, view),\n }));\n }, (error) => {\n setModalReadLoading(false);\n setModalReadError(toWorktreeViewError(error));\n });\n }, [manager, viewReader]);\n useEffect(() => {\n if (mode === 'worktree') {\n void refresh({ preserveCurrent: readStateRef.current.status === 'ready' });\n }\n else {\n refreshGuard.current.invalidate();\n for (const guard of targetRefreshGuards.current.values())\n guard.invalidate();\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n setReadState(EMPTY_READ_STATE);\n }\n }, [mode, refresh]);\n const previousWorkspaceIdsRef = useRef(workspaceIds);\n useEffect(() => {\n const previousWorkspaceIds = previousWorkspaceIdsRef.current;\n previousWorkspaceIdsRef.current = workspaceIds;\n if (mode !== 'worktree')\n return;\n const addedWorkspaceIds = workspaceIds.filter((workspaceId) => !previousWorkspaceIds.includes(workspaceId));\n const removedWorkspaceIds = previousWorkspaceIds.filter((workspaceId) => !workspaceIds.includes(workspaceId));\n for (const workspaceId of removedWorkspaceIds) {\n targetRefreshGuards.current.delete(workspaceId);\n }\n setReadState((current) => {\n const views = mergeWorktreeViews(current.views, workspaceIds, []);\n const remainingTargetError = current.targetError?.workspaceIds.filter((workspaceId) => workspaceIds.includes(workspaceId)) ?? [];\n const next = { ...current, views };\n if (remainingTargetError.length === 0) {\n const withoutTargetError = { ...next };\n delete withoutTargetError.targetError;\n return withoutTargetError;\n }\n return {\n ...next,\n targetError: {\n workspaceIds: remainingTargetError,\n error: current.targetError.error,\n },\n };\n });\n for (const workspaceId of addedWorkspaceIds) {\n void refresh({\n scope: { kind: 'workspace', workspaceId },\n preserveCurrent: true,\n }).catch(() => {\n // The target error remains visible and can be retried explicitly.\n });\n }\n }, [mode, refresh, workspaceIds]);\n useEffect(() => {\n if (forkRecoveryRevisionRef.current === forkRecoverySnapshot.revision)\n return;\n forkRecoveryRevisionRef.current = forkRecoverySnapshot.revision;\n if (mode !== 'worktree' || manager === undefined)\n return;\n if (forkRecoverySnapshot.affectedWorkspaceIds.length === 0)\n return;\n void refresh({\n scope: {\n kind: 'workspaces',\n workspaceIds: forkRecoverySnapshot.affectedWorkspaceIds,\n },\n preserveCurrent: readStateRef.current.status === 'ready',\n }).catch(() => {\n // Recovery state remains visible; the next explicit retry can refresh it again.\n });\n }, [\n forkRecoverySnapshot.affectedWorkspaceIds,\n forkRecoverySnapshot.revision,\n manager,\n mode,\n refresh,\n ]);\n useEffect(() => {\n if (readState.status !== 'ready' || syncSessionWorkspaces === undefined)\n return;\n syncSessionWorkspaces(readState.views.flatMap((view) => view.bindings.map((binding) => ({\n workspaceId: binding.workspaceId,\n sessionId: binding.sessionId,\n }))));\n }, [readState.status, readState.views, syncSessionWorkspaces]);\n const viewByWorkspace = useMemo(() => new Map(readState.views.map((view) => [view.workspaceId, view])), [readState.views]);\n const previousActivityRef = useRef(sessionPresentations);\n useEffect(() => {\n const previous = previousActivityRef.current;\n previousActivityRef.current = sessionPresentations;\n if (mode !== 'worktree')\n return;\n const affected = worktreeActivityRefreshWorkspaceIds(readStateRef.current.views, previous, sessionPresentations);\n if (affected.length > 0)\n void refresh({\n scope: { kind: 'workspaces', workspaceIds: affected },\n preserveCurrent: true,\n });\n }, [mode, refresh, sessionPresentations]);\n return {\n readState,\n setReadState,\n readStateRef,\n refreshGuard,\n targetRefreshGuards,\n forkRecoveryRevisionRef,\n guardFor,\n refresh,\n loadModalWorktreeView,\n previousWorkspaceIdsRef,\n viewByWorkspace,\n previousActivityRef,\n };\n}\n//# sourceMappingURL=useSurfaceRefresh.js.map","export function computeOverlayBounds(frame, newSession, footer) {\n if (newSession === undefined ||\n footer === undefined ||\n ![frame.top, frame.bottom, newSession.top, newSession.bottom, footer.top, footer.bottom].every(Number.isFinite) ||\n frame.bottom <= frame.top ||\n newSession.bottom <= newSession.top ||\n footer.bottom <= footer.top) {\n return { ready: false, top: 0, height: 0 };\n }\n const top = Math.max(0, Math.min(frame.bottom, newSession.top) - frame.top);\n const footerTop = Math.max(top, Math.min(frame.bottom, footer.top) - frame.top);\n return { ready: true, top, height: footerTop - top };\n}\n//# sourceMappingURL=overlay-bounds.js.map","/** Public AppFrame anchors; never infer a column from sibling order or private classes. */\nexport function directChildWithin(parent, anchor) {\n let child = anchor;\n while (child && child.parentElement !== parent)\n child = child.parentElement;\n return child ?? undefined;\n}\nexport function resolveAppFrame(surface) {\n const overlay = surface.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n if (!(overlay instanceof HTMLElement) || !frame || !overlay.isConnected)\n return undefined;\n // The plugin footer survives the collapsed rail; the public pane is an alternate anchor.\n for (const selector of ['[data-worktree-mode-action]', '[data-pane=\"sidebar\"]']) {\n const columns = new Set(Array.from(frame.querySelectorAll(selector))\n .map((anchor) => directChildWithin(frame, anchor))\n .filter((column) => column instanceof HTMLElement &&\n column !== overlay &&\n !column.hasAttribute('data-shell-overlay') &&\n !column.hasAttribute('data-rightbar-col') &&\n !column.hasAttribute('data-shell-leading')));\n if (columns.size > 1)\n return undefined;\n const sidebar = columns.values().next().value;\n if (sidebar)\n return { overlay, frame, sidebar };\n }\n return undefined;\n}\nfunction finiteRect(rect) {\n return [rect.left, rect.right, rect.top, rect.bottom, rect.width, rect.height].every(Number.isFinite);\n}\nexport function resolveFrameContent(frame, overlay, sidebar) {\n const rightbars = Array.from(frame.querySelectorAll('[data-rightbar-col]')).filter((column) => directChildWithin(frame, column) !== overlay);\n if (rightbars.length > 1)\n return undefined;\n const column = rightbars[0];\n const rightbar = frame.hasAttribute('data-rightbar-collapsed') ? undefined : column;\n const box = overlay.getBoundingClientRect();\n const boundary = sidebar.getBoundingClientRect();\n const columnRect = column?.getBoundingClientRect();\n if (!finiteRect(box) ||\n !finiteRect(boundary) ||\n (rightbar && columnRect && !finiteRect(columnRect))) {\n return undefined;\n }\n const right = rightbar && columnRect ? columnRect.left : box.right;\n // Collapse state changes before the grid animation settles. The center can still\n // end at the shrinking column; keep recognizing it without reserving that rightbar.\n const centerEdges = [right];\n if (!rightbar && columnRect && finiteRect(columnRect))\n centerEdges.push(columnRect.left);\n const excluded = column ? directChildWithin(frame, column) : undefined;\n // CenterColumn has no public marker. Resolve the remaining full content track by\n // geometry, excluding known slots, caption bands, resize handles and zero-size wrappers.\n const centers = Array.from(frame.children).filter((child) => {\n if (!(child instanceof HTMLElement) ||\n child === sidebar ||\n child === overlay ||\n child === excluded ||\n child.hasAttribute('data-shell-overlay') ||\n child.hasAttribute('data-shell-leading') ||\n child.hasAttribute('data-window-drag'))\n return false;\n const rect = child.getBoundingClientRect();\n return (finiteRect(rect) &&\n rect.width > 0 &&\n rect.height > 0 &&\n Math.abs(rect.left - boundary.right) <= 1 &&\n centerEdges.some((edge) => Math.abs(rect.right - edge) <= 1) &&\n rect.top >= box.top - 1 &&\n rect.top < box.bottom &&\n Math.abs(rect.bottom - box.bottom) <= 1);\n });\n if (centers.length !== 1)\n return undefined;\n return {\n center: centers[0],\n rightbar,\n };\n}\n//# sourceMappingURL=app-frame.js.map","import { resolveAppFrame, resolveFrameContent } from '../layout/app-frame.js';\n// Upstream AppFrame's 8px Sidebar handle is centered on the track boundary.\n// Keep its 4px right half outside this higher stacking-context overlay.\nconst SIDEBAR_RESIZE_HANDLE_HALF_WIDTH = 4;\n/** Reversible presentation only: leave the native React tree and Session alive. */\nexport function concealDashboardBackground(element) {\n const visibility = element.style.getPropertyValue('visibility');\n const priority = element.style.getPropertyPriority('visibility');\n const inert = element.getAttribute('inert');\n const hidden = element.getAttribute('aria-hidden');\n element.style.setProperty('visibility', 'hidden');\n element.setAttribute('inert', '');\n element.setAttribute('aria-hidden', 'true');\n return () => {\n if (element.style.getPropertyValue('visibility') === 'hidden') {\n if (visibility)\n element.style.setProperty('visibility', visibility, priority);\n else\n element.style.removeProperty('visibility');\n }\n for (const [name, value] of [\n ['inert', inert],\n ['aria-hidden', hidden],\n ]) {\n if (value === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, value);\n }\n };\n}\nexport function isRightSidebarOpenFromDom(frame, rightbar) {\n return (!frame.hasAttribute('data-rightbar-collapsed') &&\n rightbar instanceof HTMLElement &&\n frame.contains(rightbar) &&\n (rightbar.hasAttribute('data-sidebar-right-open') ||\n rightbar.querySelector('[data-sidebar-right-open]') !== null));\n}\n/** Layout seam shared with the existing Sidebar overlay; fail closed on frame/center loss. */\nexport function mountDashboardOverlay(surface, onPlacement, options) {\n const overlay = surface.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n if (!overlay || !frame) {\n onPlacement(undefined);\n options?.onRightSidebarChange?.(false);\n return () => { };\n }\n const hidden = new Map();\n let observed = [];\n let scheduled;\n let disposed = false;\n let lastRightSidebarOpen;\n const restore = () => {\n for (const cleanup of hidden.values())\n cleanup();\n hidden.clear();\n };\n const schedule = () => {\n if (disposed || scheduled !== undefined)\n return;\n scheduled = requestAnimationFrame(() => {\n scheduled = undefined;\n update();\n });\n };\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n const update = () => {\n if (disposed)\n return;\n const anchors = resolveAppFrame(surface);\n const content = anchors?.frame === frame && anchors.overlay === overlay\n ? resolveFrameContent(frame, overlay, anchors.sidebar)\n : undefined;\n // Watch candidates even while geometry is invalid or a column is collapsed.\n // A resize alone must be sufficient to recover after a zero-size transition.\n const nextObserved = [\n frame,\n overlay,\n ...Array.from(frame.children),\n ...Array.from(frame.querySelectorAll('[data-rightbar-col]')),\n ];\n for (const old of observed)\n if (!nextObserved.includes(old))\n resize?.unobserve(old);\n for (const next of nextObserved)\n if (!observed.includes(next))\n resize?.observe(next);\n observed = nextObserved;\n if (!anchors || !content) {\n restore();\n onPlacement(undefined);\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n return;\n }\n const { sidebar } = anchors;\n const { center, rightbar } = content;\n const box = overlay.getBoundingClientRect();\n const boundary = sidebar.getBoundingClientRect();\n const rightBoundary = rightbar instanceof HTMLElement ? rightbar.getBoundingClientRect().left : box.right;\n const left = Math.max(0, boundary.right - box.left + SIDEBAR_RESIZE_HANDLE_HALF_WIDTH);\n const rightEdge = Math.min(box.right, rightBoundary);\n const width = rightEdge - box.left - left;\n if (width <= 0 || box.height <= 0) {\n restore();\n onPlacement(undefined);\n return;\n }\n const centerBox = center.getBoundingClientRect();\n const top = Math.max(0, centerBox.top - box.top);\n const height = Math.min(box.bottom, centerBox.bottom) - box.top - top;\n if (height <= 0) {\n restore();\n onPlacement(undefined);\n return;\n }\n for (const [element, cleanup] of hidden) {\n if (element !== center) {\n cleanup();\n hidden.delete(element);\n }\n }\n if (!hidden.has(center))\n hidden.set(center, concealDashboardBackground(center));\n onPlacement({ left, top, width, height });\n const isRightSidebarOpen = options?.isRightSidebarExpanded !== undefined\n ? options.isRightSidebarExpanded()\n : isRightSidebarOpenFromDom(frame, rightbar);\n if (lastRightSidebarOpen !== isRightSidebarOpen) {\n lastRightSidebarOpen = isRightSidebarOpen;\n options?.onRightSidebarChange?.(isRightSidebarOpen);\n }\n };\n const mutation = typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(schedule);\n try {\n mutation?.observe(frame, {\n childList: true,\n attributes: true,\n subtree: true,\n attributeFilter: [\n 'data-rightbar-collapsed',\n 'data-sidebar-right-open',\n 'data-sidebar-right-panel',\n 'data-rightbar-col',\n 'data-worktree-mode-action',\n 'data-pane',\n 'data-window-drag',\n 'data-shell-leading',\n 'data-shell-overlay',\n ],\n });\n }\n catch {\n mutation?.observe(frame, { childList: true });\n }\n // Frame replacement may detach all original anchors at once.\n if (frame.parentElement) {\n try {\n mutation?.observe(frame.parentElement, { childList: true });\n }\n catch {\n // ignore\n }\n }\n update();\n return () => {\n disposed = true;\n resize?.disconnect();\n mutation?.disconnect();\n if (scheduled !== undefined)\n cancelAnimationFrame(scheduled);\n restore();\n if (lastRightSidebarOpen) {\n lastRightSidebarOpen = false;\n options?.onRightSidebarChange?.(false);\n }\n };\n}\n//# sourceMappingURL=dashboard-overlay.js.map","import { useLayoutEffect, useRef, useState } from 'react';\nimport { computeOverlayBounds } from './overlay-bounds.js';\nimport { concealDashboardBackground as concealNativeContent } from '../dashboard/dashboard-overlay.js';\nimport { directChildWithin, resolveAppFrame } from '../layout/app-frame.js';\nconst EMPTY_BOUNDS = { ready: false, top: 0, height: 0 };\nfunction asRect(element) {\n const rect = element.getBoundingClientRect();\n return { top: rect.top, bottom: rect.bottom };\n}\nexport function syncObservedElement(observer, previous, next) {\n const nextElement = next ?? undefined;\n if (previous === nextElement)\n return previous;\n if (previous !== undefined)\n observer?.unobserve(previous);\n if (nextElement !== undefined)\n observer?.observe(nextElement);\n return nextElement;\n}\nexport function resolveNativeSidebarRoot(sidebar) {\n const newSession = findNewSessionAnchor(sidebar);\n const action = sidebar.querySelector('[data-worktree-mode-action]');\n if (!newSession || !action)\n return undefined;\n let candidate;\n // The lowest measurable common ancestor separates the functional content and\n // footer slots, skipping display:contents wrappers without guessing child order.\n for (let root = newSession.parentElement; root; root = root.parentElement) {\n const content = directChildWithin(root, newSession);\n const footer = directChildWithin(root, action);\n const rect = root.getBoundingClientRect();\n if (content && footer && content !== footer) {\n candidate ??= root;\n if (rect.width > 0 && rect.height > 0)\n return root;\n }\n if (root === sidebar)\n break;\n }\n // Keep an unmeasurable common root observable so a resize can recover it.\n return candidate;\n}\nexport function findNewSessionAnchor(root) {\n const labels = ['新建会话', 'New session', '新会话', 'New Session'];\n const buttons = Array.from(root.querySelectorAll('button')).filter((button) => {\n // On Web the brand also starts a Session and shares the action's aria-label.\n // Its marked chrome row contains the Sidebar toggle and must remain uncovered.\n // The dedicated action's text may include shortcut glyphs, so text alone\n // cannot distinguish it from that brand shortcut.\n let parent = button.parentElement;\n while (parent && parent !== root) {\n if (parent.hasAttribute('data-window-drag'))\n return false;\n parent = parent.parentElement;\n }\n return true;\n });\n const visibleLabel = buttons.find((button) => {\n const text = button.textContent?.trim();\n if (!text)\n return false;\n return text.startsWith('新会话') || text.startsWith('New Session');\n });\n if (visibleLabel !== undefined)\n return visibleLabel;\n for (const label of labels) {\n const button = buttons.find((candidate) => candidate.getAttribute('aria-label') === label);\n if (button !== undefined)\n return button;\n }\n return undefined;\n}\nfunction sidebarFooterCandidate(root) {\n // WorktreeModeAction owns this marker in sidebar.footer.action; no native classes or labels.\n const action = root.querySelector('[data-worktree-mode-action]');\n return directChildWithin(root, action);\n}\n/** Resolve the footer slot semantically, then validate its content boundary. */\nexport function resolveSidebarFooter(root, newSession) {\n if (!newSession)\n return undefined;\n const children = Array.from(root.children);\n const content = directChildWithin(root, newSession);\n const start = content === undefined ? -1 : children.indexOf(content);\n if (start < 0)\n return undefined;\n const anchorRect = asRect(newSession);\n const rootRect = asRect(root);\n const candidate = sidebarFooterCandidate(root);\n if (!candidate || children.indexOf(candidate) <= start)\n return undefined;\n const rect = asRect(candidate);\n const valid = [anchorRect.top, anchorRect.bottom, rootRect.top, rootRect.bottom, rect.top, rect.bottom].every(Number.isFinite) &&\n anchorRect.bottom > anchorRect.top &&\n rect.bottom > rect.top &&\n rect.top >= anchorRect.bottom &&\n rect.top >= rootRect.top &&\n rect.bottom <= rootRect.bottom;\n return valid ? candidate : undefined;\n}\n/** Hide only the native content covered by the plugin, keeping chrome and footer alive. */\nexport function coveredSidebarChildren(root, newSession, footer) {\n if (!newSession || !footer)\n return [];\n const first = directChildWithin(root, newSession);\n const children = Array.from(root.children ?? []);\n const start = first === undefined ? -1 : children.indexOf(first);\n const end = children.indexOf(footer);\n if (start < 0 || end <= start)\n return [];\n return children\n .slice(start, end)\n .filter((element) => element instanceof HTMLElement);\n}\nfunction concealSidebarContent(element) {\n const restore = concealNativeContent(element);\n const opacity = element.style.getPropertyValue('opacity');\n const priority = element.style.getPropertyPriority('opacity');\n // Native disclosure/header descendants can explicitly set visibility: visible.\n // Opacity suppresses the entire composited subtree, including those descendants.\n element.style.setProperty('opacity', '0');\n return () => {\n restore();\n if (element.style.getPropertyValue('opacity') !== '0')\n return;\n if (opacity)\n element.style.setProperty('opacity', opacity, priority);\n else\n element.style.removeProperty('opacity');\n };\n}\nexport function useSidebarOverlayGeometry(active) {\n const ref = useRef(null);\n const [width, setWidth] = useState(280);\n const [bounds, setBounds] = useState(EMPTY_BOUNDS);\n const [collapsed, setCollapsed] = useState(false);\n const [nativeCovered, setNativeCovered] = useState(false);\n useLayoutEffect(() => {\n if (!active) {\n setBounds(EMPTY_BOUNDS);\n setNativeCovered(false);\n return;\n }\n const surface = ref.current;\n const overlay = surface?.closest('[data-shell-overlay]');\n const frame = overlay?.parentElement;\n if (!(overlay instanceof HTMLElement) || !frame || !surface) {\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const overlayElement = overlay;\n let frameHandle;\n let disposed = false;\n let observedNewSession;\n let observedFooter;\n let observedRoot;\n let observedSidebar;\n const hidden = new Map();\n function restore() {\n for (const cleanup of hidden.values())\n cleanup();\n hidden.clear();\n }\n function update() {\n if (disposed)\n return;\n const anchors = resolveAppFrame(surface);\n const sidebarElement = anchors?.sidebar;\n const currentRoot = sidebarElement && resolveNativeSidebarRoot(sidebarElement);\n observedSidebar = syncObservedElement(resizeObserver, observedSidebar, sidebarElement);\n observedRoot = syncObservedElement(resizeObserver, observedRoot, currentRoot);\n const nextWidth = sidebarElement?.getBoundingClientRect().width;\n const nextCollapsed = frame?.hasAttribute('data-sidebar-collapsed') === true ||\n (nextWidth !== undefined && nextWidth <= 64);\n setCollapsed(nextCollapsed);\n // macOS has no collapsed rail; zero is a real width, never a missing measurement.\n if (nextWidth !== undefined && Number.isFinite(nextWidth))\n setWidth(Math.max(0, nextWidth));\n if (anchors?.frame !== frame ||\n anchors?.overlay !== overlayElement ||\n !(currentRoot instanceof HTMLElement) ||\n !sidebarElement ||\n nextWidth === undefined ||\n !Number.isFinite(nextWidth)) {\n observedNewSession = syncObservedElement(resizeObserver, observedNewSession, undefined);\n observedFooter = syncObservedElement(resizeObserver, observedFooter, undefined);\n restore();\n setNativeCovered(false);\n setBounds(EMPTY_BOUNDS);\n return;\n }\n const newSession = findNewSessionAnchor(currentRoot);\n const footer = resolveSidebarFooter(currentRoot, newSession);\n observedNewSession = syncObservedElement(resizeObserver, observedNewSession, newSession);\n // Keep watching a temporarily invalid/zero-height candidate so resize can recover it.\n observedFooter = syncObservedElement(resizeObserver, observedFooter, sidebarFooterCandidate(currentRoot));\n const nextBounds = computeOverlayBounds(asRect(overlayElement), newSession === undefined ? undefined : asRect(newSession), footer === undefined ? undefined : asRect(footer));\n setBounds(nextCollapsed ? EMPTY_BOUNDS : nextBounds);\n const covered = !nextCollapsed && nextBounds.ready && nextBounds.height > 0\n ? coveredSidebarChildren(currentRoot, newSession, footer)\n : [];\n for (const [element, cleanup] of hidden) {\n if (!covered.includes(element)) {\n cleanup();\n hidden.delete(element);\n }\n }\n for (const element of covered) {\n if (!hidden.has(element))\n hidden.set(element, concealSidebarContent(element));\n }\n setNativeCovered(covered.length > 0);\n }\n function scheduleUpdate() {\n if (disposed || frameHandle !== undefined)\n return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = undefined;\n update();\n });\n }\n const resizeObserver = typeof ResizeObserver === 'function' ? new ResizeObserver(scheduleUpdate) : undefined;\n for (const element of [overlayElement, frame]) {\n resizeObserver?.observe(element);\n }\n update();\n const mutationObserver = typeof MutationObserver === 'function' ? new MutationObserver(scheduleUpdate) : undefined;\n // Observe semantic state as well as width: the native column animates to zero,\n // and its root may be replaced during the wide-to-rail crossfade.\n mutationObserver?.observe(frame, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\n 'data-sidebar-collapsed',\n 'data-worktree-mode-action',\n 'data-pane',\n 'data-shell-overlay',\n 'data-window-drag',\n ],\n });\n if (frame?.parentElement)\n mutationObserver?.observe(frame.parentElement, { childList: true });\n return () => {\n disposed = true;\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n if (frameHandle !== undefined)\n cancelAnimationFrame(frameHandle);\n restore();\n };\n }, [active]);\n return { ref, width, bounds, collapsed, nativeCovered };\n}\n//# sourceMappingURL=sidebar-overlay-geometry.js.map","import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { deriveSessionPresentationIndex, } from '../../session/session-view.js';\nimport { useSidebarOverlayGeometry } from '../../overlay/sidebar-overlay-geometry.js';\nimport { effectiveViewMode } from '../../view/view-mode.js';\nimport { currentSessionIdFromList } from '../../session/session-selection.js';\nimport { EMPTY_FORK_RECOVERY_STORE, EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, EMPTY_PERMISSION_NOTICE_SNAPSHOT, EMPTY_PERMISSION_NOTICE_SUBSCRIBE, useStableWorkspaceIds, } from '../shared.js';\nexport function useSurfaceSources({ props }) {\n const { useStore, available, manager, useSessions, useSessionStatus, useWorkspaces, forkRecovery, expandState, permissionNotice, fullAccessConfirmation, sessionOrder, } = props;\n const preferredMode = useStore((state) => state.viewMode);\n const mode = effectiveViewMode(preferredMode, available && manager !== undefined);\n const sessions = useSessions((state) => state);\n // Root hook is absent on legacy clients; do not create a second unread owner.\n const sessionStatuses = useSessionStatus?.((state) => state);\n const workspaces = useWorkspaces((state) => state);\n const forkRecoveryStore = forkRecovery ?? EMPTY_FORK_RECOVERY_STORE;\n const forkRecoverySnapshot = useSyncExternalStore(forkRecoveryStore.subscribe, forkRecoveryStore.getSnapshot, forkRecoveryStore.getSnapshot);\n const currentSessionId = currentSessionIdFromList(sessions);\n const workspaceIds = useStableWorkspaceIds(workspaces.items);\n const workspaceIdsRef = useRef(workspaceIds);\n workspaceIdsRef.current = workspaceIds;\n const expandSnapshot = useSyncExternalStore(expandState.subscribe, expandState.getSnapshot, expandState.getSnapshot);\n const permissionNoticeSnapshot = useSyncExternalStore(permissionNotice?.subscribe ?? EMPTY_PERMISSION_NOTICE_SUBSCRIBE, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT, permissionNotice?.getSnapshot ?? EMPTY_PERMISSION_NOTICE_SNAPSHOT);\n const fullAccessConfirmationSnapshot = useSyncExternalStore(fullAccessConfirmation?.subscribe ?? EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT, fullAccessConfirmation?.getSnapshot ?? EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT);\n const fullAccessConfirmationKey = fullAccessConfirmationSnapshot === undefined\n ? ''\n : [\n fullAccessConfirmationSnapshot.workspaceId,\n fullAccessConfirmationSnapshot.worktreeId,\n fullAccessConfirmationSnapshot.sessionId,\n fullAccessConfirmationSnapshot.cwd,\n ].join('\\u0000');\n const [fullAccessAcknowledged, setFullAccessAcknowledged] = useState(false);\n useEffect(() => {\n setFullAccessAcknowledged(false);\n }, [fullAccessConfirmationKey]);\n const sessionOrderSnapshot = useSyncExternalStore(sessionOrder.subscribe, sessionOrder.getSnapshot, sessionOrder.getSnapshot);\n const sessionPresentations = useMemo(() => deriveSessionPresentationIndex(sessions, sessionStatuses), [sessions.byId, sessionStatuses]);\n const { ref, width, bounds, collapsed, nativeCovered } = useSidebarOverlayGeometry(mode === 'worktree');\n const archivedSessionIds = workspaces.archivedSessionIds ?? [];\n return {\n preferredMode,\n mode,\n sessions,\n workspaces,\n forkRecoveryStore,\n forkRecoverySnapshot,\n currentSessionId,\n workspaceIds,\n workspaceIdsRef,\n expandSnapshot,\n permissionNoticeSnapshot,\n fullAccessConfirmationSnapshot,\n fullAccessConfirmationKey,\n fullAccessAcknowledged,\n setFullAccessAcknowledged,\n sessionOrderSnapshot,\n sessionPresentations,\n ref,\n width,\n bounds,\n collapsed,\n nativeCovered,\n archivedSessionIds,\n };\n}\n//# sourceMappingURL=useSurfaceSources.js.map","import { useCallback, useEffect } from 'react';\nimport { createDefaultWorktreeName, executeWorktreeAction, reconcileBaseBranchSelection, selectDefaultBaseBranch, toWorktreeViewError, WorktreeSessionBindingError, WorktreeSessionPermissionError, } from '../../view/worktree-view.js';\nexport function useWorktreeRegistration({ source, registrationState, read, props, mutation, session, }) {\n const { workspaces } = source;\n const { worktreeModalWorkspaceId, modalReadLoading, setSelectedBranch, setNewBranch, setImportCandidates, importCandidatesGuard, modalWorkspaceIdRef, modalReadLoader, modalReadViewRef, setWorktreeModalWorkspaceId, setModalReadError, setModalReadLoading, setWorktreeModalMode, setSelectedImportPath, importCandidates, newBranch, selectedImportPath, worktreeModalMode, selectedBranch, } = registrationState;\n const { viewByWorkspace, loadModalWorktreeView, refresh } = read;\n const { manager, createSessionForWorktree: createSessionCallback } = props;\n const { actionPending, setActionError, setActionPending } = mutation;\n const { setPendingSessionBinding } = session;\n const modalWorkspace = workspaces.items.find((workspace) => workspace.workspaceId === worktreeModalWorkspaceId);\n const modalView = worktreeModalWorkspaceId === undefined\n ? undefined\n : viewByWorkspace.get(worktreeModalWorkspaceId);\n const modalReadiness = modalView?.readiness;\n const modalSetupStatus = modalView === undefined\n ? undefined\n : modalReadiness?.status === 'ready'\n ? modalView.branches.length === 0\n ? 'noLocalBranch'\n : undefined\n : modalReadiness?.status;\n const modalCanCreate = !modalReadLoading && modalSetupStatus === undefined && modalReadiness?.status === 'ready';\n useEffect(() => {\n if (worktreeModalWorkspaceId === undefined || modalView === undefined)\n return;\n if (modalView.readiness.status !== 'ready') {\n setSelectedBranch('');\n setNewBranch('');\n return;\n }\n setSelectedBranch((current) => reconcileBaseBranchSelection(current, modalView.branches));\n setNewBranch((current) => {\n if (current.length > 0)\n return current;\n const existingNames = [\n ...modalView.branches.map((branch) => branch.name),\n ...modalView.worktrees.map((worktree) => worktree.branch),\n ];\n return createDefaultWorktreeName(existingNames);\n });\n }, [modalView, worktreeModalWorkspaceId]);\n const loadImportCandidates = useCallback(async (workspaceId) => {\n if (manager === undefined)\n return;\n setImportCandidates((current) => ({ status: 'loading', candidates: current.candidates }));\n await importCandidatesGuard.current.run(() => manager.listImportCandidates({ workspaceId }), (candidates) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates({ status: 'ready', candidates });\n }, (error) => {\n if (modalWorkspaceIdRef.current !== workspaceId)\n return;\n setImportCandidates((current) => ({\n status: 'error',\n candidates: current.candidates,\n error: toWorktreeViewError(error),\n }));\n });\n }, [manager]);\n const closeWorktreeCreator = (force = false) => {\n if (actionPending && !force)\n return;\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n };\n const openWorktreeCreator = (workspace, defaults = {}) => {\n const view = viewByWorkspace.get(workspace.workspaceId);\n modalReadLoader.current.invalidate();\n modalReadViewRef.current = undefined;\n importCandidatesGuard.current.invalidate();\n setWorktreeModalWorkspaceId(workspace.workspaceId);\n setWorktreeModalMode('create');\n setImportCandidates({ status: 'idle', candidates: [] });\n setSelectedImportPath(undefined);\n setActionError(undefined);\n setModalReadError(undefined);\n setModalReadLoading(false);\n if (view === undefined) {\n setSelectedBranch(defaults.baseBranch ?? '');\n setNewBranch(defaults.newBranch ?? '');\n loadModalWorktreeView(workspace.workspaceId);\n return;\n }\n setSelectedBranch(defaults.baseBranch ?? selectDefaultBaseBranch(view.branches));\n setNewBranch(defaults.newBranch ??\n createDefaultWorktreeName([\n ...view.branches.map((branch) => branch.name),\n ...view.worktrees.map((worktree) => worktree.branch),\n ]));\n };\n const changeWorktreeModalMode = (mode) => {\n setWorktreeModalMode(mode);\n if (mode === 'import' &&\n worktreeModalWorkspaceId !== undefined &&\n importCandidates.status === 'idle') {\n void loadImportCandidates(worktreeModalWorkspaceId);\n }\n };\n const continueWorktreeRegistration = async (registeredWorktree) => {\n closeWorktreeCreator(true);\n if (createSessionCallback === undefined) {\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n setActionError({\n code: 'WORKTREE_REGISTRATION_SESSION_UNAVAILABLE',\n message: '',\n retryable: true,\n });\n return;\n }\n const sessionInput = {\n workspaceId: registeredWorktree.workspaceId,\n worktreeId: registeredWorktree.worktreeId,\n cwd: registeredWorktree.absolutePath,\n };\n try {\n await createSessionCallback(sessionInput);\n }\n catch (error) {\n if (error instanceof WorktreeSessionBindingError) {\n setPendingSessionBinding({ ...sessionInput, sessionId: error.sessionId,\n error: toWorktreeViewError(error) });\n }\n if (error instanceof WorktreeSessionPermissionError && error.retryable) {\n setPendingSessionBinding({\n ...sessionInput,\n sessionId: error.sessionId,\n permissionRequired: true,\n error: toWorktreeViewError(error),\n });\n }\n throw error;\n }\n await refresh({\n scope: { kind: 'workspace', workspaceId: registeredWorktree.workspaceId },\n preserveCurrent: true,\n });\n };\n const submitWorktree = async () => {\n const worktreeName = newBranch.trim();\n const selectedImportCandidate = importCandidates.candidates.find((candidate) => candidate.absolutePath === selectedImportPath);\n if (manager === undefined || modalWorkspace === undefined)\n return;\n if (worktreeModalMode === 'create' &&\n (!modalCanCreate || selectedBranch.length === 0 || worktreeName.length === 0))\n return;\n if (worktreeModalMode === 'import' && selectedImportCandidate === undefined)\n return;\n setActionPending(true);\n setActionError(undefined);\n setPendingSessionBinding(undefined);\n try {\n const registeredWorktree = worktreeModalMode === 'create'\n ? await executeWorktreeAction(manager, {\n type: 'createWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n branch: selectedBranch,\n newBranch: worktreeName,\n },\n })\n : await executeWorktreeAction(manager, {\n type: 'importWorktree',\n input: {\n workspaceId: modalWorkspace.workspaceId,\n absolutePath: selectedImportCandidate.absolutePath,\n },\n });\n if (registeredWorktree === undefined) {\n throw {\n code: 'WORKTREE_RECORD_MISSING',\n message: '',\n retryable: true,\n };\n }\n await continueWorktreeRegistration(registeredWorktree);\n }\n catch (error) {\n setActionError(toWorktreeViewError(error));\n }\n finally {\n setActionPending(false);\n }\n };\n return {\n modalWorkspace,\n modalView,\n modalReadiness,\n modalSetupStatus,\n modalCanCreate,\n loadImportCandidates,\n closeWorktreeCreator,\n openWorktreeCreator,\n changeWorktreeModalMode,\n continueWorktreeRegistration,\n submitWorktree,\n };\n}\n//# sourceMappingURL=useWorktreeRegistration.js.map","/** Localize the native-compatible Session status used by both surfaces. */\nexport function sessionStatusLabel(t, status) {\n switch (status.labelKey) {\n case 'running':\n return t('session.status.running');\n case 'subagentsRunning':\n return t(status.runningSubagentCount === 1\n ? 'session.status.subagentsRunning.one'\n : 'session.status.subagentsRunning.other', { n: status.runningSubagentCount });\n case 'idle':\n return t('session.status.idle');\n case 'waitingApproval':\n return t('session.status.waitingApproval');\n case 'planReview':\n return t('session.status.planReview');\n case 'waitingAnswer':\n return t('session.status.waitingAnswer');\n case 'completed':\n return t('session.status.completed');\n }\n}\n/** Localize the compact relative time shown for idle Sessions. */\nexport function sessionTimeLabel(t, value) {\n switch (value.unit) {\n case 'now':\n return t('session.time.now');\n case 'minutes':\n return t('session.time.minutes', { n: value.n });\n case 'hours':\n return t('session.time.hours', { n: value.n });\n case 'days':\n return t('session.time.days', { n: value.n });\n case 'months':\n return t('session.time.months', { n: value.n });\n case 'years':\n return t('session.time.years', { n: value.n });\n }\n}\n/** Include the native relative-time suffix used in Session hover details. */\nexport function sessionHoverTimeLabel(t, value) {\n const label = sessionTimeLabel(t, value);\n return value.unit === 'now' ? label : t('session.time.ago', { t: label });\n}\n//# sourceMappingURL=session-labels.js.map","import { stripExtendedWindowsPrefix } from '../../contract/windows-path.js';\n/** Encode path segments while retaining Windows drive and directory separators. */\nexport function vscodeFolderUrl(absolutePath) {\n const normalizedPath = stripExtendedWindowsPrefix(absolutePath);\n const windowsPath = /^[a-z]:[\\\\/]/i.test(normalizedPath) ||\n normalizedPath.startsWith('\\\\\\\\') || normalizedPath.startsWith('//');\n const path = windowsPath ? normalizedPath.replaceAll('\\\\', '/') : normalizedPath;\n const encoded = path.split('/').map(encodeURIComponent).join('/');\n const withDrive = windowsPath ? encoded.replace(/^([a-z])%3A/i, '$1:') : encoded;\n return 'vscode://file' + (withDrive.startsWith('/') ? '' : '/') + withDrive;\n}\n//# sourceMappingURL=vscode-url.js.map","// Official DSH Host open-in-app routes. Keep these URLs relative so requests stay on\n// the current DSH host and retain the Host's validation and permission checks.\nexport const OPEN_IN_APP_APPS_ROUTE = '/open-in-app/apps';\nexport const OPEN_IN_APP_ICON_ROUTE = '/open-in-app/icon/';\nexport const OPEN_IN_APP_OPEN_ROUTE = '/open-in-app/open';\nexport class OpenInAppController {\n fetcher;\n _apps = null;\n _choice = '';\n _loading;\n _listeners = new Set();\n constructor(fetcher = (input, init) => fetch(input, init)) {\n this.fetcher = fetcher;\n }\n get apps() {\n return this._apps;\n }\n get choice() {\n return this._choice;\n }\n subscribe(listener) {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n }\n notify() {\n for (const listener of this._listeners) {\n listener();\n }\n }\n load() {\n this._loading ??= this.run();\n return this._loading;\n }\n choose(appId) {\n if (this._choice === appId)\n return;\n this._choice = appId;\n this.notify();\n }\n iconUrl(appId) {\n return `${OPEN_IN_APP_ICON_ROUTE}${encodeURIComponent(appId)}`;\n }\n async launch(appId, path) {\n const body = { app: appId, path };\n const response = await this.fetcher(OPEN_IN_APP_OPEN_ROUTE, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok)\n throw new Error(`open failed: HTTP ${String(response.status)}`);\n }\n async run() {\n let apps = [];\n try {\n const response = await this.fetcher(OPEN_IN_APP_APPS_ROUTE, {\n headers: { accept: 'application/json' },\n });\n if (response.ok) {\n const payload = (await response.json());\n if (Array.isArray(payload.apps)) {\n apps = payload.apps.filter((id) => typeof id === 'string');\n }\n }\n }\n catch {\n // Swallows network failures: falls back to empty apps list\n }\n this._apps = apps;\n this.notify();\n }\n}\nexport const defaultOpenInAppController = new OpenInAppController();\n//# sourceMappingURL=open-in-app-controller.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { Menu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconChevronDownOutline14 } from '../dsh-icons.js';\nimport { vscodeFolderUrl } from './vscode-url.js';\nimport { defaultOpenInAppController } from './open-in-app-controller.js';\nimport css from './open-in-app.css';\nconst APP_NAMES = {\n cursor: 'Cursor',\n vscode: 'VS Code',\n vscodeinsiders: 'VS Code Insiders',\n windsurf: 'Windsurf',\n zed: 'Zed',\n sublimetext: 'Sublime Text',\n xcode: 'Xcode',\n androidstudio: 'Android Studio',\n intellij: 'IntelliJ IDEA',\n pycharm: 'PyCharm',\n webstorm: 'WebStorm',\n phpstorm: 'PhpStorm',\n goland: 'GoLand',\n rider: 'Rider',\n rustrover: 'RustRover',\n fork: 'Fork',\n sourcetree: 'Sourcetree',\n github: 'GitHub Desktop',\n tower: 'Tower',\n gitkraken: 'GitKraken',\n smartgit: 'SmartGit',\n sublimemerge: 'Sublime Merge',\n ghostty: 'Ghostty',\n warp: 'Warp',\n iterm: 'iTerm2',\n kitty: 'kitty',\n terminal: 'Terminal',\n finder: 'Finder',\n explorer: 'Explorer',\n};\nconst failedIcons = new Set();\nfunction AppIcon({ id, url, size }) {\n const [failed, setFailed] = useState(failedIcons.has(id));\n if (failed) {\n return (_jsx(\"svg\", { width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 1.8, className: css.icon, \"aria-hidden\": \"true\", children: _jsx(\"rect\", { x: \"3\", y: \"3\", width: \"18\", height: \"18\", rx: \"5\" }) }));\n }\n return (_jsx(\"img\", { src: url, width: size, height: size, className: css.icon, alt: \"\", \"aria-hidden\": \"true\", draggable: false, onError: () => {\n failedIcons.add(id);\n setFailed(true);\n } }));\n}\nconst BUSY_DRESS_DELAY_MS = 250;\nexport function OpenInAppButton({ path, t, controller = defaultOpenInAppController, }) {\n useEffect(() => {\n void controller.load();\n }, [controller]);\n const appsSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.apps, () => null);\n const choiceSnapshot = useSyncExternalStore((onStoreChange) => controller.subscribe(onStoreChange), () => controller.choice, () => '');\n const [open, setOpen] = useState(false);\n const [phase, setPhase] = useState('idle');\n const inFlight = useRef(false);\n const busyTimer = useRef(undefined);\n const errorTimer = useRef(undefined);\n useEffect(() => () => {\n clearTimeout(busyTimer.current);\n clearTimeout(errorTimer.current);\n }, []);\n // If host has no apps or request failed, fallback to native vscode:// link\n if (appsSnapshot === null || appsSnapshot.length === 0) {\n return (_jsx(\"a\", { className: `${css.split} ${css.fallback}`, href: vscodeFolderUrl(path), \"data-dashboard-action\": \"open-editor\", children: _jsx(\"span\", { className: css.main, children: t('dashboard.openEditor') }) }));\n }\n const validApps = appsSnapshot;\n const currentAppId = validApps.find((appId) => appId === choiceSnapshot) ?? validApps[0] ?? 'vscode';\n const currentAppName = APP_NAMES[currentAppId] ?? currentAppId;\n const buttonLabel = t('dashboard.openIn', { app: currentAppName });\n const launch = (appId) => {\n if (inFlight.current)\n return;\n inFlight.current = true;\n clearTimeout(errorTimer.current);\n clearTimeout(busyTimer.current);\n busyTimer.current = setTimeout(() => {\n setPhase('busy');\n }, BUSY_DRESS_DELAY_MS);\n controller\n .launch(appId, path)\n .then(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('idle');\n })\n .catch(() => {\n inFlight.current = false;\n clearTimeout(busyTimer.current);\n setPhase('error');\n clearTimeout(errorTimer.current);\n errorTimer.current = setTimeout(() => {\n setPhase('idle');\n }, 2000);\n });\n };\n const menuItems = validApps.map((appId) => ({\n id: appId,\n label: APP_NAMES[appId] ?? appId,\n icon: _jsx(AppIcon, { id: appId, url: controller.iconUrl(appId), size: 16 }),\n }));\n return (_jsx(\"div\", { className: css.control, onKeyDown: (event) => {\n if (event.key === 'Escape' && open) {\n event.stopPropagation();\n setOpen(false);\n }\n }, children: _jsx(Menu, { open: open, align: \"end\", dense: true, onClose: () => {\n setOpen(false);\n }, items: menuItems, selectedId: currentAppId, onSelect: (id) => {\n setOpen(false);\n if (inFlight.current)\n return;\n controller.choose(id);\n launch(id);\n }, anchor: _jsxs(\"div\", { className: css.split, \"data-dashboard-action\": \"open-editor\", children: [_jsxs(\"button\", { type: \"button\", className: css.main, \"data-state\": phase, disabled: phase === 'busy', \"aria-label\": buttonLabel, title: buttonLabel, onClick: () => {\n launch(currentAppId);\n }, children: [_jsx(AppIcon, { id: currentAppId, url: controller.iconUrl(currentAppId), size: 16 }), _jsx(\"span\", { children: buttonLabel })] }), validApps.length > 1 && (_jsx(\"button\", { type: \"button\", className: css.chevron, \"aria-expanded\": open, \"aria-haspopup\": \"menu\", \"aria-label\": t('dashboard.editorMenu'), disabled: phase === 'busy', onClick: () => {\n setOpen((prev) => !prev);\n }, children: _jsx(IconChevronDownOutline14, { size: 12 }) }))] }) }) }));\n}\n//# sourceMappingURL=OpenInAppButton.js.map","export function selectWorktreeAcquisitionFacts(record) {\n return {\n timestampKind: record.source === 'external' ? 'imported' : 'created',\n ...(record.source === 'external'\n ? record.importedAt === undefined\n ? {}\n : { timestamp: record.importedAt }\n : record.createdAt === undefined\n ? {}\n : { timestamp: record.createdAt }),\n ...(record.baseBranch === undefined ? {} : { baseBranch: record.baseBranch }),\n };\n}\n//# sourceMappingURL=worktree-acquisition-facts.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState } from 'react';\nimport { NotificationToasts } from '../surface/components/NotificationToasts.js';\nimport { toWorktreeViewError } from '../view/worktree-view.js';\nimport { formatWorktreeViewError } from '../view/worktree-error-copy.js';\nimport styles from './dashboard.css';\nexport function WorktreeInstructions({ value, onSave, t, disabled, context, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [error, setError] = useState();\n const [pending, setPending] = useState(false);\n const busy = useRef(false);\n const alive = useRef(true);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n }, [value]);\n const expected = useRef(value);\n const save = async () => {\n if (busy.current || draft === undefined || !onSave)\n return;\n busy.current = true;\n setPending(true);\n setError(undefined);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n setDraft(undefined);\n }\n }\n catch (cause) {\n if (alive.current)\n setError(toWorktreeViewError(cause));\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(\"div\", { children: [_jsx(\"p\", { children: t('dashboard.instructionsHint') }), draft === undefined ? (_jsxs(_Fragment, { children: [_jsx(\"p\", { className: styles.dashboardInstructionsText, children: saved || t('dashboard.noInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: disabled || !onSave, onClick: () => {\n expected.current = saved;\n setDraft(saved);\n setError(undefined);\n }, children: t('dashboard.edit') })] })) : (_jsxs(_Fragment, { children: [_jsx(\"textarea\", { className: styles.dashboardInstructionsInput, \"aria-label\": t('dashboard.instructions'), value: draft, maxLength: 32000, rows: 8, disabled: pending, onChange: (event) => setDraft(event.target.value) }), _jsxs(\"div\", { className: styles.dashboardInstructionActions, children: [_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending || disabled, onClick: () => void save(), children: t(pending ? 'dashboard.savingInstructions' : 'dashboard.saveInstructions') }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: pending, onClick: () => {\n setDraft(undefined);\n setError(undefined);\n }, children: t('dashboard.cancelInstructions') })] }), _jsx(NotificationToasts, { notices: error === undefined\n ? []\n : [\n {\n key: JSON.stringify(['instructions', context, error.code, error.details]),\n context, error,\n actions: [{ label: t('action.retry'), disabled: pending || disabled,\n onClick: () => { void save(); } }],\n describe: (translate) => translate('dashboard.instructions') + ' · ' + (context ?? ''),\n message: (translate) => translate('dashboard.instructionsSaveFailed') +\n (error.code === 'WORKTREE_VIEW_FAILED' ? '' : ' ' + formatWorktreeViewError(error, translate)),\n text: t('dashboard.instructionsSaveFailed') +\n (error.code === 'WORKTREE_VIEW_FAILED'\n ? ''\n : ' ' + formatWorktreeViewError(error, t)),\n },\n ] })] }))] }));\n}\n//# sourceMappingURL=WorktreeInstructions.js.map","/**\n * Shared Git-tab facts. These helpers stay free of React and DOM APIs so the\n * Dashboard's branch, Main, and line-total rules have one definition.\n */\n/** Main (Local) Worktree ids never carry a Worktree-relative Git comparison. */\nexport function isMainWorktreeId(worktreeId) {\n return worktreeId === 'main' || worktreeId.startsWith('main:');\n}\n/** Trim a branch value and drop empty strings. */\nexport function normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\n/** A baseline equal to the current Worktree branch is not a usable default. */\nexport function normalizeBaselineBranch(value, currentBranch) {\n const baseline = normalizeBranch(value);\n return baseline === undefined || baseline === currentBranch ? undefined : baseline;\n}\n/**\n * Sum the known text-file additions/deletions. Binary files have no line\n * counts, so they are ignored when a target also contains readable files;\n * binary-only targets remain explicitly unknown.\n */\nexport function sumLineTotals(files) {\n let additions = 0;\n let deletions = 0;\n let knownFiles = 0;\n for (const file of files) {\n if (file.additions === undefined || file.deletions === undefined)\n continue;\n additions += file.additions;\n deletions += file.deletions;\n knownFiles += 1;\n }\n return files.length === 0 || knownFiles > 0 ? { additions, deletions } : undefined;\n}\n//# sourceMappingURL=git-facts.js.map","const byName = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nfunction compareNodes(left, right) {\n if (left.kind !== right.kind)\n return left.kind === 'folder' ? -1 : 1;\n return byName.compare(left.name, right.name);\n}\nfunction materialize(nodes) {\n return [...nodes.values()].sort(compareNodes).map((node) => node.kind === 'folder'\n ? {\n kind: 'folder',\n name: node.name,\n path: node.path,\n children: materialize(node.children),\n }\n : node);\n}\n/** Build a stable, directory-first tree from Git's slash-separated relative paths. */\nexport function buildGitFileTree(files) {\n const roots = new Map();\n for (const file of files) {\n const segments = file.path.split('/').filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n roots.set(file.path, { kind: 'file', name: file.path, file });\n continue;\n }\n let nodes = roots;\n let directoryPath = '';\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n directoryPath = directoryPath.length === 0 ? segment : directoryPath + '/' + segment;\n const folderKey = 'folder:' + segment;\n const existing = nodes.get(folderKey);\n if (existing?.kind === 'folder') {\n nodes = existing.children;\n continue;\n }\n const folder = {\n kind: 'folder',\n name: segment,\n path: directoryPath,\n children: new Map(),\n };\n nodes.set(folderKey, folder);\n nodes = folder.children;\n }\n const name = segments[segments.length - 1];\n const fileKey = 'file:' + name + ':' + file.path + ':' + (file.oldPath ?? '');\n nodes.set(fileKey, { kind: 'file', name, file });\n }\n return materialize(roots);\n}\n//# sourceMappingURL=git-file-tree.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as primitives from '@deepseek-ai/dsh-client-ui-primitives';\nfunction FallbackFileIcon({ className, size = 16 }) {\n return (_jsxs(\"svg\", { viewBox: \"0 0 16 16\", width: size, height: size, fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", className: className, \"aria-hidden\": \"true\", children: [_jsx(\"path\", { d: \"M3 2h6l4 4v8H3V2z\" }), _jsx(\"path\", { d: \"M9 2v4h4\" })] }));\n}\n/**\n * Standard DSH file type icon with fallback.\n * Uses FileTypeIcon from @deepseek-ai/dsh-client-ui-primitives when available,\n * and falls back to a clean SVG file glyph in older runtimes.\n */\n/**\n * Optional native primitives, resolved once at module scope instead of on every\n * rendered changed-file row.\n */\nconst primitivesRecord = primitives;\nconst FileTypeIcon = primitivesRecord.FileTypeIcon;\nconst classifyFileType = primitivesRecord.classifyFileType;\nexport function GitFileTypeIcon({ path, className, size = 16 }) {\n if (typeof FileTypeIcon === 'function' && typeof classifyFileType === 'function') {\n return _jsx(FileTypeIcon, { kind: classifyFileType(path), size: size, className: className });\n }\n return _jsx(FallbackFileIcon, { className: className, size: size });\n}\n//# sourceMappingURL=GitFileTypeIcon.js.map","import { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport styles from './worktree-git.css';\n/** Compact, color-coded Git line counts shared by overview and changed-file rows. */\nexport function GitLineStats({ additions, deletions, ariaLabel, className, }) {\n if (additions === undefined && deletions === undefined)\n return null;\n 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] }))] }));\n}\n//# sourceMappingURL=GitLineStats.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconFolderClose16, IconFolderOpen16 } from '../../dsh-icons.js';\nimport { useId, useMemo, useState } from 'react';\nimport { buildGitFileTree } from './git-file-tree.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from './worktree-git.css';\n/** Localized status wording for the row title and accessible label, so the color cue is still announced. */\nconst STATUS_LABELS = {\n added: 'dashboard.git.status.added',\n modified: 'dashboard.git.status.modified',\n deleted: 'dashboard.git.status.deleted',\n renamed: 'dashboard.git.status.renamed',\n copied: 'dashboard.git.status.copied',\n 'type-changed': 'dashboard.git.status.typeChanged',\n};\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\nfunction fileName(path) {\n const segments = path.split('/').filter((segment) => segment.length > 0);\n return segments.at(-1) ?? path;\n}\nfunction fileTitle(file) {\n return file.oldPath !== undefined && file.oldPath !== file.path\n ? file.oldPath + ' → ' + file.path\n : file.path;\n}\nfunction fileLabel(file) {\n const name = fileName(file.path);\n if (file.oldPath === undefined || file.oldPath === file.path)\n return name;\n return (_jsxs(_Fragment, { children: [fileName(file.oldPath), \" \", _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" }), \" \", name] }));\n}\nfunction folderId(treeId, path) {\n return 'dashboard-git-folder-' + treeId + '-' + encodeURIComponent(path);\n}\nfunction renderTreeNodes({ treeId, level, nodes, collapsedFolders, toggleFolder, selectedPath, onSelect, t, }) {\n return nodes.map((node, index) => {\n if (node.kind === 'folder') {\n const collapsed = collapsedFolders.has(node.path);\n const childrenId = folderId(treeId, node.path);\n return (_jsxs(\"li\", { className: styles.gitFolder, role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-expanded\": !collapsed, children: [_jsxs(\"button\", { type: \"button\", className: styles.gitFolderButton, \"data-dashboard-git-folder\": node.path, \"aria-expanded\": !collapsed, \"aria-controls\": childrenId, onClick: () => toggleFolder(node.path), onKeyDown: (event) => {\n if (event.key === 'ArrowRight' && collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n else if (event.key === 'ArrowLeft' && !collapsed) {\n event.preventDefault();\n toggleFolder(node.path);\n }\n }, children: [_jsx(\"span\", { className: styles.gitFolderIcon, \"aria-hidden\": \"true\", children: collapsed ? _jsx(IconFolderClose16, {}) : _jsx(IconFolderOpen16, {}) }), _jsx(\"span\", { className: styles.gitFolderName, title: node.path, children: node.name })] }), _jsx(\"ul\", { id: childrenId, className: styles.gitFolderChildren, role: \"group\", hidden: collapsed, children: renderTreeNodes({\n treeId,\n level: level + 1,\n nodes: node.children,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) })] }, 'folder:' + node.path));\n }\n const { file } = node;\n const isSelected = selectedPath === file.path || selectedPath === file.oldPath;\n // The row color carries the status visually; the localized wording stays in the\n // title and accessible label so the row remains readable without color.\n const statusText = fileTitle(file) + ' · ' + t(STATUS_LABELS[file.status]);\n return (_jsx(\"li\", { role: \"treeitem\", \"aria-level\": level, \"aria-posinset\": index + 1, \"aria-setsize\": nodes.length, \"aria-selected\": isSelected, children: _jsxs(\"button\", { type: \"button\", \"aria-selected\": isSelected, \"data-dashboard-git-file\": file.path, \"aria-label\": statusText, title: statusText, onClick: () => onSelect(file.path), children: [_jsx(\"span\", { className: styles.gitFileIcon, \"aria-hidden\": \"true\", children: _jsx(GitFileTypeIcon, { path: file.path, className: styles.gitFileIconGlyph }) }), _jsx(\"span\", { className: styles.gitFilePath, \"data-status\": file.status, title: statusText, children: fileLabel(file) }), _jsx(GitLineStats, { additions: file.additions, deletions: file.deletions, ariaLabel: file.additions === undefined || file.deletions === undefined\n ? undefined\n : t('dashboard.git.lineStats', { additions: file.additions, deletions: file.deletions }) }), file.commits !== undefined && file.commits.length > 0 && (_jsx(\"code\", { className: styles.gitFileContributors, title: file.commits.join(', '), children: file.commits.map(shortCommit).join(', ') }))] }) }, 'file:' + (file.oldPath ?? '') + '\\u0000' + file.path));\n });\n}\n/** Changed-file tree; only paths returned by Host are selectable. */\nexport function GitChangedFiles({ files, selectedPath, onSelect, t }) {\n const treeInstanceId = useId().replaceAll(':', '');\n const [collapsedFolders, setCollapsedFolders] = useState(() => new Set());\n // Building the tree sorts every folder, so it is derived once per file list\n // instead of on each render of the surrounding panel.\n const tree = useMemo(() => buildGitFileTree(files), [files]);\n const toggleFolder = (path) => {\n setCollapsedFolders((previous) => {\n const next = new Set(previous);\n if (next.has(path))\n next.delete(path);\n else\n next.add(path);\n return next;\n });\n };\n return (_jsx(\"ul\", { className: styles.gitChangedFileList, role: \"tree\", \"aria-label\": t('dashboard.git.changedFiles'), \"data-dashboard-git-file-tree\": true, children: renderTreeNodes({\n treeId: treeInstanceId,\n level: 1,\n nodes: tree,\n collapsedFolders,\n toggleFolder,\n selectedPath,\n onSelect,\n t,\n }) }));\n}\n//# sourceMappingURL=GitChangedFiles.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef } from 'react';\nimport styles from './worktree-git.css';\nfunction commitDate(value) {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n}\n/** Keyboard-navigable, optionally multi-selectable, graph-free commit list for the Dashboard. */\nexport function GitCommitList({ commits, selectedCommit, selectedCommits = [], multiSelect = false, onSelect, onToggle, t }) {\n const itemRefs = useRef([]);\n const move = (index, direction) => {\n const nextIndex = direction === 'first'\n ? 0\n : direction === 'last'\n ? commits.length - 1\n : Math.max(0, Math.min(commits.length - 1, index + direction));\n itemRefs.current[nextIndex]?.focus();\n };\n const pick = (commit) => {\n // The working tree is a single live target, so it always replaces the selection.\n if (!multiSelect || commit.kind === 'working-tree' || onToggle === undefined)\n onSelect(commit.sha);\n else\n onToggle(commit.sha);\n };\n return (_jsx(\"ul\", { className: styles.gitCommitList, role: \"listbox\", \"aria-multiselectable\": multiSelect, \"data-dashboard-git-commit-multiselect\": multiSelect ? 'on' : 'off', \"aria-label\": t('dashboard.git.commits'), \"aria-describedby\": multiSelect ? 'dashboard-git-commit-selection-hint' : undefined, children: commits.map((commit, index) => {\n const isWorkingTree = commit.kind === 'working-tree';\n const isSelected = isWorkingTree\n ? selectedCommit === commit.sha\n : selectedCommits.includes(commit.sha);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { ref: (element) => { itemRefs.current[index] = element; }, type: \"button\", role: \"option\", \"aria-selected\": isSelected, \"aria-posinset\": index + 1, \"aria-setsize\": commits.length, \"data-dashboard-git-commit\": commit.sha, \"data-dashboard-git-commit-kind\": commit.kind ?? 'commit', onClick: () => pick(commit), onKeyDown: (event) => {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n move(index, -1);\n }\n else if (event.key === 'ArrowDown') {\n event.preventDefault();\n move(index, 1);\n }\n else if (event.key === 'Home') {\n event.preventDefault();\n move(index, 'first');\n }\n else if (event.key === 'End') {\n event.preventDefault();\n move(index, 'last');\n }\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n pick(commit);\n }\n }, children: [multiSelect && (_jsx(\"span\", { className: styles.gitCommitSelectionMark, \"aria-hidden\": \"true\", children: isSelected ? '✓' : '○' })), _jsx(\"span\", { className: styles.gitCommitSubject, children: isWorkingTree ? t('dashboard.git.uncommittedChanges') : commit.subject || t('dashboard.git.untitledCommit') }), _jsx(\"span\", { className: styles.gitCommitMeta, children: isWorkingTree ? (_jsx(\"span\", { className: styles.gitCommitWorkingTree, children: t('dashboard.git.workingTree') })) : (_jsxs(_Fragment, { children: [_jsx(\"code\", { children: commit.sha.slice(0, 7) }), _jsx(\"span\", { children: commit.authorName }), _jsx(\"time\", { dateTime: commit.authoredAt, title: commitDate(commit.authoredAt), children: commitDate(commit.authoredAt) })] })) })] }) }, commit.sha));\n }) }));\n}\n//# sourceMappingURL=GitCommitList.js.map","const HUNK_HEADER = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/u;\n/** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */\nexport function parseUnifiedDiff(patch) {\n const hunks = [];\n let current;\n let oldLine = 0;\n let newLine = 0;\n const flush = () => {\n if (current === undefined)\n return;\n hunks.push({\n oldStart: current.oldStart,\n oldLines: current.oldLines,\n newStart: current.newStart,\n newLines: current.newLines,\n lines: current.lines,\n });\n current = undefined;\n };\n for (const rawLine of patch.split(/\\r?\\n/u)) {\n const header = HUNK_HEADER.exec(rawLine);\n if (header !== null) {\n flush();\n oldLine = Number(header[1]);\n newLine = Number(header[3]);\n current = {\n oldStart: oldLine,\n oldLines: Number(header[2] ?? '1'),\n newStart: newLine,\n newLines: Number(header[4] ?? '1'),\n lines: [],\n };\n continue;\n }\n if (current === undefined || rawLine === '\\\')\n continue;\n const marker = rawLine[0];\n const text = rawLine.slice(1);\n if (marker === ' ') {\n current.lines.push({ type: 'context', oldLine, newLine, text });\n oldLine += 1;\n newLine += 1;\n }\n else if (marker === '+') {\n current.lines.push({ type: 'add', newLine, text });\n newLine += 1;\n }\n else if (marker === '-') {\n current.lines.push({ type: 'delete', oldLine, text });\n oldLine += 1;\n }\n }\n flush();\n return hunks;\n}\n//# sourceMappingURL=git-diff-parser.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { IconRightUpOutline16 } from '../../dsh-icons.js';\nimport { useEffect, useMemo, useState } from 'react';\nimport { parseUnifiedDiff } from './git-diff-parser.js';\nimport { GitFileTypeIcon } from './GitFileTypeIcon.js';\nimport styles from './worktree-git.css';\n/**\n * Rendering budget for one patch. The provider already bounds patch bytes, but a\n * large summary can still hold thousands of lines, so the panel folds hunks\n * beyond this budget and offers to render the rest on request.\n */\nconst MAX_RENDERED_DIFF_LINES = 2000;\nfunction hunkLabel(hunk) {\n return '@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@';\n}\nfunction shortCommit(commit) {\n return commit.slice(0, 7);\n}\n/** Fold whole hunks once the render budget is reached. */\nfunction limitHunks(hunks, maxLines) {\n const visible = [];\n let rendered = 0;\n let hiddenLines = 0;\n for (const hunk of hunks) {\n const cost = hunk.lines.length + 1;\n if (rendered < maxLines) {\n visible.push(hunk);\n rendered += cost;\n continue;\n }\n hiddenLines += cost;\n }\n return { hunks: visible, hiddenLines };\n}\n/** Render one unified patch as escaped plain text with lightweight line numbers. */\nfunction DiffHunks({ patch, t }) {\n const hunks = useMemo(() => parseUnifiedDiff(patch), [patch]);\n const [expanded, setExpanded] = useState(false);\n useEffect(() => {\n setExpanded(false);\n }, [patch]);\n if (hunks.length === 0) {\n return _jsx(\"pre\", { className: styles.gitRawDiff, children: patch || t('dashboard.git.emptyDiff') });\n }\n const limited = expanded ? { hunks, hiddenLines: 0 } : limitHunks(hunks, MAX_RENDERED_DIFF_LINES);\n return (_jsxs(_Fragment, { children: [limited.hunks.map((hunk, hunkIndex) => (_jsxs(\"section\", { className: styles.gitDiffHunk, children: [_jsx(\"div\", { className: styles.gitDiffHunkHeader, children: hunkLabel(hunk) }), hunk.lines.map((line, lineIndex) => (_jsxs(\"div\", { className: styles.gitDiffLine + ' ' + styles['gitDiffLine' + line.type], children: [_jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'add' ? '' : line.oldLine }), _jsx(\"span\", { className: styles.gitDiffLineNumber, children: line.type === 'delete' ? '' : line.newLine }), _jsxs(\"code\", { children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: line.type === 'context' ? ' ' : line.type === 'add' ? '+' : '-' }), line.text] })] }, line.type + '-' + lineIndex)))] }, hunk.oldStart + '-' + hunk.newStart + '-' + hunkIndex))), limited.hiddenLines > 0 && (_jsxs(\"div\", { className: styles.gitDiffFolded, children: [_jsx(\"span\", { children: t('dashboard.git.diffLinesHidden', { n: limited.hiddenLines }) }), _jsx(\"button\", { type: \"button\", className: styles.gitDiffShowAll, \"data-dashboard-git-show-full-diff\": true, onClick: () => setExpanded(true), children: t('dashboard.git.showFullDiff') })] }))] }));\n}\nfunction DiffSegment({ segment, t }) {\n return (_jsxs(\"section\", { className: styles.gitDiffSegment, children: [_jsxs(\"div\", { className: styles.gitDiffSegmentHeader, children: [t('dashboard.git.commitDiffSection'), \" \", _jsx(\"code\", { children: shortCommit(segment.commit) })] }), segment.binary ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.binary') })) : segment.truncated ? (_jsx(\"div\", { className: styles.gitDiffMessage, children: t('dashboard.git.diffTruncated') })) : (_jsx(DiffHunks, { patch: segment.patch, t: t }))] }));\n}\n/** Render unified diff content as escaped plain text with lightweight line numbers. */\nexport function GitDiffView({ diff, onOpenFile, t }) {\n if (diff === undefined) {\n return _jsx(\"div\", { className: styles.gitDiffEmpty, children: t('dashboard.git.selectFile') });\n }\n const toolbar = (_jsxs(\"div\", { className: styles.gitDiffToolbar, children: [_jsxs(\"span\", { className: styles.gitDiffPath, title: diff.path, children: [_jsx(GitFileTypeIcon, { path: diff.path, className: styles.gitFileIconGlyph }), diff.path] }), onOpenFile !== undefined && (_jsxs(\"button\", { type: \"button\", className: styles.gitDiffOpenInSidebar, onClick: () => onOpenFile(diff.path), title: t('dashboard.git.openInSidebar'), \"data-dashboard-git-open-file\": diff.path, children: [_jsx(IconRightUpOutline16, { size: 14, className: styles.gitDiffOpenIcon }), _jsx(\"span\", { children: t('dashboard.git.openInSidebar') })] }))] }));\n if (diff.segments !== undefined) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: diff.segments.map((segment, index) => (_jsx(DiffSegment, { segment: segment, t: t }, segment.commit + '-' + index))) })] }));\n }\n if (diff.binary || diff.truncated) {\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiffMessage, children: diff.binary ? t('dashboard.git.binary') : t('dashboard.git.diffTruncated') })] }));\n }\n return (_jsxs(\"div\", { className: styles.gitDiffContainer, children: [toolbar, _jsx(\"div\", { className: styles.gitDiff, role: \"document\", \"aria-label\": t('dashboard.git.diff'), children: _jsx(DiffHunks, { patch: diff.patch, t: t }) })] }));\n}\n//# sourceMappingURL=GitDiffView.js.map","/**\n * Geometry for the two draggable Git dividers. Each divider splits one grid axis\n * of the panel into a leading pane, the divider itself, and a trailing pane.\n * These helpers stay free of DOM and React APIs so the drag math is testable.\n */\n/** Share of the stacked axis, in percent, given to the commits pane by default. */\nexport const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;\n/** Share of the side-by-side axis, in percent, given to the left column by default. */\nexport const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;\n/** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */\nexport const GIT_SPLIT_MIN_ROW_PX = 140;\n/** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */\nexport const GIT_SPLIT_MIN_COLUMN_PX = 240;\n/** Percentage points moved by one arrow-key press (Shift multiplies the step). */\nexport const GIT_SPLIT_KEY_STEP = 4;\nfunction roundPercent(percent) {\n return Math.round(percent * 100) / 100;\n}\n/**\n * Clamp a leading-pane share to the range that keeps both panes usable, or\n * undefined when the measured geometry cannot express a usable split at all.\n */\nexport function clampGitSplitPercent(percent, geometry) {\n if (!Number.isFinite(percent))\n return undefined;\n const { size, divider, minimum } = geometry;\n if (!Number.isFinite(size) || size <= 0)\n return undefined;\n const lower = (minimum / size) * 100;\n const upper = 100 - ((minimum + Math.max(divider, 0)) / size) * 100;\n if (upper <= lower)\n return undefined;\n return roundPercent(Math.min(Math.max(percent, lower), upper));\n}\n/** Resolve the share that keeps the divider centered under a pointer. */\nexport function gitSplitPercentFromPointer(pointer, geometry) {\n const halfDivider = Math.max(geometry.divider, 0) / 2;\n const leadingPx = pointer - geometry.start - halfDivider;\n return clampGitSplitPercent((leadingPx / geometry.size) * 100, geometry);\n}\n//# sourceMappingURL=git-column-split.js.map","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { GIT_SPLIT_KEY_STEP, clampGitSplitPercent, gitSplitPercentFromPointer } from './git-column-split.js';\n/**\n * Remembers every divider position for the rest of the browser session, so\n * closing and reopening the Git tab keeps the split the user dragged to.\n */\nconst rememberedPercents = new Map();\n/** Arrow keys that move a leading pane forward or backward along one axis. */\nconst KEY_DIRECTIONS = {\n horizontal: { ArrowUp: -1, ArrowDown: 1 },\n vertical: { ArrowLeft: -1, ArrowRight: 1 },\n};\n/**\n * Resize one grid axis with a pointer or the keyboard. The dragging frame writes\n * straight to the DOM custom property, so heavy commit and file lists never\n * re-render per pointer move; React state commits once per gesture.\n */\nexport function useGitPaneSplit(options) {\n const { containerRef, orientation, property, minimum, fallback } = options;\n const splitterRef = useRef(null);\n const [percent, setPercent] = useState(() => rememberedPercents.get(property) ?? fallback);\n const [dragging, setDragging] = useState(false);\n const percentRef = useRef(percent);\n const geometryRef = useRef(undefined);\n const draggingRef = useRef(false);\n const applyPercent = useCallback((next) => {\n percentRef.current = next;\n containerRef.current?.style.setProperty(property, next + '%');\n splitterRef.current?.setAttribute('aria-valuenow', String(Math.round(next)));\n }, [containerRef, property]);\n const commitPercent = useCallback((next) => {\n applyPercent(next);\n rememberedPercents.set(property, next);\n setPercent(next);\n }, [applyPercent, property]);\n useEffect(() => {\n applyPercent(percent);\n rememberedPercents.set(property, percent);\n }, [applyPercent, percent, property]);\n useEffect(() => {\n if (!dragging)\n return undefined;\n // Keep the resize cursor and suppress selection while the pointer is captured.\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.cursor = orientation === 'horizontal' ? 'row-resize' : 'col-resize';\n document.body.style.userSelect = 'none';\n return () => {\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n };\n }, [dragging, orientation]);\n const measure = useCallback(() => {\n const container = containerRef.current;\n const splitter = splitterRef.current;\n if (container === null || splitter === null)\n return undefined;\n const containerRect = container.getBoundingClientRect();\n const splitterRect = splitter.getBoundingClientRect();\n return orientation === 'horizontal'\n ? { start: containerRect.top, size: containerRect.height, divider: splitterRect.height, minimum }\n : { start: containerRect.left, size: containerRect.width, divider: splitterRect.width, minimum };\n }, [containerRef, minimum, orientation]);\n const startDrag = useCallback((event) => {\n if (event.button !== 0)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n geometryRef.current = geometry;\n draggingRef.current = true;\n setDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n event.preventDefault();\n // preventDefault suppresses the default focus; keep the divider keyboard-reachable.\n event.currentTarget.focus({ preventScroll: true });\n }, [measure]);\n const drag = useCallback((event) => {\n const geometry = geometryRef.current;\n if (!draggingRef.current || geometry === undefined)\n return;\n const pointer = orientation === 'horizontal' ? event.clientY : event.clientX;\n const next = gitSplitPercentFromPointer(pointer, geometry);\n if (next !== undefined)\n applyPercent(next);\n }, [applyPercent, orientation]);\n const endDrag = useCallback((event) => {\n if (!draggingRef.current)\n return;\n draggingRef.current = false;\n geometryRef.current = undefined;\n setDragging(false);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n const geometry = measure();\n commitPercent(geometry === undefined\n ? percentRef.current\n : clampGitSplitPercent(percentRef.current, geometry) ?? percentRef.current);\n }, [commitPercent, measure]);\n const onKeyDown = useCallback((event) => {\n const direction = KEY_DIRECTIONS[orientation][event.key];\n if (direction === undefined)\n return;\n const geometry = measure();\n if (geometry === undefined)\n return;\n event.preventDefault();\n const step = GIT_SPLIT_KEY_STEP * (event.shiftKey ? 4 : 1);\n const next = clampGitSplitPercent(percentRef.current + direction * step, geometry);\n if (next !== undefined)\n commitPercent(next);\n }, [commitPercent, measure, orientation]);\n const reset = useCallback(() => {\n commitPercent(fallback);\n }, [commitPercent, fallback]);\n return { splitterRef, percent, dragging, startDrag, drag, endDrag, onKeyDown, reset };\n}\n//# sourceMappingURL=useGitPaneSplit.js.map","import { WORKTREE_GIT_WORKING_TREE, isWorktreeGitCommit, } from '../../../contract/index.js';\nexport const MAX_FILE_CACHE = 8;\nexport const MAX_DIFF_CACHE = 24;\n/** The summary selection for one working-tree inclusion mode. */\nexport function summarySelection(includeWorkingTree) {\n return includeWorkingTree ? { kind: 'summary', includeWorkingTree: true } : { kind: 'summary' };\n}\nfunction targetKey(target) {\n if (target.kind === 'commit')\n return 'commit\\u0000' + target.commit;\n if (target.selection.kind === 'summary') {\n return target.selection.includeWorkingTree === true ? 'summary\\u0000working-tree' : 'summary';\n }\n return 'commits\\u0000' + target.selection.commits.join('\\u0000');\n}\nfunction historyProjectionKey(history) {\n if (history.status !== 'ready')\n return 'unknown';\n return (history.value.baseline?.commit ?? 'unknown') + '\\u0000' + (history.value.headCommit ?? 'unknown');\n}\n/** True when the target reads the live working tree and must not be cached. */\nexport function isLiveTarget(target) {\n return target.kind === 'commit'\n ? target.commit === WORKTREE_GIT_WORKING_TREE\n : target.selection.kind === 'summary' && target.selection.includeWorkingTree === true;\n}\n/**\n * Live-result markers complete a cache key. Matching on the marker rather than\n * on a hand-written substring keeps key construction and invalidation aligned.\n */\nconst LIVE_KEY_MARKERS = [\n '\\u0000' + targetKey({ kind: 'commit', commit: WORKTREE_GIT_WORKING_TREE }),\n '\\u0000' + targetKey({ kind: 'selection', selection: summarySelection(true) }),\n];\n/** True when a file or diff cache key belongs to a live working-tree read. */\nexport function isLiveCacheKey(key) {\n return LIVE_KEY_MARKERS.some((marker) => key.includes(marker));\n}\n/**\n * Key token for a read that names no baseline branch and therefore asks the\n * Manager to resolve the Worktree's captured acquisition commit. The leading NUL\n * cannot appear in a local branch name, so the token can never collide with one.\n */\nconst CAPTURED_BASELINE_KEY = '\\u0000captured';\nfunction baselineKey(baseBranch) {\n return baseBranch ?? CAPTURED_BASELINE_KEY;\n}\nexport function gitCacheKey(baseBranch, history, target) {\n return baselineKey(baseBranch) + '\\u0000' + historyProjectionKey(history) + '\\u0000' + targetKey(target);\n}\nexport function diffCacheKey(baseBranch, history, target, filePath) {\n return gitCacheKey(baseBranch, history, target) + '\\u0000' + filePath;\n}\n/** Compare two targets by projection identity rather than object identity. */\nexport function sameTarget(left, right) {\n return targetKey(left) === targetKey(right);\n}\n/** Drop the oldest entries until the cache respects its bound. */\nexport function trimCache(cache, maxSize) {\n while (cache.size > maxSize) {\n const oldest = cache.keys().next().value;\n if (oldest === undefined)\n return;\n cache.delete(oldest);\n }\n}\n/** Find the changed-file row for a new or previous path. */\nexport function fileForPath(files, selectedPath) {\n return files.files.find((file) => file.path === selectedPath || file.oldPath === selectedPath);\n}\n/** Keep only SHAs that are still part of the current history projection. */\nexport function canonicalizeCommits(history, commits) {\n if (history === undefined)\n return [];\n const requested = new Set(commits.filter((commit) => isWorktreeGitCommit(commit)));\n return history.commits\n .filter((commit) => commit.sha !== WORKTREE_GIT_WORKING_TREE && requested.has(commit.sha))\n .map((commit) => commit.sha);\n}\n//# sourceMappingURL=git-state-cache.js.map","import { useEffect, useMemo, useSyncExternalStore } from 'react';\nimport { toWorktreeViewError } from '../../view/worktree-view.js';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId } from './git-facts.js';\nimport { MAX_DIFF_CACHE, MAX_FILE_CACHE, canonicalizeCommits, diffCacheKey, fileForPath, gitCacheKey, isLiveCacheKey, isLiveTarget, sameTarget, summarySelection, trimCache, } from './git-state-cache.js';\nfunction asError(error) {\n return error instanceof Error\n ? error\n : Object.assign(new Error(toWorktreeViewError(error).message), toWorktreeViewError(error));\n}\nfunction normalizeBranch(branch) {\n const normalized = branch?.trim();\n return normalized === undefined || normalized.length === 0 ? undefined : normalized;\n}\nfunction emptyState(defaultBaselineBranch, main) {\n return {\n branches: { status: 'idle' },\n baselineBranch: normalizeBranch(defaultBaselineBranch),\n history: { status: 'idle' },\n view: main ? 'commits' : 'summary',\n includeWorkingTree: false,\n selectedCommits: [],\n commitMultiSelect: false,\n files: { status: 'idle' },\n diff: { status: 'idle' },\n };\n}\n/**\n * Create the browser-safe Git Dashboard state machine. Construction is inert;\n * the caller explicitly starts history loading on first Git-tab activation.\n */\nexport function createWorktreeGitStateController(input) {\n // Main reads the Workspace-root HEAD history directly; Worktree reads still\n // require either an explicit baseline branch or an immutable acquisition commit.\n const main = isMainWorktreeId(input.worktreeId);\n const capturedBaseline = input.capturedBaseline === true;\n const canRead = (baselineBranch) => main || capturedBaseline || baselineBranch !== undefined;\n let state = emptyState(input.defaultBaselineBranch, main);\n let disposed = false;\n let branchesLoaded = false;\n let branchesRequest = 0;\n let historyLoaded = false;\n let historyRequest = 0;\n let filesRequest = 0;\n let diffRequest = 0;\n let branchesInFlight;\n let historyInFlight;\n const filesInFlight = new Map();\n const diffInFlight = new Map();\n const listeners = new Set();\n const filesCache = new Map();\n const diffCache = new Map();\n const emit = () => {\n if (disposed)\n return;\n for (const listener of listeners)\n listener();\n };\n const update = (next) => {\n if (disposed)\n return;\n state = next;\n emit();\n };\n const invalidateWorkingTreeCache = () => {\n for (const key of filesCache.keys()) {\n if (isLiveCacheKey(key))\n filesCache.delete(key);\n }\n for (const key of diffCache.keys()) {\n if (isLiveCacheKey(key))\n diffCache.delete(key);\n }\n };\n const retireLiveInFlight = () => {\n let retired = false;\n for (const key of filesInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n filesInFlight.delete(key);\n retired = true;\n }\n }\n for (const key of diffInFlight.keys()) {\n if (isLiveCacheKey(key)) {\n diffInFlight.delete(key);\n retired = true;\n }\n }\n return retired;\n };\n const currentTarget = () => {\n if (state.view === 'summary') {\n return { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n }\n if (state.selectedCommit === undefined)\n return undefined;\n if (state.selectedCommit !== WORKTREE_GIT_WORKING_TREE &&\n state.selectedCommits.length > 1) {\n return { kind: 'selection', selection: { kind: 'commits', commits: state.selectedCommits } };\n }\n return { kind: 'commit', commit: state.selectedCommit };\n };\n /**\n * Stale-response guard. A completion only publishes while it is still the\n * newest request for the same baseline, projection, and selected path.\n */\n const isCurrentRequest = (request, latestRequest, baselineBranch, target, selectedPath) => {\n if (disposed || request !== latestRequest || state.baselineBranch !== baselineBranch)\n return false;\n const active = currentTarget();\n if (active === undefined || !sameTarget(active, target))\n return false;\n return selectedPath === undefined || state.selectedPath === selectedPath;\n };\n const requestFiles = (baseBranch, history, target) => {\n const key = gitCacheKey(baseBranch, history, target);\n const existing = filesInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n filesInFlight.set(key, promise);\n void promise.then(() => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n }, () => {\n if (filesInFlight.get(key) === promise)\n filesInFlight.delete(key);\n });\n return promise;\n };\n const requestDiff = (baseBranch, history, target, diffPath) => {\n const key = diffCacheKey(baseBranch, history, target, diffPath);\n const existing = diffInFlight.get(key);\n if (existing !== undefined)\n return existing;\n if (input.manager === undefined)\n return Promise.reject(new Error('Git manager unavailable'));\n const request = target.kind === 'commit'\n ? { commit: target.commit }\n : { selection: target.selection };\n let promise;\n try {\n promise = input.manager.getWorktreeCommitFileDiff({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n ...request,\n path: diffPath,\n baseBranch,\n });\n }\n catch (error) {\n promise = Promise.reject(error);\n }\n diffInFlight.set(key, promise);\n void promise.then(() => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n }, () => {\n if (diffInFlight.get(key) === promise)\n diffInFlight.delete(key);\n });\n return promise;\n };\n const loadDiff = async (target, selectedPath, diffPath) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++diffRequest;\n const key = diffCacheKey(baselineBranch, state.history, target, diffPath);\n const cached = isLiveTarget(target) ? undefined : diffCache.get(key);\n if (cached !== undefined) {\n update({ ...state, selectedPath, diff: { status: 'ready', value: cached } });\n return;\n }\n update({ ...state, selectedPath, diff: { status: 'loading' } });\n try {\n const value = await requestDiff(baselineBranch, state.history, target, diffPath);\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n if (!isLiveTarget(target)) {\n diffCache.set(key, value);\n trimCache(diffCache, MAX_DIFF_CACHE);\n }\n update({ ...state, diff: { status: 'ready', value } });\n }\n catch (error) {\n if (!isCurrentRequest(request, diffRequest, baselineBranch, target, selectedPath))\n return;\n update({ ...state, diff: { status: 'error', error: asError(error) } });\n }\n };\n const applyFiles = (target, value) => {\n const selectedPath = value.files[0]?.path;\n update({\n ...state,\n files: { status: 'ready', value },\n selectedPath,\n diff: { status: 'idle' },\n });\n if (selectedPath !== undefined)\n void loadDiff(target, selectedPath, selectedPath);\n };\n const loadFiles = async (target, preserveReady = false) => {\n const baselineBranch = state.baselineBranch;\n if (!canRead(baselineBranch))\n return;\n const request = ++filesRequest;\n ++diffRequest;\n const key = gitCacheKey(baselineBranch, state.history, target);\n const cached = isLiveTarget(target) ? undefined : filesCache.get(key);\n if (cached !== undefined) {\n applyFiles(target, cached);\n return;\n }\n const previousFiles = state.files.status === 'ready' ? state.files : undefined;\n if (!preserveReady || previousFiles === undefined) {\n update({ ...state, files: { status: 'loading' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else {\n update({ ...state, files: { ...previousFiles, refreshing: true } });\n }\n try {\n const value = await requestFiles(baselineBranch, state.history, target);\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (!isLiveTarget(target)) {\n filesCache.set(key, value);\n trimCache(filesCache, MAX_FILE_CACHE);\n }\n applyFiles(target, value);\n }\n catch (error) {\n if (!isCurrentRequest(request, filesRequest, baselineBranch, target))\n return;\n if (preserveReady && previousFiles !== undefined) {\n update({ ...state, files: { status: 'ready', value: previousFiles.value, error: asError(error) } });\n }\n else {\n update({ ...state, files: { status: 'error', error: asError(error) }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n }\n };\n const resetTarget = (next) => {\n retireLiveInFlight();\n ++filesRequest;\n ++diffRequest;\n update({\n ...state,\n ...next,\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n };\n const selectBaselineBranch = (branch) => {\n if (disposed || main)\n return;\n const nextBranch = normalizeBranch(branch);\n if (state.baselineBranch === nextBranch)\n return;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n historyInFlight = undefined;\n historyLoaded = false;\n filesInFlight.clear();\n diffInFlight.clear();\n filesCache.clear();\n diffCache.clear();\n update({\n ...state,\n baselineBranch: nextBranch,\n history: { status: 'idle' },\n view: 'summary',\n selectedCommit: undefined,\n selectedCommits: [],\n files: { status: 'idle' },\n selectedPath: undefined,\n diff: { status: 'idle' },\n });\n // Clearing an explicit selection falls back to the captured baseline, so it\n // must re-read rather than leave the previous branch projection on screen.\n if (nextBranch !== undefined || capturedBaseline)\n void loadHistory();\n };\n const selectSummary = () => {\n if (disposed || main || !canRead(state.baselineBranch))\n return;\n const target = { kind: 'selection', selection: summarySelection(state.includeWorkingTree) };\n resetTarget({ view: 'summary', selectedCommit: undefined, selectedCommits: [] });\n void loadFiles(target);\n };\n const setIncludeWorkingTree = (includeWorkingTree) => {\n if (disposed || main || state.includeWorkingTree === includeWorkingTree)\n return;\n if (state.view !== 'summary' || !canRead(state.baselineBranch)) {\n update({ ...state, includeWorkingTree });\n return;\n }\n const target = { kind: 'selection', selection: summarySelection(includeWorkingTree) };\n resetTarget({ includeWorkingTree });\n void loadFiles(target);\n };\n const selectView = (view) => {\n if (view === 'summary') {\n selectSummary();\n return;\n }\n if (disposed || !canRead(state.baselineBranch))\n return;\n const selectedCommit = state.selectedCommit;\n const selectedCommits = state.selectedCommits;\n if (state.view === 'commits' && state.files.status === 'ready')\n return;\n resetTarget({ view: 'commits' });\n if (selectedCommit === undefined)\n return;\n const target = selectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: selectedCommit };\n void loadFiles(target);\n };\n const selectCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history !== undefined && !history.commits.some((candidate) => candidate.sha === commit))\n return;\n const target = { kind: 'commit', commit };\n const selectedCommits = commit === WORKTREE_GIT_WORKING_TREE ? [] : [commit];\n if (state.view === 'commits' && state.selectedCommit === commit && state.files.status === 'ready' && state.selectedCommits.length <= 1)\n return;\n resetTarget({ view: 'commits', selectedCommit: commit, selectedCommits });\n void loadFiles(target);\n };\n const toggleCommit = (commit) => {\n if (disposed || !canRead(state.baselineBranch) || commit === WORKTREE_GIT_WORKING_TREE)\n return;\n const history = state.history.status === 'ready' ? state.history.value : undefined;\n if (history === undefined || !history.commits.some((candidate) => candidate.sha === commit && candidate.sha !== WORKTREE_GIT_WORKING_TREE))\n return;\n const selected = state.selectedCommits.includes(commit)\n ? state.selectedCommits.filter((candidate) => candidate !== commit)\n : [...state.selectedCommits, commit];\n const canonical = canonicalizeCommits(history, selected);\n if (canonical.length === 0) {\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n return;\n }\n const selectedCommit = canonical.includes(commit) ? commit : canonical[canonical.length - 1];\n const target = canonical.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: canonical } }\n : { kind: 'commit', commit: selectedCommit };\n resetTarget({ view: 'commits', selectedCommit, selectedCommits: canonical });\n void loadFiles(target);\n };\n /**\n * Switch between replace-on-click and additive selection. Turning multi-select\n * off collapses an aggregate target back to its primary commit so the files and\n * diff panes keep matching the visible selection.\n */\n const setCommitMultiSelect = (enabled) => {\n if (disposed || state.commitMultiSelect === enabled)\n return;\n if (enabled) {\n update({ ...state, commitMultiSelect: true });\n return;\n }\n const primary = state.selectedCommit;\n const aggregated = state.view === 'commits' && primary !== undefined && state.selectedCommits.length > 1;\n if (!aggregated) {\n update({\n ...state,\n commitMultiSelect: false,\n selectedCommits: primary === undefined ? [] : [primary],\n });\n return;\n }\n // selectCommit must still observe the aggregate selection; collapsing it first\n // would trip the \"already showing this commit\" guard and keep the union files.\n update({ ...state, commitMultiSelect: false });\n selectCommit(primary);\n };\n const clearCommitSelection = () => {\n if (disposed || !canRead(state.baselineBranch))\n return;\n resetTarget({ view: 'commits', selectedCommit: undefined, selectedCommits: [] });\n };\n const selectPath = (selectedPath) => {\n if (disposed || state.files.status !== 'ready')\n return;\n const target = currentTarget();\n if (target === undefined)\n return;\n const changedFile = fileForPath(state.files.value, selectedPath);\n if (changedFile === undefined)\n return;\n ++diffRequest;\n void loadDiff(target, selectedPath, changedFile.path);\n };\n const loadBranches = (refresh = false) => {\n if (disposed || main)\n return Promise.resolve();\n if (branchesInFlight !== undefined)\n return branchesInFlight;\n if (!refresh && branchesLoaded)\n return Promise.resolve();\n const request = ++branchesRequest;\n const previous = state.branches;\n if (refresh && previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, branches: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager?.listBranches === undefined) {\n if (!disposed && request === branchesRequest) {\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value: [] } });\n }\n return;\n }\n try {\n const value = await input.manager.listBranches({ workspaceId: input.workspaceId });\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = true;\n update({ ...state, branches: { status: 'ready', value } });\n }\n catch (error) {\n if (disposed || request !== branchesRequest)\n return;\n branchesLoaded = false;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, branches: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, branches: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, branches: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (branchesInFlight === promise)\n branchesInFlight = undefined;\n });\n branchesInFlight = promise;\n return promise;\n };\n const loadHistory = (refresh = false) => {\n if (disposed || !canRead(state.baselineBranch))\n return Promise.resolve();\n if (historyInFlight !== undefined)\n return historyInFlight;\n if (!refresh && historyLoaded)\n return Promise.resolve();\n const baselineBranch = state.baselineBranch;\n const request = ++historyRequest;\n const previous = state.history;\n const refreshesWorkingTree = refresh && state.selectedCommit === WORKTREE_GIT_WORKING_TREE;\n if (refresh) {\n const retiredLiveReads = retireLiveInFlight();\n if (retiredLiveReads) {\n ++filesRequest;\n ++diffRequest;\n if (state.files.status === 'loading') {\n update({ ...state, files: { status: 'idle' }, selectedPath: undefined, diff: { status: 'idle' } });\n }\n else if (state.diff.status === 'loading') {\n update({ ...state, diff: { status: 'idle' } });\n }\n }\n }\n if (refreshesWorkingTree)\n invalidateWorkingTreeCache();\n if (refresh && previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, refreshing: true } });\n }\n else if (refresh && previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, refreshing: true } });\n }\n else {\n update({ ...state, history: { status: 'loading' } });\n }\n const run = async () => {\n if (input.manager === undefined) {\n const error = new Error('Git manager unavailable');\n if (!disposed && request === historyRequest) {\n historyLoaded = true;\n update({ ...state, history: { status: 'error', error } });\n }\n return;\n }\n try {\n const value = await input.manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n });\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const selectedCommits = state.view === 'summary'\n ? []\n : canonicalizeCommits(value, state.selectedCommits);\n const selectedCommitStillExists = state.view !== 'summary' &&\n state.selectedCommit !== undefined &&\n value.commits.some((commit) => commit.sha === state.selectedCommit);\n const nextSelectedCommit = state.view === 'summary'\n ? undefined\n : selectedCommitStillExists\n ? state.selectedCommit\n : selectedCommits[0] ?? value.commits[0]?.sha;\n const nextSelectedCommits = state.view === 'summary'\n ? []\n : selectedCommits.length > 0\n ? selectedCommits\n : nextSelectedCommit !== undefined && nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE\n ? [nextSelectedCommit]\n : [];\n update({\n ...state,\n history: { status: 'ready', value },\n selectedCommits: nextSelectedCommits,\n selectedCommit: nextSelectedCommit,\n });\n if (state.view === 'summary') {\n void loadFiles({ kind: 'selection', selection: summarySelection(state.includeWorkingTree) }, true);\n }\n else if (nextSelectedCommit === undefined) {\n resetTarget({ selectedCommit: undefined, selectedCommits: [] });\n }\n else if (!selectedCommitStillExists || selectedCommits.length !== state.selectedCommits.length || refreshesWorkingTree) {\n const target = nextSelectedCommit !== WORKTREE_GIT_WORKING_TREE && selectedCommits.length > 1\n ? { kind: 'selection', selection: { kind: 'commits', commits: selectedCommits } }\n : { kind: 'commit', commit: nextSelectedCommit };\n void loadFiles(target, refreshesWorkingTree);\n }\n }\n catch (error) {\n if (disposed || request !== historyRequest || state.baselineBranch !== baselineBranch)\n return;\n historyLoaded = true;\n const nextError = asError(error);\n if (previous.status === 'ready') {\n update({ ...state, history: { status: 'ready', value: previous.value, error: nextError } });\n }\n else if (previous.status === 'error' && previous.previous !== undefined) {\n update({ ...state, history: { status: 'ready', value: previous.previous, error: nextError } });\n }\n else {\n update({ ...state, history: { status: 'error', error: nextError } });\n }\n }\n };\n const promise = run().finally(() => {\n if (historyInFlight === promise)\n historyInFlight = undefined;\n });\n historyInFlight = promise;\n return promise;\n };\n const controller = {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n loadBranches: () => loadBranches(false),\n loadHistory: () => loadHistory(false),\n refresh: () => {\n const branchesTask = loadBranches(true);\n const historyTask = loadHistory(true);\n return Promise.all([branchesTask, historyTask]).then(() => undefined);\n },\n selectBaselineBranch,\n selectView,\n selectSummary,\n setIncludeWorkingTree,\n selectCommit,\n toggleCommit,\n setCommitMultiSelect,\n clearCommitSelection,\n selectPath,\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n ++branchesRequest;\n ++historyRequest;\n ++filesRequest;\n ++diffRequest;\n listeners.clear();\n },\n };\n return controller;\n}\n/** React adapter; the first Git history request starts in the mount effect. */\nexport function useWorktreeGitState(input) {\n const controller = useMemo(() => createWorktreeGitStateController(input), [\n input.manager,\n input.workspaceId,\n input.worktreeId,\n input.defaultBaselineBranch,\n input.capturedBaseline,\n ]);\n const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);\n useEffect(() => {\n void controller.loadBranches();\n void controller.loadHistory();\n return controller.dispose;\n }, [controller]);\n return {\n ...snapshot,\n loadBranches: controller.loadBranches,\n loadHistory: controller.loadHistory,\n refresh: controller.refresh,\n selectBaselineBranch: controller.selectBaselineBranch,\n selectView: controller.selectView,\n selectSummary: controller.selectSummary,\n setIncludeWorkingTree: controller.setIncludeWorkingTree,\n selectCommit: controller.selectCommit,\n toggleCommit: controller.toggleCommit,\n setCommitMultiSelect: controller.setCommitMultiSelect,\n clearCommitSelection: controller.clearCommitSelection,\n selectPath: controller.selectPath,\n dispose: controller.dispose,\n };\n}\n//# sourceMappingURL=useWorktreeGitState.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { NotificationToasts } from '../../surface/components/NotificationToasts.js';\nimport { toWorktreeViewError } from '../../view/worktree-view.js';\nimport { formatWorktreeViewError } from '../../view/worktree-error-copy.js';\nimport { failureToastKey } from '../../surface/notification-queue.js';\nimport { useRef } from 'react';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitChangedFiles } from './GitChangedFiles.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport { GitCommitList } from './GitCommitList.js';\nimport { GitDiffView } from './GitDiffView.js';\nimport { 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';\nimport { useGitPaneSplit } from './useGitPaneSplit.js';\nimport { useWorktreeGitState } from './useWorktreeGitState.js';\nimport styles from './worktree-git.css';\nfunction shortCommit(commit) {\n return commit === undefined ? '—' : commit.slice(0, 7);\n}\nfunction selectedCommit(history, sha) {\n return history?.commits.find((commit) => commit.sha === sha);\n}\nfunction commitCountLabel(history, t) {\n const committedCount = history.commits.filter((commit) => commit.kind !== 'working-tree').length;\n return history.commits.some((commit) => commit.kind === 'working-tree')\n ? t('dashboard.git.commitCountWithWorkingTree', { commits: committedCount })\n : t('dashboard.git.commitCount', { n: committedCount });\n}\nfunction commitLabel(commit, t) {\n return commit.kind === 'working-tree'\n ? t('dashboard.git.workingTree')\n : shortCommit(commit.sha);\n}\nfunction readyFiles(value) {\n return value?.files ?? [];\n}\n/** Empty-state copy per honest unavailable reason; one definition for both blocks. */\nconst UNAVAILABLE_COPY = {\n main: {\n title: 'dashboard.git.mainUnavailableTitle',\n description: 'dashboard.git.mainUnavailableDescription',\n },\n 'baseline-unselected': {\n title: 'dashboard.git.selectBaselineTitle',\n description: 'dashboard.git.selectBaselineDescription',\n },\n 'baseline-unknown': {\n title: 'dashboard.git.baselineUnknownTitle',\n description: 'dashboard.git.baselineUnknownDescription',\n },\n};\nfunction UnavailableNotice({ reason, t, }) {\n 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) })] }));\n}\n/** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */\nexport function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, context, capturedBaseline, onOpenFile, t, }) {\n const isMain = isMainWorktreeId(worktreeId);\n const selectedDefaultBaseline = normalizeBaselineBranch(defaultBaselineBranch, currentBranch);\n const state = useWorktreeGitState({\n manager,\n workspaceId,\n worktreeId,\n defaultBaselineBranch: isMain ? undefined : selectedDefaultBaseline,\n capturedBaseline: isMain ? false : capturedBaseline,\n });\n const gridRef = useRef(null);\n // Both dividers share the grid: one splits rows, one splits columns, in either layout.\n const rows = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'horizontal',\n property: '--git-rows-top',\n minimum: GIT_SPLIT_MIN_ROW_PX,\n fallback: GIT_SPLIT_DEFAULT_ROW_PERCENT,\n });\n const columns = useGitPaneSplit({\n containerRef: gridRef,\n orientation: 'vertical',\n property: '--git-columns-left',\n minimum: GIT_SPLIT_MIN_COLUMN_PX,\n fallback: GIT_SPLIT_DEFAULT_COLUMN_PERCENT,\n });\n const historyValue = state.history.status === 'ready' ? state.history.value : undefined;\n const commit = selectedCommit(historyValue, state.selectedCommit);\n const files = state.files.status === 'ready' ? readyFiles(state.files.value) : [];\n const diff = state.diff.status === 'ready' ? state.diff.value : undefined;\n const refreshing = state.history.status === 'ready' && state.history.refreshing === true;\n const unavailable = historyValue?.unavailableReason;\n const branchOptions = (state.branches.status === 'ready' ? state.branches.value : [])\n .filter((branch) => branch.name !== currentBranch);\n const branchError = state.branches.status === 'error'\n ? state.branches.error\n : state.branches.status === 'ready'\n ? state.branches.error\n : undefined;\n const baselineCommit = historyValue?.baseline?.commit;\n const baselineRef = state.baselineBranch ?? historyValue?.baseline?.ref;\n const targetLabel = state.view === 'summary'\n ? t('dashboard.git.baselineSummary')\n : state.selectedCommits.length > 1\n ? t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length })\n : commit === undefined\n ? undefined\n : commitLabel(commit, t);\n const hasTarget = state.view === 'summary' || commit !== undefined;\n const lineTotals = state.files.status === 'ready' && hasTarget ? sumLineTotals(files) : undefined;\n return (_jsxs(\"section\", { className: styles.gitPanel, \"data-dashboard-git-panel\": true, children: [_jsx(NotificationToasts, { notices: [\n ['branches', branchError],\n [\n 'history',\n state.history.status === 'error' || state.history.status === 'ready'\n ? state.history.error\n : undefined,\n ],\n [\n 'files',\n state.files.status === 'error' || state.files.status === 'ready'\n ? state.files.error\n : undefined,\n ],\n ['diff', state.diff.status === 'error' ? state.diff.error : undefined],\n ].flatMap(([scope, error]) => {\n if (!(error instanceof Error))\n return [];\n const diagnostic = toWorktreeViewError(error);\n const text = formatWorktreeViewError(diagnostic, t);\n return [\n {\n key: JSON.stringify([workspaceId, worktreeId, scope, diagnostic.code, diagnostic.details]),\n toastKey: failureToastKey(diagnostic, [workspaceId, worktreeId]),\n error: toWorktreeViewError(error),\n context: context ?? [currentBranch, workspaceId, worktreeId].filter(Boolean).join(' · '),\n describe: (translate) => translate('settings.git', {\n operation: translate(scope === 'branches' ? 'dashboard.base'\n : scope === 'history' ? 'dashboard.git.commits'\n : scope === 'files' ? 'dashboard.git.changedFiles' : 'dashboard.git.diff'),\n }) + ' · ' + (context ?? [currentBranch, workspaceId, worktreeId].filter(Boolean).join(' · ')),\n text,\n actions: [\n {\n label: t('dashboard.git.retry'),\n onClick: () => {\n if (scope === 'branches')\n void state.loadBranches();\n else\n void state.refresh();\n },\n },\n ],\n },\n ];\n }) }), _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', {\n ahead: historyValue.ahead,\n behind: historyValue.behind,\n }) }) })] }))] }))] })), 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') })] }), !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 === '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'\n ? _jsx(\"span\", { children: targetLabel })\n : _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', {\n additions: lineTotals.additions,\n deletions: lineTotals.deletions,\n }) })))] })] }), 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' ? (null) : (_jsxs(_Fragment, { children: [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'\n ? state.includeWorkingTree\n ? t('dashboard.git.noLiveBaselineChanges')\n : t('dashboard.git.noBaselineChanges')\n : 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' ? (null) : (_jsx(GitDiffView, { diff: diff, onOpenFile: onOpenFile, t: t }))] })] }))] }));\n}\n/**\n * Draggable divider that resizes one axis of the Git grid. The wide layout puts\n * the row divider inside the left column and the column divider beside it; the\n * narrow layout keeps both, between the top panes and above the diff.\n */\nfunction GitSplitter({ split, orientation, axis, label }) {\n 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 }));\n}\n//# sourceMappingURL=WorktreeGitPanel.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useState } from 'react';\nimport { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';\nimport { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';\nimport { GitLineStats } from './GitLineStats.js';\nimport styles from '../dashboard.css';\nfunction isWorkingTreeCommit(commit) {\n return commit.kind === 'working-tree' || commit.sha === WORKTREE_GIT_WORKING_TREE;\n}\n/** Read the compact Git projections needed by the Overview status facts. */\nexport function useWorktreeGitOverview(input) {\n const baselineBranch = normalizeBaselineBranch(input.defaultBaselineBranch, input.currentBranch);\n // A captured acquisition commit keeps the Overview readable without a selected\n // branch; Main keeps this comparison-only Overview disconnected while its Git tab reads direct history.\n const readable = input.capturedBaseline === true || baselineBranch !== undefined;\n const [state, setState] = useState({ status: 'unavailable' });\n useEffect(() => {\n if (input.manager === undefined || isMainWorktreeId(input.worktreeId) || !readable) {\n setState({ status: 'unavailable' });\n return;\n }\n const manager = input.manager;\n let active = true;\n setState({ status: 'loading' });\n void manager.listWorktreeCommits({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n })\n .then(async (history) => {\n const workingTree = history.commits.find(isWorkingTreeCommit);\n const committedFilesPromise = history.unavailableReason === undefined\n ? manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n selection: { kind: 'summary', includeWorkingTree: false },\n }).then((result) => result.files)\n : Promise.resolve([]);\n const workingTreeFilesPromise = workingTree === undefined\n ? Promise.resolve([])\n : manager.listWorktreeCommitFiles({\n workspaceId: input.workspaceId,\n worktreeId: input.worktreeId,\n baseBranch: baselineBranch,\n commit: workingTree.sha,\n }).then((result) => result.files);\n const [committedFiles, workingTreeFiles] = await Promise.all([\n committedFilesPromise,\n workingTreeFilesPromise,\n ]);\n if (active)\n setState({ status: 'ready', history, committedFiles, workingTreeFiles });\n })\n .catch(() => {\n if (active)\n setState({ status: 'error' });\n });\n return () => {\n active = false;\n };\n }, [baselineBranch, readable, input.manager, input.workspaceId, input.worktreeId]);\n return state;\n}\nexport function WorktreeGitOverviewValue({ state, metric, t, }) {\n if (state.status !== 'ready') {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n if (metric === 'aheadBehind') {\n const { ahead, behind } = state.history;\n if (ahead === undefined || behind === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n return (_jsx(GitLineStats, { additions: ahead, deletions: behind, ariaLabel: t('dashboard.git.aheadBehindStats', { ahead, behind }) }));\n }\n if (state.history.unavailableReason !== undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });\n }\n const files = metric === 'committed' ? state.committedFiles : state.workingTreeFiles;\n const totals = sumLineTotals(files);\n if (totals === undefined) {\n return _jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.unknown') });\n }\n return (_jsx(GitLineStats, { additions: totals.additions, deletions: totals.deletions, ariaLabel: t('dashboard.git.lineStats', {\n additions: totals.additions,\n deletions: totals.deletions,\n }) }));\n}\n//# sourceMappingURL=WorktreeGitOverview.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Switch, Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useEffect, useRef, useState } from 'react';\nimport { WORKTREE_TOOL_IDS, } from '../../contract/tool-settings.js';\nimport styles from './settings.css';\nconst capabilities = ['create', 'worktrees', 'delegate', 'models', 'sessions', 'message'];\n/** Both settings surfaces share persisted selections and never refresh Workspace projections. */\nexport function ToolSettings({ manager, scope, t, }) {\n const [value, setValue] = useState();\n const [pending, setPending] = useState(false);\n const [failed, setFailed] = useState(false);\n const [revision, setRevision] = useState(0);\n const alive = useRef(false);\n const busy = useRef(false);\n const generation = useRef(0);\n const identity = JSON.stringify(scope);\n useEffect(() => {\n alive.current = true;\n generation.current++;\n busy.current = false;\n setPending(false);\n let current = true;\n setFailed(false);\n if (!manager?.getToolSettings)\n setFailed(true);\n else\n void manager.getToolSettings({ scope }).then((selection) => {\n if (current)\n setValue(selection);\n }, () => {\n if (current)\n setFailed(true);\n });\n return () => {\n current = false;\n alive.current = false;\n };\n // Serialized scope identity prevents a new inline object from restarting the read.\n }, [manager, identity, revision]);\n const save = async (selection) => {\n if (!value || !manager?.updateToolSettings || busy.current)\n return;\n busy.current = true;\n const current = generation.current;\n setPending(true);\n setFailed(false);\n try {\n const result = await manager.updateToolSettings({ scope, selection, expected: value });\n if (alive.current && current === generation.current)\n setValue(result);\n }\n catch {\n if (alive.current && current === generation.current)\n setFailed(true);\n }\n finally {\n if (current === generation.current) {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n }\n };\n const auto = scope.kind !== 'general';\n const local = scope.kind === 'local';\n const title = t(auto ? 'tools.auto' : 'tools.command');\n return (_jsxs(\"section\", { className: styles.toolSettings, \"data-worktree-tool-settings\": true, children: [_jsxs(\"div\", { className: styles.toolHeader, children: [_jsxs(\"div\", { children: [_jsxs(\"div\", { className: styles.toolTitle, children: [_jsx(\"h3\", { children: title }), _jsx(Tag, { tone: \"info\", children: t('tools.experimental') })] }), _jsx(\"p\", { children: t(local ? 'tools.localAutoHint' : auto ? 'tools.autoHint' : 'tools.commandHint') })] }), _jsx(Switch, { label: title, checked: value?.enabled ?? false, disabled: !value || pending || failed, onChange: (enabled) => void save({\n enabled,\n tools: value.tools.length ? value.tools : WORKTREE_TOOL_IDS,\n }) })] }), !value && !failed && _jsx(\"p\", { role: \"status\", children: t('tools.loading') }), value?.enabled && (_jsxs(\"div\", { className: styles.toolOptions, \"data-worktree-tool-options\": true, children: [_jsxs(\"div\", { className: styles.toolOptionsHeading, children: [_jsx(\"h4\", { children: t('tools.selection') }), _jsxs(\"p\", { children: [t(local ? 'tools.localAutoSelectionHint' : auto ? 'tools.autoSelectionHint' : 'tools.commandSelectionHint'), ' ', t('tools.runtimeHint'), auto && _jsxs(_Fragment, { children: [' ', t('tools.commandSelectionHint'), ' ', t('tools.reportHint')] })] })] }), _jsx(\"div\", { className: styles.toolList, children: WORKTREE_TOOL_IDS.map((tool, index) => (_jsxs(\"div\", { className: styles.toolRow, children: [_jsxs(\"div\", { children: [_jsx(\"h5\", { children: t(`tools.${capabilities[index]}.title`) }), _jsx(\"p\", { children: t(`tools.${capabilities[index]}.hint`) })] }), _jsx(Switch, { label: t(`tools.${capabilities[index]}.title`), checked: value.tools.includes(tool), disabled: pending || failed, onChange: (checked) => {\n const tools = checked\n ? [...value.tools, tool]\n : value.tools.filter((id) => id !== tool);\n void save({ enabled: tools.length > 0, tools });\n } })] }, tool))) })] })), failed && (_jsxs(\"div\", { role: \"alert\", children: [_jsx(\"p\", { children: t('tools.failed') }), _jsx(Button, { size: \"sm\", variant: \"outline\", onClick: () => setRevision((current) => current + 1), children: t('action.retry') })] }))] }));\n}\n//# sourceMappingURL=ToolSettings.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { NotificationToasts } from '../surface/components/NotificationToasts.js';\nimport { toWorktreeViewError } from '../view/worktree-view.js';\nimport { formatWorktreeViewError } from '../view/worktree-error-copy.js';\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport { Button, Input, Modal, StateDot, Tooltip, writeClipboard, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { IconBranchOutline16, IconCheckOutline16, IconCopyOutline16, IconEditOutline16, IconPanelLeftOutline16, IconSearchOutline16, } from '../dsh-icons.js';\nimport { isBlankSession, relativeTime, sessionDisplayLabel } from '../session/session-view.js';\nimport { currentSessionIdFromList } from '../session/session-selection.js';\nimport { sessionStatusLabel, sessionTimeLabel } from '../session/session-labels.js';\nimport { OpenInAppButton } from './OpenInAppButton.js';\nimport { mountDashboardOverlay } from './dashboard-overlay.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\nimport { selectWorktreeAcquisitionFacts } from './worktree-acquisition-facts.js';\nimport styles from './dashboard.css';\nimport { WorktreeInstructions } from './WorktreeInstructions.js';\nimport { WorktreeGitPanel } from './git/WorktreeGitPanel.js';\nimport { useWorktreeGitOverview, WorktreeGitOverviewValue } from './git/WorktreeGitOverview.js';\nimport { ToolSettings } from '../settings/ToolSettings.js';\nconst TABS = ['overview', 'git', 'sessions', 'children', 'settings'];\nfunction DashboardIcon({ kind }) {\n const paths = {\n overview: 'M3 3h7v7H3z M14 3h7v7h-7z M3 14h7v7H3z M14 14h7v7h-7z',\n git: 'M7 7v10 M17 7v3c0 4-10 0-10 4 M5 3h4v4H5z M5 17h4v4H5z M15 3h4v4h-4z',\n sessions: 'M4 4h16v13H9l-5 4z M8 8h8 M8 12h5',\n children: 'M12 7v5 M5 17v-5h14v5 M9 3h6v4H9z M2 17h6v4H2z M16 17h6v4h-6z',\n settings: 'M4 6h16 M4 12h16 M4 18h16 M8 3v6 M16 9v6 M10 15v6',\n instructions: 'M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5',\n actions: 'M13 2 4 14h7l-1 8 10-13h-8z',\n };\n return (_jsx(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"1.6\", strokeLinecap: \"round\", strokeLinejoin: \"round\", \"aria-hidden\": \"true\", children: _jsx(\"path\", { d: paths[kind] }) }));\n}\nfunction Card({ title, icon, action, children, }) {\n return (_jsxs(\"section\", { className: styles.dashboardCard, children: [_jsxs(\"div\", { className: styles.dashboardCardHeading, children: [_jsxs(\"h2\", { children: [icon, title] }), action] }), children] }));\n}\nfunction DashboardFactRow({ label, children, action, baseline = false, }) {\n return (_jsxs(\"div\", { children: [_jsx(\"dt\", { children: label }), _jsx(\"dd\", { \"data-dashboard-baseline\": baseline ? true : undefined, children: children }), _jsx(\"span\", { className: styles.dashboardFactAction, children: action })] }));\n}\nfunction PlaceholderButton({ children, t }) {\n return (_jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: true, title: t('dashboard.soon'), children: children }));\n}\nfunction WorktreeBaselineEditor({ value, branches, currentBranch, onSave, t, disabled, context, }) {\n const [saved, setSaved] = useState(value);\n const [draft, setDraft] = useState();\n const [search, setSearch] = useState('');\n const [pending, setPending] = useState(false);\n const [error, setError] = useState();\n const busy = useRef(false);\n const alive = useRef(true);\n const optionRefs = useRef([]);\n const trigger = useRef(null);\n const wasOpen = useRef(false);\n const expected = useRef(value);\n const pickerId = useId();\n const options = branches.filter((branch) => branch.name !== currentBranch);\n useEffect(() => {\n alive.current = true;\n return () => {\n alive.current = false;\n };\n }, []);\n useEffect(() => {\n setSaved(value);\n expected.current = value;\n }, [value]);\n useEffect(() => {\n if (wasOpen.current && draft === undefined)\n trigger.current?.focus();\n wasOpen.current = draft !== undefined;\n }, [draft]);\n const closeEditor = () => {\n if (pending)\n return;\n setDraft(undefined);\n setSearch('');\n setError(undefined);\n };\n const openEditor = () => {\n expected.current = saved;\n setDraft(saved ?? '');\n setSearch('');\n setError(undefined);\n };\n const query = search.trim().toLowerCase();\n const filteredOptions = query.length === 0\n ? options\n : options.filter((branch) => branch.name.toLowerCase().includes(query));\n const activeIndex = filteredOptions.findIndex((branch) => branch.name === draft);\n // The list is a permanent, fixed-height region: filtering swaps its rows but\n // never changes its height, so the modal frame stays put.\n const listOpen = filteredOptions.length > 0;\n const selectOption = (index) => {\n if (pending)\n return;\n const branch = filteredOptions[index];\n if (branch === undefined)\n return;\n setDraft(branch.name);\n };\n const moveOption = (offset) => {\n if (filteredOptions.length === 0)\n return;\n const nextIndex = activeIndex < 0\n ? offset > 0\n ? 0\n : filteredOptions.length - 1\n : (activeIndex + offset + filteredOptions.length) % filteredOptions.length;\n selectOption(nextIndex);\n optionRefs.current[nextIndex]?.scrollIntoView({ block: 'nearest' });\n };\n const onSearchKeyDown = (event) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n moveOption(event.key === 'ArrowDown' ? 1 : -1);\n }\n else if (event.key === 'Enter' && filteredOptions.length > 0) {\n event.preventDefault();\n selectOption(activeIndex < 0 ? 0 : activeIndex);\n }\n };\n const save = async () => {\n if (busy.current ||\n draft === undefined ||\n onSave === undefined ||\n !options.some((branch) => branch.name === draft))\n return;\n busy.current = true;\n setPending(true);\n setError(undefined);\n try {\n const result = await onSave(draft, expected.current);\n if (alive.current) {\n setSaved(result);\n expected.current = result;\n setDraft(undefined);\n setSearch('');\n }\n }\n catch (cause) {\n if (alive.current)\n setError(toWorktreeViewError(cause));\n }\n finally {\n busy.current = false;\n if (alive.current)\n setPending(false);\n }\n };\n return (_jsxs(_Fragment, { children: [_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, action: onSave !== undefined ? (_jsx(Tooltip, { label: t('dashboard.editBase'), side: \"bottom\", delayMs: 500, disabled: disabled || options.length === 0, children: _jsx(\"button\", { type: \"button\", ref: trigger, className: styles.dashboardIconButton, \"data-dashboard-baseline-edit\": true, \"aria-label\": t('dashboard.editBase'), title: t('dashboard.editBase'), \"aria-haspopup\": \"dialog\", \"aria-expanded\": draft !== undefined, disabled: disabled || options.length === 0, onClick: openEditor, children: _jsx(IconEditOutline16, {}) }) })) : undefined, children: saved === undefined ? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) : (_jsx(\"span\", { \"data-dashboard-baseline-value\": true, children: saved })) }), _jsx(Modal, { open: draft !== undefined, onClose: closeEditor, closeLabel: t('dialog.closeBaseline'), title: t('dashboard.editBase'), description: t('dashboard.editBaseDescription'), className: styles.dashboardBaselineModal, contentClassName: styles.dashboardBaselineModalContent, footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: \"outline\", disabled: pending, onClick: closeEditor, children: t('dashboard.cancelBase') }), _jsx(Button, { variant: \"primary\", \"data-dashboard-baseline-save\": true, disabled: pending || disabled || !options.some((branch) => branch.name === draft), onClick: () => void save(), children: t(pending ? 'dashboard.savingBase' : 'dashboard.saveBase') })] }), children: _jsxs(\"div\", { className: styles.dashboardBaselinePicker, \"data-dashboard-baseline-modal\": true, children: [_jsx(Input, { icon: _jsx(IconSearchOutline16, {}), className: styles.dashboardBaselineSearch, \"aria-label\": t('dashboard.searchBranches'), role: \"combobox\", \"aria-autocomplete\": \"list\", \"aria-controls\": listOpen ? `${pickerId}-options` : undefined, \"aria-expanded\": listOpen, \"aria-haspopup\": \"listbox\", \"aria-activedescendant\": listOpen && activeIndex >= 0 ? `${pickerId}-option-${activeIndex}` : undefined, \"data-dashboard-baseline-search\": true, disabled: pending || disabled, placeholder: t('dashboard.searchBranches'), value: search, onKeyDown: onSearchKeyDown, onChange: (event) => setSearch(event.currentTarget.value) }), _jsx(\"div\", { className: styles.dashboardBaselineOptions, \"data-dashboard-baseline-options\": true, children: listOpen ? (_jsx(\"div\", { id: `${pickerId}-options`, className: styles.dashboardBaselineList, role: \"listbox\", \"aria-label\": t('dashboard.searchBranches'), children: filteredOptions.map((branch, index) => (_jsxs(\"button\", { type: \"button\", ref: (element) => {\n optionRefs.current[index] = element;\n }, id: `${pickerId}-option-${index}`, className: styles.dashboardBaselineOption, \"data-dashboard-baseline-option\": branch.name, \"data-highlighted\": activeIndex === index ? true : undefined, role: \"option\", \"aria-selected\": branch.name === draft, onClick: () => selectOption(index), children: [_jsx(IconBranchOutline16, {}), _jsx(\"span\", { className: styles.dashboardBaselineOptionLabel, children: branch.name }), branch.name === draft && _jsx(IconCheckOutline16, {})] }, branch.name))) })) : (_jsx(\"div\", { className: styles.dashboardBaselineEmpty, \"data-dashboard-baseline-empty\": true, role: \"status\", \"aria-live\": \"polite\", children: t('dashboard.noMatchingBranches') })) }), _jsx(NotificationToasts, { notices: error === undefined\n ? []\n : [\n {\n key: JSON.stringify(['baseline', context, error.code, error.details]),\n context, error,\n actions: [{ label: t('action.retry'), disabled: pending || disabled,\n onClick: () => { void save(); } }],\n describe: (translate) => translate('dashboard.base') + ' · ' + (context ?? ''),\n message: (translate) => translate('dashboard.baseSaveFailed') +\n (error.code === 'WORKTREE_VIEW_FAILED' ? '' : ' ' + formatWorktreeViewError(error, translate)),\n text: t('dashboard.baseSaveFailed') +\n (error.code === 'WORKTREE_VIEW_FAILED'\n ? ''\n : ' ' + formatWorktreeViewError(error, t)),\n },\n ] })] }) })] }));\n}\n/** A managed Worktree or browser Main projection with explicit unavailable states for inapplicable facts. */\nexport function WorktreeDashboard({ manager, record, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onOpenFile, onSaveInstructions, onSaveBaseline, branches = [], }) {\n const surface = useRef(null);\n const heading = useRef(null);\n const [placement, setPlacement] = useState();\n const [rightSidebarOpen, setRightSidebarOpen] = useState(Boolean(isRightSidebarExpanded?.()));\n const [tab, setTab] = useState('overview');\n const [baselineBranch, setBaselineBranch] = useState(record.baseBranch);\n const [copyState, setCopyState] = useState('idle');\n const [branchCopyState, setBranchCopyState] = useState('idle');\n const copyGeneration = useRef(0);\n const branchCopyGeneration = useRef(0);\n const copyPending = useRef(false);\n const branchCopyPending = useRef(false);\n const id = useId();\n useEffect(() => {\n setBaselineBranch(record.baseBranch);\n }, [record.baseBranch]);\n useLayoutEffect(() => {\n const element = surface.current;\n if (!element)\n return;\n return mountDashboardOverlay(element, (next) => setPlacement((previous) => JSON.stringify(previous) === JSON.stringify(next) ? previous : next), {\n onRightSidebarChange: (open) => setRightSidebarOpen(open),\n isRightSidebarExpanded,\n });\n }, [isRightSidebarExpanded]);\n useLayoutEffect(() => {\n if (!placement)\n return;\n const previous = document.activeElement;\n const element = surface.current;\n heading.current?.focus({ preventScroll: true });\n return () => {\n if (previous instanceof HTMLElement &&\n previous.isConnected &&\n (element?.contains(document.activeElement) || document.activeElement === document.body)) {\n previous.focus({ preventScroll: true });\n }\n };\n }, [placement !== undefined]);\n useEffect(() => {\n copyGeneration.current += 1;\n copyPending.current = false;\n setCopyState('idle');\n return () => {\n copyGeneration.current += 1;\n };\n }, [record.absolutePath]);\n useEffect(() => {\n branchCopyGeneration.current += 1;\n branchCopyPending.current = false;\n setBranchCopyState('idle');\n return () => {\n branchCopyGeneration.current += 1;\n };\n }, [record.branch]);\n const copyPath = async () => {\n if (copyPending.current)\n return;\n copyPending.current = true;\n const generation = copyGeneration.current;\n setCopyState('pending');\n try {\n const copied = await writeClipboard(record.absolutePath);\n if (generation === copyGeneration.current)\n setCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === copyGeneration.current)\n setCopyState('failed');\n }\n finally {\n if (generation === copyGeneration.current)\n copyPending.current = false;\n }\n };\n const branchAvailable = record.branch.length > 0;\n const displayBranch = branchAvailable ? record.branch : t('dashboard.branchUnavailable');\n const copyBranch = async () => {\n if (!branchAvailable || branchCopyPending.current)\n return;\n branchCopyPending.current = true;\n const generation = branchCopyGeneration.current;\n setBranchCopyState('pending');\n try {\n const copied = await writeClipboard(record.branch);\n if (generation === branchCopyGeneration.current)\n setBranchCopyState(copied ? 'copied' : 'failed');\n }\n catch {\n if (generation === branchCopyGeneration.current)\n setBranchCopyState('failed');\n }\n finally {\n if (generation === branchCopyGeneration.current)\n branchCopyPending.current = false;\n }\n };\n const healthKey = record.health === 'ready'\n ? 'worktree.ready'\n : record.health === 'repair'\n ? 'worktree.repair'\n : record.health === 'recovery-needed'\n ? 'worktree.recovery'\n : record.health === 'branch-drift'\n ? 'worktree.branchDrift'\n : record.health === 'cleaned'\n ? 'dashboard.cleaned'\n : 'dashboard.unknown';\n const liveBranch = record.currentBranch === null\n ? t('dashboard.detached')\n : (record.currentBranch ??\n (branchAvailable ? record.branch : t('dashboard.branchUnavailable')));\n const baselineCurrentBranch = record.currentBranch === undefined ? record.branch : (record.currentBranch ?? undefined);\n const persistBaseline = onSaveBaseline === undefined\n ? undefined\n : async (baseBranch, expectedBaseBranch) => {\n const result = await onSaveBaseline(baseBranch, expectedBaseBranch);\n setBaselineBranch(result);\n return result;\n };\n const displayedBaseline = onSaveBaseline === undefined ? record.baseBranch : baselineBranch;\n const gitOverview = useWorktreeGitOverview({\n manager,\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n defaultBaselineBranch: displayedBaseline,\n currentBranch: baselineCurrentBranch,\n capturedBaseline: record.baseCommit !== undefined,\n });\n const acquisitionFacts = selectWorktreeAcquisitionFacts(record);\n const acquisitionLabel = acquisitionFacts.timestampKind === 'imported' ? 'dashboard.imported' : 'dashboard.created';\n const tabLabel = (value) => t(`dashboard.tab.${value}`);\n const placeholder = _jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.soon') });\n const selectTab = (next, focus = false) => {\n setTab(next);\n if (focus)\n document.getElementById(`${id}-${next}`)?.focus();\n };\n const tabLink = (next, label) => (_jsxs(\"button\", { type: \"button\", className: styles.dashboardLink, onClick: () => selectTab(next, true), children: [label, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }));\n const sessionList = (ids) => ids.length === 0 ? (_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.noSessions') }) })) : (_jsx(\"ul\", { className: styles.dashboardSessions, children: ids.map((sessionId) => {\n const presentation = sessionPresentations[sessionId];\n const blank = isBlankSession(sessionId, sessions);\n const statusLabel = presentation === undefined ? undefined : sessionStatusLabel(t, presentation.status);\n const showTrailingStatus = !blank &&\n presentation !== undefined &&\n (presentation.status.state !== 'done' || presentation.completed);\n const timeValue = !blank && !showTrailingStatus && presentation?.updatedAt !== undefined\n ? relativeTime(presentation.updatedAt, Date.now())\n : undefined;\n const timeLabel = timeValue === undefined ? undefined : sessionTimeLabel(t, timeValue);\n return (_jsx(\"li\", { children: _jsxs(\"button\", { type: \"button\", \"data-dashboard-session\": sessionId, \"aria-current\": currentSessionIdFromList(sessions) === sessionId ? 'page' : undefined, onClick: () => onOpenSession(sessionId), children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsx(\"span\", { className: styles.dashboardSessionLabel, children: sessionDisplayLabel(sessionId, sessions, t('session.new')) }), !blank && (_jsx(\"span\", { className: styles.dashboardSessionMeta, children: showTrailingStatus && presentation !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionStatus, \"data-dashboard-session-status\": statusLabel, role: \"img\", \"aria-label\": statusLabel, title: statusLabel, children: _jsx(StateDot, { state: presentation.status.state }) })) : timeLabel !== undefined ? (_jsx(\"span\", { className: styles.dashboardSessionTime, \"data-dashboard-session-time\": true, children: timeLabel })) : null })), _jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u2192\" })] }) }, sessionId));\n }) }));\n const topActionIsCreateSession = sessionIds.length === 0 && onCreateSession !== undefined;\n return (_jsxs(\"section\", { ref: surface, className: styles.dashboardSurface, \"data-worktree-dashboard\": record.worktreeId, \"aria-labelledby\": `${id}-title`, style: placement ?? { visibility: 'hidden', height: 0 }, onKeyDown: (event) => {\n // Native menus dismiss during document capture, before React sees this\n // event. Their DOM may already be gone; defaultPrevented retains ownership.\n if (event.defaultPrevented)\n return;\n if (event.key === 'Escape') {\n // Other dashboard menus own Escape even when focus remains elsewhere in the surface.\n if (event.currentTarget.querySelector('[role=\"menu\"]'))\n return;\n event.stopPropagation();\n onClose();\n }\n }, children: [_jsxs(\"header\", { className: styles.dashboardTopline, \"data-dashboard-topbar\": true, \"data-window-drag\": true, children: [_jsxs(\"span\", { title: `${workspaceTitle}/${displayBranch}`, style: {\n marginInlineStart: `max(0px, calc(var(--dsh-frame-leading-clearance, 0px) - ${placement?.left ?? 0}px - 20px))`,\n }, children: [workspaceTitle, _jsx(\"span\", { \"aria-hidden\": \"true\", children: \" / \" }), displayBranch] }), _jsxs(\"div\", { className: styles.dashboardToplineActions, children: [_jsx(OpenInAppButton, { path: record.absolutePath, t: t }), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, \"aria-label\": t(topActionIsCreateSession ? 'dashboard.newSession' : 'dashboard.back'), onClick: () => {\n if (topActionIsCreateSession)\n onCreateSession?.();\n else\n onClose();\n }, children: topActionIsCreateSession ? t('dashboard.newSession') : _jsxs(_Fragment, { children: [\"\\u2190 \", t('dashboard.back')] }) }), !rightSidebarOpen && onOpenSidebar !== undefined && (_jsx(Tooltip, { label: t('dashboard.openSidebar'), side: \"bottom\", delayMs: 500, children: _jsx(\"button\", { type: \"button\", className: styles.dashboardSidebarButton, \"aria-label\": t('dashboard.openSidebar'), title: t('dashboard.openSidebar'), \"data-sidebar-right-expand\": true, onClick: () => {\n onOpenSidebar();\n setRightSidebarOpen(true);\n }, children: _jsx(IconPanelLeftOutline16, {}) }) }))] })] }), _jsxs(\"div\", { className: styles.dashboardPage, children: [_jsxs(\"header\", { className: styles.dashboardHeader, children: [_jsxs(\"div\", { className: styles.dashboardIdentity, children: [_jsxs(\"div\", { className: styles.dashboardTitleRow, \"data-dashboard-copy\": \"branch\", role: branchAvailable ? 'button' : undefined, tabIndex: branchAvailable ? 0 : undefined, \"aria-label\": branchAvailable ? t('dashboard.copyBranch') : undefined, title: branchAvailable ? t('dashboard.copyBranch') : undefined, \"aria-busy\": branchAvailable && branchCopyState === 'pending' ? true : undefined, onClick: branchAvailable ? () => void copyBranch() : undefined, onKeyDown: branchAvailable\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n void copyBranch();\n }\n }\n : undefined, children: [_jsx(IconBranchOutline16, {}), _jsx(\"h1\", { id: `${id}-title`, ref: heading, tabIndex: -1, children: displayBranch }), _jsxs(\"span\", { className: styles.dashboardHealth, \"data-health\": record.health ?? 'unknown', children: [_jsx(\"span\", { \"aria-hidden\": \"true\", children: \"\\u25CF\" }), t(healthKey)] }), record.status === 'removed' && (_jsx(\"span\", { className: styles.dashboardSoon, children: t('dashboard.archived') }))] }), _jsxs(\"div\", { className: styles.dashboardPath, children: [_jsx(\"span\", { className: styles.dashboardFieldLabel, children: \"cwd\" }), _jsx(\"code\", { children: record.absolutePath }), _jsx(\"button\", { type: \"button\", className: styles.dashboardIconButton, \"aria-label\": t('worktree.copyPath'), title: t('worktree.copyPath'), disabled: copyState === 'pending', onClick: () => {\n void copyPath();\n }, children: _jsx(IconCopyOutline16, {}) })] }), _jsx(NotificationToasts, { notices: [\n ...(branchCopyState === 'failed'\n ? [{ key: 'copy-branch:' + record.absolutePath, text: t('dashboard.branchCopyFailed'),\n context: workspaceTitle + ' · ' + record.branch + ' · ' + record.absolutePath,\n message: (translate) => translate('dashboard.branchCopyFailed') }]\n : []),\n ...(copyState === 'failed'\n ? [{ key: 'copy-path:' + record.absolutePath, text: t('dashboard.copyFailed'),\n context: workspaceTitle + ' · ' + record.absolutePath,\n message: (translate) => translate('dashboard.copyFailed') }]\n : []),\n ] }), _jsx(\"p\", { className: styles.dashboardCopyStatus, role: \"status\", children: branchCopyState === 'copied'\n ? t('dashboard.branchCopied')\n : copyState === 'copied'\n ? t('dashboard.copied')\n : '\\u00a0' })] }), _jsx(\"div\", { className: styles.dashboardHeaderAside, children: _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t(acquisitionLabel), children: acquisitionFacts.timestamp ? (_jsx(\"time\", { dateTime: acquisitionFacts.timestamp, children: new Date(acquisitionFacts.timestamp).toLocaleString() })) : (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), !isMainWorktreeId(record.worktreeId) && persistBaseline !== undefined ? (_jsx(WorktreeBaselineEditor, { context: workspaceTitle + ' · ' + record.branch + ' · ' + record.absolutePath, value: baselineBranch, branches: branches, currentBranch: baselineCurrentBranch, onSave: persistBaseline, t: t, disabled: record.status !== 'active' || record.health === 'recovery-needed' })) : (_jsx(DashboardFactRow, { label: t('dashboard.base'), baseline: true, children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) })), _jsx(DashboardFactRow, { label: t('dashboard.source'), children: isMainWorktreeId(record.worktreeId)\n ? t('worktree.main')\n : t(record.source === 'external' ? 'dashboard.external' : 'dashboard.plugin') })] }) })] }), _jsx(\"div\", { className: styles.dashboardTabs, role: \"tablist\", \"aria-label\": t('dashboard.title'), children: TABS.map((value) => (_jsxs(\"button\", { type: \"button\", id: `${id}-${value}`, role: \"tab\", \"aria-selected\": tab === value, \"aria-controls\": `${id}-panel`, tabIndex: tab === value ? 0 : -1, onClick: () => selectTab(value), onKeyDown: (event) => {\n const index = TABS.indexOf(value);\n const next = event.key === 'ArrowRight'\n ? TABS[(index + 1) % TABS.length]\n : event.key === 'ArrowLeft'\n ? TABS[(index + TABS.length - 1) % TABS.length]\n : event.key === 'Home'\n ? TABS[0]\n : event.key === 'End'\n ? TABS[TABS.length - 1]\n : undefined;\n if (next) {\n event.preventDefault();\n selectTab(next, true);\n }\n }, children: [_jsx(DashboardIcon, { kind: value }), tabLabel(value)] }, value))) }), _jsx(\"div\", { id: `${id}-panel`, role: \"tabpanel\", \"aria-labelledby\": `${id}-${tab}`, tabIndex: 0, className: styles.dashboardPanel, children: tab === 'overview' ? (_jsxs(\"div\", { className: styles.dashboardGrid, children: [_jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(\"section\", { className: styles.dashboardStart, children: [_jsxs(\"h2\", { children: [_jsx(IconBranchOutline16, {}), t('dashboard.start')] }), _jsx(\"p\", { children: t('dashboard.startDescription') }), _jsxs(\"div\", { className: styles.dashboardStartActions, children: [_jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateWorktree, onClick: onCreateWorktree, \"data-dashboard-action\": \"create-worktree\", children: [_jsx(DashboardIcon, { kind: \"git\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newWorktree') }), _jsx(\"small\", { children: t('dashboard.newWorktreeDescription') })] })] }), _jsxs(\"button\", { type: \"button\", disabled: actionPending || !onCreateSession, onClick: onCreateSession, \"data-dashboard-action\": \"create-session\", children: [_jsx(DashboardIcon, { kind: \"sessions\" }), _jsxs(\"span\", { children: [_jsx(\"strong\", { children: t('dashboard.newSession') }), _jsx(\"small\", { children: t('dashboard.newSessionDescription') })] })] })] })] }), _jsxs(Card, { title: t('dashboard.instructions'), icon: _jsx(DashboardIcon, { kind: \"instructions\" }), children: [_jsx(\"p\", { children: t('dashboard.instructionsDescription') }), _jsx(WorktreeInstructions, { context: workspaceTitle + ' · ' + record.branch + ' · ' + record.absolutePath, value: record.instructions ?? '', onSave: onSaveInstructions, t: t, disabled: actionPending || record.health === 'recovery-needed' })] }), _jsxs(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"span\", { children: sessionIds.length }), children: [sessionList(sessionIds.slice(0, 5)), tabLink('sessions', t('dashboard.viewSessions'))] })] }), _jsxs(\"div\", { className: styles.dashboardColumn, children: [_jsxs(Card, { title: t('dashboard.status'), icon: _jsx(DashboardIcon, { kind: \"git\" }), children: [_jsx(\"p\", { children: t('dashboard.statusHint') }), _jsxs(\"dl\", { className: styles.dashboardFacts, children: [_jsx(DashboardFactRow, { label: t('dashboard.health'), children: t(healthKey) }), _jsx(DashboardFactRow, { label: t('dashboard.branch'), children: liveBranch }), _jsx(DashboardFactRow, { label: t('dashboard.base'), children: displayedBaseline ?? (_jsx(\"span\", { className: styles.dashboardHistorical, children: t('dashboard.historicalUnavailable') })) }), _jsx(DashboardFactRow, { label: t('dashboard.aheadBehind'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"aheadBehind\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.committedChanges'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"committed\", t: t }) }), _jsx(DashboardFactRow, { label: t('dashboard.workingTree'), children: _jsx(WorktreeGitOverviewValue, { state: gitOverview, metric: \"workingTree\", t: t }) })] }), tabLink('git', t('dashboard.viewDetails'))] }), _jsxs(Card, { title: t('dashboard.derived'), icon: _jsx(DashboardIcon, { kind: \"children\" }), action: placeholder, children: [_jsx(\"div\", { className: styles.dashboardEmpty, children: _jsx(\"p\", { children: t('dashboard.childrenHint') }) }), tabLink('children', t('dashboard.viewChildren'))] }), _jsx(Card, { title: t('dashboard.quickActions'), icon: _jsx(DashboardIcon, { kind: \"actions\" }), children: _jsxs(\"div\", { className: styles.dashboardQuickActions, children: [['terminal', 'diff', 'pullRequest', 'tests', 'sync'].map((action) => (_jsx(PlaceholderButton, { t: t, children: t(`dashboard.action.${action}`) }, action))), _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onArchiveWorktree, onClick: onArchiveWorktree, \"data-dashboard-action\": \"archive-worktree\", children: t('dashboard.action.archive') })] }) })] })] })) : tab === 'git' ? (_jsx(WorktreeGitPanel, { context: workspaceTitle + ' · ' + record.branch + ' · ' + record.absolutePath, manager: manager, workspaceId: record.workspaceId, worktreeId: record.worktreeId, defaultBaselineBranch: displayedBaseline, currentBranch: baselineCurrentBranch, capturedBaseline: record.baseCommit !== undefined, onOpenFile: (filePath) => {\n onOpenFile?.(filePath);\n setRightSidebarOpen(true);\n }, t: t })) : tab === 'sessions' ? (_jsx(Card, { title: tabLabel('sessions'), icon: _jsx(DashboardIcon, { kind: \"sessions\" }), action: _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, disabled: actionPending || !onCreateSession, onClick: onCreateSession, children: t('dashboard.newSession') }), children: sessionList(sessionIds) })) : tab === 'settings' ? (_jsx(Card, { title: tabLabel('settings'), icon: _jsx(DashboardIcon, { kind: \"settings\" }), children: _jsx(ToolSettings, { manager: manager, scope: isMainWorktreeId(record.worktreeId)\n ? { kind: 'local', workspaceId: record.workspaceId }\n : { kind: 'worktree', workspaceId: record.workspaceId, worktreeId: record.worktreeId }, t: t }, JSON.stringify([record.workspaceId, record.worktreeId])) })) : (_jsxs(\"section\", { className: styles.dashboardTabPlaceholder, children: [_jsx(DashboardIcon, { kind: tab }), _jsx(\"h2\", { children: tabLabel(tab) }), _jsx(\"p\", { children: t(`dashboard.hint.${tab}`) }), placeholder] })) }), _jsx(\"p\", { className: styles.dashboardFooter, children: t('dashboard.mvpHint') })] })] }));\n}\n//# sourceMappingURL=WorktreeDashboard.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport { mountDashboardOverlay } from './dashboard-overlay.js';\nimport styles from './dashboard.css';\nimport { ErrorToast } from '../surface/components/NotificationToasts.js';\n/** Present a header request while its target read settles, without expanding navigation. */\nexport function DashboardRequest({ t, error, onRetry, onClose, context, }) {\n const ref = useRef(null);\n const [placement, setPlacement] = useState();\n useLayoutEffect(() => {\n if (!ref.current)\n return;\n return mountDashboardOverlay(ref.current, (next) => setPlacement((old) => (JSON.stringify(old) === JSON.stringify(next) ? old : next)));\n }, []);\n useLayoutEffect(() => {\n if (!placement)\n return;\n const previous = document.activeElement;\n const element = ref.current;\n element?.focus({ preventScroll: true });\n return () => {\n if (previous instanceof HTMLElement &&\n previous.isConnected &&\n (element?.contains(document.activeElement) || document.activeElement === document.body)) {\n previous.focus({ preventScroll: true });\n }\n };\n }, [placement !== undefined]);\n return (_jsxs(\"section\", { ref: ref, className: styles.dashboardSurface, \"data-worktree-dashboard-request\": true, \"aria-label\": t('dashboard.title'), \"aria-busy\": error === undefined, tabIndex: -1, style: placement ?? { visibility: 'hidden', height: 0 }, onKeyDown: (event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onClose();\n }\n }, children: [_jsxs(\"header\", { className: styles.dashboardTopline, \"data-dashboard-topbar\": true, \"data-window-drag\": true, children: [_jsx(\"span\", { style: {\n marginInlineStart: `max(0px, calc(var(--dsh-frame-leading-clearance, 0px) - ${placement?.left ?? 0}px - 20px))`,\n }, children: t('dashboard.title') }), _jsx(\"div\", { className: styles.dashboardToplineActions, children: _jsx(\"button\", { type: \"button\", className: styles.dashboardButton, onClick: onClose, children: t('dashboard.back') }) })] }), _jsxs(\"div\", { className: styles.dashboardPage, children: [error === undefined && _jsx(\"p\", { role: \"status\", children: t('status.loading') }), _jsx(ErrorToast, { error: error, t: t, scope: \"dashboard-request\", context: context ?? t('dashboard.title'), actions: [{ label: t('action.retry'), onClick: onRetry }] })] })] }));\n}\n//# sourceMappingURL=DashboardRequest.js.map","import { filterVisibleSessionIds } from '../session/session-view.js';\nimport { filterArchivedSessionIds } from '../view/worktree-view.js';\nimport { isMainWorktreeId } from './dashboard-selection.js';\n/** Join retained snapshots without reading, mutating, or applying Sidebar search. */\nexport function dashboardSessionIds(record, sessions, bindings, archivedSessionIds, orderedIds = [], workspaceSessionIds = []) {\n if (isMainWorktreeId(record.worktreeId)) {\n const boundSessionIds = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.status !== 'detached')\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(workspaceSessionIds.filter((sessionId) => !boundSessionIds.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n }\n const members = new Set(bindings\n .filter((binding) => binding.workspaceId === record.workspaceId && binding.worktreeId === record.worktreeId)\n .map((binding) => binding.sessionId));\n const visible = filterVisibleSessionIds(filterArchivedSessionIds(sessions.ids.filter((sessionId) => members.has(sessionId)), archivedSessionIds), sessions);\n const visibleIds = new Set(visible);\n return [...new Set([...orderedIds, ...visible])].filter((id) => visibleIds.has(id));\n}\n//# sourceMappingURL=dashboard-sessions.js.map","/**\n * Keep Dashboard and the native Session sidebars on one Session identity.\n *\n * Keep the current Session when it belongs to the target; otherwise use the\n * first visible id in the Worktree's retained head order. An empty list is\n * still a valid page-level dashboard target: it carries no native Session identity\n * and leaves Session creation to the explicit Dashboard action.\n */\nexport function prepareDashboardNavigation(record, sessionIds, currentSessionId, phase = 'ready') {\n if (phase === 'pending') {\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: undefined,\n },\n sessionIdToOpen: undefined,\n waitForSessionList: true,\n };\n }\n const sessionIdToOpen = currentSessionId !== undefined && sessionIds.includes(currentSessionId)\n ? currentSessionId\n : sessionIds[0];\n return {\n selection: {\n workspaceId: record.workspaceId,\n worktreeId: record.worktreeId,\n sessionId: sessionIdToOpen,\n },\n sessionIdToOpen: sessionIdToOpen === undefined || sessionIdToOpen === currentSessionId\n ? undefined\n : sessionIdToOpen,\n };\n}\n/**\n * Settle a pending Session switch without resurrecting it after an unrelated switch.\n */\nexport function settlePendingDashboardNavigation(pending, currentSessionId) {\n if (pending === undefined)\n return { kind: 'wait' };\n if (currentSessionId === pending.selection.sessionId) {\n return { kind: 'open', selection: pending.selection };\n }\n if (currentSessionId !== pending.originSessionId)\n return { kind: 'clear' };\n return { kind: 'wait' };\n}\n//# sourceMappingURL=dashboard-navigation.js.map","//#region lib/types/file-address.js\n/**\n* The `dsh-resource://file/…` address grammar: how a file is named across the\n* Sidebar and the resource model, built and parsed without touching a\n* filesystem.\n* @module\n*/\n/** The scheme and type every file address opens with. */\nconst FILE_ADDRESS_PREFIX = \"dsh-resource://file/\";\n/** Component-encode one id or path segment, keeping `:` literal for drive letters. */\nfunction encodeSegment(segment) {\n\treturn encodeURIComponent(segment).replace(/%3A/gi, \":\");\n}\n/** Encode a `/`-separated path segment by segment. */\nfunction encodePath(path) {\n\treturn path.split(\"/\").map(encodeSegment).join(\"/\");\n}\n/** Whether a decoded first path segment is a Windows drive (`C:`). */\nfunction isDriveSegment(segment) {\n\treturn segment !== void 0 && /^[A-Za-z]:$/.test(segment);\n}\n/**\n* Build the address of a file read through one Session.\n* @param sessionId - the Session whose Host workspace resolves the path.\n* @param path - absolute or workspace-relative path; backslashes are normalized to `/`, and leading `./` prefixes are dropped.\n* @returns the `dsh-resource://file/session/<sessionId>/<path>` address.\n*/\nfunction sessionFileAddress(sessionId, path) {\n\tconst normalized = path.replace(/\\\\/g, \"/\").replace(/^(?:\\.\\/)+/, \"\");\n\treturn `${FILE_ADDRESS_PREFIX}session/${encodeSegment(sessionId)}/${encodePath(normalized)}`;\n}\n/**\n* Build the address of a file by its absolute path.\n* @param path - absolute path; backslashes are normalized to `/` and the leading `/` is dropped,\n* except that a UNC path (`\\\\server\\share`) keeps one empty first segment.\n* @returns the `dsh-resource://file/absolute/<path>` address.\n*/\nfunction absoluteFileAddress(path) {\n\tconst normalized = path.replace(/\\\\/g, \"/\");\n\tconst unc = normalized.startsWith(\"//\");\n\tconst absolute = normalized.replace(/^\\/+/, \"\");\n\treturn `${FILE_ADDRESS_PREFIX}absolute/${unc ? \"/\" : \"\"}${encodePath(absolute)}`;\n}\n/**\n* Read a file address back into its parts without resolving `.` or `..`.\n* Query and fragment suffixes are ignored; encoded path segments are decoded.\n* @param address - a candidate address.\n* @returns the parts, or `undefined` when the string is not a `dsh-resource://file/` URI in a known scope with a path, or a segment is not validly encoded.\n*/\nfunction parseFileAddress(address) {\n\ttry {\n\t\tif (!address.startsWith(FILE_ADDRESS_PREFIX)) return void 0;\n\t\tconst end = address.search(/[?#]/);\n\t\tconst [scope, ...rest] = address.slice(20, end === -1 ? void 0 : end).split(\"/\");\n\t\tif (scope === \"session\") {\n\t\t\tconst [id, ...segments] = rest;\n\t\t\tif (id === void 0 || id === \"\" || segments.length === 0) return void 0;\n\t\t\treturn {\n\t\t\t\tscope,\n\t\t\t\tsessionId: decodeURIComponent(id),\n\t\t\t\tpath: segments.map(decodeURIComponent).join(\"/\")\n\t\t\t};\n\t\t}\n\t\tif (scope === \"absolute\") {\n\t\t\tconst unc = rest[0] === \"\" && rest.length > 1;\n\t\t\tconst segments = (unc ? rest.slice(1) : rest).map(decodeURIComponent);\n\t\t\tif (segments.length === 0 || segments[0] === \"\") return void 0;\n\t\t\tif (unc) return {\n\t\t\t\tscope,\n\t\t\t\tpath: `//${segments.join(\"/\")}`\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tscope,\n\t\t\t\tpath: isDriveSegment(segments[0]) ? segments.join(\"/\") : `/${segments.join(\"/\")}`\n\t\t\t};\n\t\t}\n\t\treturn;\n\t} catch {\n\t\treturn;\n\t}\n}\n//#endregion\n//#region lib/types/index.js\n/**\n* Browser-safe Workspace path and display helpers.\n* @module @deepseek-ai/dsh-util-workspace-path\n*/\n/** Whether a path uses a Windows drive or UNC prefix. */\nfunction isWindowsStylePath(value) {\n\treturn /^[A-Za-z]:[/\\\\]/.test(value) || value.startsWith(\"\\\\\\\\\");\n}\n/**\n* Whether a path is absolute in either spelling the Host accepts: POSIX (`/a/b`) or Windows drive or UNC.\n* @param path - the path to classify.\n* @returns `true` for an absolute path; `false` for a Workspace-relative one.\n*/\nfunction isAbsoluteWorkspacePath(path) {\n\treturn path.startsWith(\"/\") || isWindowsStylePath(path);\n}\n/**\n* Resolve a Workspace-relative path into the Host-facing spelling used by path operations.\n* @param cwd - Session Workspace root, when known.\n* @param path - Absolute or Workspace-relative path.\n* @returns an absolute path when a Workspace root is available, otherwise the original path.\n*/\nfunction resolveWorkspacePath(cwd, path) {\n\tif (isAbsoluteWorkspacePath(path)) return path;\n\tif (cwd === void 0 || cwd === \"\") return path;\n\tconst separator = isWindowsStylePath(cwd) && cwd.includes(\"\\\\\") ? \"\\\\\" : \"/\";\n\treturn `${cwd.replace(/[/\\\\]+$/, \"\")}${separator}${path.replace(/^[/\\\\]+/, \"\")}`;\n}\n/**\n* Abbreviate a POSIX home directory for display.\n* @param path - Absolute or already-short display path.\n* @param home - Host account home; absent skips abbreviation.\n* @returns `~` or `~/…` for the POSIX home and its descendants, otherwise `path`.\n*/\nfunction abbreviateHomePath(path, home) {\n\tif (home === void 0 || home === \"\") return path;\n\tif (isWindowsStylePath(path) || isWindowsStylePath(home)) return path;\n\tconst root = home.replace(/\\/+$/, \"\");\n\tif (root === \"\" || root === \"/\") return path;\n\tif (path.replace(/\\/+$/, \"\") === root) return \"~\";\n\tif (path.startsWith(`${root}/`)) return `~${path.slice(root.length)}`;\n\treturn path;\n}\n/**\n* Read the final non-empty segment of a Workspace path for display.\n* Workspace-label surfaces use this helper instead of deriving another basename.\n* @param path - Workspace directory path using POSIX or Windows separators.\n* @returns the final segment, or an empty string for a separator-only path.\n*/\nfunction workspaceTitleOf(path) {\n\tconst trimmed = path.replace(/[/\\\\]+$/, \"\");\n\tconst separator = Math.max(trimmed.lastIndexOf(\"/\"), trimmed.lastIndexOf(\"\\\\\"));\n\treturn trimmed.slice(separator + 1);\n}\n/**\n* Split a path for display: the directories through their last separator, and\n* the final segment after it. Both `/` and `\\` separate, so a Windows path\n* splits where its own segments end; trailing separators are dropped first, so\n* a directory path names its own last segment. A path with no separator, or a\n* separator-only path, is all name.\n* @param path - file or directory path using POSIX or Windows separators.\n* @returns the directory prefix (possibly empty) and the final segment.\n*/\nfunction pathPartsOf(path) {\n\tconst trimmed = path.replace(/[/\\\\]+$/, \"\");\n\tif (trimmed === \"\") return {\n\t\tdirectory: \"\",\n\t\tname: path\n\t};\n\tconst cut = Math.max(trimmed.lastIndexOf(\"/\"), trimmed.lastIndexOf(\"\\\\\")) + 1;\n\treturn {\n\t\tdirectory: trimmed.slice(0, cut),\n\t\tname: trimmed.slice(cut)\n\t};\n}\n/**\n* The address for a path as a caller holds it: a relative path, or an absolute\n* path inside the Session's workspace, becomes a `session`-scoped address; an\n* absolute path outside it, or one whose workspace root is unknown, keeps its\n* absolute path in that Session's address.\n* @param sessionId - the Session the path is read in.\n* @param cwd - that Session's workspace root, when known.\n* @param path - absolute or workspace-relative path, in either separator spelling.\n* @returns the `dsh-resource://file/…` address.\n*/\nfunction fileAddressFor(sessionId, cwd, path) {\n\tconst normalized = path.replace(/\\\\/g, \"/\");\n\tif (!isAbsoluteWorkspacePath(normalized)) return sessionFileAddress(sessionId, normalized);\n\tconst root = cwd === void 0 ? \"\" : cwd.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n\tif (root !== \"\" && normalized === root) return sessionFileAddress(sessionId, \"\");\n\tif (root !== \"\" && normalized.startsWith(`${root}/`)) return sessionFileAddress(sessionId, normalized.slice(root.length + 1));\n\treturn sessionFileAddress(sessionId, normalized);\n}\n/**\n* Strip the workspace root from a workspace-rooted absolute path (display only).\n* @param text - the path to shorten.\n* @param cwd - session workspace root; absent or empty leaves the path unchanged.\n* @returns the path relative to the workspace root, or unchanged when it is not rooted there.\n*/\nfunction relativizeToCwd(text, cwd) {\n\tif (cwd === void 0 || cwd === \"\") return text;\n\tconst root = cwd.replace(/[/\\\\]+$/, \"\");\n\tif (text.startsWith(`${root}/`) || text.startsWith(`${root}\\\\`)) return text.slice(root.length + 1);\n\treturn text;\n}\n/**\n* Address a decoded absolute file path through the authenticated file route.\n* @param base - HTTP(S) application base, including its deployment prefix, or `dsh-app://app/`.\n* @param path - Native file path; URL escapes in authored Markdown must already be decoded.\n* @returns File URL, or undefined for unsupported transports and non-absolute paths.\n*/\nfunction fileMediaUrl(base, path) {\n\tif (!/^https?:/u.test(base) && !base.startsWith(\"dsh-app://app/\") || !isAbsoluteWorkspacePath(path) || /^[/\\\\]{2}/u.test(path) || /[\\u0000-\\u001f\\u007f]/u.test(path)) return void 0;\n\treturn new URL(`api/file?path=${encodeURIComponent(path)}`, base).href;\n}\n//#endregion\nexport { abbreviateHomePath, absoluteFileAddress, fileAddressFor, fileMediaUrl, isAbsoluteWorkspacePath, parseFileAddress, pathPartsOf, relativizeToCwd, resolveWorkspacePath, sessionFileAddress, workspaceTitleOf };\n","import { fileAddressFor } from '@deepseek-ai/dsh-util-workspace-path';\n/** Resolve checkout-relative Git paths against the actual Session cwd. */\nexport function buildSessionFileAddress(sessionId, path, gitRootPath, cwd) {\n const normalized = path.replace(/\\\\/g, '/').replace(/^(?:\\.\\/)+/, '');\n // Git paths remain checkout-relative even when the Session cwd is nested.\n const target = gitRootPath === undefined\n ? normalized\n : gitRootPath.replace(/\\\\/g, '/').replace(/\\/$/, '') + '/' + normalized;\n return fileAddressFor(sessionId, cwd, target);\n}\n//# sourceMappingURL=file-address.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { AccessConfirmation } from './surface/components/AccessConfirmation.js';\nimport { LifecycleDialogs } from './surface/components/LifecycleDialogs.js';\nimport { NativeDialogs } from './surface/components/NativeDialogs.js';\nimport { RegistrationDialog } from './surface/components/RegistrationDialog.js';\nimport { SurfaceContent } from './surface/components/SurfaceContent.js';\nimport { NotificationProvider } from './surface/components/NotificationToasts.js';\nimport { SurfaceHeader } from './surface/components/SurfaceHeader.js';\nimport { useDragActions } from './surface/actions/useDragActions.js';\nimport { useLifecycleActions } from './surface/actions/useLifecycleActions.js';\nimport { useLifecycleState } from './surface/state/useLifecycleState.js';\nimport { useNativeActions } from './surface/actions/useNativeActions.js';\nimport { useRegistrationState } from './surface/state/useRegistrationState.js';\nimport { useSessionActions } from './surface/actions/useSessionActions.js';\nimport { useSessionExpansion } from './surface/state/useSessionExpansion.js';\nimport { useSessionOrdering } from './surface/state/useSessionOrdering.js';\nimport { useSurfaceMenus } from './surface/state/useSurfaceMenus.js';\nimport { useSurfaceMutation } from './surface/actions/useSurfaceMutation.js';\nimport { useSurfaceRefresh } from './surface/state/useSurfaceRefresh.js';\nimport { useSurfaceSources } from './surface/state/useSurfaceSources.js';\nimport { useWorktreeRegistration } from './surface/actions/useWorktreeRegistration.js';\nimport styles from './worktree.css';\nimport { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { WorktreeDashboard } from './dashboard/WorktreeDashboard.js';\nimport { DashboardRequest } from './dashboard/DashboardRequest.js';\nimport { createMainWorktreeRecord, isMainWorktreeId, isManagedDashboardRecord, resolveDashboardRecord, } from './dashboard/dashboard-selection.js';\nimport { dashboardSessionIds } from './dashboard/dashboard-sessions.js';\nimport { prepareDashboardNavigation, settlePendingDashboardNavigation, } from './dashboard/dashboard-navigation.js';\nimport { buildSessionFileAddress } from './dashboard/git/file-address.js';\nimport { createNumberedWorktreeName } from './view/worktree-view.js';\nimport { workspaceSessionIds } from './view/view-mode.js';\n/** Composes independent surface state/action domains into the sidebar overlay. */\nexport function WorktreeSurface(inputProps) {\n const [internalDashboard, setInternalDashboard] = useState();\n const pendingDashboard = useRef();\n const pendingDashboardRecord = useRef();\n const openDashboardRef = useRef();\n const externalDashboard = inputProps.dashboardStore\n ? useSyncExternalStore(inputProps.dashboardStore.subscribe, inputProps.dashboardStore.getSnapshot, () => undefined)\n : undefined;\n const dashboard = inputProps.dashboardStore !== undefined ? externalDashboard : internalDashboard;\n const setDashboard = useCallback((selection) => {\n if (inputProps.dashboardStore !== undefined) {\n inputProps.dashboardStore.set(selection);\n }\n setInternalDashboard(selection);\n }, [inputProps.dashboardStore]);\n const closeDashboard = useCallback(() => {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = undefined;\n setDashboard(undefined);\n }, [setDashboard]);\n const source = useSurfaceSources({ props: inputProps });\n useEffect(() => {\n if (source.mode !== 'worktree')\n closeDashboard();\n }, [source.mode, closeDashboard]);\n useEffect(() => () => {\n inputProps.dashboardStore?.set(undefined);\n }, [inputProps.dashboardStore]);\n const props = {\n ...inputProps,\n openDashboard: (record) => openDashboardRef.current?.(record),\n openSession: (sessionId) => {\n closeDashboard();\n inputProps.openSession(sessionId);\n },\n createMainSession: inputProps.createMainSession === undefined\n ? undefined\n : (workspaceId) => {\n closeDashboard();\n inputProps.createMainSession?.(workspaceId);\n },\n };\n const registrationState = useRegistrationState({ props });\n const read = useSurfaceRefresh({ source, props, registrationState });\n const targetWorkspace = dashboard === undefined\n ? undefined\n : source.workspaces.items.find((workspace) => workspace.workspaceId === dashboard.workspaceId);\n const targetView = dashboard === undefined ? undefined : read.viewByWorkspace.get(dashboard.workspaceId);\n const dashboardMainBranch = targetView?.branches.find((branch) => branch.isCurrent)?.name;\n const dashboardMainRecord = targetWorkspace === undefined\n ? undefined\n : createMainWorktreeRecord(targetWorkspace, dashboardMainBranch, targetView?.mainInstructions);\n const dashboardRecord = resolveDashboardRecord(dashboard, source.mode, source.currentSessionId, source.workspaceIds, dashboard === undefined ? undefined : targetView?.worktrees, dashboardMainRecord);\n useEffect(() => {\n if (dashboard !== undefined &&\n dashboardRecord === undefined &&\n (source.mode !== 'worktree' ||\n (dashboard.sessionId !== undefined && dashboard.sessionId !== source.currentSessionId) ||\n !source.workspaceIds.includes(dashboard.workspaceId) ||\n targetView !== undefined)) {\n // A target Session switch can invalidate the old Dashboard in the same\n // commit that settles a new Worktree navigation. Do not cancel that\n // pending navigation while dismissing the stale page.\n setDashboard(undefined);\n }\n }, [\n dashboard,\n dashboardRecord,\n setDashboard,\n source.mode,\n source.currentSessionId,\n source.workspaceIds,\n targetView,\n ]);\n const mutation = useSurfaceMutation({ read });\n const lifecycleState = useLifecycleState({ props, source, mutation });\n const menus = useSurfaceMenus();\n const ordering = useSessionOrdering({ read, source, props });\n const openDashboard = useCallback((record) => {\n const workspace = source.workspaces.items.find((candidate) => candidate.workspaceId === record.workspaceId);\n const view = read.viewByWorkspace.get(record.workspaceId);\n const sessionIds = dashboardSessionIds(record, source.sessions, view?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(record.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${record.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${record.worktreeId}`), workspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, workspace.workspaceId, source.sessions.ids));\n const navigation = prepareDashboardNavigation(record, sessionIds, source.currentSessionId, source.sessions.phase ?? 'ready');\n if (navigation.waitForSessionList === true) {\n pendingDashboard.current = undefined;\n pendingDashboardRecord.current = record;\n return;\n }\n pendingDashboardRecord.current = undefined;\n if (navigation.sessionIdToOpen !== undefined) {\n pendingDashboard.current = {\n selection: navigation.selection,\n originSessionId: source.currentSessionId,\n };\n inputProps.openSession(navigation.sessionIdToOpen);\n return;\n }\n pendingDashboard.current = undefined;\n if (navigation.selection.sessionId === undefined)\n inputProps.closeRightSidebar?.();\n setDashboard(navigation.selection);\n }, [\n inputProps.closeRightSidebar,\n inputProps.openSession,\n ordering.orderedSessionIdsByAccount,\n read.viewByWorkspace,\n setDashboard,\n source.archivedSessionIds,\n source.currentSessionId,\n source.sessions,\n source.workspaces,\n ]);\n openDashboardRef.current = openDashboard;\n useEffect(() => {\n if (source.sessions.phase === 'pending')\n return;\n const pendingRecord = pendingDashboardRecord.current;\n if (pendingRecord === undefined)\n return;\n pendingDashboardRecord.current = undefined;\n openDashboard(pendingRecord);\n }, [openDashboard, source.sessions.phase]);\n useEffect(() => {\n const settlement = settlePendingDashboardNavigation(pendingDashboard.current, source.currentSessionId);\n if (settlement.kind === 'open') {\n pendingDashboard.current = undefined;\n setDashboard(settlement.selection);\n }\n else if (settlement.kind === 'clear') {\n pendingDashboard.current = undefined;\n }\n }, [setDashboard, source.currentSessionId]);\n const expansion = useSessionExpansion({ read, source, props });\n const native = useNativeActions({ source, props, mutation });\n const drag = useDragActions({\n source,\n orderedSessionIdsByAccount: ordering.orderedSessionIdsByAccount,\n props,\n mutation,\n read,\n });\n const session = useSessionActions({ source, props, mutation, read });\n const registration = useWorktreeRegistration({\n source,\n registrationState,\n read,\n props,\n mutation,\n session,\n });\n const lifecycle = useLifecycleActions({ read, lifecycleState, source, props, mutation });\n const dashboardWorkspace = source.workspaces.items.find((workspace) => workspace.workspaceId === dashboardRecord?.workspaceId);\n const dashboardView = dashboardRecord === undefined\n ? undefined\n : read.viewByWorkspace.get(dashboardRecord.workspaceId);\n const dashboardCanCreate = dashboardRecord?.status === 'active' &&\n dashboardRecord.diskCleanup !== 'completed' &&\n dashboardRecord.health !== 'cleaned' &&\n dashboardRecord.health !== 'repair' &&\n dashboardRecord.health !== 'recovery-needed';\n const dashboardManagedRecord = dashboardRecord !== undefined && isManagedDashboardRecord(dashboardRecord)\n ? dashboardRecord\n : undefined;\n const onOpenFile = useCallback((filePath, options) => {\n if (typeof props.openResource !== 'function' || dashboardRecord === undefined)\n return;\n const worktreeSessions = dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids));\n // A file opened from Git must stay inside the Dashboard Worktree.\n // Never fall back to the current or another Workspace Session.\n const targetSessionId = source.currentSessionId !== undefined && worktreeSessions.includes(source.currentSessionId)\n ? source.currentSessionId\n : undefined;\n if (targetSessionId === undefined)\n return;\n const address = buildSessionFileAddress(targetSessionId, filePath, dashboardRecord.gitRootPath ?? dashboardRecord.absolutePath, source.sessions.byId[targetSessionId]?.cwd ?? dashboardRecord.absolutePath);\n props.openResource(address, options);\n }, [\n props.openResource,\n dashboardRecord,\n source.currentSessionId,\n source.sessions,\n source.archivedSessionIds,\n source.workspaces,\n dashboardView?.bindings,\n ordering.orderedSessionIdsByAccount,\n dashboardWorkspace,\n ]);\n if (source.mode !== 'worktree')\n return null;\n const { ref, width, bounds, collapsed } = source;\n const { t } = props;\n return (_jsxs(NotificationProvider, { t: t, openSettings: props.openErrorSettings, children: [_jsxs(\"aside\", { ref: ref, className: styles.surface, \"data-worktree-surface\": true, \"data-collapsed\": collapsed || undefined, \"data-native-sidebar-covered\": source.nativeCovered || undefined, \"aria-hidden\": collapsed || undefined, \"aria-label\": t('mode.navigation'), style: {\n width: `${width}px`,\n ...(bounds.ready\n ? { top: `${bounds.top}px`, height: `${bounds.height}px` }\n : { height: '0px', visibility: 'hidden' }),\n }, children: [_jsxs(\"div\", { className: styles.wideContent, children: [_jsx(SurfaceHeader, { expansion: expansion, props: props, source: source, read: read, mutation: mutation }), _jsx(SurfaceContent, { source: source, props: props, lifecycle: lifecycle, mutation: mutation, session: session, read: read, expansion: expansion, ordering: ordering, drag: drag, menus: menus, registration: registration, native: native, lifecycleState: lifecycleState })] }), _jsx(NativeDialogs, { props: props, native: native }), _jsx(RegistrationDialog, { props: props, registration: registration, registrationState: registrationState, mutation: mutation, read: read }), _jsx(LifecycleDialogs, { props: props, lifecycleState: lifecycleState, mutation: mutation, lifecycle: lifecycle, expansion: expansion, read: read, session: session }), _jsx(AccessConfirmation, { source: source, props: props })] }), dashboard !== undefined &&\n dashboardRecord === undefined &&\n dashboard.sessionId === source.currentSessionId &&\n source.workspaceIds.includes(dashboard.workspaceId) &&\n targetView === undefined && (_jsx(DashboardRequest, { context: targetWorkspace === undefined ? dashboard.workspaceId : targetWorkspace.title + ' · ' + targetWorkspace.path, t: t, error: read.readState.error ??\n (read.readState.targetError?.workspaceIds.includes(dashboard.workspaceId)\n ? read.readState.targetError.error\n : undefined), onClose: closeDashboard, onRetry: () => {\n void read.refresh({\n scope: { kind: 'workspace', workspaceId: dashboard.workspaceId },\n preserveCurrent: true,\n });\n } })), dashboardRecord !== undefined && (_jsx(WorktreeDashboard, { manager: props.manager, record: dashboardRecord, onSaveInstructions: props.manager\n ? async (instructions, expectedInstructions) => {\n try {\n return await props.manager.updateWorktreeInstructions({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n instructions,\n expectedInstructions,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, onSaveBaseline: props.manager &&\n typeof props.manager.updateWorktreeBaseBranch === 'function' &&\n dashboardManagedRecord !== undefined &&\n dashboardCanCreate\n ? async (baseBranch, expectedBaseBranch) => {\n try {\n return await props.manager.updateWorktreeBaseBranch({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n baseBranch,\n expectedBaseBranch,\n });\n }\n finally {\n void read.refresh({\n preserveCurrent: true,\n scope: { kind: 'workspace', workspaceId: dashboardRecord.workspaceId },\n });\n }\n }\n : undefined, branches: dashboardView?.branches ?? [], workspaceTitle: dashboardWorkspace?.title ?? '', sessions: source.sessions, sessionPresentations: source.sessionPresentations, sessionIds: dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId(dashboardRecord.worktreeId)\n ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`)\n : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === undefined\n ? []\n : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids)), actionPending: mutation.actionPending, onOpenFile: typeof props.openResource === 'function' ? onOpenFile : undefined, onOpenSession: (sessionId) => session.openWorkspaceSession(dashboardRecord.workspaceId, sessionId), onCreateSession: dashboardCanCreate &&\n (isMainWorktreeId(dashboardRecord.worktreeId)\n ? props.createMainSession !== undefined\n : props.createSessionForWorktree !== undefined)\n ? () => {\n if (mutation.actionPending)\n return;\n closeDashboard();\n if (isMainWorktreeId(dashboardRecord.worktreeId)) {\n props.createMainSession?.(dashboardRecord.workspaceId);\n }\n else {\n void session.createSession({\n workspaceId: dashboardRecord.workspaceId,\n worktreeId: dashboardRecord.worktreeId,\n cwd: dashboardRecord.absolutePath,\n });\n }\n }\n : undefined, onCreateWorktree: dashboardCanCreate &&\n dashboardRecord.currentBranch !== null &&\n dashboardRecord.branch.length > 0 &&\n dashboardWorkspace !== undefined &&\n dashboardView !== undefined\n ? () => {\n if (mutation.actionPending)\n return;\n const branch = dashboardRecord.currentBranch ?? dashboardRecord.branch;\n registration.openWorktreeCreator(dashboardWorkspace, {\n baseBranch: branch,\n newBranch: createNumberedWorktreeName(branch, [\n ...dashboardView.branches.map((candidate) => candidate.name),\n ...dashboardView.worktrees.map((candidate) => candidate.branch),\n ]),\n });\n }\n : undefined, onArchiveWorktree: dashboardManagedRecord !== undefined &&\n dashboardManagedRecord.status === 'active' &&\n dashboardManagedRecord.health !== 'recovery-needed'\n ? () => {\n if (mutation.actionPending)\n return;\n lifecycleState.setWorktreeRemoval(dashboardManagedRecord);\n mutation.setActionError(undefined);\n }\n : undefined, t: t, onClose: closeDashboard, onOpenSidebar: source.currentSessionId === undefined ? undefined : props.openRightSidebar, isRightSidebarExpanded: props.isRightSidebarExpanded }, `${dashboardRecord.workspaceId}:${dashboardRecord.worktreeId}`))] }));\n}\n//# sourceMappingURL=WorktreeSurface.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { WorktreeHeroContext } from '../context/WorktreeHeroContext.js';\nimport { WorktreeSurface } from '../WorktreeSurface.js';\n/** Compose the independent Hero context and Worktree navigation overlays. */\nexport function WorktreeOverlay(props) {\n return (_jsxs(_Fragment, { children: [_jsx(WorktreeHeroContext, { ...props }), _jsx(WorktreeSurface, { ...props })] }));\n}\n//# sourceMappingURL=WorktreeOverlay.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, SegmentedTabs, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useId, useState, useSyncExternalStore } from 'react';\nimport { formatWorktreeViewError } from '../view/worktree-error-copy.js';\nimport { worktreeDiagnostics } from './diagnostics.js';\nimport styles from './settings.css';\nimport { ToolSettings } from './ToolSettings.js';\nexport function WorktreeSettings({ t, close, manager, }) {\n const entries = useSyncExternalStore(worktreeDiagnostics.subscribe, worktreeDiagnostics.getSnapshot, worktreeDiagnostics.getSnapshot);\n const [tab, setTab] = useState(entries.some((entry) => entry.status === 'active') ? 'errors' : 'general');\n const id = useId();\n return (_jsxs(\"section\", { className: styles.settings, \"data-worktree-settings\": true, children: [_jsx(\"h2\", { className: styles.settingsTitle, children: t('settings.title') }), _jsx(SegmentedTabs, { label: t('settings.title'), className: styles.settingsTabs, value: tab, onChange: setTab, items: [\n {\n value: 'general',\n label: t('settings.general'),\n id: id + 'general',\n panelId: id + 'panel',\n },\n {\n value: 'errors',\n label: t('settings.errors'),\n id: id + 'errors',\n panelId: id + 'panel',\n },\n ] }), _jsx(\"div\", { className: styles.settingsPanel, role: \"tabpanel\", id: id + 'panel', \"aria-labelledby\": id + tab, children: tab === 'general' ? (_jsx(ToolSettings, { manager: manager, scope: { kind: 'general' }, t: t })) : (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: styles.settingsToolbar, children: [_jsx(\"p\", { className: styles.settingsHint, children: t('settings.retention') }), _jsx(Button, { className: styles.settingsAction, size: \"sm\", variant: \"outline\", disabled: !entries.some((entry) => entry.status !== 'active'), onClick: () => worktreeDiagnostics.clearHistory(), children: t('settings.clearHistory') })] }), entries.length === 0 && _jsx(\"p\", { className: styles.settingsEmpty, children: t('settings.empty') }), _jsx(\"div\", { className: styles.issueList, children: [...entries].reverse().map((entry) => (_jsxs(\"article\", { className: styles.issue, \"data-worktree-diagnostic\": true, children: [_jsxs(\"div\", { className: styles.issueHeader, children: [_jsx(\"h3\", { className: styles.issueTitle, children: entry.describe?.(t) ?? entry.context ?? t('settings.operation') }), _jsx(Tag, { className: styles.issueStatus, tone: entry.status === 'active'\n ? 'danger'\n : entry.status === 'resolved'\n ? 'quiet'\n : 'neutral', children: t(entry.status === 'active'\n ? 'settings.active'\n : entry.status === 'resolved'\n ? 'settings.resolved'\n : 'settings.inactive') })] }), _jsx(\"p\", { className: styles.issueMessage, children: entry.message?.(t) ??\n (entry.error === undefined\n ? entry.text\n : formatWorktreeViewError(entry.error, t)) }), entry.status === 'inactive' && (_jsx(\"p\", { className: styles.settingsHint, children: t('settings.reopen') })), entry.actions.length > 0 && (_jsx(\"div\", { className: styles.issueActions, children: entry.actions.map((action, index) => (_jsx(Button, { className: styles.settingsAction, size: \"sm\", variant: \"outline\", disabled: action.disabled, onClick: () => {\n if (action.leaveSettings)\n close();\n action.onClick();\n }, children: action.label }, index))) })), entry.error !== undefined && (_jsxs(\"details\", { className: styles.issueDiagnostics, children: [_jsx(\"summary\", { children: t('settings.diagnostics') }), _jsx(\"pre\", { children: JSON.stringify({\n code: entry.error.code,\n message: entry.error.message,\n details: entry.error.details,\n }, null, 2) })] }))] }, entry.key))) })] })) })] }));\n}\n//# sourceMappingURL=WorktreeSettings.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconBranchOutline16 } from '../dsh-icons.js';\nimport styles from './settings.css';\nconst ATTRIBUTE = 'data-worktree-settings-nav-icon';\n/** The native settings shell has no section-icon slot; decorate only our nav row. */\nexport function WorktreeSettingsNavIcon({ t }) {\n const [target, setTarget] = useState();\n const label = t('settings.title');\n useEffect(() => {\n if (typeof document === 'undefined')\n return;\n let active = true;\n let queued = false;\n const scan = () => {\n if (!active || queued)\n return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n if (!active)\n return;\n const rows = Array.from(document.querySelectorAll('[data-shortcut-modal=\"settings\"] nav button')).filter((row) => row.textContent?.trim() === label && row.querySelector(':scope > svg') !== null);\n // Ambiguous labels or changed shell markup leave the native icon intact.\n setTarget(rows.length === 1 ? rows[0] : undefined);\n });\n };\n const observer = new MutationObserver(scan);\n observer.observe(document.documentElement, {\n childList: true,\n characterData: true,\n subtree: true,\n });\n scan();\n return () => {\n active = false;\n observer.disconnect();\n };\n }, [label]);\n useLayoutEffect(() => {\n if (!target)\n return;\n target.setAttribute(ATTRIBUTE, '');\n return () => target.removeAttribute(ATTRIBUTE);\n }, [target]);\n return target\n ? createPortal(_jsx(IconBranchOutline16, { size: 16, className: styles.settingsNavIcon }), target)\n : null;\n}\n//# sourceMappingURL=WorktreeSettingsNavIcon.js.map","export const WORKTREE_COMMAND_ACTIVITY = 'clutch-dsh-worktree-command-activity';\n/** Native Chat still owns the result row; this target supplies only shell activity. */\nexport const worktreeCommandActivityNode = {\n kind: WORKTREE_COMMAND_ACTIVITY,\n target: WORKTREE_COMMAND_ACTIVITY,\n match: (event) => event.type === 'command/run' && event.data.name === 'cluworktree'\n ? { id: String(event.data.commandId), role: 'start' }\n : null,\n start: () => true,\n update: () => true,\n buildViewNode: (context) => context.start === undefined ? null : {\n key: context.key,\n kind: WORKTREE_COMMAND_ACTIVITY,\n id: context.id,\n target: WORKTREE_COMMAND_ACTIVITY,\n data: true,\n },\n};\n/** A private activity target has no tab or duplicate command presentation. */\nexport const worktreeCommandActivityView = {\n target: WORKTREE_COMMAND_ACTIVITY,\n create: () => {\n let active = false;\n return {\n empty: false,\n replace: ({ nodes }) => (active = nodes.length > 0),\n apply: ({ upserts }) => (active ||= upserts.length > 0),\n };\n },\n isActive: (active) => active,\n};\n/** Activate only already retained bindings, including later generations and replay. */\nexport function installWorktreeCommandActivity(ctx) {\n ctx.effect(() => {\n const node = ctx.uiConversation.events.register(worktreeCommandActivityNode);\n const view = ctx.uiConversation.views.register(worktreeCommandActivityView);\n const tracked = new WeakSet();\n let disposed = false;\n let queued = false;\n const sync = () => {\n if (disposed)\n return;\n for (const id of ctx.sessions.list.getSnapshot().ids ?? []) {\n const binding = ctx.sessions.binding(id);\n if (binding === undefined || tracked.has(binding))\n continue;\n ctx.uiConversation.binding(binding).activate(WORKTREE_COMMAND_ACTIVITY);\n tracked.add(binding);\n }\n };\n const schedule = () => {\n if (disposed || queued)\n return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n sync();\n });\n };\n const unsubscribe = ctx.sessions.list.subscribe(schedule);\n // Let Controller retention finish before borrowing a newly published binding.\n schedule();\n return () => {\n disposed = true;\n unsubscribe();\n view();\n node();\n };\n }, 'clutch-dsh-worktree: command activity');\n}\n//# sourceMappingURL=command-activity.js.map","/** The rc.1 native Settings shell shares one viewing store between mouse and command entry. */\nexport function openWorktreeErrorSettings(slots) {\n const store = slots.entriesOfSlot('sidebar.settings')[0]?.store;\n if (typeof store?.create !== 'function')\n return false;\n const instance = store.create();\n if (typeof instance?.actions?.openSection !== 'function')\n return false;\n instance.actions.openSection('clutch-dsh-worktree');\n return true;\n}\n//# sourceMappingURL=settings-navigation.js.map","const none = (reason) => ({\n kind: 'none',\n reason,\n});\n/** Resolve the branch or active Worktree label for one current DSH Session. */\nexport function resolveWorktreeSessionContext(input) {\n const sessionId = input.currentSessionId;\n if (sessionId === undefined && input.currentWorkspaceId === undefined)\n return none('no-session');\n const workspace = sessionId === undefined\n ? input.workspaces.find(({ workspaceId }) => workspaceId === input.currentWorkspaceId)\n : input.workspaces.find(({ sessionIds }) => sessionIds.includes(sessionId));\n if (workspace === undefined)\n return none('unbound');\n const binding = sessionId === undefined\n ? undefined\n : input.bindings.find((candidate) => candidate.sessionId === sessionId);\n if (binding !== undefined) {\n if (binding.workspaceId !== workspace.workspaceId)\n return none('workspace-mismatch');\n if (binding.status === 'detached')\n return none('detached');\n const record = input.worktrees.find((candidate) => candidate.worktreeId === binding.worktreeId);\n if (record === undefined || record.workspaceId !== workspace.workspaceId) {\n return none(record === undefined ? 'stale' : 'workspace-mismatch');\n }\n if (record.diskCleanup === 'completed' || record.health === 'cleaned') {\n return none('detached');\n }\n if (record.health === 'repair' || record.health === 'recovery-needed') {\n return none('repair');\n }\n if (record.branch.length === 0)\n return none('not-ready');\n return {\n kind: 'worktree',\n workspaceId: workspace.workspaceId,\n worktreeId: record.worktreeId,\n label: record.branch,\n source: 'active-binding',\n };\n }\n const currentBranch = input.branches.find(({ isCurrent }) => isCurrent);\n if (currentBranch === undefined || currentBranch.name.length === 0)\n return none('not-ready');\n return {\n kind: 'main',\n workspaceId: workspace.workspaceId,\n label: currentBranch.name,\n source: 'current-branch',\n };\n}\n//# sourceMappingURL=worktree-context.js.map","import { currentSessionIdFromList } from '../session/session-selection.js';\nimport { resolveWorktreeSessionContext, } from './worktree-context.js';\nimport { deriveRecentWorkspaceId } from '../view/view-mode.js';\nimport { toWorktreeViewError, } from '../view/worktree-view.js';\nconst notReady = () => ({ kind: 'none', reason: 'not-ready' });\nfunction scheduledRefresh() {\n let resolve;\n const promise = new Promise((resolvePromise) => {\n resolve = resolvePromise;\n });\n return { promise, resolve };\n}\nfunction identityFrom(sessions, workspaces) {\n const sessionSnapshot = sessions.getSnapshot();\n const workspaceSnapshot = workspaces.getSnapshot();\n const sessionId = currentSessionIdFromList(sessionSnapshot);\n if (sessionId === undefined) {\n return {\n workspaceId: deriveRecentWorkspaceId({ items: workspaceSnapshot.items }, sessionSnapshot.byId),\n };\n }\n const workspace = workspaceSnapshot.items.find((candidate) => candidate.sessionIds.includes(sessionId));\n return { sessionId, workspaceId: workspace?.workspaceId };\n}\n/**\n * Build one browser-local current-Session projection shared by the header\n * consumer. Superseded requests may still finish on the transport, but their\n * results never become visible in the current snapshot.\n */\nexport function createWorktreeContextProjection(input) {\n const store = input.storeFactory({\n status: 'idle',\n value: notReady(),\n });\n let disposed = false;\n let generation = 0;\n let scheduled = false;\n let scheduleTicket = 0;\n let scheduledCompletion;\n let latestRefresh = Promise.resolve();\n let lastObservedIdentity;\n const sameIdentity = (left, right) => left?.sessionId === right.sessionId\n && left?.workspaceId === right.workspaceId;\n const workspaceTitleFor = (workspaceId) => input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === workspaceId)\n ?.title;\n const valueFrom = (identity, data) => resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: data.branches,\n worktrees: data.worktrees,\n bindings: data.bindings,\n });\n const syncWorkspaceTitle = (identity) => {\n const current = store.getSnapshot();\n if (current.sessionId !== identity.sessionId ||\n current.workspaceId !== identity.workspaceId ||\n identity.workspaceId === undefined)\n return;\n const workspaceTitle = workspaceTitleFor(identity.workspaceId);\n if (current.workspaceTitle === workspaceTitle)\n return;\n store.set({ ...current, workspaceTitle });\n };\n const setPending = (identity) => {\n if (identity.workspaceId === undefined) {\n store.set({\n status: 'ready',\n value: resolveWorktreeSessionContext({\n currentSessionId: identity.sessionId,\n currentWorkspaceId: identity.workspaceId,\n workspaces: input.workspaces.getSnapshot().items,\n branches: [],\n worktrees: [],\n bindings: [],\n }),\n });\n return;\n }\n const current = store.getSnapshot();\n if (current.status === 'ready' && current.workspaceId !== identity.workspaceId) {\n // Keep the last valid context visible until the new Workspace facts arrive.\n return;\n }\n if (current.status === 'ready' && current.workspaceId === identity.workspaceId) {\n store.set({\n status: 'ready',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: current.value,\n });\n return;\n }\n store.set({\n status: 'loading',\n ...(identity.sessionId === undefined ? {} : { sessionId: identity.sessionId }),\n workspaceId: identity.workspaceId,\n workspaceTitle: workspaceTitleFor(identity.workspaceId),\n value: notReady(),\n });\n };\n const matchesCurrent = (request, requestGeneration) => {\n if (disposed || generation !== requestGeneration)\n return false;\n const current = identityFrom(input.sessions, input.workspaces);\n return current.sessionId === request.sessionId && current.workspaceId === request.workspaceId;\n };\n const runRefresh = async () => {\n if (disposed)\n return;\n const requestGeneration = ++generation;\n const identity = identityFrom(input.sessions, input.workspaces);\n lastObservedIdentity = identity;\n setPending(identity);\n if (identity.workspaceId === undefined)\n return;\n const request = {\n sessionId: identity.sessionId,\n workspaceId: identity.workspaceId,\n };\n try {\n const data = await input.viewReader.read(request.workspaceId);\n if (!matchesCurrent(request, requestGeneration))\n return;\n const workspace = input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId);\n if ('error' in data.readiness) {\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: notReady(),\n error: data.readiness.error,\n });\n return;\n }\n store.set({\n status: 'ready',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: workspace?.title,\n value: valueFrom(request, data),\n });\n }\n catch (error) {\n if (!matchesCurrent(request, requestGeneration))\n return;\n store.set({\n status: 'error',\n ...(request.sessionId === undefined ? {} : { sessionId: request.sessionId }),\n workspaceId: request.workspaceId,\n workspaceTitle: input.workspaces.getSnapshot().items.find((candidate) => candidate.workspaceId === request.workspaceId)?.title,\n value: notReady(),\n error: toWorktreeViewError(error),\n });\n }\n };\n const cancelScheduledRefresh = () => {\n scheduleTicket += 1;\n scheduled = false;\n const completion = scheduledCompletion;\n scheduledCompletion = undefined;\n completion?.resolve();\n };\n const refresh = () => {\n cancelScheduledRefresh();\n lastObservedIdentity = identityFrom(input.sessions, input.workspaces);\n const completion = runRefresh();\n latestRefresh = completion;\n return completion;\n };\n const scheduleRefresh = () => {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (sameIdentity(lastObservedIdentity, identity)) {\n syncWorkspaceTitle(identity);\n return;\n }\n lastObservedIdentity = identity;\n generation += 1;\n setPending(identity);\n if (scheduled)\n return;\n scheduled = true;\n const ticket = ++scheduleTicket;\n const completion = scheduledRefresh();\n scheduledCompletion = completion;\n latestRefresh = completion.promise;\n queueMicrotask(() => {\n if (disposed || ticket !== scheduleTicket) {\n completion.resolve();\n return;\n }\n scheduled = false;\n void runRefresh().finally(() => {\n if (scheduledCompletion === completion)\n scheduledCompletion = undefined;\n completion.resolve();\n });\n });\n };\n const waitForLatestRefresh = async (workspaceId) => {\n let observed;\n while (!disposed) {\n if (workspaceId !== undefined\n && identityFrom(input.sessions, input.workspaces).workspaceId !== workspaceId) {\n return;\n }\n const completion = latestRefresh;\n if (completion === observed)\n return;\n observed = completion;\n await completion;\n }\n };\n const unsubscribeSessions = input.sessions.subscribe(scheduleRefresh);\n const unsubscribeWorkspaces = input.workspaces.subscribe(scheduleRefresh);\n return {\n store,\n refresh,\n async invalidate(workspaceId) {\n if (disposed)\n return;\n const identity = identityFrom(input.sessions, input.workspaces);\n if (workspaceId !== undefined && workspaceId !== identity.workspaceId)\n return;\n if (identity.workspaceId === undefined)\n return;\n input.viewReader.invalidate(identity.workspaceId);\n await refresh();\n await waitForLatestRefresh(workspaceId ?? identity.workspaceId);\n },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n generation += 1;\n cancelScheduledRefresh();\n unsubscribeSessions();\n unsubscribeWorkspaces();\n store.set({ status: 'idle', value: notReady() });\n },\n };\n}\n//# sourceMappingURL=worktree-context-store.js.map","import { defineStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_VIEW_MODE_STORAGE_KEY, } from './view-mode.js';\n/** Create one root-scoped, browser-local view-mode store for the two slot entries. */\nexport function createWorktreeViewStore() {\n return defineStore({\n init: () => ({ viewMode: 'workspace-session' }),\n persist: WORKTREE_VIEW_MODE_STORAGE_KEY,\n actions: {\n setViewMode: (draft, mode) => {\n draft.viewMode = mode;\n },\n },\n });\n}\n//# sourceMappingURL=view-mode-store.js.map","import { projectVirtualWorkspaceMembership, } from '../view/view-mode.js';\nfunction normalizeBindings(bindings) {\n const bySession = new Map();\n for (const binding of bindings) {\n if (binding.workspaceId.length === 0 || binding.sessionId.length === 0)\n continue;\n bySession.set(binding.sessionId, binding);\n }\n return [...bySession.values()];\n}\nfunction sameBindings(left, right) {\n return left.length === right.length && left.every((binding, index) => {\n const other = right[index];\n return binding.workspaceId === other.workspaceId && binding.sessionId === other.sessionId;\n });\n}\n/**\n * Decorate DSH's read-only WorkspaceSource with a browser-local membership\n * projection. The source's native model is never written: the wrapper keeps\n * the current sidecar bindings in memory, reprojects every native snapshot,\n * and publishes only the projected view to subscribers.\n */\nexport function createVirtualWorkspaceMembership(list) {\n if (!Object.isExtensible(list)) {\n throw new Error('Workspace membership projection requires an extensible WorkspaceSource');\n }\n const nativeGetSnapshot = list.getSnapshot.bind(list);\n const nativeSubscribe = list.subscribe.bind(list);\n const originalGetSnapshot = Object.getOwnPropertyDescriptor(list, 'getSnapshot');\n const originalSubscribe = Object.getOwnPropertyDescriptor(list, 'subscribe');\n const listeners = new Set();\n let bindings = [];\n let nativeSnapshot = nativeGetSnapshot();\n let projectedSnapshot = projectVirtualWorkspaceMembership(nativeSnapshot, [], bindings);\n let disposed = false;\n const project = (nextNativeSnapshot, previousBindings, nextBindings) => projectVirtualWorkspaceMembership(nextNativeSnapshot, previousBindings, nextBindings);\n const refreshSnapshot = () => {\n const nextNativeSnapshot = nativeGetSnapshot();\n if (nextNativeSnapshot === nativeSnapshot)\n return false;\n nativeSnapshot = nextNativeSnapshot;\n const nextProjectedSnapshot = project(nextNativeSnapshot, bindings, bindings);\n const changed = nextProjectedSnapshot !== projectedSnapshot;\n projectedSnapshot = nextProjectedSnapshot;\n return changed;\n };\n const notify = () => {\n if (disposed)\n return;\n if (!refreshSnapshot())\n return;\n for (const listener of [...listeners])\n listener();\n };\n const getSnapshot = () => {\n if (disposed)\n return nativeGetSnapshot();\n refreshSnapshot();\n return projectedSnapshot;\n };\n const subscribe = (listener) => {\n if (disposed)\n return () => undefined;\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n Object.defineProperty(list, 'getSnapshot', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: getSnapshot,\n });\n Object.defineProperty(list, 'subscribe', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: subscribe,\n });\n const unsubscribeNative = nativeSubscribe(notify);\n const sync = (nextBindings) => {\n if (disposed)\n return;\n const normalized = normalizeBindings(nextBindings);\n if (sameBindings(bindings, normalized))\n return;\n const previousBindings = bindings;\n bindings = normalized;\n nativeSnapshot = nativeGetSnapshot();\n const previousProjectedSnapshot = projectedSnapshot;\n projectedSnapshot = project(nativeSnapshot, previousBindings, bindings);\n if (projectedSnapshot === previousProjectedSnapshot)\n return;\n for (const listener of [...listeners])\n listener();\n };\n const restoreMethod = (name, descriptor) => {\n if (descriptor === undefined) {\n delete list[name];\n return;\n }\n Object.defineProperty(list, name, descriptor);\n };\n return {\n ensure(binding) {\n if (disposed)\n return;\n if (bindings.some((current) => current.workspaceId === binding.workspaceId && current.sessionId === binding.sessionId)) {\n return;\n }\n sync([...bindings.filter((current) => current.sessionId !== binding.sessionId), binding]);\n },\n sync,\n removeSession(sessionId) {\n sync(bindings.filter((binding) => binding.sessionId !== sessionId));\n },\n dispose() {\n if (disposed)\n return;\n bindings = [];\n projectedSnapshot = nativeGetSnapshot();\n disposed = true;\n for (const listener of [...listeners])\n listener();\n unsubscribeNative();\n listeners.clear();\n restoreMethod('getSnapshot', originalGetSnapshot);\n restoreMethod('subscribe', originalSubscribe);\n },\n };\n}\n//# sourceMappingURL=virtual-workspace-membership.js.map","/** Rename a listed Session across DSH generations with different retention semantics. */\nexport async function renameWorktreeSession(sessions, sessionId, title) {\n const compatibleSessions = sessions;\n if (typeof compatibleSessions.using === 'function') {\n const result = await compatibleSessions.using(sessionId, { source: 'workspaceOperation' }, (reference) => reference.binding.session.rename(title));\n if (!result.ok)\n throw new Error(result.error.message);\n return;\n }\n // DSH versions before borrow-only bindings expose a live Session for a listed id.\n const session = compatibleSessions.binding(sessionId)?.session;\n if (session === undefined)\n throw new Error(`unknown session \"${sessionId}\"`);\n const result = await session.rename(title);\n if (!result.ok)\n throw new Error(result.error.message);\n}\n//# sourceMappingURL=session-rename.js.map","/** Use DSH-owned navigation in 1.7; keep the older Session-controller fallback. */\nexport function openWorktreeSession(uiWorkspace, sessions, sessionId) {\n const compatibleUiWorkspace = uiWorkspace;\n if (typeof compatibleUiWorkspace.openSession === 'function') {\n compatibleUiWorkspace.openSession(sessionId);\n return;\n }\n const legacyOpen = sessions.open;\n if (typeof legacyOpen === 'function') {\n legacyOpen(sessionId);\n return;\n }\n throw new Error('DSH Client does not expose a Session navigation method');\n}\n//# sourceMappingURL=session-navigation.js.map","const englishReason = 'This Worktree Session may need Git metadata and linked Worktree files outside the Session directory. '\n + 'Full Access disables filesystem confinement for this Session; approval prompts remain enabled, '\n + 'and network and process policy is unchanged. Continue?';\nconst chineseReason = '这个 Worktree Session 可能需要访问 Session 目录之外的 Git 元数据和关联 Worktree 文件。'\n + '完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示,网络和进程策略不变。'\n + '是否继续?';\nexport function worktreeFullAccessConfirmationMessage(input, locale = globalThis.navigator?.language) {\n const reason = locale?.toLocaleLowerCase().startsWith('zh') === true\n ? chineseReason\n : englishReason;\n return `${reason}\\n\\nWorktree: ${input.cwd}`;\n}\n/**\n * Coordinate async permission requests with the one in-page confirmation\n * rendered by the Worktree surface. Requests are serialized so concurrent\n * Worktree Session creations cannot replace one another's dialog.\n */\nexport function createWorktreeFullAccessConfirmationController() {\n let active;\n const queue = [];\n const listeners = new Set();\n let disposed = false;\n const notify = () => {\n for (const listener of listeners)\n listener();\n };\n const showNext = () => {\n if (active !== undefined)\n return;\n active = queue.shift();\n notify();\n };\n const controller = {\n getSnapshot: () => active?.input,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n request: (input) => {\n if (disposed)\n return Promise.resolve(false);\n return new Promise((resolve) => {\n queue.push({ input, resolve });\n showNext();\n });\n },\n resolve: (confirmed) => {\n if (active === undefined)\n return;\n const current = active;\n active = undefined;\n current.resolve(confirmed);\n showNext();\n },\n dispose: () => {\n if (disposed)\n return;\n disposed = true;\n active?.resolve(false);\n active = undefined;\n for (const pending of queue.splice(0))\n pending.resolve(false);\n notify();\n },\n };\n return controller;\n}\n//# sourceMappingURL=worktree-permission.js.map","const PLUGIN_ID = '@cerbur/clutch-dsh-worktree';\nconst STYLE_ID = `${PLUGIN_ID}/permission-icon`;\nconst WORKTREE_PERMISSION_LABEL = 'Worktree Full Access';\n/** DOM marker owned only by this plugin's permission icon decorator. */\nexport const WORKTREE_PERMISSION_ICON_ATTRIBUTE = 'data-clutch-dsh-worktree-permission-icon';\n// The native DSH menu has no icon extension point for host-configured values.\n// A branch glyph keeps the custom option visually distinct while preserving\n// the same 16px geometry as the built-in permission glyphs.\nconst ICON_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M13.0762 1.37207C14.0846 1.37228 14.9021 2.19077 14.9023 3.19922C14.9022 4.20772 14.0847 5.02518 13.0762 5.02539C12.2967 5.02539 11.6325 4.53691 11.3701 3.84961H4.35547C4.79397 4.26458 5.15861 4.7644 5.41699 5.33496L7.10645 9.06738C7.88526 10.7875 9.55104 11.9228 11.4189 12.0371C11.7085 11.4109 12.3411 10.9756 13.0762 10.9756C14.0843 10.9759 14.9023 11.7936 14.9023 12.8018C14.9023 13.81 14.0843 14.6277 13.0762 14.6279C12.2534 14.6279 11.5574 14.0832 11.3291 13.335C8.9868 13.1879 6.89981 11.7612 5.92285 9.60352L4.23242 5.87109C3.67503 4.64033 2.44878 3.84961 1.09766 3.84961V2.54883C1.10665 2.54883 1.11601 2.54975 1.125 2.5498L11.3701 2.54883C11.6326 1.86151 12.2969 1.37207 13.0762 1.37207ZM13.0762 12.2764C12.7858 12.2764 12.5508 12.5114 12.5508 12.8018C12.5508 13.0921 12.7858 13.3281 13.0762 13.3281C13.3664 13.3279 13.6025 13.092 13.6025 12.8018C13.6025 12.5115 13.3664 12.2766 13.0762 12.2764ZM13.0762 2.67285C12.7855 2.67285 12.55 2.90861 12.5498 3.19922C12.5499 3.48987 12.7855 3.72559 13.0762 3.72559C13.3667 3.72538 13.6024 3.48975 13.6025 3.19922C13.6023 2.90874 13.3666 2.67306 13.0762 2.67285Z\" fill=\"black\"/></svg>';\nfunction iconStyles() {\n const mask = `url(\"data:image/svg+xml,${encodeURIComponent(ICON_SVG)}\")`;\n return `\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]::before {\n content: \"\";\n display: inline-block;\n flex: 0 0 auto;\n width: 16px;\n height: 16px;\n background-color: var(--dsw-alias-label-tertiary, currentColor);\n -webkit-mask-image: ${mask};\n mask-image: ${mask};\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n}\n[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"]::before {\n width: 14px;\n height: 14px;\n}\n@container (max-width: 460px) {\n [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}=\"trigger\"] > span:first-of-type {\n display: none;\n }\n}\n`;\n}\nfunction normalizedText(element) {\n return (element.textContent ?? '').replace(/\\s+/g, ' ').trim();\n}\nfunction isWorktreeMenuItem(element) {\n return element.matches('button[role=\"menuitem\"]') &&\n normalizedText(element) === WORKTREE_PERMISSION_LABEL &&\n element.closest('[role=\"menu\"]') !== null;\n}\nfunction isWorktreeTrigger(element) {\n if (!element.matches('button[aria-label]'))\n return false;\n const label = element.getAttribute('aria-label') ?? '';\n return /^(?:access mode,\\s*current:\\s*|访问模式,当前:\\s*)worktree full access$/iu.test(label.trim());\n}\n/** Mark the native custom permission row and trigger for CSS decoration. */\nexport function decorateWorktreePermissionIcons(document) {\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n const kind = marked.getAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n if ((kind === 'menu' && !isWorktreeMenuItem(marked)) ||\n (kind === 'trigger' && !isWorktreeTrigger(marked))) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n }\n for (const item of document.querySelectorAll('button[role=\"menuitem\"]')) {\n if (isWorktreeMenuItem(item)) {\n item.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'menu');\n }\n }\n for (const button of document.querySelectorAll('button[aria-label]')) {\n if (isWorktreeTrigger(button)) {\n button.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'trigger');\n }\n }\n}\n/** Install the Worktree permission icon and return a plugin-local disposer. */\nexport function installWorktreePermissionIcon(document) {\n for (const existing of document.querySelectorAll('style[data-plugin-css]')) {\n if (existing.getAttribute('data-plugin-css') === STYLE_ID)\n existing.remove();\n }\n const style = document.createElement('style');\n style.setAttribute('data-plugin', PLUGIN_ID);\n style.setAttribute('data-plugin-css', STYLE_ID);\n style.textContent = iconStyles();\n document.head.appendChild(style);\n let active = true;\n let queued = false;\n const scan = () => {\n if (!active || queued)\n return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n if (active)\n decorateWorktreePermissionIcons(document);\n });\n };\n decorateWorktreePermissionIcons(document);\n const observer = typeof MutationObserver === 'function'\n ? new MutationObserver(scan)\n : undefined;\n observer?.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['aria-label'],\n characterData: true,\n childList: true,\n subtree: true,\n });\n return () => {\n if (!active)\n return;\n active = false;\n observer?.disconnect();\n style.remove();\n for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {\n marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);\n }\n };\n}\n//# sourceMappingURL=worktree-permission-icon.js.map","function reconciliationSnapshot(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n snapshot.phase === 'pending' ||\n (snapshot.phase !== undefined && snapshot.phase !== 'ready') ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n for (const sessionId of snapshot.ids) {\n if (typeof sessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[sessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentId = summary?.parentId;\n const origin = summary?.origin;\n const blank = summary?.blank;\n if ((parentId !== undefined && typeof parentId !== 'string') ||\n (origin !== undefined && typeof origin !== 'string') ||\n (blank !== undefined && typeof blank !== 'boolean')) {\n return undefined;\n }\n }\n const candidates = snapshot.ids.flatMap((childSessionId) => {\n const summary = snapshot.byId[childSessionId];\n if (summary?.parentId === undefined ||\n summary.parentId === childSessionId ||\n summary.blank === true ||\n summary.origin === 'subagent' ||\n snapshot.byId[summary.parentId] === undefined) {\n return [];\n }\n return [{ childSessionId, sourceSessionId: summary.parentId }];\n });\n const candidateFacts = candidates\n .map(({ childSessionId, sourceSessionId }) => [childSessionId, sourceSessionId])\n .sort(([leftChild, leftSource], [rightChild, rightSource]) => leftChild < rightChild || (leftChild === rightChild && leftSource < rightSource)\n ? -1\n : leftChild === rightChild && leftSource === rightSource\n ? 0\n : 1);\n return {\n // Ordinary Session notifications must not invalidate persisted Fork candidates.\n signature: JSON.stringify([snapshot.phase ?? 'ready', candidateFacts]),\n candidates,\n };\n}\nfunction recoveryKey(sourceSessionId, childSessionId) {\n return `${sourceSessionId}\\u0000${childSessionId}`;\n}\n/**\n * Coordinate native Session fork with the plugin-owned Worktree relation.\n * Native Session creation always wins: plugin lookup/bind failures are kept as\n * recovery state and never turn an already-created child into a failed fork.\n */\nexport function createWorktreeSessionForkCoordinator(options) {\n let disposed = false;\n let revision = 0;\n let pending = new Map();\n let recoverySnapshot = {\n revision: 0,\n pending: [],\n affectedWorkspaceIds: [],\n };\n const subscribers = new Set();\n const boundChildren = new Set();\n const bindingInFlight = new Map();\n let reconciliationInFlight;\n let reconciliationAgain = false;\n let reconciliationForce = false;\n let lastSessionLineageSignature;\n const sourceGeneration = new Map();\n const worktreeGeneration = new Map();\n const keyOf = (workspaceId, worktreeId) => JSON.stringify([workspaceId, worktreeId]);\n const versionOf = (versions, key) => versions.get(key) ?? 0;\n const publish = (affectedWorkspaceIds = []) => {\n revision += 1;\n recoverySnapshot = {\n revision,\n pending: [...pending.values()],\n affectedWorkspaceIds: [...new Set(affectedWorkspaceIds)],\n };\n for (const subscriber of subscribers)\n subscriber();\n };\n const setRecovery = (sourceSessionId, childSessionId, error, target) => {\n if (disposed)\n return;\n const key = recoveryKey(sourceSessionId, childSessionId);\n pending = new Map(pending).set(key, {\n key,\n sourceSessionId,\n childSessionId,\n ...(target === undefined ? {} : { binding: target }),\n error,\n });\n publish(target === undefined ? [] : [target.workspaceId]);\n };\n const clearRecovery = (sourceSessionId, childSessionId) => {\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = pending.get(key);\n if (current === undefined)\n return { cleared: false };\n const next = new Map(pending);\n next.delete(key);\n pending = next;\n return { cleared: true, workspaceId: current.binding?.workspaceId };\n };\n const lookupBinding = async (sourceSessionId) => {\n try {\n const index = await options.findBindings([sourceSessionId]);\n return index.bySessionId.get(sourceSessionId) ?? { status: 'missing' };\n }\n catch (error) {\n return { status: 'error', error };\n }\n };\n const attemptBinding = async (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId))\n return { bound: false };\n const initialSourceGen = versionOf(sourceGeneration, sourceSessionId);\n const lookup = providedLookup ?? (await lookupBinding(sourceSessionId));\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen) {\n return { bound: false };\n }\n if (lookup.status === 'error') {\n setRecovery(sourceSessionId, childSessionId, lookup.error);\n return { bound: false };\n }\n if (lookup.status === 'missing' || lookup.binding.status !== 'active') {\n const cleared = clearRecovery(sourceSessionId, childSessionId);\n if (cleared.cleared) {\n publish(cleared.workspaceId === undefined ? [] : [cleared.workspaceId]);\n }\n return { bound: false };\n }\n const target = lookup.binding;\n const wtKey = keyOf(target.workspaceId, target.worktreeId);\n const initialWtGen = versionOf(worktreeGeneration, wtKey);\n try {\n await options.bindSession({\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n });\n if (disposed)\n return { bound: false };\n if (versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n const childBinding = {\n workspaceId: target.workspaceId,\n worktreeId: target.worktreeId,\n sessionId: childSessionId,\n status: 'active',\n };\n boundChildren.add(childSessionId);\n const { workspaceId: previousWorkspaceId } = clearRecovery(sourceSessionId, childSessionId);\n options.onBound?.(childBinding);\n publish([target.workspaceId, ...(previousWorkspaceId === undefined ? [] : [previousWorkspaceId])]);\n return { bound: true };\n }\n catch (error) {\n if (disposed ||\n versionOf(sourceGeneration, sourceSessionId) !== initialSourceGen ||\n versionOf(worktreeGeneration, wtKey) !== initialWtGen) {\n return { bound: false };\n }\n setRecovery(sourceSessionId, childSessionId, error, target);\n return { bound: false };\n }\n };\n const bindChild = (sourceSessionId, childSessionId, providedLookup) => {\n if (disposed || boundChildren.has(childSessionId)) {\n return Promise.resolve({ bound: false });\n }\n const key = recoveryKey(sourceSessionId, childSessionId);\n const current = bindingInFlight.get(key);\n if (current !== undefined)\n return current;\n const promise = attemptBinding(sourceSessionId, childSessionId, providedLookup).finally(() => {\n if (bindingInFlight.get(key) === promise)\n bindingInFlight.delete(key);\n });\n bindingInFlight.set(key, promise);\n return promise;\n };\n const reconcileNow = async (force) => {\n if (disposed || options.sessions === undefined)\n return;\n const snapshot = options.sessions.getSnapshot();\n const normalized = reconciliationSnapshot(snapshot);\n if (normalized === undefined)\n return;\n if (!force && normalized.signature === lastSessionLineageSignature)\n return;\n lastSessionLineageSignature = normalized.signature;\n const candidates = normalized.candidates.filter(({ childSessionId }) => !boundChildren.has(childSessionId));\n if (candidates.length === 0)\n return;\n const sourceSessionIds = [...new Set(candidates.map(({ sourceSessionId }) => sourceSessionId))];\n const lookupGenerations = new Map(sourceSessionIds.map((id) => [id, versionOf(sourceGeneration, id)]));\n let index;\n try {\n index = await options.findBindings(sourceSessionIds);\n }\n catch (error) {\n const bySessionId = new Map();\n for (const sourceSessionId of sourceSessionIds) {\n bySessionId.set(sourceSessionId, { status: 'error', error });\n }\n index = { bySessionId };\n }\n if (disposed)\n return;\n await Promise.all(candidates.filter(({ sourceSessionId }) => lookupGenerations.get(sourceSessionId) === versionOf(sourceGeneration, sourceSessionId)).map(({ childSessionId, sourceSessionId }) => bindChild(sourceSessionId, childSessionId, index.bySessionId.get(sourceSessionId) ?? { status: 'missing' }).then(() => undefined)));\n };\n const reconcile = (input = {}) => {\n const force = input.force === true;\n if (reconciliationInFlight !== undefined) {\n reconciliationAgain = true;\n reconciliationForce ||= force;\n return reconciliationInFlight;\n }\n let nextForce = force;\n const run = async () => {\n do {\n const forceThisPass = nextForce || reconciliationForce;\n nextForce = false;\n reconciliationForce = false;\n reconciliationAgain = false;\n await reconcileNow(forceThisPass);\n } while (!disposed && reconciliationAgain);\n };\n const promise = run().finally(() => {\n if (reconciliationInFlight === promise)\n reconciliationInFlight = undefined;\n });\n reconciliationInFlight = promise;\n return promise;\n };\n return {\n recovery: {\n getSnapshot() {\n return recoverySnapshot;\n },\n subscribe(listener) {\n subscribers.add(listener);\n return () => subscribers.delete(listener);\n },\n },\n async fork(input) {\n const generation = versionOf(sourceGeneration, input.sessionId);\n const childSessionId = await options.fork(input);\n if (!disposed && generation === versionOf(sourceGeneration, input.sessionId)) {\n await bindChild(input.sessionId, childSessionId);\n }\n return childSessionId;\n },\n reconcile,\n async retry(key) {\n const item = pending.get(key);\n if (item === undefined || disposed)\n return false;\n const providedLookup = item.binding === undefined\n ? undefined\n : { status: 'found', binding: item.binding };\n return (await bindChild(item.sourceSessionId, item.childSessionId, providedLookup)).bound;\n },\n forgetWorktree(input) {\n if (disposed)\n return;\n const wtKey = keyOf(input.workspaceId, input.worktreeId);\n worktreeGeneration.set(wtKey, versionOf(worktreeGeneration, wtKey) + 1);\n for (const sid of input.sessionIds) {\n sourceGeneration.set(sid, versionOf(sourceGeneration, sid) + 1);\n }\n let changed = false;\n const next = new Map(pending);\n for (const [key, item] of pending.entries()) {\n const matchWorktree = item.binding?.workspaceId === input.workspaceId &&\n item.binding?.worktreeId === input.worktreeId;\n const matchSession = input.sessionIds.includes(item.sourceSessionId);\n if (matchWorktree || matchSession) {\n next.delete(key);\n changed = true;\n }\n }\n if (changed) {\n pending = next;\n publish([input.workspaceId]);\n }\n },\n dispose() {\n disposed = true;\n bindingInFlight.clear();\n subscribers.clear();\n },\n };\n}\n//# sourceMappingURL=worktree-session-fork.js.map","import { createElement } from 'react';\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-store';\nimport { WORKTREE_NS, en, zh } from './locales.js';\nimport { createWorktreeConnectionAdapter } from './worktree-connection.js';\nimport { createWorktreeToolChangeMonitor } from './worktree-tool-changes.js';\nimport { RestartNotice } from './restart-notice.js';\nimport { RestartToast } from './surface/components/RestartToast.js';\nimport { WorktreeHeaderContext } from './context/WorktreeContext.js';\nimport { WorktreeModeAction } from './view/WorktreeModeAction.js';\nimport { switchViewMode } from './view/view-mode-dispatch.js';\nimport { IconDashboard } from './dashboard/dashboard-icon.js';\nimport { DashboardHeaderAction } from './dashboard/DashboardHeaderAction.js';\nimport { WorktreeOverlay } from './overlay/WorktreeOverlay.js';\nimport { WorktreeSettings } from './settings/WorktreeSettings.js';\nimport { WorktreeSettingsNavIcon } from './settings/WorktreeSettingsNavIcon.js';\nimport { installWorktreeCommandActivity } from './command-activity.js';\nimport { worktreeDiagnostics } from './settings/diagnostics.js';\nimport { openWorktreeErrorSettings } from './settings/settings-navigation.js';\nimport { createWorktreeContextProjection } from './context/worktree-context-store.js';\nimport { createWorktreeExpandStateStore } from './view/worktree-expand-state.js';\nimport { createWorktreeSessionOrderStore } from './session/worktree-session-order.js';\nimport { createWorktreeViewStore } from './view/view-mode-store.js';\nimport { createWorktreeViewReader } from './view/worktree-view-read.js';\nimport { createVirtualWorkspaceMembership, } from './session/virtual-workspace-membership.js';\nimport { createWorktreeSessionConnector, } from './session/worktree-session.js';\nimport { renameWorktreeSession } from './session/session-rename.js';\nimport { openWorktreeSession } from './session/session-navigation.js';\nimport { createWorktreeFullAccessConfirmationController, } from './permission/worktree-permission.js';\nimport { installWorktreePermissionIcon } from './permission/worktree-permission-icon.js';\nimport { createWorktreeSessionForkCoordinator, } from './session/worktree-session-fork.js';\nexport { WORKTREE_CONNECTION_CHANNEL, WORKTREE_CONNECTION_ENDPOINTS, WorktreeConnectionError, createWorktreeConnectionAdapter, } from './worktree-connection.js';\nfunction sidebarRightController(ctx) {\n // Optional sibling service: property access requires a declared Cordis injection.\n // Resolve at action time so late registration/disposal is reflected without\n // making the whole Worktree navigation depend on the rightbar plugin.\n return ctx.get('sidebarRight');\n}\nfunction forkRelatedSessionIds(snapshot) {\n if (typeof snapshot !== 'object' ||\n snapshot === null ||\n !Array.isArray(snapshot.ids) ||\n typeof snapshot.byId !== 'object' ||\n snapshot.byId === null ||\n Array.isArray(snapshot.byId)) {\n return undefined;\n }\n const related = new Set();\n for (const childSessionId of snapshot.ids) {\n if (typeof childSessionId !== 'string')\n return undefined;\n const summary = snapshot.byId[childSessionId];\n if (summary !== undefined &&\n (typeof summary !== 'object' || summary === null || Array.isArray(summary))) {\n return undefined;\n }\n const parentSessionId = summary?.parentId;\n if (parentSessionId === undefined ||\n parentSessionId === childSessionId ||\n summary?.blank === true ||\n summary?.origin === 'subagent' ||\n snapshot.byId[parentSessionId] === undefined) {\n continue;\n }\n related.add(childSessionId);\n related.add(parentSessionId);\n }\n return related;\n}\nfunction workspaceMembershipSignature(snapshot, sessions) {\n const relatedSessionIds = forkRelatedSessionIds(sessions);\n if (relatedSessionIds === undefined)\n return undefined;\n if (typeof snapshot !== 'object' || snapshot === null || !Array.isArray(snapshot.items)) {\n return undefined;\n }\n const facts = [];\n for (const workspace of snapshot.items) {\n if (typeof workspace !== 'object' ||\n workspace === null ||\n typeof workspace.workspaceId !== 'string' ||\n !Array.isArray(workspace.sessionIds) ||\n workspace.sessionIds.some((sessionId) => typeof sessionId !== 'string')) {\n return undefined;\n }\n facts.push([\n workspace.workspaceId,\n workspace.sessionIds.filter((sessionId) => relatedSessionIds.has(sessionId)).sort(),\n ]);\n }\n // This signature tracks membership, not presentation order.\n facts.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n return JSON.stringify(facts);\n}\n/** Required DSH Client services; Connection is the sole Worktree wire dependency. */\nexport const inject = ['connection', 'locale', 'slots', 'sessions', 'workspaces', 'uiWorkspace', 'uiConversation'];\n/**\n * DSH Client entry. The adapter is composed once per plugin fiber and is disposed\n * with that fiber, so slot consumers share one manager and one request lifetime.\n */\nexport function apply(ctx) {\n installWorktreeCommandActivity(ctx);\n const locale = ctx.locale;\n if (typeof document !== 'undefined') {\n ctx.effect(() => installWorktreePermissionIcon(document), 'clutch-dsh-worktree: permission icon cleanup');\n }\n ctx.effect(() => locale.register(WORKTREE_NS, { zh, en }), 'clutch-dsh-worktree: locale dictionaries');\n const manager = createWorktreeConnectionAdapter(ctx.connection.rpc);\n const viewReader = createWorktreeViewReader(manager);\n const fullAccessConfirmation = createWorktreeFullAccessConfirmationController();\n const restartNotice = new RestartNotice((signal) => manager.probeHost(signal));\n const permissionNotice = createSnapshotStore(undefined);\n const permissionManager = typeof document !== 'undefined' ? manager : undefined;\n const dashboardStore = createSnapshotStore(undefined);\n const reportPermissionNotice = (input, result) => {\n restartNotice.reportPermissionResult(result);\n const visible = result.status === 'fallback-workspace-write' ||\n result.status === 'user-restricted' ||\n result.status === 'unverified';\n permissionNotice.set(visible ? { ...input, result } : undefined);\n };\n const sessions = ctx.sessions;\n const slots = ctx.slots;\n ctx.effect(() => slots.inject('shell.overlay', () => slots.register({\n name: 'shell.overlay',\n id: 'clutch-dsh-worktree-settings-icon',\n locale: WORKTREE_NS,\n }, WorktreeSettingsNavIcon)), 'clutch-dsh-worktree: settings icon cleanup');\n ctx.effect(() => {\n const notice = restartNotice;\n const check = () => void notice.check();\n const reset = ctx.on('connection/reset', check);\n const overlay = slots.inject('shell.overlay', () => slots.register({\n name: 'shell.overlay',\n id: 'clutch-dsh-worktree-restart-toast',\n locale: WORKTREE_NS,\n inject: () => ({ notice }),\n }, RestartToast));\n check();\n return () => {\n notice.dispose();\n reset();\n overlay();\n };\n }, 'clutch-dsh-worktree: restart reminder');\n const virtualWorkspaceMembership = createVirtualWorkspaceMembership(ctx.workspaces.list);\n const contextProjection = createWorktreeContextProjection({\n sessions: ctx.sessions.list,\n workspaces: ctx.workspaces.list,\n viewReader,\n storeFactory: createSnapshotStore,\n });\n const toolChanges = createWorktreeToolChangeMonitor({\n read: (revision, signal) => manager.watchToolChanges(revision, signal),\n changed: ({ workspaceId }) => {\n viewReader.invalidate(workspaceId);\n if (contextProjection.store.getSnapshot().workspaceId === workspaceId) {\n void contextProjection.refresh();\n }\n },\n });\n ctx.effect(() => () => toolChanges.dispose(), 'clutch-dsh-worktree: tool notification cleanup');\n ctx.on('connection/reset', () => toolChanges.reset());\n if (typeof document !== 'undefined')\n toolChanges.start();\n ctx.effect(() => () => manager.dispose(), 'clutch-dsh-worktree: connection cleanup');\n ctx.effect(() => () => viewReader.dispose(), 'clutch-dsh-worktree: view reader cleanup');\n ctx.effect(() => () => fullAccessConfirmation.dispose(), 'clutch-dsh-worktree: Full Access confirmation cleanup');\n ctx.effect(() => () => virtualWorkspaceMembership.dispose(), 'clutch-dsh-worktree: Workspace membership cleanup');\n ctx.effect(() => () => contextProjection.dispose(), 'clutch-dsh-worktree: Session context cleanup');\n void contextProjection.refresh();\n const viewStore = createWorktreeViewStore();\n slots.inject('settings.section', () => slots.register({\n name: 'settings.section',\n id: 'clutch-dsh-worktree',\n order: 36,\n locale: WORKTREE_NS,\n label: () => ctx.locale.bind(WORKTREE_NS)('settings.title'),\n }, (props) => createElement(WorktreeSettings, { ...props, manager })));\n ctx.effect(() => () => worktreeDiagnostics.dispose(), 'clutch-dsh-worktree: diagnostics cleanup');\n const expandState = createWorktreeExpandStateStore(createSnapshotStore);\n const sessionOrder = createWorktreeSessionOrderStore(createSnapshotStore);\n ctx.effect(() => () => sessionOrder.dispose(), 'clutch-dsh-worktree: Session order cleanup');\n const ensureSessionWorkspace = (workspaceId, sessionId) => {\n virtualWorkspaceMembership.ensure({ workspaceId, sessionId });\n };\n const syncSessionWorkspaces = (bindings) => {\n virtualWorkspaceMembership.sync(bindings);\n };\n const forkableSessions = ctx.sessions;\n const nativeFork = forkableSessions.fork;\n const workspaceBindingReads = new Map();\n const readWorkspaceBindings = (workspaceId) => {\n const current = workspaceBindingReads.get(workspaceId);\n if (current !== undefined)\n return current;\n const promise = manager.listBindings({ workspaceId }).finally(() => {\n if (workspaceBindingReads.get(workspaceId) === promise) {\n workspaceBindingReads.delete(workspaceId);\n }\n });\n workspaceBindingReads.set(workspaceId, promise);\n return promise;\n };\n const findWorktreeSessionBindings = async (sessionIds) => {\n const requested = [...new Set(sessionIds)];\n const requestedSet = new Set(requested);\n const workspaces = ctx.workspaces.list.getSnapshot().items;\n const workspaceIds = [\n ...new Set(workspaces.map((workspace) => workspace.workspaceId)),\n ];\n const owners = new Map();\n for (const workspace of workspaces) {\n for (const sessionId of workspace.sessionIds) {\n if (!requestedSet.has(sessionId))\n continue;\n const workspaceOwners = owners.get(sessionId) ?? [];\n if (!workspaceOwners.includes(workspace.workspaceId)) {\n workspaceOwners.push(workspace.workspaceId);\n owners.set(sessionId, workspaceOwners);\n }\n }\n }\n const unknownScope = requested.some((sessionId) => (owners.get(sessionId)?.length ?? 0) === 0);\n const selectedWorkspaceIds = unknownScope\n ? workspaceIds\n : workspaceIds.filter((workspaceId) => requested.some((sessionId) => owners.get(sessionId)?.includes(workspaceId) === true));\n const results = await Promise.allSettled(selectedWorkspaceIds.map((workspaceId) => readWorkspaceBindings(workspaceId)));\n const resultByWorkspaceId = new Map(selectedWorkspaceIds.map((workspaceId, index) => [workspaceId, results[index]]));\n const bySessionId = new Map();\n for (const sessionId of requested) {\n const relevantWorkspaceIds = owners.get(sessionId) ?? selectedWorkspaceIds;\n let found;\n let failed;\n for (const workspaceId of relevantWorkspaceIds) {\n const result = resultByWorkspaceId.get(workspaceId);\n if (result === undefined)\n continue;\n if (result.status === 'rejected') {\n failed ??= result.reason;\n continue;\n }\n const binding = result.value.find((candidate) => candidate.sessionId === sessionId && candidate.status === 'active');\n if (binding !== undefined) {\n found = binding;\n break;\n }\n }\n bySessionId.set(sessionId, found === undefined\n ? failed === undefined ? { status: 'missing' } : { status: 'error', error: failed }\n : { status: 'found', binding: found });\n }\n return { bySessionId };\n };\n const forkCoordinator = typeof nativeFork !== 'function'\n ? undefined\n : createWorktreeSessionForkCoordinator({\n fork: (input) => nativeFork.call(ctx.sessions, input),\n findBindings: findWorktreeSessionBindings,\n bindSession: (input) => manager.bindSession(input),\n sessions: ctx.sessions.list,\n });\n if (forkCoordinator !== undefined) {\n forkableSessions.fork = (input) => forkCoordinator.fork(input);\n const reconcileForkChildren = () => {\n void forkCoordinator.reconcile();\n };\n let lastWorkspaceMembershipSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const reconcileForkChildrenForWorkspace = () => {\n const nextSignature = workspaceMembershipSignature(ctx.workspaces.list.getSnapshot(), ctx.sessions.list.getSnapshot());\n const changed = nextSignature !== undefined && nextSignature !== lastWorkspaceMembershipSignature;\n if (nextSignature !== undefined)\n lastWorkspaceMembershipSignature = nextSignature;\n void forkCoordinator.reconcile({ force: changed });\n };\n const unsubscribeSessionList = ctx.sessions.list.subscribe(reconcileForkChildren);\n const unsubscribeWorkspaceList = ctx.workspaces.list.subscribe(reconcileForkChildrenForWorkspace);\n ctx.effect(() => () => {\n unsubscribeSessionList();\n unsubscribeWorkspaceList();\n forkCoordinator.dispose();\n forkableSessions.fork = nativeFork;\n }, 'clutch-dsh-worktree: Session fork cleanup');\n void forkCoordinator.reconcile();\n }\n const worktreeSessionConnector = createWorktreeSessionConnector({\n manager,\n sessions: ctx.sessions.list,\n archivedSessionIds: () => ctx.workspaces.list.getSnapshot().archivedSessionIds,\n createSession: async (input) => String(await sessions.create(input)),\n ensureSessionWorkspace,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n onPermissionResult: reportPermissionNotice,\n openSession: (sessionId) => openWorktreeSession(ctx.uiWorkspace, ctx.sessions, sessionId),\n });\n ctx.effect(() => () => worktreeSessionConnector.dispose(), 'clutch-dsh-worktree: Worktree Session connector cleanup');\n const openDashboardForSession = (sessionId) => {\n switchViewMode('worktree');\n const contextSnapshot = contextProjection.store.getSnapshot();\n let targetWorkspaceId;\n let targetWorktreeId;\n if (contextSnapshot.sessionId === sessionId) {\n if (contextSnapshot.value.kind === 'worktree') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = contextSnapshot.value.worktreeId;\n }\n else if (contextSnapshot.value.kind === 'main') {\n targetWorkspaceId = contextSnapshot.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId === undefined) {\n const workspaces = ctx.workspaces.list.getSnapshot()?.items ?? [];\n const workspace = workspaces.find((candidate) => candidate.sessionIds?.includes(sessionId));\n if (workspace !== undefined) {\n targetWorkspaceId = workspace.workspaceId;\n targetWorktreeId = 'main';\n }\n }\n if (targetWorkspaceId !== undefined && targetWorktreeId !== undefined) {\n dashboardStore.set({\n workspaceId: targetWorkspaceId,\n worktreeId: targetWorktreeId,\n sessionId,\n });\n }\n };\n slots.inject('conversation.session.header.actions', () => slots.register({\n name: 'conversation.session.header.actions',\n id: 'clutch-dsh-worktree-context-header',\n order: -5,\n locale: WORKTREE_NS,\n inject: () => ({ hooks: { worktreeContext: contextProjection.store } }),\n }, WorktreeHeaderContext));\n slots.inject('conversation.session.header.utilities', () => slots.register({\n name: 'conversation.session.header.utilities',\n id: 'clutch-dsh-worktree-dashboard-header',\n order: -10,\n locale: WORKTREE_NS,\n inject: () => ({\n hooks: { worktreeContext: contextProjection.store },\n openDashboard: openDashboardForSession,\n }),\n }, DashboardHeaderAction));\n slots.inject('sidebar.footer.action', () => slots.register({\n name: 'sidebar.footer.action',\n id: 'clutch-dsh-worktree-mode-action',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({ available: true }),\n }, WorktreeModeAction));\n slots.inject('shell.overlay', () => slots.register({\n name: 'shell.overlay',\n id: 'clutch-dsh-worktree-navigation',\n store: viewStore,\n locale: WORKTREE_NS,\n inject: () => ({\n available: true,\n openErrorSettings: () => openWorktreeErrorSettings(ctx.slots),\n openResource: (address, options) => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar && typeof sidebar.openResource === 'function') {\n sidebar.openResource(address, options?.line !== undefined ? { params: { line: options.line } } : undefined);\n return true;\n }\n return false;\n },\n closeRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === true)\n sidebar.toggleExpanded?.();\n },\n openRightSidebar: () => {\n const sidebar = sidebarRightController(ctx);\n if (sidebar?.isExpanded?.() === false)\n sidebar.toggleExpanded?.();\n },\n isRightSidebarExpanded: () => {\n const sidebar = sidebarRightController(ctx);\n return sidebar?.isExpanded?.() === true;\n },\n expandState,\n sessionOrder,\n dashboardStore,\n hooks: { worktreeContext: contextProjection.store },\n manager,\n viewReader,\n subscribeToolChanges: toolChanges.subscribe,\n permission: permissionManager,\n confirmFullAccess: permissionManager === undefined\n ? undefined\n : fullAccessConfirmation.request,\n fullAccessConfirmation: typeof document === 'undefined'\n ? undefined\n : fullAccessConfirmation,\n onPermissionResult: reportPermissionNotice,\n onPermissionNotice: reportPermissionNotice,\n permissionNotice,\n createWorkspace: async () => {\n const workspacePath = await ctx.uiWorkspace.pickDirectory();\n if (workspacePath !== null)\n await ctx.workspaces.create({ path: workspacePath });\n },\n createSessionForWorktree: (input) => worktreeSessionConnector.create(input),\n invalidateWorktreeContext: (workspaceId) => contextProjection.invalidate(workspaceId),\n createMainSession: (workspaceId) => {\n ctx.uiWorkspace.startSession(workspaceId);\n },\n renameWorkspace: async (workspaceId, title) => {\n await ctx.workspaces.rename(workspaceId, title);\n },\n deleteWorkspace: async (workspaceId) => {\n await ctx.workspaces.delete(workspaceId);\n },\n insertWorkspaceBefore: async (workspaceId, beforeWorkspaceId) => {\n await ctx.workspaces.insertBefore(workspaceId, beforeWorkspaceId);\n },\n insertSessionBefore: async (workspaceId, sessionId, beforeSessionId) => {\n await ctx.workspaces.insertSessionBefore(workspaceId, sessionId, beforeSessionId);\n },\n insertWorktreeBefore: (workspaceId, worktreeId, beforeWorktreeId) => manager.insertWorktreeBefore({\n workspaceId,\n worktreeId,\n beforeWorktreeId,\n }),\n renameSession: (sessionId, title) => renameWorktreeSession(ctx.sessions, sessionId, title),\n forkSession: (sessionId) => {\n if (forkableSessions.fork === undefined)\n return;\n void ctx.sessions.fork({\n sessionId: sessionId,\n increaseTitle: true,\n })\n .then((childId) => {\n openWorktreeSession(ctx.uiWorkspace, ctx.sessions, childId);\n })\n .catch(() => {\n // Fork failure leaves the current Session and Worktree projection unchanged.\n });\n },\n archiveSession: (sessionId) => ctx.workspaces.archiveSession(sessionId),\n ensureSessionWorkspace,\n syncSessionWorkspaces,\n forkRecovery: forkCoordinator?.recovery,\n retryForkSession: forkCoordinator === undefined\n ? undefined\n : async (key) => {\n await forkCoordinator.retry(key);\n },\n openSession: (sessionId) => openWorktreeSession(ctx.uiWorkspace, ctx.sessions, sessionId),\n onWorktreeForgotten: (input) => {\n forkCoordinator?.forgetWorktree(input);\n for (const sessionId of input.sessionIds) {\n virtualWorkspaceMembership.removeSession(sessionId);\n }\n const currentNotice = permissionNotice.getSnapshot();\n if (currentNotice !== undefined &&\n (currentNotice.worktreeId === input.worktreeId ||\n (currentNotice.sessionId !== undefined && input.sessionIds.includes(currentNotice.sessionId)))) {\n permissionNotice.set(undefined);\n }\n },\n }),\n }, WorktreeOverlay));\n if (typeof ctx.inject === 'function') {\n ctx.inject(['sessionLogDownload'], (innerCtx) => {\n const sessionLogDownload = innerCtx.get('sessionLogDownload');\n if (typeof sessionLogDownload?.registerMoreItem !== 'function')\n return;\n innerCtx.effect(() => {\n return sessionLogDownload.registerMoreItem({\n id: 'clutch-dsh-worktree-dashboard',\n label: () => innerCtx.locale.getLocale().active === 'zh'\n ? '前往 Dashboard'\n : 'Go to Dashboard',\n icon: createElement(IconDashboard, { size: 16 }),\n order: -1,\n onSelect: openDashboardForSession,\n });\n }, 'clutch-dsh-worktree: session header more item');\n });\n }\n}\n//# sourceMappingURL=entry.js.map"],"x_google_ignoreList":[0,1,2,3,97],"mappings":"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"}