@cerbur/clutch-dsh-worktree 0.1.16 → 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 (358) hide show
  1. package/README.md +214 -15
  2. package/README.zh.md +175 -12
  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 +5 -4
  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 +2 -1
  18. package/lib/client/dashboard/DashboardRequest.d.ts.map +1 -1
  19. package/lib/client/dashboard/DashboardRequest.js +3 -3
  20. package/lib/client/dashboard/DashboardRequest.js.map +1 -1
  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 +48 -24
  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 -52
  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 +39 -2
  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 +144 -0
  60. package/lib/client/locales.d.ts.map +1 -1
  61. package/lib/client/locales.js +204 -60
  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 +3 -1
  67. package/lib/client/overlay/sidebar-overlay-geometry.d.ts.map +1 -1
  68. package/lib/client/overlay/sidebar-overlay-geometry.js +94 -34
  69. package/lib/client/overlay/sidebar-overlay-geometry.js.map +1 -1
  70. package/lib/client/restart-notice.d.ts +10 -3
  71. package/lib/client/restart-notice.d.ts.map +1 -1
  72. package/lib/client/restart-notice.js +44 -11
  73. package/lib/client/restart-notice.js.map +1 -1
  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/NotificationToasts.d.ts +19 -3
  113. package/lib/client/surface/components/NotificationToasts.d.ts.map +1 -1
  114. package/lib/client/surface/components/NotificationToasts.js +73 -7
  115. package/lib/client/surface/components/NotificationToasts.js.map +1 -1
  116. package/lib/client/surface/components/OverlayScrollbar.d.ts +6 -0
  117. package/lib/client/surface/components/OverlayScrollbar.d.ts.map +1 -0
  118. package/lib/client/surface/components/OverlayScrollbar.js +84 -0
  119. package/lib/client/surface/components/OverlayScrollbar.js.map +1 -0
  120. package/lib/client/surface/components/RestartToast.d.ts.map +1 -1
  121. package/lib/client/surface/components/RestartToast.js +4 -3
  122. package/lib/client/surface/components/RestartToast.js.map +1 -1
  123. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
  124. package/lib/client/surface/components/SurfaceContent.js +110 -39
  125. package/lib/client/surface/components/SurfaceContent.js.map +1 -1
  126. package/lib/client/surface/components/WorkspaceTree.d.ts.map +1 -1
  127. package/lib/client/surface/components/WorkspaceTree.js +2 -1
  128. package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
  129. package/lib/client/surface/components/dialogs.d.ts.map +1 -1
  130. package/lib/client/surface/components/dialogs.js +14 -10
  131. package/lib/client/surface/components/dialogs.js.map +1 -1
  132. package/lib/client/surface/components/rows.d.ts +1 -1
  133. package/lib/client/surface/components/rows.d.ts.map +1 -1
  134. package/lib/client/surface/components/rows.js +15 -97
  135. package/lib/client/surface/components/rows.js.map +1 -1
  136. package/lib/client/surface/notification-queue.d.ts +15 -0
  137. package/lib/client/surface/notification-queue.d.ts.map +1 -1
  138. package/lib/client/surface/notification-queue.js +13 -2
  139. package/lib/client/surface/notification-queue.js.map +1 -1
  140. package/lib/client/surface/state/useSurfaceRefresh.d.ts +1 -1
  141. package/lib/client/surface/state/useSurfaceRefresh.d.ts.map +1 -1
  142. package/lib/client/surface/state/useSurfaceRefresh.js +13 -1
  143. package/lib/client/surface/state/useSurfaceRefresh.js.map +1 -1
  144. package/lib/client/surface/state/useSurfaceSources.d.ts +1 -1
  145. package/lib/client/surface/state/useSurfaceSources.d.ts.map +1 -1
  146. package/lib/client/surface/state/useSurfaceSources.js +4 -2
  147. package/lib/client/surface/state/useSurfaceSources.js.map +1 -1
  148. package/lib/client/surface/state/useTitleMarquee.d.ts +7 -0
  149. package/lib/client/surface/state/useTitleMarquee.d.ts.map +1 -0
  150. package/lib/client/surface/state/useTitleMarquee.js +60 -0
  151. package/lib/client/surface/state/useTitleMarquee.js.map +1 -0
  152. package/lib/client/surface/types.d.ts +8 -1
  153. package/lib/client/surface/types.d.ts.map +1 -1
  154. package/lib/client/view/worktree-error-copy.d.ts.map +1 -1
  155. package/lib/client/view/worktree-error-copy.js +69 -14
  156. package/lib/client/view/worktree-error-copy.js.map +1 -1
  157. package/lib/client/view/worktree-view-errors.d.ts.map +1 -1
  158. package/lib/client/view/worktree-view-errors.js +13 -5
  159. package/lib/client/view/worktree-view-errors.js.map +1 -1
  160. package/lib/client/worktree-connection.d.ts +6 -2
  161. package/lib/client/worktree-connection.d.ts.map +1 -1
  162. package/lib/client/worktree-connection.js +6 -0
  163. package/lib/client/worktree-connection.js.map +1 -1
  164. package/lib/client/worktree-tool-changes.d.ts +13 -0
  165. package/lib/client/worktree-tool-changes.d.ts.map +1 -0
  166. package/lib/client/worktree-tool-changes.js +64 -0
  167. package/lib/client/worktree-tool-changes.js.map +1 -0
  168. package/lib/client.js +2188 -947
  169. package/lib/client.js.map +1 -1
  170. package/lib/contract/index.d.ts +11 -1
  171. package/lib/contract/index.d.ts.map +1 -1
  172. package/lib/contract/index.js +9 -0
  173. package/lib/contract/index.js.map +1 -1
  174. package/lib/contract/tool-settings.d.ts +28 -0
  175. package/lib/contract/tool-settings.d.ts.map +1 -0
  176. package/lib/contract/tool-settings.js +10 -0
  177. package/lib/contract/tool-settings.js.map +1 -0
  178. package/lib/contract/worktree-tool-changes.d.ts +10 -0
  179. package/lib/contract/worktree-tool-changes.d.ts.map +1 -0
  180. package/lib/contract/worktree-tool-changes.js +2 -0
  181. package/lib/contract/worktree-tool-changes.js.map +1 -0
  182. package/lib/host/permission-preset-append.d.ts +15 -0
  183. package/lib/host/permission-preset-append.d.ts.map +1 -0
  184. package/lib/host/permission-preset-append.js +63 -0
  185. package/lib/host/permission-preset-append.js.map +1 -0
  186. package/lib/host/service.d.ts +17 -0
  187. package/lib/host/service.d.ts.map +1 -1
  188. package/lib/host/service.js +67 -11
  189. package/lib/host/service.js.map +1 -1
  190. package/lib/host/tool-settings.d.ts +14 -0
  191. package/lib/host/tool-settings.d.ts.map +1 -0
  192. package/lib/host/tool-settings.js +98 -0
  193. package/lib/host/tool-settings.js.map +1 -0
  194. package/lib/host/worktree-permission-manager.d.ts.map +1 -1
  195. package/lib/host/worktree-permission-manager.js +2 -4
  196. package/lib/host/worktree-permission-manager.js.map +1 -1
  197. package/lib/host/worktree-tool-changes.d.ts +12 -0
  198. package/lib/host/worktree-tool-changes.d.ts.map +1 -0
  199. package/lib/host/worktree-tool-changes.js +60 -0
  200. package/lib/host/worktree-tool-changes.js.map +1 -0
  201. package/lib/manage/manager-git-history.d.ts.map +1 -1
  202. package/lib/manage/manager-git-history.js +29 -28
  203. package/lib/manage/manager-git-history.js.map +1 -1
  204. package/lib/manage/manager-sessions.d.ts +5 -0
  205. package/lib/manage/manager-sessions.d.ts.map +1 -1
  206. package/lib/manage/manager-sessions.js +34 -11
  207. package/lib/manage/manager-sessions.js.map +1 -1
  208. package/lib/manage/manager-support.d.ts +3 -1
  209. package/lib/manage/manager-support.d.ts.map +1 -1
  210. package/lib/manage/manager-support.js +17 -0
  211. package/lib/manage/manager-support.js.map +1 -1
  212. package/lib/manage/manager-worktree-lifecycle.d.ts.map +1 -1
  213. package/lib/manage/manager-worktree-lifecycle.js +5 -4
  214. package/lib/manage/manager-worktree-lifecycle.js.map +1 -1
  215. package/lib/manage/manager-worktrees.d.ts +1 -0
  216. package/lib/manage/manager-worktrees.d.ts.map +1 -1
  217. package/lib/manage/manager-worktrees.js +74 -22
  218. package/lib/manage/manager-worktrees.js.map +1 -1
  219. package/lib/manage/manager.d.ts +10 -0
  220. package/lib/manage/manager.d.ts.map +1 -1
  221. package/lib/manage/manager.js +12 -1
  222. package/lib/manage/manager.js.map +1 -1
  223. package/lib/manage/types.d.ts +10 -1
  224. package/lib/manage/types.d.ts.map +1 -1
  225. package/lib/provider/generated-name.d.ts.map +1 -1
  226. package/lib/provider/generated-name.js +5 -4
  227. package/lib/provider/generated-name.js.map +1 -1
  228. package/lib/provider/git/adapter.d.ts.map +1 -1
  229. package/lib/provider/git/adapter.js +5 -2
  230. package/lib/provider/git/adapter.js.map +1 -1
  231. package/lib/provider/mutation-token.d.ts +1 -1
  232. package/lib/provider/mutation-token.d.ts.map +1 -1
  233. package/lib/provider/mutation-token.js +1 -0
  234. package/lib/provider/mutation-token.js.map +1 -1
  235. package/lib/provider/sidecar/repository.d.ts.map +1 -1
  236. package/lib/provider/sidecar/repository.js +1 -0
  237. package/lib/provider/sidecar/repository.js.map +1 -1
  238. package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
  239. package/lib/provider/sidecar/sidecar-schema.js +24 -4
  240. package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
  241. package/lib/provider/transaction/operations/adopt-branch.d.ts.map +1 -1
  242. package/lib/provider/transaction/operations/adopt-branch.js +6 -5
  243. package/lib/provider/transaction/operations/adopt-branch.js.map +1 -1
  244. package/lib/provider/transaction/operations/clean.d.ts.map +1 -1
  245. package/lib/provider/transaction/operations/clean.js +20 -19
  246. package/lib/provider/transaction/operations/clean.js.map +1 -1
  247. package/lib/provider/transaction/operations/create.d.ts +1 -1
  248. package/lib/provider/transaction/operations/create.d.ts.map +1 -1
  249. package/lib/provider/transaction/operations/create.js +23 -13
  250. package/lib/provider/transaction/operations/create.js.map +1 -1
  251. package/lib/provider/transaction/operations/import.d.ts.map +1 -1
  252. package/lib/provider/transaction/operations/import.js +7 -1
  253. package/lib/provider/transaction/operations/import.js.map +1 -1
  254. package/lib/provider/transaction/operations/remove.d.ts.map +1 -1
  255. package/lib/provider/transaction/operations/remove.js +20 -19
  256. package/lib/provider/transaction/operations/remove.js.map +1 -1
  257. package/lib/provider/transaction/recovery/failure-recovery.d.ts.map +1 -1
  258. package/lib/provider/transaction/recovery/failure-recovery.js +19 -18
  259. package/lib/provider/transaction/recovery/failure-recovery.js.map +1 -1
  260. package/lib/provider/transaction/recovery/recover.d.ts.map +1 -1
  261. package/lib/provider/transaction/recovery/recover.js +6 -2
  262. package/lib/provider/transaction/recovery/recover.js.map +1 -1
  263. package/lib/provider/transaction/support/inspection.d.ts.map +1 -1
  264. package/lib/provider/transaction/support/inspection.js +3 -2
  265. package/lib/provider/transaction/support/inspection.js.map +1 -1
  266. package/lib/provider/transaction/support/journal.d.ts.map +1 -1
  267. package/lib/provider/transaction/support/journal.js +8 -5
  268. package/lib/provider/transaction/support/journal.js.map +1 -1
  269. package/lib/provider/transaction/support/path-safety.d.ts.map +1 -1
  270. package/lib/provider/transaction/support/path-safety.js +4 -3
  271. package/lib/provider/transaction/support/path-safety.js.map +1 -1
  272. package/lib/provider/transaction/types.d.ts +2 -1
  273. package/lib/provider/transaction/types.d.ts.map +1 -1
  274. package/lib/provider/types.d.ts +3 -1
  275. package/lib/provider/types.d.ts.map +1 -1
  276. package/lib/provider/types.js +1 -1
  277. package/lib/provider/types.js.map +1 -1
  278. package/lib/provider/worktree-path.d.ts +10 -0
  279. package/lib/provider/worktree-path.d.ts.map +1 -0
  280. package/lib/provider/worktree-path.js +47 -0
  281. package/lib/provider/worktree-path.js.map +1 -0
  282. package/lib/tool/context.d.ts +14 -0
  283. package/lib/tool/context.d.ts.map +1 -0
  284. package/lib/tool/context.js +95 -0
  285. package/lib/tool/context.js.map +1 -0
  286. package/lib/tool/delegation.d.ts +41 -0
  287. package/lib/tool/delegation.d.ts.map +1 -0
  288. package/lib/tool/delegation.js +196 -0
  289. package/lib/tool/delegation.js.map +1 -0
  290. package/lib/tool/errors.d.ts +3 -0
  291. package/lib/tool/errors.d.ts.map +1 -0
  292. package/lib/tool/errors.js +63 -0
  293. package/lib/tool/errors.js.map +1 -0
  294. package/lib/tool/guidance.d.ts +5 -0
  295. package/lib/tool/guidance.d.ts.map +1 -0
  296. package/lib/tool/guidance.js +48 -0
  297. package/lib/tool/guidance.js.map +1 -0
  298. package/lib/tool/history.d.ts +27 -0
  299. package/lib/tool/history.d.ts.map +1 -0
  300. package/lib/tool/history.js +157 -0
  301. package/lib/tool/history.js.map +1 -0
  302. package/lib/tool/index.d.ts +8 -0
  303. package/lib/tool/index.d.ts.map +1 -0
  304. package/lib/tool/index.js +296 -0
  305. package/lib/tool/index.js.map +1 -0
  306. package/lib/tool/inputs.d.ts +12 -0
  307. package/lib/tool/inputs.d.ts.map +1 -0
  308. package/lib/tool/inputs.js +24 -0
  309. package/lib/tool/inputs.js.map +1 -0
  310. package/lib/tool/list-models.d.ts +3 -0
  311. package/lib/tool/list-models.d.ts.map +1 -0
  312. package/lib/tool/list-models.js +38 -0
  313. package/lib/tool/list-models.js.map +1 -0
  314. package/lib/tool/list-sessions.d.ts +3 -0
  315. package/lib/tool/list-sessions.d.ts.map +1 -0
  316. package/lib/tool/list-sessions.js +70 -0
  317. package/lib/tool/list-sessions.js.map +1 -0
  318. package/lib/tool/list-worktrees.d.ts +3 -0
  319. package/lib/tool/list-worktrees.d.ts.map +1 -0
  320. package/lib/tool/list-worktrees.js +39 -0
  321. package/lib/tool/list-worktrees.js.map +1 -0
  322. package/lib/tool/native-session.d.ts +74 -0
  323. package/lib/tool/native-session.d.ts.map +1 -0
  324. package/lib/tool/native-session.js +248 -0
  325. package/lib/tool/native-session.js.map +1 -0
  326. package/lib/tool/new-worktree.d.ts +3 -0
  327. package/lib/tool/new-worktree.d.ts.map +1 -0
  328. package/lib/tool/new-worktree.js +81 -0
  329. package/lib/tool/new-worktree.js.map +1 -0
  330. package/lib/tool/outputs.d.ts +50 -0
  331. package/lib/tool/outputs.d.ts.map +1 -0
  332. package/lib/tool/outputs.js +65 -0
  333. package/lib/tool/outputs.js.map +1 -0
  334. package/lib/tool/report-result.d.ts +3 -0
  335. package/lib/tool/report-result.d.ts.map +1 -0
  336. package/lib/tool/report-result.js +83 -0
  337. package/lib/tool/report-result.js.map +1 -0
  338. package/lib/tool/schema.d.ts +7 -0
  339. package/lib/tool/schema.d.ts.map +1 -0
  340. package/lib/tool/schema.js +92 -0
  341. package/lib/tool/schema.js.map +1 -0
  342. package/lib/tool/send-message.d.ts +3 -0
  343. package/lib/tool/send-message.d.ts.map +1 -0
  344. package/lib/tool/send-message.js +64 -0
  345. package/lib/tool/send-message.js.map +1 -0
  346. package/lib/tool/span-worktree.d.ts +3 -0
  347. package/lib/tool/span-worktree.d.ts.map +1 -0
  348. package/lib/tool/span-worktree.js +114 -0
  349. package/lib/tool/span-worktree.js.map +1 -0
  350. package/lib/tool/types.d.ts +54 -0
  351. package/lib/tool/types.d.ts.map +1 -0
  352. package/lib/tool/types.js +2 -0
  353. package/lib/tool/types.js.map +1 -0
  354. package/lib/typert.host.js +215 -44
  355. package/lib/typert.remote-client.d.ts +7 -1
  356. package/lib/typert.remote-client.d.ts.map +1 -1
  357. package/lib/typert.remote-client.js +215 -44
  358. package/package.json +14 -2
