@cerbur/clutch-dsh-worktree 0.1.9 → 0.1.12

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 (565) hide show
  1. package/README.md +230 -231
  2. package/README.zh.md +184 -225
  3. package/assets/screenshots/screenshots-dashboard.webp +0 -0
  4. package/assets/screenshots/screenshots-en.png +0 -0
  5. package/assets/screenshots/screenshots-import.png +0 -0
  6. package/assets/screenshots/screenshots-zh.png +0 -0
  7. package/lib/client/WorktreeSurface.d.ts +4 -7
  8. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  9. package/lib/client/WorktreeSurface.js +179 -1418
  10. package/lib/client/WorktreeSurface.js.map +1 -1
  11. package/lib/client/{WorktreeContext.d.ts → context/WorktreeContext.d.ts} +1 -1
  12. package/lib/client/context/WorktreeContext.d.ts.map +1 -0
  13. package/lib/client/context/WorktreeContext.js.map +1 -0
  14. package/lib/client/{WorktreeHeroContext.d.ts → context/WorktreeHeroContext.d.ts} +1 -1
  15. package/lib/client/context/WorktreeHeroContext.d.ts.map +1 -0
  16. package/lib/client/context/WorktreeHeroContext.js.map +1 -0
  17. package/lib/client/{worktree-context-store.d.ts → context/worktree-context-store.d.ts} +1 -1
  18. package/lib/client/context/worktree-context-store.d.ts.map +1 -0
  19. package/lib/client/{worktree-context-store.js → context/worktree-context-store.js} +2 -2
  20. package/lib/client/context/worktree-context-store.js.map +1 -0
  21. package/lib/client/{worktree-context.d.ts → context/worktree-context.d.ts} +1 -1
  22. package/lib/client/context/worktree-context.d.ts.map +1 -0
  23. package/lib/client/{worktree-context.js → context/worktree-context.js} +5 -3
  24. package/lib/client/context/worktree-context.js.map +1 -0
  25. package/lib/client/dashboard/DashboardHeaderAction.d.ts +20 -0
  26. package/lib/client/dashboard/DashboardHeaderAction.d.ts.map +1 -0
  27. package/lib/client/dashboard/DashboardHeaderAction.js +19 -0
  28. package/lib/client/dashboard/DashboardHeaderAction.js.map +1 -0
  29. package/lib/client/dashboard/OpenInAppButton.d.ts +9 -0
  30. package/lib/client/dashboard/OpenInAppButton.d.ts.map +1 -0
  31. package/lib/client/dashboard/OpenInAppButton.js +123 -0
  32. package/lib/client/dashboard/OpenInAppButton.js.map +1 -0
  33. package/lib/client/dashboard/WorktreeDashboard.d.ts +21 -0
  34. package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -0
  35. package/lib/client/dashboard/WorktreeDashboard.js +211 -0
  36. package/lib/client/dashboard/WorktreeDashboard.js.map +1 -0
  37. package/lib/client/dashboard/WorktreeInstructions.d.ts +8 -0
  38. package/lib/client/dashboard/WorktreeInstructions.d.ts.map +1 -0
  39. package/lib/client/dashboard/WorktreeInstructions.js +53 -0
  40. package/lib/client/dashboard/WorktreeInstructions.js.map +1 -0
  41. package/lib/client/dashboard/dashboard-icon.d.ts +7 -0
  42. package/lib/client/dashboard/dashboard-icon.d.ts.map +1 -0
  43. package/lib/client/dashboard/dashboard-icon.js +6 -0
  44. package/lib/client/dashboard/dashboard-icon.js.map +1 -0
  45. package/lib/client/dashboard/dashboard-overlay.d.ts +11 -0
  46. package/lib/client/dashboard/dashboard-overlay.d.ts.map +1 -0
  47. package/lib/client/dashboard/dashboard-overlay.js +120 -0
  48. package/lib/client/dashboard/dashboard-overlay.js.map +1 -0
  49. package/lib/client/dashboard/dashboard-selection.d.ts +32 -0
  50. package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -0
  51. package/lib/client/dashboard/dashboard-selection.js +31 -0
  52. package/lib/client/dashboard/dashboard-selection.js.map +1 -0
  53. package/lib/client/dashboard/dashboard-sessions.d.ts +6 -0
  54. package/lib/client/dashboard/dashboard-sessions.d.ts.map +1 -0
  55. package/lib/client/dashboard/dashboard-sessions.js +21 -0
  56. package/lib/client/dashboard/dashboard-sessions.js.map +1 -0
  57. package/lib/client/dashboard/open-in-app-controller.d.ts +30 -0
  58. package/lib/client/dashboard/open-in-app-controller.d.ts.map +1 -0
  59. package/lib/client/dashboard/open-in-app-controller.js +94 -0
  60. package/lib/client/dashboard/open-in-app-controller.js.map +1 -0
  61. package/lib/client/dashboard/vscode-url.d.ts +3 -0
  62. package/lib/client/dashboard/vscode-url.d.ts.map +1 -0
  63. package/lib/client/dashboard/vscode-url.js +9 -0
  64. package/lib/client/dashboard/vscode-url.js.map +1 -0
  65. package/lib/client/dashboard/worktree-acquisition-facts.d.ts +16 -0
  66. package/lib/client/dashboard/worktree-acquisition-facts.d.ts.map +1 -0
  67. package/lib/client/dashboard/worktree-acquisition-facts.js +14 -0
  68. package/lib/client/dashboard/worktree-acquisition-facts.js.map +1 -0
  69. package/lib/client/dsh-slot-contract.d.ts +5 -0
  70. package/lib/client/dsh-slot-contract.d.ts.map +1 -1
  71. package/lib/client/entry.d.ts +1 -1
  72. package/lib/client/entry.d.ts.map +1 -1
  73. package/lib/client/entry.js +90 -13
  74. package/lib/client/entry.js.map +1 -1
  75. package/lib/client/index.d.ts +3 -3
  76. package/lib/client/index.d.ts.map +1 -1
  77. package/lib/client/index.js +2 -2
  78. package/lib/client/index.js.map +1 -1
  79. package/lib/client/locales.d.ts +204 -0
  80. package/lib/client/locales.d.ts.map +1 -1
  81. package/lib/client/locales.js +214 -10
  82. package/lib/client/locales.js.map +1 -1
  83. package/lib/client/{WorktreeOverlay.d.ts → overlay/WorktreeOverlay.d.ts} +2 -2
  84. package/lib/client/overlay/WorktreeOverlay.d.ts.map +1 -0
  85. package/lib/client/{WorktreeOverlay.js → overlay/WorktreeOverlay.js} +2 -2
  86. package/lib/client/overlay/WorktreeOverlay.js.map +1 -0
  87. package/lib/client/overlay/overlay-bounds.d.ts.map +1 -0
  88. package/lib/client/overlay/overlay-bounds.js.map +1 -0
  89. package/lib/client/overlay/sidebar-overlay-geometry.d.ts.map +1 -0
  90. package/lib/client/overlay/sidebar-overlay-geometry.js.map +1 -0
  91. package/lib/client/permission/worktree-permission-icon.d.ts.map +1 -0
  92. package/lib/client/permission/worktree-permission-icon.js.map +1 -0
  93. package/lib/client/permission/worktree-permission.d.ts.map +1 -0
  94. package/lib/client/permission/worktree-permission.js.map +1 -0
  95. package/lib/client/session/session-labels.d.ts +9 -0
  96. package/lib/client/session/session-labels.d.ts.map +1 -0
  97. package/lib/client/session/session-labels.js +44 -0
  98. package/lib/client/session/session-labels.js.map +1 -0
  99. package/lib/client/session/session-view.d.ts.map +1 -0
  100. package/lib/client/session/session-view.js.map +1 -0
  101. package/lib/client/{virtual-workspace-membership.d.ts → session/virtual-workspace-membership.d.ts} +1 -1
  102. package/lib/client/session/virtual-workspace-membership.d.ts.map +1 -0
  103. package/lib/client/{virtual-workspace-membership.js → session/virtual-workspace-membership.js} +1 -1
  104. package/lib/client/session/virtual-workspace-membership.js.map +1 -0
  105. package/lib/client/{worktree-session-fork.d.ts → session/worktree-session-fork.d.ts} +7 -1
  106. package/lib/client/session/worktree-session-fork.d.ts.map +1 -0
  107. package/lib/client/{worktree-session-fork.js → session/worktree-session-fork.js} +50 -4
  108. package/lib/client/session/worktree-session-fork.js.map +1 -0
  109. package/lib/client/session/worktree-session-order.d.ts.map +1 -0
  110. package/lib/client/session/worktree-session-order.js.map +1 -0
  111. package/lib/client/session/worktree-session-position.d.ts.map +1 -0
  112. package/lib/client/session/worktree-session-position.js.map +1 -0
  113. package/lib/client/{worktree-session.d.ts → session/worktree-session.d.ts} +3 -3
  114. package/lib/client/session/worktree-session.d.ts.map +1 -0
  115. package/lib/client/{worktree-session.js → session/worktree-session.js} +3 -3
  116. package/lib/client/session/worktree-session.js.map +1 -0
  117. package/lib/client/surface/actions/lifecycle-commands.d.ts +9 -0
  118. package/lib/client/surface/actions/lifecycle-commands.d.ts.map +1 -0
  119. package/lib/client/surface/actions/lifecycle-commands.js +243 -0
  120. package/lib/client/surface/actions/lifecycle-commands.js.map +1 -0
  121. package/lib/client/surface/actions/useDragActions.d.ts +26 -0
  122. package/lib/client/surface/actions/useDragActions.d.ts.map +1 -0
  123. package/lib/client/surface/actions/useDragActions.js +125 -0
  124. package/lib/client/surface/actions/useDragActions.js.map +1 -0
  125. package/lib/client/surface/actions/useLifecycleActions.d.ts +30 -0
  126. package/lib/client/surface/actions/useLifecycleActions.d.ts.map +1 -0
  127. package/lib/client/surface/actions/useLifecycleActions.js +140 -0
  128. package/lib/client/surface/actions/useLifecycleActions.js.map +1 -0
  129. package/lib/client/surface/actions/useNativeActions.d.ts +48 -0
  130. package/lib/client/surface/actions/useNativeActions.d.ts.map +1 -0
  131. package/lib/client/surface/actions/useNativeActions.js +182 -0
  132. package/lib/client/surface/actions/useNativeActions.js.map +1 -0
  133. package/lib/client/surface/actions/useSessionActions.d.ts +24 -0
  134. package/lib/client/surface/actions/useSessionActions.d.ts.map +1 -0
  135. package/lib/client/surface/actions/useSessionActions.js +116 -0
  136. package/lib/client/surface/actions/useSessionActions.js.map +1 -0
  137. package/lib/client/surface/actions/useSurfaceMutation.d.ts +15 -0
  138. package/lib/client/surface/actions/useSurfaceMutation.d.ts.map +1 -0
  139. package/lib/client/surface/actions/useSurfaceMutation.js +24 -0
  140. package/lib/client/surface/actions/useSurfaceMutation.js.map +1 -0
  141. package/lib/client/surface/actions/useWorktreeRegistration.d.ts +31 -0
  142. package/lib/client/surface/actions/useWorktreeRegistration.d.ts.map +1 -0
  143. package/lib/client/surface/actions/useWorktreeRegistration.js +203 -0
  144. package/lib/client/surface/actions/useWorktreeRegistration.js.map +1 -0
  145. package/lib/client/surface/actions/worktree-cleanup-flow.d.ts +10 -0
  146. package/lib/client/surface/actions/worktree-cleanup-flow.d.ts.map +1 -0
  147. package/lib/client/surface/actions/worktree-cleanup-flow.js +19 -0
  148. package/lib/client/surface/actions/worktree-cleanup-flow.js.map +1 -0
  149. package/lib/client/surface/components/AccessConfirmation.d.ts +9 -0
  150. package/lib/client/surface/components/AccessConfirmation.d.ts.map +1 -0
  151. package/lib/client/surface/components/AccessConfirmation.js +18 -0
  152. package/lib/client/surface/components/AccessConfirmation.js.map +1 -0
  153. package/lib/client/surface/components/ActiveWorktree.d.ts +28 -0
  154. package/lib/client/surface/components/ActiveWorktree.d.ts.map +1 -0
  155. package/lib/client/surface/components/ActiveWorktree.js +155 -0
  156. package/lib/client/surface/components/ActiveWorktree.js.map +1 -0
  157. package/lib/client/surface/components/ArchivedWorktree.d.ts +24 -0
  158. package/lib/client/surface/components/ArchivedWorktree.d.ts.map +1 -0
  159. package/lib/client/surface/components/ArchivedWorktree.js +146 -0
  160. package/lib/client/surface/components/ArchivedWorktree.js.map +1 -0
  161. package/lib/client/surface/components/ArchivedWorktrees.d.ts +25 -0
  162. package/lib/client/surface/components/ArchivedWorktrees.d.ts.map +1 -0
  163. package/lib/client/surface/components/ArchivedWorktrees.js +20 -0
  164. package/lib/client/surface/components/ArchivedWorktrees.js.map +1 -0
  165. package/lib/client/surface/components/LifecycleDialogs.d.ts +20 -0
  166. package/lib/client/surface/components/LifecycleDialogs.d.ts.map +1 -0
  167. package/lib/client/surface/components/LifecycleDialogs.js +31 -0
  168. package/lib/client/surface/components/LifecycleDialogs.js.map +1 -0
  169. package/lib/client/surface/components/NativeDialogs.d.ts +9 -0
  170. package/lib/client/surface/components/NativeDialogs.d.ts.map +1 -0
  171. package/lib/client/surface/components/NativeDialogs.js +14 -0
  172. package/lib/client/surface/components/NativeDialogs.js.map +1 -0
  173. package/lib/client/surface/components/NotificationToasts.d.ts +7 -0
  174. package/lib/client/surface/components/NotificationToasts.d.ts.map +1 -0
  175. package/lib/client/surface/components/NotificationToasts.js +24 -0
  176. package/lib/client/surface/components/NotificationToasts.js.map +1 -0
  177. package/lib/client/surface/components/RegistrationDialog.d.ts +15 -0
  178. package/lib/client/surface/components/RegistrationDialog.d.ts.map +1 -0
  179. package/lib/client/surface/components/RegistrationDialog.js +22 -0
  180. package/lib/client/surface/components/RegistrationDialog.js.map +1 -0
  181. package/lib/client/surface/components/SurfaceContent.d.ts +31 -0
  182. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -0
  183. package/lib/client/surface/components/SurfaceContent.js +65 -0
  184. package/lib/client/surface/components/SurfaceContent.js.map +1 -0
  185. package/lib/client/surface/components/SurfaceHeader.d.ts +15 -0
  186. package/lib/client/surface/components/SurfaceHeader.d.ts.map +1 -0
  187. package/lib/client/surface/components/SurfaceHeader.js +42 -0
  188. package/lib/client/surface/components/SurfaceHeader.js.map +1 -0
  189. package/lib/client/surface/components/WorkspaceTree.d.ts +32 -0
  190. package/lib/client/surface/components/WorkspaceTree.d.ts.map +1 -0
  191. package/lib/client/surface/components/WorkspaceTree.js +149 -0
  192. package/lib/client/surface/components/WorkspaceTree.js.map +1 -0
  193. package/lib/client/{worktree-surface-dialogs.d.ts → surface/components/dialogs.d.ts} +5 -2
  194. package/lib/client/surface/components/dialogs.d.ts.map +1 -0
  195. package/lib/client/{worktree-surface-dialogs.js → surface/components/dialogs.js} +67 -24
  196. package/lib/client/surface/components/dialogs.js.map +1 -0
  197. package/lib/client/{worktree-surface-rows.d.ts → surface/components/rows.d.ts} +3 -3
  198. package/lib/client/surface/components/rows.d.ts.map +1 -0
  199. package/lib/client/{worktree-surface-rows.js → surface/components/rows.js} +180 -20
  200. package/lib/client/surface/components/rows.js.map +1 -0
  201. package/lib/client/surface/notification-queue.d.ts +11 -0
  202. package/lib/client/surface/notification-queue.d.ts.map +1 -0
  203. package/lib/client/surface/notification-queue.js +19 -0
  204. package/lib/client/surface/notification-queue.js.map +1 -0
  205. package/lib/client/{worktree-surface-selectors.d.ts → surface/selectors.d.ts} +10 -5
  206. package/lib/client/surface/selectors.d.ts.map +1 -0
  207. package/lib/client/{worktree-surface-selectors.js → surface/selectors.js} +23 -6
  208. package/lib/client/surface/selectors.js.map +1 -0
  209. package/lib/client/surface/shared.d.ts +40 -0
  210. package/lib/client/surface/shared.d.ts.map +1 -0
  211. package/lib/client/surface/shared.js +53 -0
  212. package/lib/client/surface/shared.js.map +1 -0
  213. package/lib/client/surface/state/useLifecycleState.d.ts +34 -0
  214. package/lib/client/surface/state/useLifecycleState.d.ts.map +1 -0
  215. package/lib/client/surface/state/useLifecycleState.js +39 -0
  216. package/lib/client/surface/state/useLifecycleState.js.map +1 -0
  217. package/lib/client/surface/state/useRegistrationState.d.ts +34 -0
  218. package/lib/client/surface/state/useRegistrationState.d.ts.map +1 -0
  219. package/lib/client/surface/state/useRegistrationState.js +44 -0
  220. package/lib/client/surface/state/useRegistrationState.js.map +1 -0
  221. package/lib/client/surface/state/useSessionExpansion.d.ts +39 -0
  222. package/lib/client/surface/state/useSessionExpansion.d.ts.map +1 -0
  223. package/lib/client/surface/state/useSessionExpansion.js +230 -0
  224. package/lib/client/surface/state/useSessionExpansion.js.map +1 -0
  225. package/lib/client/surface/state/useSessionOrdering.d.ts +15 -0
  226. package/lib/client/surface/state/useSessionOrdering.d.ts.map +1 -0
  227. package/lib/client/surface/state/useSessionOrdering.js +68 -0
  228. package/lib/client/surface/state/useSessionOrdering.js.map +1 -0
  229. package/lib/client/surface/state/useSurfaceMenus.d.ts +9 -0
  230. package/lib/client/surface/state/useSurfaceMenus.d.ts.map +1 -0
  231. package/lib/client/surface/state/useSurfaceMenus.js +15 -0
  232. package/lib/client/surface/state/useSurfaceMenus.js.map +1 -0
  233. package/lib/client/surface/state/useSurfaceRefresh.d.ts +39 -0
  234. package/lib/client/surface/state/useSurfaceRefresh.d.ts.map +1 -0
  235. package/lib/client/surface/state/useSurfaceRefresh.js +274 -0
  236. package/lib/client/surface/state/useSurfaceRefresh.js.map +1 -0
  237. package/lib/client/surface/state/useSurfaceSources.d.ts +31 -0
  238. package/lib/client/surface/state/useSurfaceSources.d.ts.map +1 -0
  239. package/lib/client/surface/state/useSurfaceSources.js +63 -0
  240. package/lib/client/surface/state/useSurfaceSources.js.map +1 -0
  241. package/lib/client/{worktree-surface-types.d.ts → surface/types.d.ts} +58 -13
  242. package/lib/client/surface/types.d.ts.map +1 -0
  243. package/lib/client/surface/types.js +2 -0
  244. package/lib/client/surface/types.js.map +1 -0
  245. package/lib/client/{WorktreeModeAction.d.ts → view/WorktreeModeAction.d.ts} +1 -1
  246. package/lib/client/view/WorktreeModeAction.d.ts.map +1 -0
  247. package/lib/client/{WorktreeModeAction.js → view/WorktreeModeAction.js} +9 -1
  248. package/lib/client/view/WorktreeModeAction.js.map +1 -0
  249. package/lib/client/view/navigation.d.ts.map +1 -0
  250. package/lib/client/view/navigation.js.map +1 -0
  251. package/lib/client/view/view-mode-dispatch.d.ts +7 -0
  252. package/lib/client/view/view-mode-dispatch.d.ts.map +1 -0
  253. package/lib/client/view/view-mode-dispatch.js +11 -0
  254. package/lib/client/view/view-mode-dispatch.js.map +1 -0
  255. package/lib/client/view/view-mode-store.d.ts.map +1 -0
  256. package/lib/client/view/view-mode-store.js.map +1 -0
  257. package/lib/client/view/view-mode.d.ts.map +1 -0
  258. package/lib/client/view/view-mode.js.map +1 -0
  259. package/lib/client/{worktree-error-copy.d.ts → view/worktree-error-copy.d.ts} +2 -2
  260. package/lib/client/view/worktree-error-copy.d.ts.map +1 -0
  261. package/lib/client/view/worktree-error-copy.js.map +1 -0
  262. package/lib/client/{worktree-expand-state.d.ts → view/worktree-expand-state.d.ts} +1 -0
  263. package/lib/client/view/worktree-expand-state.d.ts.map +1 -0
  264. package/lib/client/{worktree-expand-state.js → view/worktree-expand-state.js} +11 -0
  265. package/lib/client/view/worktree-expand-state.js.map +1 -0
  266. package/lib/client/{worktree-view-actions.d.ts → view/worktree-view-actions.d.ts} +11 -5
  267. package/lib/client/view/worktree-view-actions.d.ts.map +1 -0
  268. package/lib/client/{worktree-view-actions.js → view/worktree-view-actions.js} +13 -11
  269. package/lib/client/view/worktree-view-actions.js.map +1 -0
  270. package/lib/client/view/worktree-view-errors.d.ts.map +1 -0
  271. package/lib/client/view/worktree-view-errors.js.map +1 -0
  272. package/lib/client/{worktree-view-read.d.ts → view/worktree-view-read.d.ts} +4 -2
  273. package/lib/client/view/worktree-view-read.d.ts.map +1 -0
  274. package/lib/client/{worktree-view-read.js → view/worktree-view-read.js} +4 -1
  275. package/lib/client/view/worktree-view-read.js.map +1 -0
  276. package/lib/client/view/worktree-view.d.ts.map +1 -0
  277. package/lib/client/view/worktree-view.js.map +1 -0
  278. package/lib/client/worktree-connection.d.ts +6 -0
  279. package/lib/client/worktree-connection.d.ts.map +1 -1
  280. package/lib/client/worktree-connection.js +20 -0
  281. package/lib/client/worktree-connection.js.map +1 -1
  282. package/lib/client.js +5869 -2648
  283. package/lib/client.js.map +1 -1
  284. package/lib/contract/index.contract.js +12 -0
  285. package/lib/contract/index.contract.js.map +1 -1
  286. package/lib/contract/index.d.ts +64 -3
  287. package/lib/contract/index.d.ts.map +1 -1
  288. package/lib/contract/index.js +8 -0
  289. package/lib/contract/index.js.map +1 -1
  290. package/lib/host/dsh-read-adapter.d.ts +13 -2
  291. package/lib/host/dsh-read-adapter.d.ts.map +1 -1
  292. package/lib/host/dsh-read-adapter.js +23 -3
  293. package/lib/host/dsh-read-adapter.js.map +1 -1
  294. package/lib/host/remote.d.ts.map +1 -1
  295. package/lib/host/remote.js +15 -0
  296. package/lib/host/remote.js.map +1 -1
  297. package/lib/host/service.d.ts +30 -0
  298. package/lib/host/service.d.ts.map +1 -1
  299. package/lib/host/service.js +47 -1
  300. package/lib/host/service.js.map +1 -1
  301. package/lib/host/worktree-activity.d.ts +13 -0
  302. package/lib/host/worktree-activity.d.ts.map +1 -0
  303. package/lib/host/worktree-activity.js +23 -0
  304. package/lib/host/worktree-activity.js.map +1 -0
  305. package/lib/host/worktree-instructions.d.ts +41 -0
  306. package/lib/host/worktree-instructions.d.ts.map +1 -0
  307. package/lib/host/worktree-instructions.js +65 -0
  308. package/lib/host/worktree-instructions.js.map +1 -0
  309. package/lib/host/worktree-permission-manager.js +2 -2
  310. package/lib/host/worktree-permission-manager.js.map +1 -1
  311. package/lib/index.d.ts +3 -3
  312. package/lib/index.d.ts.map +1 -1
  313. package/lib/index.js +2 -2
  314. package/lib/index.js.map +1 -1
  315. package/lib/manage/manager-context.d.ts +2 -1
  316. package/lib/manage/manager-context.d.ts.map +1 -1
  317. package/lib/manage/manager-sessions.js +4 -4
  318. package/lib/manage/manager-sessions.js.map +1 -1
  319. package/lib/manage/manager-worktree-lifecycle.d.ts +23 -0
  320. package/lib/manage/manager-worktree-lifecycle.d.ts.map +1 -0
  321. package/lib/manage/manager-worktree-lifecycle.js +165 -0
  322. package/lib/manage/manager-worktree-lifecycle.js.map +1 -0
  323. package/lib/manage/manager-worktrees.d.ts +1 -6
  324. package/lib/manage/manager-worktrees.d.ts.map +1 -1
  325. package/lib/manage/manager-worktrees.js +81 -112
  326. package/lib/manage/manager-worktrees.js.map +1 -1
  327. package/lib/manage/manager.d.ts +24 -1
  328. package/lib/manage/manager.d.ts.map +1 -1
  329. package/lib/manage/manager.js +70 -6
  330. package/lib/manage/manager.js.map +1 -1
  331. package/lib/manage/types.d.ts +1 -0
  332. package/lib/manage/types.d.ts.map +1 -1
  333. package/lib/provider/generated-name.d.ts +8 -0
  334. package/lib/provider/generated-name.d.ts.map +1 -0
  335. package/lib/provider/generated-name.js +29 -0
  336. package/lib/provider/generated-name.js.map +1 -0
  337. package/lib/provider/{git.d.ts → git/adapter.d.ts} +2 -2
  338. package/lib/provider/git/adapter.d.ts.map +1 -0
  339. package/lib/provider/{git.js → git/adapter.js} +11 -2
  340. package/lib/provider/git/adapter.js.map +1 -0
  341. package/lib/provider/{repository-fingerprint.d.ts → git/repository-fingerprint.d.ts} +1 -1
  342. package/lib/provider/git/repository-fingerprint.d.ts.map +1 -0
  343. package/lib/provider/git/repository-fingerprint.js.map +1 -0
  344. package/lib/provider/{subprocess.d.ts → git/subprocess.d.ts} +1 -1
  345. package/lib/provider/git/subprocess.d.ts.map +1 -0
  346. package/lib/provider/git/subprocess.js.map +1 -0
  347. package/lib/provider/git/worktree-status.d.ts +5 -0
  348. package/lib/provider/git/worktree-status.d.ts.map +1 -0
  349. package/lib/provider/git/worktree-status.js +23 -0
  350. package/lib/provider/git/worktree-status.js.map +1 -0
  351. package/lib/provider/index.d.ts +5 -5
  352. package/lib/provider/index.d.ts.map +1 -1
  353. package/lib/provider/index.js +5 -5
  354. package/lib/provider/index.js.map +1 -1
  355. package/lib/provider/mutation-token.d.ts +1 -1
  356. package/lib/provider/mutation-token.d.ts.map +1 -1
  357. package/lib/provider/mutation-token.js +1 -0
  358. package/lib/provider/mutation-token.js.map +1 -1
  359. package/lib/provider/sidecar/mutation-lock.d.ts.map +1 -0
  360. package/lib/provider/{mutation-lock.js → sidecar/mutation-lock.js} +1 -1
  361. package/lib/provider/sidecar/mutation-lock.js.map +1 -0
  362. package/lib/provider/{sidecar.d.ts → sidecar/repository.d.ts} +3 -3
  363. package/lib/provider/sidecar/repository.d.ts.map +1 -0
  364. package/lib/provider/{sidecar.js → sidecar/repository.js} +16 -5
  365. package/lib/provider/sidecar/repository.js.map +1 -0
  366. package/lib/provider/{sidecar-persistence.d.ts → sidecar/sidecar-persistence.d.ts} +1 -1
  367. package/lib/provider/sidecar/sidecar-persistence.d.ts.map +1 -0
  368. package/lib/provider/{sidecar-persistence.js → sidecar/sidecar-persistence.js} +29 -2
  369. package/lib/provider/sidecar/sidecar-persistence.js.map +1 -0
  370. package/lib/provider/{sidecar-schema.d.ts → sidecar/sidecar-schema.d.ts} +1 -1
  371. package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -0
  372. package/lib/provider/{sidecar-schema.js → sidecar/sidecar-schema.js} +59 -16
  373. package/lib/provider/sidecar/sidecar-schema.js.map +1 -0
  374. package/lib/provider/transaction/dependencies.d.ts +10 -0
  375. package/lib/provider/transaction/dependencies.d.ts.map +1 -0
  376. package/lib/provider/transaction/dependencies.js +2 -0
  377. package/lib/provider/transaction/dependencies.js.map +1 -0
  378. package/lib/provider/transaction/index.d.ts +17 -0
  379. package/lib/provider/transaction/index.d.ts.map +1 -0
  380. package/lib/provider/transaction/index.js +44 -0
  381. package/lib/provider/transaction/index.js.map +1 -0
  382. package/lib/provider/transaction/operations/adopt-branch.d.ts +6 -0
  383. package/lib/provider/transaction/operations/adopt-branch.d.ts.map +1 -0
  384. package/lib/provider/transaction/operations/adopt-branch.js +59 -0
  385. package/lib/provider/transaction/operations/adopt-branch.js.map +1 -0
  386. package/lib/provider/transaction/operations/clean.d.ts +4 -0
  387. package/lib/provider/transaction/operations/clean.d.ts.map +1 -0
  388. package/lib/provider/transaction/operations/clean.js +168 -0
  389. package/lib/provider/transaction/operations/clean.js.map +1 -0
  390. package/lib/provider/transaction/operations/create.d.ts +5 -0
  391. package/lib/provider/transaction/operations/create.d.ts.map +1 -0
  392. package/lib/provider/transaction/operations/create.js +136 -0
  393. package/lib/provider/transaction/operations/create.js.map +1 -0
  394. package/lib/provider/transaction/operations/import.d.ts +5 -0
  395. package/lib/provider/transaction/operations/import.d.ts.map +1 -0
  396. package/lib/provider/transaction/operations/import.js +93 -0
  397. package/lib/provider/transaction/operations/import.js.map +1 -0
  398. package/lib/provider/transaction/operations/remove.d.ts +4 -0
  399. package/lib/provider/transaction/operations/remove.d.ts.map +1 -0
  400. package/lib/provider/transaction/operations/remove.js +164 -0
  401. package/lib/provider/transaction/operations/remove.js.map +1 -0
  402. package/lib/provider/transaction/recovery/failure-recovery.d.ts +32 -0
  403. package/lib/provider/transaction/recovery/failure-recovery.d.ts.map +1 -0
  404. package/lib/provider/transaction/recovery/failure-recovery.js +147 -0
  405. package/lib/provider/transaction/recovery/failure-recovery.js.map +1 -0
  406. package/lib/provider/transaction/recovery/recover.d.ts +4 -0
  407. package/lib/provider/transaction/recovery/recover.d.ts.map +1 -0
  408. package/lib/provider/transaction/recovery/recover.js +164 -0
  409. package/lib/provider/transaction/recovery/recover.js.map +1 -0
  410. package/lib/provider/transaction/support/admission.d.ts +7 -0
  411. package/lib/provider/transaction/support/admission.d.ts.map +1 -0
  412. package/lib/provider/transaction/support/admission.js +90 -0
  413. package/lib/provider/transaction/support/admission.js.map +1 -0
  414. package/lib/provider/transaction/support/inspection.d.ts +11 -0
  415. package/lib/provider/transaction/support/inspection.d.ts.map +1 -0
  416. package/lib/provider/transaction/support/inspection.js +51 -0
  417. package/lib/provider/transaction/support/inspection.js.map +1 -0
  418. package/lib/provider/transaction/support/journal.d.ts +12 -0
  419. package/lib/provider/transaction/support/journal.d.ts.map +1 -0
  420. package/lib/provider/transaction/support/journal.js +74 -0
  421. package/lib/provider/transaction/support/journal.js.map +1 -0
  422. package/lib/provider/transaction/support/locking.d.ts +4 -0
  423. package/lib/provider/transaction/support/locking.d.ts.map +1 -0
  424. package/lib/provider/transaction/support/locking.js +11 -0
  425. package/lib/provider/transaction/support/locking.js.map +1 -0
  426. package/lib/provider/transaction/support/path-safety.d.ts +11 -0
  427. package/lib/provider/transaction/support/path-safety.d.ts.map +1 -0
  428. package/lib/provider/transaction/support/path-safety.js +82 -0
  429. package/lib/provider/transaction/support/path-safety.js.map +1 -0
  430. package/lib/provider/transaction/support/paths.d.ts +10 -0
  431. package/lib/provider/transaction/support/paths.d.ts.map +1 -0
  432. package/lib/provider/transaction/support/paths.js +68 -0
  433. package/lib/provider/transaction/support/paths.js.map +1 -0
  434. package/lib/provider/transaction/support/publication.d.ts +9 -0
  435. package/lib/provider/transaction/support/publication.d.ts.map +1 -0
  436. package/lib/provider/transaction/support/publication.js +92 -0
  437. package/lib/provider/transaction/support/publication.js.map +1 -0
  438. package/lib/provider/transaction/types.d.ts +38 -0
  439. package/lib/provider/transaction/types.d.ts.map +1 -0
  440. package/lib/provider/transaction/types.js +2 -0
  441. package/lib/provider/transaction/types.js.map +1 -0
  442. package/lib/provider/types.d.ts +22 -3
  443. package/lib/provider/types.d.ts.map +1 -1
  444. package/lib/provider/types.js +1 -1
  445. package/lib/provider/types.js.map +1 -1
  446. package/lib/provider/worktree-lifecycle.d.ts +19 -0
  447. package/lib/provider/worktree-lifecycle.d.ts.map +1 -0
  448. package/lib/provider/worktree-lifecycle.js +44 -0
  449. package/lib/provider/worktree-lifecycle.js.map +1 -0
  450. package/lib/typert.host.js +330 -36
  451. package/lib/typert.remote-client.d.ts +12 -0
  452. package/lib/typert.remote-client.d.ts.map +1 -1
  453. package/lib/typert.remote-client.js +330 -36
  454. package/package.json +21 -20
  455. package/lib/client/WorktreeContext.d.ts.map +0 -1
  456. package/lib/client/WorktreeContext.js.map +0 -1
  457. package/lib/client/WorktreeHeroContext.d.ts.map +0 -1
  458. package/lib/client/WorktreeHeroContext.js.map +0 -1
  459. package/lib/client/WorktreeModeAction.d.ts.map +0 -1
  460. package/lib/client/WorktreeModeAction.js.map +0 -1
  461. package/lib/client/WorktreeOverlay.d.ts.map +0 -1
  462. package/lib/client/WorktreeOverlay.js.map +0 -1
  463. package/lib/client/dsh-rc1-slot-contract.d.ts +0 -43
  464. package/lib/client/dsh-rc1-slot-contract.d.ts.map +0 -1
  465. package/lib/client/dsh-rc1-slot-contract.js +0 -2
  466. package/lib/client/dsh-rc1-slot-contract.js.map +0 -1
  467. package/lib/client/navigation.d.ts.map +0 -1
  468. package/lib/client/navigation.js.map +0 -1
  469. package/lib/client/overlay-bounds.d.ts.map +0 -1
  470. package/lib/client/overlay-bounds.js.map +0 -1
  471. package/lib/client/session-view.d.ts.map +0 -1
  472. package/lib/client/session-view.js.map +0 -1
  473. package/lib/client/sidebar-overlay-geometry.d.ts.map +0 -1
  474. package/lib/client/sidebar-overlay-geometry.js.map +0 -1
  475. package/lib/client/view-mode-store.d.ts.map +0 -1
  476. package/lib/client/view-mode-store.js.map +0 -1
  477. package/lib/client/view-mode.d.ts.map +0 -1
  478. package/lib/client/view-mode.js.map +0 -1
  479. package/lib/client/virtual-workspace-membership.d.ts.map +0 -1
  480. package/lib/client/virtual-workspace-membership.js.map +0 -1
  481. package/lib/client/worktree-context-store.d.ts.map +0 -1
  482. package/lib/client/worktree-context-store.js.map +0 -1
  483. package/lib/client/worktree-context.d.ts.map +0 -1
  484. package/lib/client/worktree-context.js.map +0 -1
  485. package/lib/client/worktree-error-copy.d.ts.map +0 -1
  486. package/lib/client/worktree-error-copy.js.map +0 -1
  487. package/lib/client/worktree-expand-state.d.ts.map +0 -1
  488. package/lib/client/worktree-expand-state.js.map +0 -1
  489. package/lib/client/worktree-permission-icon.d.ts.map +0 -1
  490. package/lib/client/worktree-permission-icon.js.map +0 -1
  491. package/lib/client/worktree-permission.d.ts.map +0 -1
  492. package/lib/client/worktree-permission.js.map +0 -1
  493. package/lib/client/worktree-session-fork.d.ts.map +0 -1
  494. package/lib/client/worktree-session-fork.js.map +0 -1
  495. package/lib/client/worktree-session-order.d.ts.map +0 -1
  496. package/lib/client/worktree-session-order.js.map +0 -1
  497. package/lib/client/worktree-session-position.d.ts.map +0 -1
  498. package/lib/client/worktree-session-position.js.map +0 -1
  499. package/lib/client/worktree-session.d.ts.map +0 -1
  500. package/lib/client/worktree-session.js.map +0 -1
  501. package/lib/client/worktree-surface-dialogs.d.ts.map +0 -1
  502. package/lib/client/worktree-surface-dialogs.js.map +0 -1
  503. package/lib/client/worktree-surface-rows.d.ts.map +0 -1
  504. package/lib/client/worktree-surface-rows.js.map +0 -1
  505. package/lib/client/worktree-surface-selectors.d.ts.map +0 -1
  506. package/lib/client/worktree-surface-selectors.js.map +0 -1
  507. package/lib/client/worktree-surface-types.d.ts.map +0 -1
  508. package/lib/client/worktree-surface-types.js +0 -2
  509. package/lib/client/worktree-surface-types.js.map +0 -1
  510. package/lib/client/worktree-view-actions.d.ts.map +0 -1
  511. package/lib/client/worktree-view-actions.js.map +0 -1
  512. package/lib/client/worktree-view-errors.d.ts.map +0 -1
  513. package/lib/client/worktree-view-errors.js.map +0 -1
  514. package/lib/client/worktree-view-read.d.ts.map +0 -1
  515. package/lib/client/worktree-view-read.js.map +0 -1
  516. package/lib/client/worktree-view.d.ts.map +0 -1
  517. package/lib/client/worktree-view.js.map +0 -1
  518. package/lib/provider/git.d.ts.map +0 -1
  519. package/lib/provider/git.js.map +0 -1
  520. package/lib/provider/mutation-lock.d.ts.map +0 -1
  521. package/lib/provider/mutation-lock.js.map +0 -1
  522. package/lib/provider/repository-fingerprint.d.ts.map +0 -1
  523. package/lib/provider/repository-fingerprint.js.map +0 -1
  524. package/lib/provider/sidecar-persistence.d.ts.map +0 -1
  525. package/lib/provider/sidecar-persistence.js.map +0 -1
  526. package/lib/provider/sidecar-schema.d.ts.map +0 -1
  527. package/lib/provider/sidecar-schema.js.map +0 -1
  528. package/lib/provider/sidecar.d.ts.map +0 -1
  529. package/lib/provider/sidecar.js.map +0 -1
  530. package/lib/provider/subprocess.d.ts.map +0 -1
  531. package/lib/provider/subprocess.js.map +0 -1
  532. package/lib/provider/transaction.d.ts +0 -65
  533. package/lib/provider/transaction.d.ts.map +0 -1
  534. package/lib/provider/transaction.js +0 -1011
  535. package/lib/provider/transaction.js.map +0 -1
  536. /package/lib/client/{WorktreeContext.js → context/WorktreeContext.js} +0 -0
  537. /package/lib/client/{WorktreeHeroContext.js → context/WorktreeHeroContext.js} +0 -0
  538. /package/lib/client/{overlay-bounds.d.ts → overlay/overlay-bounds.d.ts} +0 -0
  539. /package/lib/client/{overlay-bounds.js → overlay/overlay-bounds.js} +0 -0
  540. /package/lib/client/{sidebar-overlay-geometry.d.ts → overlay/sidebar-overlay-geometry.d.ts} +0 -0
  541. /package/lib/client/{sidebar-overlay-geometry.js → overlay/sidebar-overlay-geometry.js} +0 -0
  542. /package/lib/client/{worktree-permission-icon.d.ts → permission/worktree-permission-icon.d.ts} +0 -0
  543. /package/lib/client/{worktree-permission-icon.js → permission/worktree-permission-icon.js} +0 -0
  544. /package/lib/client/{worktree-permission.d.ts → permission/worktree-permission.d.ts} +0 -0
  545. /package/lib/client/{worktree-permission.js → permission/worktree-permission.js} +0 -0
  546. /package/lib/client/{session-view.d.ts → session/session-view.d.ts} +0 -0
  547. /package/lib/client/{session-view.js → session/session-view.js} +0 -0
  548. /package/lib/client/{worktree-session-order.d.ts → session/worktree-session-order.d.ts} +0 -0
  549. /package/lib/client/{worktree-session-order.js → session/worktree-session-order.js} +0 -0
  550. /package/lib/client/{worktree-session-position.d.ts → session/worktree-session-position.d.ts} +0 -0
  551. /package/lib/client/{worktree-session-position.js → session/worktree-session-position.js} +0 -0
  552. /package/lib/client/{navigation.d.ts → view/navigation.d.ts} +0 -0
  553. /package/lib/client/{navigation.js → view/navigation.js} +0 -0
  554. /package/lib/client/{view-mode-store.d.ts → view/view-mode-store.d.ts} +0 -0
  555. /package/lib/client/{view-mode-store.js → view/view-mode-store.js} +0 -0
  556. /package/lib/client/{view-mode.d.ts → view/view-mode.d.ts} +0 -0
  557. /package/lib/client/{view-mode.js → view/view-mode.js} +0 -0
  558. /package/lib/client/{worktree-error-copy.js → view/worktree-error-copy.js} +0 -0
  559. /package/lib/client/{worktree-view-errors.d.ts → view/worktree-view-errors.d.ts} +0 -0
  560. /package/lib/client/{worktree-view-errors.js → view/worktree-view-errors.js} +0 -0
  561. /package/lib/client/{worktree-view.d.ts → view/worktree-view.d.ts} +0 -0
  562. /package/lib/client/{worktree-view.js → view/worktree-view.js} +0 -0
  563. /package/lib/provider/{repository-fingerprint.js → git/repository-fingerprint.js} +0 -0
  564. /package/lib/provider/{subprocess.js → git/subprocess.js} +0 -0
  565. /package/lib/provider/{mutation-lock.d.ts → sidecar/mutation-lock.d.ts} +0 -0