package/README.md CHANGED
@@ -6,21 +6,28 @@
6
6
  Sessions as Workspace → Worktree → Session while keeping DSH as the source of truth for
7
7
  Workspace identity, Session metadata, native lists, messages, and conversation history.
8
8
 
9
- The plugin stores Worktree relationships, acquisition facts, shared Worktree instructions, and Workspace-root
9
+ Tool preferences are stored in separate Host-owned files, outside relationship indexes and native
10
+ Session metadata. The plugin stores Worktree relationships, acquisition facts, shared Worktree instructions, and Workspace-root
10
11
  Main instructions in its own sidecar. Managed Worktrees expose a read-only baseline-relative Git & Changes dashboard, while Main exposes
11
12
  its Workspace-root HEAD history; the plugin does not copy transcripts or rewrite DSH Sessions.
12
13
 
13
14
  > **Preview:** Worktree Dashboard is an early, plugin-only MVP preview. Worktree navigation, lifecycle actions,
14
15
  > Session actions, Worktree/Main instructions, and the managed Worktree or Main Git & Changes view are connected.
15
- > Derived Worktrees, Settings, and other unfinished actions remain marked
16
+ > Derived Worktrees and other unfinished actions remain marked
16
17
  > **Coming soon**.
17
18
 
18
19
  ## Installation