package/README.zh.md CHANGED
@@ -2,8 +2,12 @@
2
2
 
3
3
  `@cerbur/clutch-dsh-worktree` 为 DSH Web UI 增加 Git Worktree 视图,按
4
4
  Workspace → Worktree → Session 组织会话,同时继续由 DSH 作为 Project/Workspace 身份、
5
- Session 元数据、原生列表和会话历史的唯一事实来源。插件只保存 Worktree/Session 的外部
6
- 关系元数据。
5
+ Session 元数据、原生列表和会话历史的唯一事实来源。插件在自己的 sidecar 中保存
6
+ Worktree/Session 外部关系、创建或登记事实及用户编写的 Worktree 指令。
7
+
8
+ > **预览版:** Worktree Dashboard 是仅插件的早期 MVP 预览版。目前已接入概览、会话
9
+ > 列表与导航、Worktree 指令、新建/归档 Worktree 和在应用中打开入口;Git 详情、派生
10
+ > Worktree、设置及其他标记为**即将推出**的操作仍是占位。
7
11
 
8
12
  ## 界面截图
9
13
 
@@ -17,13 +21,21 @@ Session 元数据、原生列表和会话历史的唯一事实来源。插件只
17
21
  导入截图展示了现有 Workspace `+` 弹窗:默认选中创建,旁边是导入 Tab,并在普通下拉框中