19
20
 
20
21
  After installing into a running DSH instance, restart DSH Desktop, or restart the DSH Web
21
- server and refresh the page, to load the plugin Host. If the Client loads while the Host is
22
- still unavailable, a native toast reminds you once per Client load. Network failures and
23
- Workspace errors do not trigger the reminder.
22
+ server and refresh the page, to load the plugin Host and permission configuration. Finish
23
+ active tasks before restarting. If the Client loads while the Host is still unavailable, a
24
+ native toast reminds you once per Client load. If a Worktree Session permission check reports
25
+ that **Worktree Full Access** is unavailable and falls back to `workspace-write`, a separate
26
+ once-per-load toast gives the same restart guidance for a recent install or update. The
27
+ permission recovery message retains this guidance after the toast closes. Network failures,
28
+ Workspace errors, unverified permissions, and explicit user restrictions do not trigger the
29
+ missing-preset reminder. The reminder does not reload services or grant Full Access; if the
30
+ preset remains unavailable after restarting, check the DSH plugin and permission configuration.
24
31
 
25
32
  ### Install from npm
26
33
 
@@ -70,12 +77,20 @@ development details, see [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md).
70
77
  | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
71
78
  | **Worktree navigation** | <img src="assets/screenshots/screenshots-en.png" width="420" alt="DSH Worktree navigation with Workspace, Main, Worktree, and Session rows"> | Adds a Worktree mode to the native DSH Sidebar. On macOS desktop, the panel shares DSH's native glass material without a second background layer or duplicate navigation showing through. Other platforms retain the theme fill; reduced transparency uses a stronger fill. Workspace expansion and new Session rows use native-style fades and movement. Browse each Workspace through Local/Main and Git Worktree rows, then open the Sessions bound to each row. |