18
22
  使用安全的示例 branch 和路径值。
19
23
 
24
+ ![Worktree Dashboard 预览(中文界面)](assets/screenshots/screenshots-dashboard.webp)
25
+
26
+ Dashboard 截图记录了当前预览版界面:Worktree 身份、获取事实、已接入的会话与 Worktree
27
+ 操作,以及明确标出的占位卡片。
28
+
20
29
  ## 能力
21
30
 
31
+ - 从 Local/Main 或 active/archived Worktree 的菜单、行内悬浮操作,或原生 Session 标题行 More actions 按钮
32
+ 左侧的快捷 Dashboard 图标打开 Dashboard,查看真实名称和 cwd、复制完整路径,并切换概览、Git
33
+ 与变更、会话、派生 Worktree 和设置。尚未接入的 MVP 卡片与操作明确标记为“即将推出”。
22
34
  - 从 DSH Sidebar footer 进入 Worktree 模式,按 Workspace → Worktree → Session 浏览会话。
23
35
  - 搜索 Workspace,并从已有 local branch 创建 Git Worktree 和 branch。
24
36
  - 在同一个弹窗中选择导入,发现与当前 Workspace repository 关联、尚未由 sidecar 管理且绑定 branch 的 Git Worktree。第一版不展示 repository root 和 detached HEAD 条目。