72
79
  | **Create and import Worktrees** | <img src="assets/screenshots/screenshots-import.png" width="420" alt="Worktree create and import dialog"> | Create a Worktree from a local branch, or register an existing branch-attached Worktree in place. Import does not move, copy, or edit the existing directory. |
73
- | **Worktree Dashboard** | <img src="assets/screenshots/screenshots-dashboard.png" width="420" alt="Worktree Dashboard preview with Sessions and Worktree actions"> | The preview Dashboard shows Worktree identity, path, Sessions, Worktree/Main instructions, connected actions, the host-provided Open In action, and the read-only Git & Changes view for managed Worktrees or Main. Derived Worktrees, Settings, and other unfinished cards remain **Coming soon**. |
80
+ | **Worktree Dashboard** | <img src="assets/screenshots/screenshots-dashboard.png" width="420" alt="Worktree Dashboard preview with Sessions and Worktree actions"> | The preview Dashboard shows Worktree identity, path, Sessions, Worktree/Main instructions, connected actions, the host-provided Open In action, and the read-only Git & Changes view for managed Worktrees or Main. Derived Worktrees and other unfinished cards remain **Coming soon**. |
81
+ | **Agent tool settings (Experimental)** | <img src="assets/screenshots/screenshots-worktree-tool.png" width="420" alt="Worktree tool settings preview"> | Choose capabilities for `/cluworktree` in General, and independently configure automatic injection in Local/Main and managed Worktree Dashboards. Delegated Sessions receive result reporting only by default. |
74
82
 
75
83
  ## Usage
76
84
 
77
85
  ### Open Worktree mode
78
86
 