25
- - 导入只登记已有 Worktree,不移动、复制或编辑其目录;记录使用 `source: external`,之后与 plugin 创建的记录共享 Session、binding、health、排序、cwd、projection、刷新和恢复流程。
26
- - plugin 创建和导入的 Worktree 都通过真实的 `git worktree remove` 移除;移除导入的 Worktree 可能删除其关联目录,确认弹窗会明确提示。
37
+ - 导入只登记已有 Worktree,不移动、复制或编辑其目录;导入记录与插件创建的记录共享相同的 Session、binding、health、排序、cwd、投影、刷新和恢复流程。
38
+ - 非破坏性归档 Worktree,保留磁盘文件、活动绑定与运行时 cwd。磁盘清理(`git worktree remove`)需经二次确认,由用户自行确认使用该目录的 Session/子代理与其他任务已停止;亦支持移出插件管理并保留磁盘文件与 Session。
27
39
  - 在 Main 或 active Worktree 下创建普通 Session 或 Worktree Session,并直接打开新会话。
28
40
  - 对 active Worktree Session,先经明确确认,再请求命名的 `worktree-full-access` 预设。它将
29
41
  DSH 的 `danger-full-access` 与 `ask` 组合:关闭关联 Git 元数据的文件系统限制,但保留
@@ -33,28 +45,34 @@ Session 元数据、原生列表和会话历史的唯一事实来源。插件只
33
45
  `workspace-write + ask`;如果无法验证权限能力,则显示可重试的降级状态,不伪称已获得完全访问。