87
+ The Sidebar scrollbar floats over the edge without shifting row spacing. Workspace folders
88
+ and rotating disclosure triangles match native DSH. An expanded Workspace containing the current
89
+ Session uses the native blue folder; other Workspace folders use the native gray. Hover over a long
90
+ Session title or Worktree
91
+ name to reveal its tail at native speed; leaving restores the start. Reduced motion reveals the
92
+ tail immediately.
93
+
79
94
  1. Start DSH Web and select **Worktree** from the DSH Sidebar footer.
80
95
  2. Search or expand a Workspace in the Worktree tree.
81
96
  3. Select Local/Main or a Worktree to browse its Sessions. The view is additive; DSH's native
@@ -89,9 +104,18 @@ keeps no collapsed rail; use the native titlebar control to reopen it. Row anima
89
104
  reduced motion and settles immediately during search, drag, and initial loading.
90
105
  On Web, Worktree navigation starts below the native DSH brand row, leaving its Sidebar toggle
91
106
  visible and clickable even when the New Session action displays keyboard shortcuts.
107
+ If the native Sidebar layout cannot be safely recognized, the plugin leaves native navigation
108
+ visible rather than covering its controls. It retries when the layout changes.
109
+ Worktree navigation and Dashboard support AppFrame layouts with extra titlebar or shell controls
110
+ before, between, or after the native columns, while keeping those controls accessible.
92
111
 
93
112
  ### Create a Worktree
94
113
 
114
+ You can also enable Agent tools with `/cluworktree`; see the next section.
115
+
116
+ New Worktree actions use the same branch icon as Worktree rows. The Workspace row button appears
117
+ on hover, keyboard focus, or while its options menu is open, matching the menu button.
118
+
95
119
  1. Open the options menu for Local/Main or an active Worktree and choose **Create Worktree**.
96
120
  2. Choose the local base branch. You can also provide a new branch name.
97
121
  3. Confirm the dialog. The plugin creates the Git Worktree, records its acquisition facts, and
@@ -100,9 +124,146 @@ visible and clickable even when the New Session action displays keyboard shortcu
100
124
  Git must have a usable repository, local branch, and initial commit. If setup is incomplete, DSH
101
125
  shows the relevant readiness message and copyable setup guidance.
102
126
 
127
+ When the Workspace is a repository subdirectory, its Worktrees preserve that relative directory.
128
+ For example, a Workspace at `/repo/packages/app` uses `<worktree-root>/packages/app` for new
129
+ Sessions, the Dashboard path, Copy Path, and Open In. Git operations still use the entire checkout.
130
+ If that directory is missing or resolves outside the checkout, the Worktree needs repair; it does
131
+ not fall back to the Git root or create the missing directory.
132
+
133
+ Already-bound Sessions with a legacy Git-root cwd remain usable after a subdirectory upgrade,
134
+ including automatic tool injection, Session discovery, follow-ups, result reports and default
135
+ Worktree creation from their own checkout's HEAD. Their original cwd and history remain unchanged;
136
+ new Session bindings still require the Workspace directory inside the checkout. Git file previews use
137
+ relative addresses inside the current Session cwd and absolute addresses for other checkout files,
138
+ subject to DSH's native file-access checks.
139
+
140
+ ### Enable Agent Worktree tools
141
+
142
+ Open **Settings → Worktree → General** and turn on **Worktree tools**, then select the
143
+ capabilities you want. Both tool switches start off. Run `/cluworktree` in a Session belonging to a
144
+ Workspace or an active managed Worktree to enable your selected capabilities. Turning the general
145
+ switch off removes the command; deselecting every capability turns the switch off automatically.
146
+
147
+ For automatic injection, open **Dashboard → Settings** for Local/Main or a managed Worktree and select
148
+ capabilities under **Automatically inject Worktree tools**. Local/Main settings apply only to unbound
149
+ Sessions in that Workspace root; Worktree settings apply only to Sessions bound to that Worktree.
150
+ Each configuration is stored separately. Selected tools are assembled before the first model request,
151
+ including after an Agent restart; ordinary prompt presets also include delegation guidance and,
152
+ in PTC mode, their SDK.
153
+ These selections are independent of General:
154
+ if General selects capabilities 1, 2, 3 and automatic injection selects 2, 3, 4, running
155
+ `/cluworktree` adds only capability 1. Already enabled tools remain until that Agent ends; changing
156
+ preferences affects future injection.
157
+
158
+ The Worktree entry in Settings uses the same branch icon as the sidebar.
159
+ Both settings use a card with the main switch at the top. Turning it on reveals tool selections
160
+ and their descriptions below a divider; turning it off collapses them and retains your selection.
161
+ Injection and reporting notes sit directly under the tool-selection explanation.
162
+ The command and automatic-injection settings carry DSH's native **Experimental** badge.
163
+ The settings explain each capability in plain language. Command results use DSH's native command
164
+ presentation and report how many capabilities were added or already available.
165
+ In a new Session, running `/cluworktree` immediately opens the conversation page and shows
166
+ the command outcome, without first sending a message to the model.
167
+
168
+ With delegation enabled, a request to create a feature Worktree and implement or fix something
169
+ defaults to creating the Worktree and assigning the work to its own Session. That Session handles
170
+ code edits, dependency setup and verification; creating the directory alone does not start the task.
171
+ Guidance prefers the enabled plugin tools over other Worktree/Session tools, while respecting
172
+ explicit requests to only create a Worktree, work in the current Session or use a different tool.
173
+
174
+ The six selectable capabilities correspond to these tools:
175
+
176
+ | Tool | Parameters | Behavior |
177
+ | ----------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
178
+ | `clutch_new_worktree` | `name`, optional `baseBranch`, `instructions` | Creates a new branch from the calling Session's healthy Worktree branch; Local/Main uses the root checkout's current branch. An explicit local `baseBranch` overrides this. Returns the acquisition `baseBranch` and `baseCommit`. |
179
+ | `clutch_list_worktrees` | optional `workspaceId` | Lists managed Worktree ids, branches, paths, lifecycle and health, plus available local base branches. Defaults to the calling Workspace. |
180
+ | `clutch_span_worktree` | `worktreeId` or legacy `name`, `prompt`, optional `model`, `title` | Creates a fresh native Session, binds it, configures its initial model and submits the prompt. Returns its `sessionId` and admission status. |
181
+ | `clutch_list_models` | optional `provider` | Lists native provider/model routes, reasoning efforts and provider failures, alongside the current Session model and deployment default. |
182
+ | `clutch_list_sessions` | optional `workspaceId`, `worktreeId` | Finds existing Sessions, binding state, status and title. Unavailable relations return a diagnostic without reading their history. |
183
+ | `clutch_send_message` | `sessionId`, `prompt`, optional `mode`, `requestId` | Continues an existing Session. `queue` is the default; `steer` corrects at a native step boundary. Returns admission, not a reply. |
184
+
185
+ For example, ask the Agent to call `clutch_new_worktree({ name: "feature/demo", instructions: "Run tests before finishing." })`,
186
+ then `clutch_span_worktree({ worktreeId: created.worktreeId, prompt: "Implement the feature and report the result." })` using the returned Worktree id.
187
+ The tool name is intentionally `clutch_span_worktree`. Worktree names are exact Git branch names
188
+ within the calling Workspace; prefer stable `worktreeId` for dispatch. Creating a Worktree alone does not create a Session.
189
+ Only committed state is inherited; staged, unstaged and untracked files are not copied.
190
+ An unhealthy binding never silently falls back to Main. The default captures the calling checkout's
191
+ committed HEAD, including a detached root HEAD. Detached sources return `baseCommit` without inventing
192
+ a `baseBranch`; an explicit local `baseBranch` remains available as an override.
193
+
194
+ Newly delegated Sessions automatically receive only
195
+ `clutch_report_result({ status, summary, evidence?, requestId? })`. The Host fixes the destination
196
+ to the delegating Session. `status` is `completed`, `blocked`, or `failed`; `summary` and `evidence`
197
+ are each limited to 2,000 characters. The other six capabilities require `/cluworktree` or the
198
+ Worktree's explicit automatic-injection selection. Reports arrive as ordinary queued native messages;
199
+ verify their claims and evidence before accepting completion. Reports are model-driven:
200
+ a crash, stopped Agent or unanswered human approval may prevent reporting. `idle` is not success.
201
+
202
+ Reporting is limited to the active delegated task. One successfully admitted `completed`, `blocked`,
203
+ or `failed` report consumes and clears its in-memory token. The reporting tool, SDK and guidance
204
+ stay stable; calls without a token are rejected. Later user input clears any remaining token;
205
+ it does not report to the former parent. An explicit new `clutch_send_message`
206
+ dispatch from that parent opens reporting again after its prompt is consumed. Uncertain report
207
+ admission permits only an identical retry with the returned `requestId`.
208
+ Tokens are never persisted and are lost on Agent/plugin restart. Dispatch retry identities are
209
+ retained in a bounded in-memory cache; expired retries fail explicitly instead of reopening reporting.
210
+ The plugin rejects self/ancestor messages and blocks further message/task dispatch from turns
211
+ triggered solely by reports or ordinary plugin messages. New human input permits dispatch again;
212
+ these guards apply to this plugin's tools in both native and PTC modes.
213
+
214
+ `clutch_read_session` and `clutch_wait_sessions` are removed from the model catalog. Do not
215
+ poll lists or read raw Session logs for progress. After successful dispatch or follow-up admission,
216
+ acknowledge dispatch and end the turn, waiting for the executing Session's pushed report.
217
+ Continue only separate independent work already requested by the user. Do not check the delegated
218
+ task through agent lists, terminal commands, Git, files or tests, and do not edit or commit it yourself.
219
+ An explicit user progress/investigation request or a concrete admission failure permits a targeted action.
220
+ Evaluate a report's supplied evidence rather than automatically rerunning checks; investigate only
221
+ when requested or when the evidence has a concrete gap or inconsistency.
222
+ Complete prompt presets such as **minimal** omit extra prompt sections; critical handoff and
223
+ model-selection rules also appear in native tool descriptions, preserving that preset's complete prompt.
224
+ Activation adds Agent-scoped guidance for choosing delegation from ordinary task descriptions,
225
+ so users need not specify tool names. Schemas describe exact ids, defaults and target alternatives
226
+ without `$schema`; errors explain the cause, correction and a valid invocation. A bad Session
227
+ history returns one `unavailable` diagnostic while keeping healthy list entries available.
228
+
229
+ In PTC mode, the generated SDK exposes concrete argument types, including required report
230
+ `status` and `summary`. Length limits remain in field descriptions and are enforced at execution;
231
+ mutually exclusive dispatch targets use `oneOf` compatible with DSH's schema subset.
232
+
233
+ `model` is `{ provider, model, reasoningEffort? }`. Omission inherits the calling Session's
234
+ effective selection, including reasoning effort; no catalog lookup is required for that default.
235
+ When the user specifies a different model or asks to choose one for the task, discover supported
236
+ routes with `clutch_list_models` if enabled and pass the selected object explicitly.
237
+ Unknown routes require discovery or user clarification, never invented ids or a deployment-default fallback.
238
+ An unavailable model or effort fails before creating a Session. Initial
239
+ model routing does not save the deployment default. It is runtime-only until DSH records the
240
+ first request header; after that, DSH restores the model from its own history. Restarting before
241
+ that first request discards the initial routing override. Native Session model changes take precedence.
242
+
243
+ Tool changes refresh the owning Workspace's Worktree list and bindings while preserving ready
244
+ content. Dispatch keeps the current conversation open and uses DSH's normal new-Session
245
+ preset and permission defaults; it does not automatically grant Worktree Full Access. Run `/cluworktree` again after the Agent or plugin restarts for capabilities not automatically injected.
246
+ No extra command arguments are accepted. All discovery, reports and follow-ups are restricted
247
+ to the calling Workspace; passing another `workspaceId` grants no additional access. Sessions
248
+ are ordinary native Sessions, not native subagent children or a persistent delegation catalog.
249
+ Detached bindings must be repaired before sending or reporting through these tools.
250
+ Healthy archived Worktrees retain their active bindings and allow Session follow-ups;
251
+ a missing Workspace root still blocks message admission.
252
+
253
+ If saving instructions, binding, or prompt admission fails after creation, the tool returns the
254
+ created identity and an error (`instructionsSaved: false`, `binding-failed`, `model-failed`,
255
+ `title-failed`, `reporting-failed`, or `prompt-failed`).
256
+ The Worktree and native Session are retained. Repair or open the returned Session before retrying;
257
+ another dispatch creates another Session. After a successful binding/model setup, retry a failed
258
+ prompt with `clutch_send_message` and the returned `requestId`. Reuse a request id only for the
259
+ same message retry; new follow-ups get fresh ids. `clutch_send_message` also returns `prompt-failed`
260
+ with that id when native admission throws, including when acceptance is uncertain.
261
+ Reporting destinations and activation are runtime-only. Restart discards the destination;
262
+ a resumed Session can enable `/cluworktree` and use `clutch_send_message` with a known delegator id. There are no automatic merge, publish or disk-cleanup tools.
263
+
103
264
  ### Import an existing Worktree