34
46
  - 复用原生动画 `StateDot` 展示运行中的 Session,并为最近一条用户发送的 Session 消息显示
35
47
  原生相对时间;hover 或打开菜单时,右侧位置让位给已有的操作菜单。
48
+ - Dashboard 的 Session 卡片在概览预览和完整的 Session 页签中复用同样的状态或相对时间信息,
49
+ 与 Worktree 列表保持一致。
36
50
  - 使用 DSH 原生 Session hover 详情卡片展示完整标题、相对时间和当前状态;打开 Session 操作
37
51
  菜单或拖拽行时,详情卡片让位。
38
52
  - 补齐原生的等待审批、计划待审、等待回答、已完成、空闲和运行中子代理状态;插件不会复制
39
53
  原生动画实现。
40
54
  - 当折叠的 Workspace、Main 或 Worktree 中存在任一未归档的活动 Session 时,在其右侧显示
41
- 一个原生运行指示器;展开后恢复普通操作栏。
55
+ 一个原生运行指示器;折叠运行状态会为 28px 指示器和 4px 文字间距预留空间,过长的 Worktree
56
+ 名称会在活动持续期间滚动;展开后恢复普通操作栏。
42
57
  - 用户在 Session 中发送新消息后,该 Session 会移动到当前 Main 或 Worktree 视觉分组的队首。
43
58
  该排序只保存在浏览器本地,不修改 DSH Workspace 顺序或 Worktree sidecar。
44
59
  - 从 DSH 原生 Workspace session list tab、Worktree view 或 Conversation fork 操作 fork
45
- Session。parent 有 active Worktree binding 时,child 会先绑定到同一个 Worktree,再在 binding
46
- refresh 完成后加入浏览器本地 Workspace membership projection;child 仍然是普通 DSH Session。
47
- 这一时序避免 child 短暂出现在 Main/Local。sidecar 失败时 child 会保留,并显示可重试的
48
- binding 恢复操作。
60
+ Session。parent 有 active Worktree binding 时,child 会自动绑定到同一个 Worktree 并直接在
61
+ Worktree 视图中打开;child 仍然是普通 DSH Session。
49
62
  - 查看 ready、repair、active 和 detached Worktree 状态,包括可重试的操作错误。
50
- - 通过 Main 和 Worktree 共用的选项菜单复制所选行的绝对路径;Main detached 行只显示“复制路径”,
51
- active Worktree 额外显示“移除 Worktree”并要求确认。
63
+ - 通过 Main 和 Worktree 共用的选项菜单复制所选行的绝对路径;已管理 Worktree 额外通过选项菜单和
64
+ 行内悬浮操作提供 Dashboard。Worktree 分组的右侧操作栏在静止时为零宽度;折叠且有活动时会为 28px 运行指示器和 4px 文字间距
65
+ 预留空间。hover、focus 或打开 menu 时才按实际可用的 Dashboard、menu 和 Session `+` 控件占用宽度;
66
+ 过长的 Worktree 名称会在悬浮或折叠运行期间自动横向滚动,两个触发条件共用一个滚动循环,均不满足
67
+ 后回到原始位置。
68
+ active Worktree 提供“归档 Worktree”并要求确认。
52
69
  - 通过 Local 或 active Worktree 的选项菜单创建新的 Worktree。创建弹窗会以所选行的当前 branch
53
70
  为基线,并预填下一个可用的递增名称,例如 `feature-2` 或 `feature-3`;detached Worktree
54
71
  不显示该动作。
55
72
  - 继续使用 DSH 原生的 Workspace rename/delete/reorder 和 Session 菜单。Worktree 可以在所属
56
73
  Workspace 内排序;顺序保存在插件 sidecar 中,Main 固定在第一位。
57
74
  - 将 Workspace、Main 和 Worktree 的展开选择保存到浏览器本地存储;Session 五行溢出展开保持临时状态,并在刷新或父级折叠后重置。
75
+ - 在 Worktree Header 提供「全部折叠」按钮,支持一键折叠所有 Workspace 与 Worktree。
58
76
  - 在 Worktree view 高亮 DSH 当前 Session;进入 Worktree 模式或切换当前会话时,临时展开其 Workspace/Main/Worktree 路径;只有当前行不在前五行时才展开 Session 五行溢出,随后清空隐藏它的搜索并滚动定位;这一浏览器本地行为不改变已保存的展开选择。
59
77
  - 在已有 Conversation 的标题行以及新会话空白 Hero 中,以只读方式显示当前 local branch 或
60
78
  Worktree branch 上下文。
@@ -65,26 +83,23 @@ Session 元数据、原生列表和会话历史的唯一事实来源。插件只
65
83
  对齐原生字体和排版,Sidebar 折叠后不再额外显示 `WT` 按钮。
66
84
  - Worktree Session 仍出现在原始 DSH Project/Workspace 视角中;插件不复制 Session 内容,
67
85
  也不修改消息、prompt、transcript 或历史记录。
68
- - Worktree fork 的 membership 不会写入 DSH 持久化的 `Workspace.sessionIds`。plugin 加载期间,
69
- 浏览器可以通过本地 projection 显示 child;不加载 plugin 时,child 仍在 DSH 全局 Session 管理中,
70
- 但不会被持久化挂到 native Workspace root membership 下。
71
86
 
72
87
  ### 兼容性与前置条件
73
88
 
89
+ Session 重新加载兼容 DSH rc.1 的持久化 header 与新版 DSH 的 header snapshot。
90
+ Worktree Dashboard 预览版会为新 Worktree 记录获取事实,并为 active binding 注入已保存的指令。
91
+
74
92
  兼容性事实表如下:
75
93
 
76
- | 组件 / Component | 最低版本 / Min Version | 说明 / Notes |
77
- | --- | --- | --- |
78
- | DSH Client | `>=0.1.2-rc.1` | 依赖 Session/Workspace Controller 及 Client Store |
79
- | DSH Host | `>=0.1.2-rc.1` | 依赖 Typert Gateway `/api` 协议与 subprocess capability |
80
- | Git | `>=2.20.0` | 要求支持 worktree 核心命令与 branch 发现 |
81
- | Node.js | `>=20.0.0` | 推荐使用 LTS 版本 |
94
+ | 组件 / Component | 最低版本 / Min Version | 说明 / Notes |
95
+ | ---------------- | ---------------------- | ------------------------------------------------------- |
96
+ | DSH Client | `>=0.1.5-rc.1` | 依赖 Session/Workspace Controller 及 Client Store |
97
+ | DSH Host | `>=0.1.5-rc.1` | 依赖 Typert Gateway `/api` 协议与 subprocess capability |
98
+ | Git | `>=2.20.0` | 要求支持 worktree 核心命令与 branch 发现 |
99
+ | Node.js | `>=20.0.0` | 推荐使用 LTS 版本 |
82
100
 
83
101
  ## 安装
84
102
 
85
- 普通用户安装请使用 npm package。开发或验证本地源码时使用仓库 checkout;从市场条目安装
86
- 源码 package 时使用 GitHub source path。
87
-
88
103
  ### 从 npm 安装(推荐)
89
104
 
90
105
  在已经安装 DSH CLI 的环境中执行:
@@ -109,57 +124,6 @@ pnpm dsh web
109
124
  npm view @cerbur/clutch-dsh-worktree version --registry=https://registry.npmjs.org/
110
125
  ```
111
126
 
112
- ### 准备当前 upstream DSH checkout
113
-
114
- 进行源码开发或验证时,先准备 upstream checkout。当前 upstream 默认分支是 `master`;如果仓库
115
- 未来切换默认分支,应跟随仓库的当前默认分支。最小 rc.1 兼容性验证路径切换到
116
- `dsh-v0.1.2-rc.1`:
117
-
118
- ```bash
119
- git clone https://github.com/deepseek-ai/deepseek-harness.git
120
- cd deepseek-harness
121
- git fetch origin
122
- git checkout dsh-v0.1.2-rc.1
123
- pnpm install
124
- pnpm run build
125
- ```
126
-
127
- ### 从仓库 checkout 安装
128
-
129
- 先从 `clutch-dsh` checkout 构建 package,再把绝对路径安装到 DSH profile:
130
-
131
- ```bash
132
- cd /path/to/clutch-dsh
133
- pnpm install
134
- pnpm --filter @cerbur/clutch-dsh-worktree build
135
-
136
- cd /path/to/deepseek-harness
137
- pnpm install
138
- pnpm run build
139
- pnpm dsh plugin --profile web add /path/to/clutch-dsh/packages/clutch-dsh-worktree
140
- pnpm dsh web --dump-config
141
- pnpm dsh web
142
- ```
143
-
144
- `--dump-config` 输出中应包含该 plugin 的 bundle layer。如果 profile 中仍有旧的 unscoped
145
- 安装,先移除:
146
-
147
- ```bash
148
- pnpm dsh plugin --profile web remove clutch-dsh-worktree
149
- ```
150
-
151
- 更新本地 checkout 时,重新构建 package 并重启 DSH:
152
-
153
- ```bash
154
- cd /path/to/clutch-dsh
155
- pnpm --filter @cerbur/clutch-dsh-worktree build
156
- cd /path/to/deepseek-harness
157
- pnpm dsh web
158
- ```
159
-
160
- 修改 `package.json`、`cordis.patch.yml` 或 profile bundle 成员后,需要再次执行 plugin add
161
- 命令。
162
-
163
127
  ### 从 GitHub 源码安装
164
128
 
165
129
  `awesome-dsh-plugin` 生成的源码路径为:
@@ -168,26 +132,7 @@ pnpm dsh web
168
132
  dsh plugin --profile web add "github:Cerbur/clutch-dsh#path:/packages/clutch-dsh-worktree"
169
133
  ```
170
134
 
171
- 这是源码 Git 依赖,不是预构建的 npm package。它的 `prepare` 生命周期会生成 `lib/`。当前
172
- DSH profile 使用 pnpm 11 的 `allowBuilds`:首次执行 Git 安装时,pnpm 会故意拒绝构建,并
173
- 在错误信息中打印包含包名、Git URL、解析后的 commit 和子目录 path 的完整 key。将完整
174
- key 复制到 profile 的 `pnpm-workspace.yaml`,例如:
175
-
176
- ```yaml
177
- allowBuilds:
178
- '@cerbur/clutch-dsh-worktree@git+https://github.com/Cerbur/clutch-dsh#<resolved-commit>&path:/packages/clutch-dsh-worktree': true
179
- ```
180
-
181
- 必须使用 pnpm 错误提示中打印的完整包 key:`<resolved-commit>`、Git URL 和 path 都必须与
182
- 错误输出一致。对于直接 Git 依赖,只写包名不够;当前 pnpm 11 的 Git prepare 流程也不使用
183
- `onlyBuiltDependencies` 这一配置。保存授权后重新执行原安装命令;commit 变化后需要为新
184
- commit 增加对应的 key。该 allowlist 属于信任此 Git commit 的 profile 维护者,不要写入
185
- plugin package。
186
-
187
- 授权后,Git prepare 会在 checkout 的 monorepo 中执行 `pnpm install`,再执行
188
- `pnpm run build`,因此 profile 必须能访问其配置的 registry。授权之后出现 registry DNS、
189
- 镜像或 lockfile 错误,属于安装环境问题,不是 `allowBuilds` 拒绝。若要避免源码构建授权,
190
- 请使用上面的 npm 安装方式。
135
+ 这是源码 Git 依赖,安装时由构建脚本生成。关于 pnpm 11 `allowBuilds` 授权配置、本地开发与贡献者流程,详见 [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)。
191
136
 
192
137
  ### 卸载
193
138
 
@@ -210,8 +155,66 @@ pnpm dsh plugin --profile web remove @cerbur/clutch-dsh-worktree
210
155
  上图展示了侧边栏入口以及新会话空白 Hero 中显示的视觉上下文。界面语言跟随 DSH 当前的