104
265
 
105
- 1. Select a Workspace, open its `+` action, and switch to **Import**.
266
+ 1. Select a Workspace, open its branch-icon **New Worktree** action, and switch to **Import**.
106
267
  2. Choose a candidate from the branch-and-path list.
107
268
  3. Select **Import Worktree**. The plugin registers the existing directory without moving,
108
269
  copying, or changing its files, then uses the same Session flow as a created Worktree.
@@ -111,8 +272,15 @@ The first version lists only ready, branch-attached, non-root Git Worktrees that
111
272
  managed by the plugin. Detached, bare, prunable, missing, and invalid entries are omitted. Imported
112
273
  Worktrees can still use Git & Changes after you choose a local baseline branch.
113
274
 
275
+ Import uses the same Workspace-relative directory rule and offers only candidates where that
276
+ directory is available. Existing records are projected with the corrected path when the original
277
+ Workspace is available. Existing DSH Sessions keep their original metadata; create a new Session
278
+ to run from the corrected directory.
279
+
114
280
  ### Create and open Sessions
115
281
 
282
+ The new Session buttons on Local/Main and Worktree rows use DSH's native chat-bubble-plus icon.
283
+
116
284
  - Use **+** on Local/Main for a normal DSH Session whose runtime directory is the Workspace root.
117
285
  - Use **+** on a Worktree for a Session whose runtime directory is that Worktree.
118
286
  - When possible, the plugin reuses an unarchived blank Session with the exact target directory.
@@ -127,7 +295,7 @@ or open recovery actions; the plugin does not delete or rewrite the DSH Session.
127
295
  Open **Dashboard** from a Local/Main or Worktree row menu, its hover action, or the Dashboard icon
128
296
  beside the native Session-header actions. The header icon opens it in one click even when the Sidebar
129
297
  is collapsed, without expanding the Sidebar. If the target is still loading, the request stays open
130
- and shows loading or a retryable error in the center area. The Dashboard is a peer page to the native Session content: it
298
+ and shows loading in the center area, with failures announced by toast and retries available in Worktree settings. The Dashboard is a peer page to the native Session content: it
131
299
  occupies the center area beside the Sidebar while leaving an already-open right sidebar visible for a
132
300
  session-bound target. When the target Worktree has Sessions, opening its Dashboard waits for an initial pending
133
301
  Session list to become ready, then keeps the current Session if it belongs to that Worktree; otherwise it
@@ -146,7 +314,7 @@ Use **Back to session**, Escape, a Sidebar Session, or Worktree mode exit to clo
146
314
  Sessions, the top-right action becomes **New Session** and starts one in that Worktree. The connected MVP surface
147
315
  can show Overview and Sessions, create a Session or Worktree, archive a Worktree, edit instructions, copy a
148
316
  path, open the recorded directory in VS Code, and inspect Git & Changes.
149
- Derived Worktrees, Settings, and other marked quick actions remain placeholders. VS Code must be
317
+ Derived Worktrees and other marked quick actions remain placeholders. VS Code must be
150
318
  installed on the browser's machine and able to access the recorded path; the link does not verify
151
319
  launch success.
152
320
 
@@ -265,6 +433,25 @@ Instructions stay in the plugin's own data. They are not written to the project
265
433
  `AGENTS.md` file. Clearing, detaching, cleaning, or forgetting a Worktree stops future injection; archiving
266
434
  keeps an active binding and therefore keeps its Worktree instruction effective. Unchanged instruction text is not repeatedly added while its message remains visible.
267
435
 