211
156
  语言设置。
212
157
 
158
+ ### 打开 Worktree Dashboard
159
+
160
+ Dashboard 是仅插件的预览版 MVP,不会替换 DSH 原生 Session 页面,也不会写入 DSH 管理的
161
+ Workspace/Session 数据。
162
+
163
+ 在 Worktree 模式中,将鼠标悬浮到已管理 Worktree 行并点击 Dashboard 图标,或打开行的选项菜单
164
+ 并选择 **Dashboard**。对于具有 ready Main 或 Worktree 上下文的当前 Session,也可以点击 Session
165
+ 标题行中原生 **More actions** 按钮左侧的 Dashboard 图标。Dashboard 会临时替换 Sidebar 旁的区域
166
+ (含 Session 页面),原生会话组件保持挂载。点击**返回会话**、按 **Escape**、从 Sidebar 打开
167
+ Session 或退出 Worktree 模式,即可恢复原生页面。打开 Dashboard 不会创建或修改 Session;
168
+ Local/Main 与已管理 Worktree 行都提供行内 Dashboard 图标,当前 Session 仍可使用标题行快捷入口。
169
+ Dashboard 打开后仍可拖动 Sidebar 的宽度。
170
+
171
+ ![Worktree Dashboard 预览](assets/screenshots/screenshots-dashboard.webp)
172
+
173
+ 上图展示了原生 Worktree Sidebar 旁的预览版 Dashboard。已接入的控件仅覆盖 MVP 范围;
174
+ 未完成的卡片仍会明确标记。
175
+
176
+ 标题沿用 Worktree 行的已接受分支名称,点击标题即可直接复制分支名称。cwd 展示记录中的完整
177
+ 绝对路径,复制按钮明确反馈成功或失败。如果 DSH 无法提供 Main 的当前分支,Dashboard 会标记为
178
+ 无法获取且不会提供分支复制。当前分支、可用性与来源使用现有 Worktree 投影;ready 表示 Worktree 可用,**不代表**
179
+ Git 文件没有变更。归档或已清理记录仍展示记录中的路径,该路径不一定仍存在于磁盘。
180
+
181
+ 五个 tab 支持左右方向键、Home 和 End。概览显示当前 Worktree 的前五个会话,会话 tab
182
+ 显示完整列表;两者直接消费内存中的 sessions 和 bindings,沿用 Sidebar 排序与可见性规则,
183
+ 不受 Sidebar 搜索影响。点击会话返回原生页面。新建会话离开 Dashboard,直接复用现有
184
+ create/bind/open 流程,保留空白会话复用与失败恢复。
185
+ 新建 Worktree 呼出已有创建弹窗,预选当前分支和编号名称;归档 Worktree 呼出已有的非破坏性
186
+ 确认框。操作沿用 Sidebar 的健康状态、归档状态和进行中操作门禁。
187
+ 在 VS Code 中打开使用编码后的 `vscode://file/...` 链接打开记录中的 cwd;浏览器所在机器
188
+ 须安装 VS Code 且能访问该路径,浏览器可能要求确认打开应用。链接不核验目录是否存在或
189
+ 应用是否成功启动。
190
+ 在 Worktree 指令卡片中点击**编辑**,可编辑、保存或清空共享指引(最多 32,000 个 UTF-16
191
+ code units)。内容保存在插件 sidecar,不写入 AGENTS.md;保存后通过 DSH `agent/pre-step`,
192
+ 以独立的 `<system-reminder>` 上下文记录进入会话轨迹和下一次模型请求。
193
+ 消息由 DSH 记录,不重写已有历史。
194
+ 指令内容按原文插入,其中的 `{{...}}` 示例不会被当作模板变量解析。
195
+ 归档保留 active binding 和指令;detached binding、清理磁盘或移出管理后停止注入。
196
+ 清空或失去 binding 后,下一步追加提醒使旧指令失效。指令未变且消息仍可见时不重复注入,
197
+ 重启后也会去重;压缩移除后按需重新注入。保存失败保留草稿,并发编辑会被拒绝;
198
+ 取消并重新打开可加载最新内容后重试。
199
+
200
+ 新建 Worktree 显示记录的创建时间和创建时所选基线分支。导入的 Worktree 显示登记时间,
201
+ 不推测原始创建时间或基线;缺少这些历史事实时,Dashboard 提示**历史 Worktree 无法获取**,
202
+ 不再显示“未知”。基线是创建时的分支名,
203
+ 不代表当前 merge-base 或领先/落后计算,checkout 不会修改它。
204
+ Open-editor 分体按钮对齐 DSH 原生样式,并提供主机检测到的应用菜单;不可用时回退到上文
205
+ 说明的 VS Code 协议链接。
206
+
207
+ Git 详情、派生 Worktree、设置及其他标记的快捷操作仍为占位。界面跟随 DSH
208
+ 主题,窄屏下卡片纵向排列。Dashboard 选择状态是临时的,刷新页面后不会恢复。
209
+
213
210
  ### 创建 Worktree
214
211
 
212
+ 新目录使用 `$dshHome/clutch-dsh-worktree/worktree/wt_<12-hex-characters>`
213
+ (文件夹名为 15 个字符,包含 48 位加密随机数)。
214
+ 目录名、Git 登记或 sidecar 身份已被占用时自动换名重试;八个随机候选均冲突后,
215
+ 依次尝试 `_1`、`_2` 等数字后缀,直到找到可用名称或取消。
216
+ 已有 Worktree 的路径和 ID 保持不变;分支冲突与其他 Git 失败沿用原有错误处理。
217
+
215
218
  1. 选择 Workspace,点击它旁边的 `+`,选择基线 local branch,并填写 Worktree name。默认
216
219
  branch 名称为 `dsh/<8-character-random-string>`。
217
220
  2. 如果要从已有 Worktree 创建同级 Worktree,打开该 active Worktree 的选项菜单并选择
@@ -229,35 +232,32 @@ pnpm dsh plugin --profile web remove @cerbur/clutch-dsh-worktree
229
232
  1. 选择 Workspace,点击旁边的 `+`,再选择 `导入` Tab。弹窗通过现有 DSH `/api` Connection
230
233
  加载该 repository 的 Git Worktree 候选项。
231
234
  2. 第一版只列出绑定 branch、不是 repository root、且未出现在 plugin sidecar 中的 Worktree。
232
- detached HEAD 会被省略;候选项通过普通下拉框选择,每个选项先显示 branch,再显示绝对路径
235
+ detached HEAD、bare、prunable、目录缺失和 `.git` 缺失的条目会被省略。
236
+ 已管理 Worktree 的 health 与导入资格共用运行时状态映射,提交导入时重新校验;
237
+ locked Worktree 在其他条件满足时仍可导入。
238
+ 候选项通过普通下拉框选择,每个选项先显示 branch,再显示绝对路径
233
239
  作为诊断信息。
234
240
  3. 在下拉框中选择一个选项并点击 `导入 Worktree`。登记只写入 plugin sidecar,已有 Worktree 目录和 Git
235
241
  工作状态保持不变。随后会在该 Worktree cwd 创建或复用 Session,并执行与创建相同的
236
- `bind → open → binding refresh` 流程;新建 Session 不会在 binding 刷新前投影到原生
237
- Workspace membership。
242
+ `bind → open → binding refresh` 流程。
238
243
  4. 同一 Workspace、同一物理路径的 active external 导入是幂等的。已经由 plugin 管理的路径
239
- 返回 `WORKTREE_ALREADY_MANAGED`;无效或过期候选项返回 `WORKTREE_IMPORT_INVALID`,修复
240
- repository 状态后可以重试。
244
+ 会报错提示;无效或过期候选项在修复 repository 状态后可以重试。
241
245
 
242
246
  ### 创建 Main 和 Worktree Session
243
247
 
244
248
  - 使用 Main 的 `+`,在 Project 根目录视角中创建普通 DSH Session。
245
- - 使用 Worktree 的 `+`,创建或复用 runtime cwd 指向该 Worktree 的 Session。插件通过 DSH
246
- Session Controller 调用 `ctx.sessions.create({ cwd: worktreePath })`,随后保存外部 binding
247
- 并打开该 Session。当前浏览器内的 `{ workspaceId, sessionId }` membership projection 会在
248
- 之后刷新,因此新建 Session 不会短暂出现在 Main 中。
249
- - 如果存在目标 cwd 完全匹配的未归档 blank Session,连接器会优先复用它。已绑定的 Session
250
- 会直接打开;未绑定的候选会先 binding,再 projection 和打开。否则执行
251
- 新建路径执行 `create → bind → open → refresh`,同一个 Worktree 的并发点击会合并。
252
- - 如果 DSH 创建 Session 后 binding 失败,Session ID 仍会保留,可用于 Retry 或 Open 恢复。
253
- 插件不会删除或修改该 DSH Session。
249
+ - 使用 Worktree 的 `+`,创建或复用以该 Worktree 为运行时工作目录(`cwd`)的 Session。Session
250
+ 直接在 Worktree 视图中打开,不会短暂出现在 Main 列表中。
251
+ - 如果存在目标 cwd 完全匹配的未归档空白 Session,连接器会优先复用它。已绑定的 Session 会直接打开;
252
+ 未绑定的候选会先完成绑定再打开。否则走新建并绑定的流程,同一个 Worktree 的并发点击会合并处理。
253
+ - 如果 DSH 创建 Session 后绑定失败,Session ID 仍会保留,可用于重试或直接打开。插件绝不删除或修改已创建的 DSH Session
254
254
  - 打开 active Worktree Session 前,插件会在 DSH 风格的页面内弹窗中说明关联 Git 元数据为什么
255
255
  可能需要访问 Session 目录之外的内容。弹窗要求明确勾选风险确认;取消会保留 Session 和
256
- binding,不改变权限,并留下可重试的待处理状态。需要切换到其他权限模式时,继续使用 DSH
256
+ 绑定关系,不改变权限,并留下可重试的待处理状态。需要切换到其他权限模式时,继续使用 DSH
257
257
  原生 Access 选择器。
258
258
  - provisional blank Session 遵循 DSH 原生显示规则:只在当前选中的视角中显示,使用本地化
259
259
  的 `New Session` 文案,不显示生成的 ID,也没有 Rename、Fork 或 Archive 菜单。接受第一条
260
- prompt 后,它会变为普通 Session 行;隐藏 blank 行不会删除 Session 或 Worktree binding。
260
+ prompt 后,它会变为普通 Session 行;隐藏 blank 行不会删除 Session 或 Worktree 绑定。
261
261
 
262
262
  ### Session 活动与排序
263
263
 
@@ -271,68 +271,80 @@ pnpm dsh plugin --profile web remove @cerbur/clutch-dsh-worktree
271
271
  和状态;Session 菜单打开或行正在拖拽时不显示卡片。
272
272
  - 折叠的 Workspace、Main 或 Worktree 分组,只要任一未归档成员正在运行就显示相同的原生运行点,
273
273
  即使该 Session 被搜索隐藏也会计入。展开后隐藏聚合点;hover、focus 或打开菜单时显示原有
274
- 操作控件。
274
+ 操作控件,并只在此时占用操作栏宽度。
275
275
  - 用户发送新消息后,Session 会移动到当前 Main 或 Worktree 视觉分组队首。promotion、已观察
276
276
  时间戳和每组顺序只存在浏览器本地;手动拖动仍先调用 DSH 原生排序 API,成功后再更新本地顺序。
277
277
 
278
278
  ### Fork Worktree Session
279
279
 
280
- - 可以使用任意 DSH 原生 fork 入口:Session list 中的 tab、Worktree Session 菜单或
281
- Conversation fork 操作。插件包装共享的 DSH `sessions.fork` service,因此原生的 fork cut、
282
- 标题递增和 child lineage 语义保持不变。
283
- - DSH 创建 child 后,插件读取 parent 的 active sidecar binding,通过现有 `/api` Manager 写入
284
- child binding。随后 Worktree view 先刷新 binding,再重放浏览器本地 Workspace membership
285
- projection,因此 child 不会短暂出现在 Main/Local;刷新期间保留 ready 内容。
286
- - 如果 child 已创建但 sidecar 查询或 binding 失败,DSH 仍保留 child,plugin 显示 Retry Binding/
287
- Open Created Session 恢复操作。后续 plugin 初始化也会根据原生 Session lineage summary 重试可恢复
288
- 的 fork child;不会自动绑定无关的 subagent。
289
- - 这一流程不会把 child 持久化写入 DSH `Workspace.sessionIds`。native DSH Workspace view 只有在
290
- plugin 加载期间才能看到临时浏览器 projection;native Workspace 持久化数据保持不变。
280
+ - 支持通过任意 DSH 原生 fork 入口(会话列表选项、Worktree Session 菜单或会话内的 fork 操作)分叉会话。会话历史截取、标题递增和分叉血缘完全沿用 DSH 原生行为。
281
+ - 当父 Session 拥有活跃的 Worktree 绑定时,分叉出的子 Session 会自动继承并绑定到同一 Worktree,直接在 Worktree 视图中呈现。绑定刷新期间保持当前已就绪内容可见。
282
+ - 如果子 Session 已由 DSH 创建但插件绑定失败,DSH 仍保留该子 Session,界面提供“重试绑定”与“打开已创建会话”恢复操作。后续插件初始化也会根据原生会话血缘重试可恢复的子会话,绝不会自动绑定无关的子代理。
283
+ - 分叉绑定由插件外部索引维护,不修改 DSH 原生工作区持久化存储。
291
284
 
292
285
  ### 排序与管理 Worktree
293
286
 
294
- - 在所属 Workspace 内拖动 Worktree。排序持久化在 plugin sidecar 的有序 `worktrees` 数组中;
295
- Main 是固定的第一行,Worktree 不能跨 Workspace 移动。
296
- - 新创建或新导入的 Worktree 会插入所属 Workspace 的 Worktree 列表队头;已有 Worktree 顺序保持不变,Main 固定在第一位。
297
- - 打开 Main Worktree 共用的选项菜单复制所选行的绝对路径。Main detached/removed Worktree
298
- 只显示“复制路径”;active Worktree 还显示“移除 Worktree”并要求确认。
299
- - 导入的 Worktree plugin 创建的 Worktree 显示相同的 active 选项菜单。两种来源都执行真实
300
- `git worktree remove`;导入项的确认文案会警告关联 Worktree 目录可能被删除。Session 会
301
- 保留为 detached binding。
302
- - 移除 Worktree 不会删除其 Session。关系会保留为 detached,直到显式解绑。删除 Workspace
303
- 只会删除 DSH Workspace registration;其目录、Session、Git Worktree plugin
304
- sidecar 会保留。
305
- - Worktree 成功移除后,如果公共 DSH 权限服务可用,仍处于完全访问的 detached Session 会
306
- 归一化为 `workspace-write + ask`。权限服务不可用时显示未验证且可重试的警告;不会向
307
- detached Session 自动授予完全访问。
308
- - DSH 原生的 Workspace rename/delete/reorder Session 菜单继续可用。Session 拖动排序
309
- 限定在当前视觉 Main Worktree 分组中。
310
- - Main 分组显示当前 local branch:有分支时为 `本地(branch)`,DSH 没有返回当前分支时
311
- 回退为 `本地`。如果导入的 Workspace 是 Git 仓库中的子目录,会先解析 Git 根目录,再
312
- 复用与 Git 根目录相同的 branch/worktree 信息。branch 名称、路径、Workspace 名称、Session
313
- 标题以及原始 DSH/Git 错误信息保持原值。
314
- - 已有 Session 会在标题行显示只读上下文,格式为 `Session title` `Agent mode`
315
- `current branch / Worktree branch`。过长值在紧凑 chip 中折叠,并通过 hover card 显示完整
316
- 内容。原生标题存在且有锚点时,新会话空白 Hero 会在标题后显示 `Workspace (branch)`,并
317
- 提供相同的完整值 hover card。
318
- - Sidebar 折叠后,footer 保留原生的 icon-only action 尺寸和排版;插件不会再绘制独立的
319
- `WT` rail control。
287
+ - 在所属 Workspace 内拖动 Worktree 可进行排序。自定义顺序由插件保存;Main 始终固定在第一行,Worktree 不能跨 Workspace 移动。
288
+ - 新创建或新导入的 Worktree 会插入所属 Workspace 的 Worktree 列表队头;已有 Worktree 顺序保持不变。
289
+ - 打开 Main Worktree 共用的选项菜单可复制所选行的绝对路径。active Worktree 提供“复制路径”与
290
+ “归档 Worktree”。归档 active Worktree 属于内部归档操作:完整保留磁盘目录、关联绑定与运行时 cwd,并将该 Worktree 移动到工作区底部的“已归档”(Archived)分组中。
291
+ - 工作区底部在存在已归档 Worktree 时渲染“已归档”分组,默认处于折叠状态;标题显示已归档 Worktree 总数,收起时仍然显示。每个 Workspace 维护独立的折叠状态。
292
+ - 处于 repair 状态的 active Worktree 也提供“归档 Worktree”,仅归档记录,保留磁盘文件和绑定。处于 recovery-needed 状态的记录须先完成恢复,不能直接归档。
293
+ - 对于未清理磁盘的已归档 Worktree,选项菜单提供:
294
+ 1. “取消归档”(Unarchive Worktree):对于仅元数据标记归档且磁盘目录完好的 Worktree,可直接在菜单中点击取消归档,无需二次确认弹窗,立即恢复为活跃状态。
295
+ 2. “清理磁盘”(Clean Up Disk):弹出二次确认弹窗(明确提示工作树路径与破坏性删除不可逆),告知插件不核验 Session/子代理活动,请用户自行确认使用该目录的任务均已停止,否则删除可能导致任务失败或数据丢失;执行真正的非强制 `git worktree remove`,成功后记录清理完成,关联绑定转为 detached,并将完全访问权限归一化为 `workspace-write + ask`。磁盘清理提交与权限后续解耦:清理成功即确认提交、关闭对话框并将状态转为已清理;权限归一化失败或刷新异常提供独立恢复,不重复执行磁盘删除。如果 Worktree 目录或其 `.git` 入口已在外部删除,确认清理只将插件记录标记为完成并解绑,不再执行 Git 删除。
296
+ 3. “移出管理”(Remove from Management):弹出确认弹窗,删除该 Worktree 的插件记录与全部关联绑定,完整保留磁盘文件与 DSH 原生 Session;同时定向淘汰该 Worktree 的未决 fork 恢复、投影与权限提示。不需要校验 Session 活动。
297
+ - 对于已清理磁盘的 Worktree,选项菜单提供“移出管理”以彻底移除该插件记录。
298
+ - 会话活动展示仅用于信息参考,不阻断磁盘清理或移出管理。确认磁盘清理前,请自行停止所有使用该目录的任务,插件不会核验任务是否已停止。
299
+ - 删除 Workspace 只会删除 DSH 的 Workspace 登记;其目录、Session、Git Worktree 和插件数据完整保留。
300
+ - DSH 原生的 Workspace rename/delete/reorder 和 Session 菜单继续可用。Session 拖动排序限定在当前视觉 Main 或 Worktree 分组中。
301
+ - Main 分组显示当前 local branch:有分支时为 `本地(branch)`,DSH 没有返回当前分支时回退为 `本地`。如果导入的 Workspace 是 Git 仓库中的子目录,会先解析 Git 根目录,再复用与 Git 根目录相同的 branch/worktree 信息。branch 名称、路径、Workspace 名称、Session 标题以及原始错误信息保持原值。
302
+ - 已有 Session 会在标题行显示只读上下文,格式为 `Session title` → `Agent mode` → `current branch / Worktree branch`。过长值在紧凑 chip 中折叠,并通过 hover card 显示完整内容。原生标题存在且有锚点时,新会话空白 Hero 会在标题后显示 `Workspace (branch)`,并提供相同的完整值 hover card。
303
+ - Sidebar 折叠后,footer 保留原生的 icon-only action 尺寸和排版;插件不会额外绘制独立的 `WT` rail control。
304
+
305
+ ### 同步在 Git 中切换的分支
306
+
307
+ 外部执行 `git checkout` 后,下次 Worktree 读取显示“旧分支 当前分支”与分支变化提示。
308
+ 刷新或打开 Worktree 菜单时会读取,插件不持续监听 Git。分离 HEAD 会明确标注。
309
+ Session binding 和运行时 cwd 保持不变,普通分支切换不会锁住整个 Workspace
310
+
311
+ 在活动或归档 Worktree 菜单中选择“采用当前分支”(`Adopt current branch`)并确认,
312
+ 只更新插件记录的分支。确认期间 Git 分支或快照已变化时会拒绝操作,请刷新后重新确认。
313
+ 分离 HEAD 必须先在 Git 中切换到分支;清理磁盘前必须先采用当前分支。
314
+ Git 明确证明原记录已切走时,允许用空闲的旧分支创建 Worktree;真正被 checkout 的分支仍不可用。
315
+
316
+ 确认失败会在弹窗内显示错误。点击“重试”(`Retry`)重新读取当前分支和快照 token,
317
+ 再确认更新后的分支变化;刷新成功前不能再次提交旧确认。如果 Worktree 已不再处于
318
+ 分支漂移状态或进入分离 HEAD,弹窗会关闭。从该行创建新 Worktree 使用读到的当前分支,
319
+ 无需先采用分支;分离 HEAD 不提供此操作。
320
+
321
+ `recovery-needed` 行的菜单提供“重试恢复”(`Retry recovery`),作用于所属 Workspace。
322
+ 该操作只重试安全 journal 恢复,不自动采用分支、不删除未知路径、不清除未解决的身份问题。
323
+ 采用分支和恢复成功后只刷新所属 Workspace,并保留现有 ready 内容。
320
324
 
321
325
  ### 理解状态与恢复提示
322
326
 
323
- - `ready` 表示 Worktree 可用。`repair` 表示 Worktree、Session、binding 或 cwd 缺失/无效。
324
- `recovery-needed` 表示 Git/sidecar 操作或身份校验尚未解决,破坏性操作会被阻止。
325
- `detached` 表示 Git Worktree 已被移除,但关系仍然保留。active binding 指向缺失
327
+ - 操作、权限、绑定和刷新失败统一使用 DSH 原生 toast,逐条显示;相同错误不会随每次渲染重复提示。
328
+ toast 消失后,完整信息及原有重试/打开操作仍保留在可展开的“提示详情与恢复操作”入口。
329
+ 表单校验和 Workspace Git 初始化指引保留在对应输入附近。
330
+ - 悬停或聚焦 active Worktree 行可查看状态、路径以及目录/Git 登记缺失、分支漂移/分离 HEAD、
331
+ 恢复未完成的处理指引。打开菜单或拖动时不显示 hover 卡片。归档确认明确说明插件创建及外部
332
+ Worktree 都保留目录、Session 绑定和 cwd;“清理磁盘”仍是独立操作。
333
+ - `ready` 表示 Worktree 可用。`cleaned` 表示磁盘清理已完成且保留 sidecar 归档条目。
334
+ `repair` 表示 Worktree、Session、binding 或 cwd 缺失/无效。`recovery-needed` 表示 Git/sidecar
335
+ 操作或身份校验尚未解决,破坏性操作会被阻止。`detached` 表示 Git Worktree 已被移除,但关系仍然保留。active binding 指向缺失
326
336
  Worktree 时会显示明确的 repair 警告或错误,不会静默切换到其他 Worktree。
337
+ - 没有未完成 Git 事务时,目录缺失的 active 或 archived Worktree 保持 `repair`,可归档,
338
+ 不会阻断健康 Worktree 的 Session 绑定。
327
339
  - Worktree health 是 Git 的运行时 projection,不写入 sidecar。Git 前置条件失败按