436
+ ### Resolve errors
437
+
438
+ Failures in the Worktree list, dialogs, and Dashboard appear as native toasts in the current DSH
439
+ language (English or Chinese). Each message explains the problem and how to recover. The list
440
+ keeps its existing content and has no error banner or diagnostics drawer at the top.
441
+
442
+ Use **Errors & recovery** in the toast, or open **Settings → Worktree → Errors & recovery**,
443
+ to read each failure and expand its original
444
+ diagnostics (including Git stderr). Retry reads, recover interrupted Worktree operations, retry
445
+ Session bindings, or open retained Sessions from the same tab. Records remain after the toast
446
+ fades; the list and Git panels have no inline error or retry controls. Closed operation views
447
+ disable their recovery actions; reopen the corresponding view to load its current state.
448
+ Records stay in page memory and clear on reload. **Clear history** keeps active recoveries.
449
+ Dialogs keep input; failed instruction and baseline saves retain drafts. Git setup guidance
450
+ stays in the creation dialog. Matching Git failures share one toast while keeping separate records.
451
+
452
+ The Worktree settings section uses DSH's native tabs, status tags and compact controls. Its
453
+ text, actions and diagnostic details follow the font size selected in **Settings → General**.
454
+
268
455
  ### Archive or remove a Worktree
269
456
 
270
457
  - **Archive Worktree** is non-destructive. It keeps the directory, bindings, instructions, and
@@ -322,7 +509,11 @@ keeps an active binding and therefore keeps its Worktree instruction effective.
322
509
  and untracked files when requested but are never written back to Git. The Dashboard does not provide
323
510
  commit, staging, reset, revert, cherry-pick, fetch, push, pull, pull requests, graph lanes, pagination,
324
511
  or syntax highlighting.
325
- - Session rows use DSH's native status and relative-time presentation. Collapsed Workspace, Main,
512
+ - Session rows and Dashboard cards use DSH's native status and relative-time presentation. The green
513
+ completion dot is DSH's unread reminder for a Session that stops outside the current main view;
514
+ opening that Session or running it again clears the reminder. A cold-start idle Session does not
515
+ count as completed. The reminder remains DSH-owned and is not persisted by this plugin.
516
+ Collapsed Workspace, Main,
326
517
  and Worktree groups derive one aggregate `StateDot` from their complete eligible membership (after native blank/archive filtering): waiting
327
518
  approval (and other pending-interaction warnings) takes priority over running, and running
328
519
  takes priority over completed. Idle Sessions do not contribute a group dot; Worktree health
@@ -330,10 +521,13 @@ keeps an active binding and therefore keeps its Worktree instruction effective.
330
521
  remains browser-local; Main remains fixed first, Worktree drag updates only this local order projection,
331
522
  and Main drag updates native Workspace order only after DSH accepts it.
332
523
  - Active Worktree Sessions may request the named `worktree-full-access` preset after an explicit
333
- confirmation. It combines DSH `danger-full-access` with `ask`, keeps approval prompts enabled,
334
- and does not change network or process policy. If unavailable, the plugin falls back to
335
- `workspace-write + ask` when possible or reports an unverified, retryable state. It cannot
336
- exceed the sandbox imposed by the host running DSH.
524
+ confirmation. The plugin appends this preset while preserving DSH's existing presets, default
525
+ selection, and official Auto review integration. It combines DSH `danger-full-access` with `ask`,
526
+ keeps approval prompts enabled, and does not change network or process policy. If unavailable, the plugin falls back to
527
+ `workspace-write + ask` when possible or reports an unverified, retryable state. Permission
528
+ services may mount late or be replaced: retry uses the currently available capabilities without
529
+ restarting the Worktree Host. A temporarily missing service never grants Full Access, and an
530
+ explicit user restriction is preserved. It cannot exceed the sandbox imposed by the host running DSH.
337
531
  - Session-to-Worktree bindings and permission checks compare physical filesystem identity on the Host (`stat`/`realpath`) rather than relying on lexical path equality. This ensures robust compatibility across Windows and macOS path variations (including drive-letter casing, forward/backward slashes, UNC paths, and extended-length prefixes like `\\?\\`). On Windows, sidecar atomic persistence uses file-handle synchronization with best-effort directory sync, and Git CLI integration cleanly handles `NUL` null-device paths and CRLF line endings.
338
532
  - Git must be installed and available on `PATH`. A missing Git executable shows install guidance
339
533
  and no command block; the plugin does not run setup or installation commands.
@@ -349,7 +543,9 @@ keeps an active binding and therefore keeps its Worktree instruction effective.
349
543
 
350
544
  Worktree mode follows DSH's current interface language. The entry point, tree, menus, dialogs,
351
545
  statuses, Dashboard labels, and retry messages are localized in English and Chinese. Workspace
352
- names, Session titles, branch names, paths, and raw DSH or Git errors keep their original values.
546
+ names, Session titles, branch names, and paths keep their original values. Errors use localized
547
+ problem and recovery guidance; unknown errors include a support code. Original diagnostics are available in Worktree settings. The plugin
548
+ does not write them to DSH logs.
353
549
 
354
550
  ## Development
355
551
 
@@ -364,11 +560,14 @@ For architecture, local DSH integration, testing, and contribution details, see:
364
560
  The focused package commands are:
365
561
 
366
562
  ```bash
563
+ pnpm --filter @cerbur/clutch-dsh-worktree lint
367
564
  pnpm --filter @cerbur/clutch-dsh-worktree typecheck
368
565
  pnpm --filter @cerbur/clutch-dsh-worktree build
369
566
  pnpm --filter @cerbur/clutch-dsh-worktree test
370
567
  ```
371
568
 
569
+ Lint checks both source and test files. Resolve ESLint errors before committing.
570
+
372
571
  The bilingual README structure is checked with:
373
572
 
374
573
  ```bash