328
340
  Workspace 显示提示:Git 可执行文件缺失时显示安装提示且不显示命令块,缺少 repository、
329
341
  初始 commit 或本地 branch 时显示可复制的 setup 命令。Connection、Gateway 和未预期的
330
342
  Worktree domain 错误会保留为可重试错误,不会伪装为空列表。
343
+ - 权限状态会明确显示为完全访问、回退到 `workspace-write`、保留用户限制、能力未验证、
344
+ 等待确认或可重试的设置失败,不会静默折叠为空列表或伪造成功。
331
345
  - 已经 ready 的视角刷新时会保留当前 projection,直到替换数据可用。同一个 Session 的
332
346
  snapshot 更新不会清空上下文,也不会触发重复读取;没有缓存视角时,首次进入和显式 Retry
333
347
  可以显示 loading 状态。
334
- - 权限状态会明确显示为完全访问、回退到 `workspace-write`、保留用户限制、能力未验证、
335
- 等待确认或可重试的设置失败,不会静默折叠为空列表或伪造成功。
336
348
 
337
349
  ## 界面语言
338
350
 
@@ -350,7 +362,7 @@ DSH 管理原始 Project/Workspace 身份和根目录、Session 身份和元数
350
362
  列表、消息、prompt、transcript 和历史记录。插件不会复制或重写这些内容。插件的外部索引
351
363
  位于 DSH host 的 plugin data directory 或独立 sidecar 存储中,只能包含以下关系事实:
352
364
 
353
- - `projectId`、`worktreeId` 和 `sessionId`;
365
+ - `projectId`、`worktreeId` 和 `sessionId` 映射关系;
354
366
  - 绝对 Worktree 路径、branch 和生命周期状态;
355
367
  - Worktree 来源(`plugin` 或 `external`);
356
368
  - binding 状态和 schema version。
@@ -359,87 +371,34 @@ DSH 管理原始 Project/Workspace 身份和根目录、Session 身份和元数
359
371
  Session 内容。如果 sidecar 不可用或损坏,原生 Project/Session 视角仍然可读,插件进入
360
372
  degraded/read-only 状态;不能用空索引覆盖 DSH 原生列表。
361
373
 
362
- sidecar 兼容读取 v1 和 v2 snapshot。旧记录会先在内存中归一化,第一次成功 mutation 会
363
- 以原子方式将 shard 升级为 v3。新的 v3 snapshot 使用 revision、不可逆向还原的 repository
364
- fingerprint,以及为 Git create/remove 保存的 durable pending-operation metadata。早期 v3
365
- 实现可能写入的 raw repository 字段也可以读取,并会在下一次稳定写入时清理。无效 JSON、
366
- 未知 schema version 和关系不变量错误都会报告为 corruption,不会静默重置为空索引。
374
+ Session 活动仅用于信息展示,不阻断磁盘清理或移出管理。确认磁盘清理前,请自行停止所有使用该目录的任务,插件不会核验任务是否已停止。
375
+ 原生活动变化或重新打开归档菜单会刷新所属 Workspace 并保留 ready 内容。
367
376
 
368
377
  一个 Session 最多绑定一个 active Worktree,一个 Worktree 可以绑定多个 Session。Session
369
378
  重复绑定同一个 Worktree 是幂等的,绑定两个 active Worktree 会产生 conflict。没有 binding、
370
379
  使用 Main binding 或处于 detached binding 的 Session 使用 Project 根目录作为 cwd;active
371
380
  Worktree binding 使用对应的 Worktree 路径。cwd 在每次执行时派生,不会写回 DSH Session 元数据。
372
381
 
373
- 创建 Worktree 时先创建 Git Worktree,再记录外部关系。Git create/remove mutation 会按
374
- Workspace repository 串行化跨 Host 进程执行,写入 durable pending operation,并在确认
375
- 实际 Git 结果后才发布稳定 sidecar 状态。如果 create 无法对账,或 path/repository identity
376
- 发生变化,操作会明确保留为可恢复状态;插件不会使用 force remove,也不会删除未知目录。
377
- sidecar 写入失败时会尽可能清理刚创建的 Git Worktree。删除 Worktree 失败时不会静默改变
378
- 关系,因此关系仍可重试,或会标记为 `recovery-needed`。创建 Session 时先调用 DSH 原生
379
- API,再写入 binding;binding 失败不会删除或修改已创建的 Session。
380
-
381
- Host 启动时,插件会针对已知 DSH Workspace 执行一次尽力而为的安全恢复。只有在 Git path
382
- 和 repository identity 都能确认时,才会完成 pending create/remove;否则保留 marker,并
383
- 显示 `WORKTREE_RECOVERY_REQUIRED` 或 `WORKTREE_IDENTITY_CHANGED`。它不会猜测性清理破坏性
384
- 状态。破坏性操作还可以携带最新 Worktree projection 生成的 opaque mutation token,避免
385
- 过期 UI 对已变化的记录执行操作。
386
-
387
- Worktree Session 流程将独立的 Worktree cwd 交给 DSH Session Controller,并将
388
- `{ workspaceId, sessionId }` 保持为浏览器本地 membership projection,而不是持久化的 DSH
389
- attach。它不会修改 DSH 源码、Session metadata 或原生 Workspace 存储。native list 刷新后会
390
- 重放 projection;binding 消失或 Client dispose 时会移除 projection。
391
-
392
- 权限变更只使用 DSH 公共的 per-Session 权限服务及其 `permission/preset`、`sandbox/mode`、
393
- `approval/policy` 记录。插件不会写入消息、prompt、transcript、Workspace 数据或 Session
394
- metadata,也不能扩大运行 DSH 的宿主沙箱边界。
395
-
396
- 空白 Hero 上下文只用于展示。由于当前 upstream DSH source checkout 没有 additive Hero
397
- headline slot,它的位置依赖原生 `[data-phase="hero"]` 和标题锚点;锚点不可用时浮层会消失,
398
- 未来有正式 DSH slot 时应迁移到该 slot。
399
-
400
- ## 开发与验证
401
-
402
- 从 workspace 根目录执行:
403
-
404
- ```bash
405
- cd /path/to/clutch-dsh
406
- pnpm install
407
- pnpm run check:workspace
408
- pnpm run check:patches
409
- pnpm --filter @cerbur/clutch-dsh-worktree typecheck
410
- pnpm --filter @cerbur/clutch-dsh-worktree build
411
- pnpm --filter @cerbur/clutch-dsh-worktree test
412
- ```
413
-
414
- 验证双语 README contract 和格式:
415
-
416
- ```bash
417
- cd /path/to/clutch-dsh/packages/clutch-dsh-worktree
418
- node --test test/readme-parity.test.mjs
419
- pnpm exec prettier --check README.md README.zh.md test/readme-parity.test.mjs
420
- ```
382
+ 创建 Worktree 时先创建 Git Worktree,再记录外部关系;sidecar 写入失败时会尽可能清理刚创建的
383
+ Git Worktree。创建 Session 时先调用 DSH 原生 API,再写入 binding;binding 失败不会删除或修改
384
+ 已创建的 Session。
421
385
 
422
- 完整 workspace 检查为:
386
+ Worktree Session 视图通过前端视图投影呈现绑定的 Worktree 上下文,不修改 DSH 原生 Workspace 持久化数据。
423
387
 
424
- ```bash
425
- cd /path/to/clutch-dsh
426
- pnpm run check
427
- ```
388
+ 权限变更只使用 DSH 公共的 per-Session 权限服务。插件不会写入消息、prompt、transcript、Workspace 数据或 Session
389
+ metadata,也不能扩大运行 DSH 的宿主沙箱边界。
428
390
 
429
- 不要提交生成的 `lib/`、coverage、sidecar 数据或本地凭据。数据边界和生命周期规则见
430
- [AGENTS.md](AGENTS.md),版本与安装来源见 [docs/RELEASING.md](docs/RELEASING.md),浏览器
431
- Consumer 边界见 [src/client/README.md](src/client/README.md)。
391
+ 空白 Hero 上下文只用于展示。由于当前 upstream DSH source checkout 没有 additive Hero
392
+ headline slot,它的位置依赖原生 DOM 锚点;锚点不可用时浮层会消失,未来有正式 DSH slot 时应迁移到该 slot。
432
393
 
433
- ## 插件市场描述
394
+ 关于详细的领域模型、生命周期迁移、恢复保证与开发贡献流程,请参阅:
434
395
 
435
- 向 `awesome-dsh-plugin` 投稿时使用 `git` 分类,并保持描述与 package 一致:
396
+ - [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) 权威架构设计、生命周期与恢复不变量
397
+ - [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) — 本地开发、测试验证与贡献指南
398
+ - [docs/RELEASING.md](docs/RELEASING.md) — 发布参数与版本规则
399
+ - [AGENTS.md](AGENTS.md) — Coding Agent 维护说明
400
+ - [src/client/README.md](src/client/README.md) — 浏览器客户端集成与界面接缝
436
401
 
437
- ```yaml
438
- category: git
439
- description:
440
- en: Adds a Worktree view to DSH Web UI that groups Sessions by Git worktree while keeping DSH as the source of truth.
441
- zh: 为 DSH Web UI 增加按 Git Worktree 组织 Session 的视角,同时继续由 DSH 管理原始 Project/Workspace 和 Session 数据。
442
- ```
402
+ ## 友情链接
443
403
 
444
- 市场投稿还需要在外部确认 `dsh-plugin` topic、仓库年龄和提交数等信息;这些外部属性无法
445
- 由 package README 设置。
404
+ - [LINUX DO](https://linux.do/) — 新的理想型社区
@@ -1,8 +1,5 @@
1
- import type { WorktreeSurfaceProps } from './worktree-surface-types.js';
2
- export type { WorktreeSurfaceInjected, WorktreeSurfaceProps } from './worktree-surface-types.js';
3
- /**
4
- * Peer Worktree navigation surface. It keeps the original DSH Workspace mode
5
- * intact and renders a browser-local Workspace → Worktree → Session projection.
6
- */
7
- export declare function WorktreeSurface({ useStore, actions, useSessions, useWorkspaces, t, available, expandState, sessionOrder, manager, viewReader, permission, confirmFullAccess, fullAccessConfirmation, onPermissionResult, onPermissionNotice, permissionNotice, invalidateWorktreeContext, createWorkspace, createSessionForWorktree: createSessionCallback, createMainSession, renameWorkspace, deleteWorkspace, insertWorkspaceBefore, insertSessionBefore, insertWorktreeBefore, renameSession, forkSession, archiveSession, forkRecovery, retryForkSession, ensureSessionWorkspace, syncSessionWorkspaces, openSession, }: WorktreeSurfaceProps): import("react").JSX.Element | null;
1
+ import type { WorktreeSurfaceProps } from './surface/types.js';
2
+ export type { WorktreeSurfaceInjected, WorktreeSurfaceProps } from './surface/types.js';
3
+ /** Composes independent surface state/action domains into the sidebar overlay. */
4
+ export declare function WorktreeSurface(inputProps: WorktreeSurfaceProps): import("react").JSX.Element | null;
8
5
  //# sourceMappingURL=WorktreeSurface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorktreeSurface.d.ts","sourceRoot":"","sources":["../../src/client/WorktreeSurface.tsx"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAQV,oBAAoB,EASrB,MAAM,6BAA6B,CAAC;AA6BrC,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAwEjG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,OAAO,EACP,WAAW,EACX,aAAa,EACb,CAAC,EACD,SAAS,EACT,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,wBAAwB,EAAE,qBAAqB,EAC/C,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,GACZ,EAAE,oBAAoB,sCA66DtB"}
1
+ {"version":3,"file":"WorktreeSurface.d.ts","sourceRoot":"","sources":["../../src/client/WorktreeSurface.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAc/D,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACxF,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB,sCAyR/D"}