@dsh-cove/dsh-web-all 0.0.0-stage → 0.4.3

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 (912) hide show
  1. package/LICENSE +202 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +201 -2
  4. package/README.zh.md +202 -0
  5. package/cordis.patch.yml +59 -0
  6. package/lib/client.js +25413 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/index.js +20024 -0
  9. package/lib/invariant.js +6 -0
  10. package/lib/types/client/compat.d.ts +29 -0
  11. package/lib/types/client/compat.d.ts.map +1 -0
  12. package/lib/types/client/compat.js +69 -0
  13. package/lib/types/client/conversation/git-branch.d.ts +13 -0
  14. package/lib/types/client/conversation/git-branch.d.ts.map +1 -0
  15. package/lib/types/client/conversation/git-branch.js +121 -0
  16. package/lib/types/client/conversation/git-graph/api.d.ts +42 -0
  17. package/lib/types/client/conversation/git-graph/api.d.ts.map +1 -0
  18. package/lib/types/client/conversation/git-graph/api.js +72 -0
  19. package/lib/types/client/conversation/git-graph/branch-chip.d.ts +47 -0
  20. package/lib/types/client/conversation/git-graph/branch-chip.d.ts.map +1 -0
  21. package/lib/types/client/conversation/git-graph/branch-chip.js +268 -0
  22. package/lib/types/client/conversation/git-graph/branch-popover.d.ts +32 -0
  23. package/lib/types/client/conversation/git-graph/branch-popover.d.ts.map +1 -0
  24. package/lib/types/client/conversation/git-graph/branch-popover.js +108 -0
  25. package/lib/types/client/conversation/git-graph/chip.d.ts +24 -0
  26. package/lib/types/client/conversation/git-graph/chip.d.ts.map +1 -0
  27. package/lib/types/client/conversation/git-graph/chip.js +15 -0
  28. package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts +30 -0
  29. package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts.map +1 -0
  30. package/lib/types/client/conversation/git-graph/create-branch-dialog.js +52 -0
  31. package/lib/types/client/conversation/git-graph/error-copy.d.ts +17 -0
  32. package/lib/types/client/conversation/git-graph/error-copy.d.ts.map +1 -0
  33. package/lib/types/client/conversation/git-graph/error-copy.js +44 -0
  34. package/lib/types/client/conversation/git-graph/graph-dialog.d.ts +21 -0
  35. package/lib/types/client/conversation/git-graph/graph-dialog.d.ts.map +1 -0
  36. package/lib/types/client/conversation/git-graph/graph-dialog.js +112 -0
  37. package/lib/types/client/conversation/git-graph/hero-seat.d.ts +53 -0
  38. package/lib/types/client/conversation/git-graph/hero-seat.d.ts.map +1 -0
  39. package/lib/types/client/conversation/git-graph/hero-seat.js +54 -0
  40. package/lib/types/client/conversation/git-graph/locales.d.ts +88 -0
  41. package/lib/types/client/conversation/git-graph/locales.d.ts.map +1 -0
  42. package/lib/types/client/conversation/git-graph/locales.js +85 -0
  43. package/lib/types/client/conversation/git-graph/sse-leader.d.ts +37 -0
  44. package/lib/types/client/conversation/git-graph/sse-leader.d.ts.map +1 -0
  45. package/lib/types/client/conversation/git-graph/sse-leader.js +101 -0
  46. package/lib/types/client/conversation/index.d.ts +43 -0
  47. package/lib/types/client/conversation/index.d.ts.map +1 -0
  48. package/lib/types/client/conversation/index.js +39 -0
  49. package/lib/types/client/conversation/selector-context.d.ts +12 -0
  50. package/lib/types/client/conversation/selector-context.d.ts.map +1 -0
  51. package/lib/types/client/conversation/selector-context.js +11 -0
  52. package/lib/types/client/conversation/session-lane-chip.d.ts +72 -0
  53. package/lib/types/client/conversation/session-lane-chip.d.ts.map +1 -0
  54. package/lib/types/client/conversation/session-lane-chip.js +163 -0
  55. package/lib/types/client/conversation/session-lane-locales.d.ts +22 -0
  56. package/lib/types/client/conversation/session-lane-locales.d.ts.map +1 -0
  57. package/lib/types/client/conversation/session-lane-locales.js +29 -0
  58. package/lib/types/client/conversation/subagent-model-dom.d.ts +16 -0
  59. package/lib/types/client/conversation/subagent-model-dom.d.ts.map +1 -0
  60. package/lib/types/client/conversation/subagent-model-dom.js +138 -0
  61. package/lib/types/client/conversation/subagent-model.d.ts +17 -0
  62. package/lib/types/client/conversation/subagent-model.d.ts.map +1 -0
  63. package/lib/types/client/conversation/subagent-model.js +156 -0
  64. package/lib/types/client/conversation/worktree/api.d.ts +97 -0
  65. package/lib/types/client/conversation/worktree/api.d.ts.map +1 -0
  66. package/lib/types/client/conversation/worktree/api.js +239 -0
  67. package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts +35 -0
  68. package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts.map +1 -0
  69. package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.js +55 -0
  70. package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts +27 -0
  71. package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts.map +1 -0
  72. package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.js +49 -0
  73. package/lib/types/client/conversation/worktree/lane-binding.d.ts +46 -0
  74. package/lib/types/client/conversation/worktree/lane-binding.d.ts.map +1 -0
  75. package/lib/types/client/conversation/worktree/lane-binding.js +60 -0
  76. package/lib/types/client/conversation/worktree/lane-menu.d.ts +51 -0
  77. package/lib/types/client/conversation/worktree/lane-menu.d.ts.map +1 -0
  78. package/lib/types/client/conversation/worktree/lane-menu.js +140 -0
  79. package/lib/types/client/conversation/worktree/lane-open.d.ts +126 -0
  80. package/lib/types/client/conversation/worktree/lane-open.d.ts.map +1 -0
  81. package/lib/types/client/conversation/worktree/lane-open.js +140 -0
  82. package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts +79 -0
  83. package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts.map +1 -0
  84. package/lib/types/client/conversation/worktree/lane-workspace-sweeper.js +116 -0
  85. package/lib/types/client/conversation/worktree/lifecycle.d.ts +29 -0
  86. package/lib/types/client/conversation/worktree/lifecycle.d.ts.map +1 -0
  87. package/lib/types/client/conversation/worktree/lifecycle.js +67 -0
  88. package/lib/types/client/conversation/worktree/locales.d.ts +58 -0
  89. package/lib/types/client/conversation/worktree/locales.d.ts.map +1 -0
  90. package/lib/types/client/conversation/worktree/locales.js +86 -0
  91. package/lib/types/client/conversation/worktree/semantic.d.ts +11 -0
  92. package/lib/types/client/conversation/worktree/semantic.d.ts.map +1 -0
  93. package/lib/types/client/conversation/worktree/semantic.js +10 -0
  94. package/lib/types/client/index.d.ts +14 -0
  95. package/lib/types/client/index.d.ts.map +1 -0
  96. package/lib/types/client/index.js +45 -0
  97. package/lib/types/client/lark-inbox/i18n.d.ts +63 -0
  98. package/lib/types/client/lark-inbox/i18n.d.ts.map +1 -0
  99. package/lib/types/client/lark-inbox/i18n.js +119 -0
  100. package/lib/types/client/lark-inbox/wizard.d.ts +19 -0
  101. package/lib/types/client/lark-inbox/wizard.d.ts.map +1 -0
  102. package/lib/types/client/lark-inbox/wizard.js +158 -0
  103. package/lib/types/client/notify/i18n.d.ts +47 -0
  104. package/lib/types/client/notify/i18n.d.ts.map +1 -0
  105. package/lib/types/client/notify/i18n.js +87 -0
  106. package/lib/types/client/settings/family-scope.d.ts +23 -0
  107. package/lib/types/client/settings/family-scope.d.ts.map +1 -0
  108. package/lib/types/client/settings/family-scope.js +30 -0
  109. package/lib/types/client/settings/lark-inbox.d.ts +73 -0
  110. package/lib/types/client/settings/lark-inbox.d.ts.map +1 -0
  111. package/lib/types/client/settings/lark-inbox.js +144 -0
  112. package/lib/types/client/settings/notify.d.ts +66 -0
  113. package/lib/types/client/settings/notify.d.ts.map +1 -0
  114. package/lib/types/client/settings/notify.js +139 -0
  115. package/lib/types/client/settings/primitives-0.2.d.ts +137 -0
  116. package/lib/types/client/settings/primitives-0.2.d.ts.map +1 -0
  117. package/lib/types/client/settings/primitives-0.2.js +8 -0
  118. package/lib/types/client/sidebar/RenderBoundary.d.ts +17 -0
  119. package/lib/types/client/sidebar/RenderBoundary.d.ts.map +1 -0
  120. package/lib/types/client/sidebar/RenderBoundary.js +18 -0
  121. package/lib/types/client/sidebar/agent-browser.d.ts +9 -0
  122. package/lib/types/client/sidebar/agent-browser.d.ts.map +1 -0
  123. package/lib/types/client/sidebar/agent-browser.js +102 -0
  124. package/lib/types/client/sidebar/diff-view.d.ts +58 -0
  125. package/lib/types/client/sidebar/diff-view.d.ts.map +1 -0
  126. package/lib/types/client/sidebar/diff-view.js +223 -0
  127. package/lib/types/client/sidebar/git-workbench.d.ts +41 -0
  128. package/lib/types/client/sidebar/git-workbench.d.ts.map +1 -0
  129. package/lib/types/client/sidebar/git-workbench.js +480 -0
  130. package/lib/types/client/sidebar/icons.d.ts +9 -0
  131. package/lib/types/client/sidebar/icons.d.ts.map +1 -0
  132. package/lib/types/client/sidebar/icons.js +6 -0
  133. package/lib/types/client/sidebar/index.d.ts +19 -0
  134. package/lib/types/client/sidebar/index.d.ts.map +1 -0
  135. package/lib/types/client/sidebar/index.js +12 -0
  136. package/lib/types/client/sidebar/native-panels.d.ts +19 -0
  137. package/lib/types/client/sidebar/native-panels.d.ts.map +1 -0
  138. package/lib/types/client/sidebar/native-panels.js +103 -0
  139. package/lib/types/client/sidebar/page-shell.d.ts +52 -0
  140. package/lib/types/client/sidebar/page-shell.d.ts.map +1 -0
  141. package/lib/types/client/sidebar/page-shell.js +18 -0
  142. package/lib/types/client/sidebar/panels/memoir/api.d.ts +258 -0
  143. package/lib/types/client/sidebar/panels/memoir/api.d.ts.map +1 -0
  144. package/lib/types/client/sidebar/panels/memoir/api.js +135 -0
  145. package/lib/types/client/sidebar/panels/memoir/controller.d.ts +22 -0
  146. package/lib/types/client/sidebar/panels/memoir/controller.d.ts.map +1 -0
  147. package/lib/types/client/sidebar/panels/memoir/controller.js +38 -0
  148. package/lib/types/client/sidebar/panels/memoir/cwd.d.ts +80 -0
  149. package/lib/types/client/sidebar/panels/memoir/cwd.d.ts.map +1 -0
  150. package/lib/types/client/sidebar/panels/memoir/cwd.js +96 -0
  151. package/lib/types/client/sidebar/panels/memoir/i18n.d.ts +21 -0
  152. package/lib/types/client/sidebar/panels/memoir/i18n.d.ts.map +1 -0
  153. package/lib/types/client/sidebar/panels/memoir/i18n.js +288 -0
  154. package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts +11 -0
  155. package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts.map +1 -0
  156. package/lib/types/client/sidebar/panels/memoir/panel-activation.js +37 -0
  157. package/lib/types/client/sidebar/panels/memoir/panel.d.ts +26 -0
  158. package/lib/types/client/sidebar/panels/memoir/panel.d.ts.map +1 -0
  159. package/lib/types/client/sidebar/panels/memoir/panel.js +423 -0
  160. package/lib/types/client/sidebar/panels/memoir/styles.d.ts +22 -0
  161. package/lib/types/client/sidebar/panels/memoir/styles.d.ts.map +1 -0
  162. package/lib/types/client/sidebar/panels/memoir/styles.js +774 -0
  163. package/lib/types/client/sidebar/panels/memoir/types.d.ts +7 -0
  164. package/lib/types/client/sidebar/panels/memoir/types.d.ts.map +1 -0
  165. package/lib/types/client/sidebar/panels/memoir/types.js +5 -0
  166. package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts +8 -0
  167. package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts.map +1 -0
  168. package/lib/types/client/sidebar/panels/ssh/ClusterTab.js +53 -0
  169. package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts +13 -0
  170. package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts.map +1 -0
  171. package/lib/types/client/sidebar/panels/ssh/HostFormDialog.js +110 -0
  172. package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts +26 -0
  173. package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts.map +1 -0
  174. package/lib/types/client/sidebar/panels/ssh/HostsTab.js +175 -0
  175. package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts +14 -0
  176. package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts.map +1 -0
  177. package/lib/types/client/sidebar/panels/ssh/SshPanel.js +34 -0
  178. package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts +18 -0
  179. package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts.map +1 -0
  180. package/lib/types/client/sidebar/panels/ssh/TerminalTab.js +207 -0
  181. package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts +8 -0
  182. package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts.map +1 -0
  183. package/lib/types/client/sidebar/panels/ssh/TransferTab.js +168 -0
  184. package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts +18 -0
  185. package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts.map +1 -0
  186. package/lib/types/client/sidebar/panels/ssh/TunnelsTab.js +161 -0
  187. package/lib/types/client/sidebar/panels/ssh/api.d.ts +80 -0
  188. package/lib/types/client/sidebar/panels/ssh/api.d.ts.map +1 -0
  189. package/lib/types/client/sidebar/panels/ssh/api.js +333 -0
  190. package/lib/types/client/sidebar/panels/ssh/controller.d.ts +23 -0
  191. package/lib/types/client/sidebar/panels/ssh/controller.d.ts.map +1 -0
  192. package/lib/types/client/sidebar/panels/ssh/controller.js +41 -0
  193. package/lib/types/client/sidebar/panels/ssh/helpers.d.ts +44 -0
  194. package/lib/types/client/sidebar/panels/ssh/helpers.d.ts.map +1 -0
  195. package/lib/types/client/sidebar/panels/ssh/helpers.js +53 -0
  196. package/lib/types/client/sidebar/panels/ssh/locales.d.ts +155 -0
  197. package/lib/types/client/sidebar/panels/ssh/locales.d.ts.map +1 -0
  198. package/lib/types/client/sidebar/panels/ssh/locales.js +312 -0
  199. package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts +3 -0
  200. package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts.map +1 -0
  201. package/lib/types/client/sidebar/panels/ssh/xterm.css.js +2 -0
  202. package/lib/types/client/sidebar/right-pane-i18n.d.ts +121 -0
  203. package/lib/types/client/sidebar/right-pane-i18n.d.ts.map +1 -0
  204. package/lib/types/client/sidebar/right-pane-i18n.js +239 -0
  205. package/lib/types/client/sidebar/right-pane.d.ts +27 -0
  206. package/lib/types/client/sidebar/right-pane.d.ts.map +1 -0
  207. package/lib/types/client/sidebar/right-pane.js +112 -0
  208. package/lib/types/client/sidebar/scope.d.ts +17 -0
  209. package/lib/types/client/sidebar/scope.d.ts.map +1 -0
  210. package/lib/types/client/sidebar/scope.js +41 -0
  211. package/lib/types/client/trust.d.ts +78 -0
  212. package/lib/types/client/trust.d.ts.map +1 -0
  213. package/lib/types/client/trust.js +130 -0
  214. package/lib/types/client/ui-icons.d.ts +19 -0
  215. package/lib/types/client/ui-icons.d.ts.map +1 -0
  216. package/lib/types/client/ui-icons.js +33 -0
  217. package/lib/types/core/git-graph/commands.d.ts +36 -0
  218. package/lib/types/core/git-graph/commands.d.ts.map +1 -0
  219. package/lib/types/core/git-graph/commands.js +122 -0
  220. package/lib/types/core/git-graph/protocol.d.ts +104 -0
  221. package/lib/types/core/git-graph/protocol.d.ts.map +1 -0
  222. package/lib/types/core/git-graph/protocol.js +142 -0
  223. package/lib/types/core/index.d.ts +3 -0
  224. package/lib/types/core/index.d.ts.map +1 -0
  225. package/lib/types/core/index.js +2 -0
  226. package/lib/types/core/lark-inbox/gating.d.ts +21 -0
  227. package/lib/types/core/lark-inbox/gating.d.ts.map +1 -0
  228. package/lib/types/core/lark-inbox/gating.js +17 -0
  229. package/lib/types/core/lark-inbox/queue.d.ts +27 -0
  230. package/lib/types/core/lark-inbox/queue.d.ts.map +1 -0
  231. package/lib/types/core/lark-inbox/queue.js +78 -0
  232. package/lib/types/core/memoir/protocol.d.ts +42 -0
  233. package/lib/types/core/memoir/protocol.d.ts.map +1 -0
  234. package/lib/types/core/memoir/protocol.js +8 -0
  235. package/lib/types/core/no-browser-auth/contract.d.ts +22 -0
  236. package/lib/types/core/no-browser-auth/contract.d.ts.map +1 -0
  237. package/lib/types/core/no-browser-auth/contract.js +9 -0
  238. package/lib/types/core/notify/contract.d.ts +133 -0
  239. package/lib/types/core/notify/contract.d.ts.map +1 -0
  240. package/lib/types/core/notify/contract.js +186 -0
  241. package/lib/types/core/notify/feed.d.ts +116 -0
  242. package/lib/types/core/notify/feed.d.ts.map +1 -0
  243. package/lib/types/core/notify/feed.js +214 -0
  244. package/lib/types/core/playwright-sessions/contracts.d.ts +98 -0
  245. package/lib/types/core/playwright-sessions/contracts.d.ts.map +1 -0
  246. package/lib/types/core/playwright-sessions/contracts.js +68 -0
  247. package/lib/types/core/playwright-sessions/control.d.ts +19 -0
  248. package/lib/types/core/playwright-sessions/control.d.ts.map +1 -0
  249. package/lib/types/core/playwright-sessions/control.js +9 -0
  250. package/lib/types/core/playwright-sessions/index.d.ts +4 -0
  251. package/lib/types/core/playwright-sessions/index.d.ts.map +1 -0
  252. package/lib/types/core/playwright-sessions/index.js +3 -0
  253. package/lib/types/core/playwright-sessions/names.d.ts +4 -0
  254. package/lib/types/core/playwright-sessions/names.d.ts.map +1 -0
  255. package/lib/types/core/playwright-sessions/names.js +84 -0
  256. package/lib/types/core/playwright-sessions/schema.d.ts +4 -0
  257. package/lib/types/core/playwright-sessions/schema.d.ts.map +1 -0
  258. package/lib/types/core/playwright-sessions/schema.js +90 -0
  259. package/lib/types/core/playwright-sessions/wire.d.ts +78 -0
  260. package/lib/types/core/playwright-sessions/wire.d.ts.map +1 -0
  261. package/lib/types/core/playwright-sessions/wire.js +103 -0
  262. package/lib/types/core/remote-access/paths.d.ts +19 -0
  263. package/lib/types/core/remote-access/paths.d.ts.map +1 -0
  264. package/lib/types/core/remote-access/paths.js +18 -0
  265. package/lib/types/core/remote-web-ui/security.d.ts +35 -0
  266. package/lib/types/core/remote-web-ui/security.d.ts.map +1 -0
  267. package/lib/types/core/remote-web-ui/security.js +146 -0
  268. package/lib/types/core/right-pane/protocol.d.ts +25 -0
  269. package/lib/types/core/right-pane/protocol.d.ts.map +1 -0
  270. package/lib/types/core/right-pane/protocol.js +91 -0
  271. package/lib/types/core/schedule-mode/index.d.ts +7 -0
  272. package/lib/types/core/schedule-mode/index.d.ts.map +1 -0
  273. package/lib/types/core/schedule-mode/index.js +6 -0
  274. package/lib/types/core/schedule-mode/native.d.ts +35 -0
  275. package/lib/types/core/schedule-mode/native.d.ts.map +1 -0
  276. package/lib/types/core/schedule-mode/native.js +82 -0
  277. package/lib/types/core/schedule-mode/types.d.ts +177 -0
  278. package/lib/types/core/schedule-mode/types.d.ts.map +1 -0
  279. package/lib/types/core/schedule-mode/types.js +65 -0
  280. package/lib/types/core/schedule-mode/view.d.ts +62 -0
  281. package/lib/types/core/schedule-mode/view.d.ts.map +1 -0
  282. package/lib/types/core/schedule-mode/view.js +4 -0
  283. package/lib/types/core/ssh/protocol.d.ts +215 -0
  284. package/lib/types/core/ssh/protocol.d.ts.map +1 -0
  285. package/lib/types/core/ssh/protocol.js +23 -0
  286. package/lib/types/core/subagent-model/badges.d.ts +73 -0
  287. package/lib/types/core/subagent-model/badges.d.ts.map +1 -0
  288. package/lib/types/core/subagent-model/badges.js +105 -0
  289. package/lib/types/core/subagent-model/model-resolver.d.ts +25 -0
  290. package/lib/types/core/subagent-model/model-resolver.d.ts.map +1 -0
  291. package/lib/types/core/subagent-model/model-resolver.js +60 -0
  292. package/lib/types/core/worktree/invariant.d.ts +62 -0
  293. package/lib/types/core/worktree/invariant.d.ts.map +1 -0
  294. package/lib/types/core/worktree/invariant.js +72 -0
  295. package/lib/types/core/worktree/manifest.d.ts +71 -0
  296. package/lib/types/core/worktree/manifest.d.ts.map +1 -0
  297. package/lib/types/core/worktree/manifest.js +98 -0
  298. package/lib/types/core/worktree/paths.d.ts +60 -0
  299. package/lib/types/core/worktree/paths.d.ts.map +1 -0
  300. package/lib/types/core/worktree/paths.js +118 -0
  301. package/lib/types/core/worktree/pr-create.d.ts +67 -0
  302. package/lib/types/core/worktree/pr-create.d.ts.map +1 -0
  303. package/lib/types/core/worktree/pr-create.js +118 -0
  304. package/lib/types/core/worktree/protocol.d.ts +7 -0
  305. package/lib/types/core/worktree/protocol.d.ts.map +1 -0
  306. package/lib/types/core/worktree/protocol.js +6 -0
  307. package/lib/types/core/worktree/types.d.ts +292 -0
  308. package/lib/types/core/worktree/types.d.ts.map +1 -0
  309. package/lib/types/core/worktree/types.js +14 -0
  310. package/lib/types/core/worktree/workspace-model.d.ts +56 -0
  311. package/lib/types/core/worktree/workspace-model.d.ts.map +1 -0
  312. package/lib/types/core/worktree/workspace-model.js +14 -0
  313. package/lib/types/host/services/access-trust/index.d.ts +54 -0
  314. package/lib/types/host/services/access-trust/index.d.ts.map +1 -0
  315. package/lib/types/host/services/access-trust/index.js +82 -0
  316. package/lib/types/host/services/access-trust/trust.d.ts +70 -0
  317. package/lib/types/host/services/access-trust/trust.d.ts.map +1 -0
  318. package/lib/types/host/services/access-trust/trust.js +187 -0
  319. package/lib/types/host/services/codex-bridge/bridge.d.ts +106 -0
  320. package/lib/types/host/services/codex-bridge/bridge.d.ts.map +1 -0
  321. package/lib/types/host/services/codex-bridge/bridge.js +321 -0
  322. package/lib/types/host/services/codex-bridge/codex-auth.d.ts +108 -0
  323. package/lib/types/host/services/codex-bridge/codex-auth.d.ts.map +1 -0
  324. package/lib/types/host/services/codex-bridge/codex-auth.js +241 -0
  325. package/lib/types/host/services/codex-bridge/dsh-integration.d.ts +58 -0
  326. package/lib/types/host/services/codex-bridge/dsh-integration.d.ts.map +1 -0
  327. package/lib/types/host/services/codex-bridge/dsh-integration.js +120 -0
  328. package/lib/types/host/services/codex-bridge/http.d.ts +43 -0
  329. package/lib/types/host/services/codex-bridge/http.d.ts.map +1 -0
  330. package/lib/types/host/services/codex-bridge/http.js +92 -0
  331. package/lib/types/host/services/codex-bridge/index.d.ts +63 -0
  332. package/lib/types/host/services/codex-bridge/index.d.ts.map +1 -0
  333. package/lib/types/host/services/codex-bridge/index.js +111 -0
  334. package/lib/types/host/services/codex-bridge/loopback.d.ts +25 -0
  335. package/lib/types/host/services/codex-bridge/loopback.d.ts.map +1 -0
  336. package/lib/types/host/services/codex-bridge/loopback.js +68 -0
  337. package/lib/types/host/services/codex-bridge/routes.d.ts +31 -0
  338. package/lib/types/host/services/codex-bridge/routes.d.ts.map +1 -0
  339. package/lib/types/host/services/codex-bridge/routes.js +126 -0
  340. package/lib/types/host/services/family-config.d.ts +71 -0
  341. package/lib/types/host/services/family-config.d.ts.map +1 -0
  342. package/lib/types/host/services/family-config.js +166 -0
  343. package/lib/types/host/services/family-namespaces.d.ts +24 -0
  344. package/lib/types/host/services/family-namespaces.d.ts.map +1 -0
  345. package/lib/types/host/services/family-namespaces.js +30 -0
  346. package/lib/types/host/services/git-graph/index.d.ts +6 -0
  347. package/lib/types/host/services/git-graph/index.d.ts.map +1 -0
  348. package/lib/types/host/services/git-graph/index.js +7 -0
  349. package/lib/types/host/services/git-graph/routes.d.ts +4 -0
  350. package/lib/types/host/services/git-graph/routes.d.ts.map +1 -0
  351. package/lib/types/host/services/git-graph/routes.js +241 -0
  352. package/lib/types/host/services/git-graph/service.d.ts +52 -0
  353. package/lib/types/host/services/git-graph/service.d.ts.map +1 -0
  354. package/lib/types/host/services/git-graph/service.js +301 -0
  355. package/lib/types/host/services/index.d.ts +23 -0
  356. package/lib/types/host/services/index.d.ts.map +1 -0
  357. package/lib/types/host/services/index.js +80 -0
  358. package/lib/types/host/services/lark-inbox/config.d.ts +24 -0
  359. package/lib/types/host/services/lark-inbox/config.d.ts.map +1 -0
  360. package/lib/types/host/services/lark-inbox/config.js +48 -0
  361. package/lib/types/host/services/lark-inbox/gateway.d.ts +53 -0
  362. package/lib/types/host/services/lark-inbox/gateway.d.ts.map +1 -0
  363. package/lib/types/host/services/lark-inbox/gateway.js +171 -0
  364. package/lib/types/host/services/lark-inbox/host-routes.d.ts +22 -0
  365. package/lib/types/host/services/lark-inbox/host-routes.d.ts.map +1 -0
  366. package/lib/types/host/services/lark-inbox/host-routes.js +146 -0
  367. package/lib/types/host/services/lark-inbox/inbox-store.d.ts +39 -0
  368. package/lib/types/host/services/lark-inbox/inbox-store.d.ts.map +1 -0
  369. package/lib/types/host/services/lark-inbox/inbox-store.js +124 -0
  370. package/lib/types/host/services/lark-inbox/index.d.ts +26 -0
  371. package/lib/types/host/services/lark-inbox/index.d.ts.map +1 -0
  372. package/lib/types/host/services/lark-inbox/index.js +135 -0
  373. package/lib/types/host/services/lark-inbox/tools.d.ts +7 -0
  374. package/lib/types/host/services/lark-inbox/tools.d.ts.map +1 -0
  375. package/lib/types/host/services/lark-inbox/tools.js +119 -0
  376. package/lib/types/host/services/lark-inbox/wizard.d.ts +62 -0
  377. package/lib/types/host/services/lark-inbox/wizard.d.ts.map +1 -0
  378. package/lib/types/host/services/lark-inbox/wizard.js +211 -0
  379. package/lib/types/host/services/lifecycle.d.ts +29 -0
  380. package/lib/types/host/services/lifecycle.d.ts.map +1 -0
  381. package/lib/types/host/services/lifecycle.js +93 -0
  382. package/lib/types/host/services/memoir/index.d.ts +40 -0
  383. package/lib/types/host/services/memoir/index.d.ts.map +1 -0
  384. package/lib/types/host/services/memoir/index.js +52 -0
  385. package/lib/types/host/services/memoir/routes.d.ts +30 -0
  386. package/lib/types/host/services/memoir/routes.d.ts.map +1 -0
  387. package/lib/types/host/services/memoir/routes.js +364 -0
  388. package/lib/types/host/services/memoir/settings.d.ts +27 -0
  389. package/lib/types/host/services/memoir/settings.d.ts.map +1 -0
  390. package/lib/types/host/services/memoir/settings.js +120 -0
  391. package/lib/types/host/services/memoir/store.d.ts +35 -0
  392. package/lib/types/host/services/memoir/store.d.ts.map +1 -0
  393. package/lib/types/host/services/memoir/store.js +124 -0
  394. package/lib/types/host/services/memoir/tools.d.ts +8 -0
  395. package/lib/types/host/services/memoir/tools.d.ts.map +1 -0
  396. package/lib/types/host/services/memoir/tools.js +154 -0
  397. package/lib/types/host/services/no-browser-auth/index.d.ts +25 -0
  398. package/lib/types/host/services/no-browser-auth/index.d.ts.map +1 -0
  399. package/lib/types/host/services/no-browser-auth/index.js +42 -0
  400. package/lib/types/host/services/notify/config.d.ts +105 -0
  401. package/lib/types/host/services/notify/config.d.ts.map +1 -0
  402. package/lib/types/host/services/notify/config.js +123 -0
  403. package/lib/types/host/services/notify/feishu-sender.d.ts +120 -0
  404. package/lib/types/host/services/notify/feishu-sender.d.ts.map +1 -0
  405. package/lib/types/host/services/notify/feishu-sender.js +186 -0
  406. package/lib/types/host/services/notify/host-routes.d.ts +69 -0
  407. package/lib/types/host/services/notify/host-routes.d.ts.map +1 -0
  408. package/lib/types/host/services/notify/host-routes.js +112 -0
  409. package/lib/types/host/services/notify/index.d.ts +80 -0
  410. package/lib/types/host/services/notify/index.d.ts.map +1 -0
  411. package/lib/types/host/services/notify/index.js +263 -0
  412. package/lib/types/host/services/playwright-sessions/child.d.ts +76 -0
  413. package/lib/types/host/services/playwright-sessions/child.d.ts.map +1 -0
  414. package/lib/types/host/services/playwright-sessions/child.js +197 -0
  415. package/lib/types/host/services/playwright-sessions/controller.d.ts +25 -0
  416. package/lib/types/host/services/playwright-sessions/controller.d.ts.map +1 -0
  417. package/lib/types/host/services/playwright-sessions/controller.js +104 -0
  418. package/lib/types/host/services/playwright-sessions/index.d.ts +6 -0
  419. package/lib/types/host/services/playwright-sessions/index.d.ts.map +1 -0
  420. package/lib/types/host/services/playwright-sessions/index.js +161 -0
  421. package/lib/types/host/services/playwright-sessions/live-view.d.ts +32 -0
  422. package/lib/types/host/services/playwright-sessions/live-view.d.ts.map +1 -0
  423. package/lib/types/host/services/playwright-sessions/live-view.js +188 -0
  424. package/lib/types/host/services/playwright-sessions/manager.d.ts +87 -0
  425. package/lib/types/host/services/playwright-sessions/manager.d.ts.map +1 -0
  426. package/lib/types/host/services/playwright-sessions/manager.js +203 -0
  427. package/lib/types/host/services/playwright-sessions/profile-gc.d.ts +39 -0
  428. package/lib/types/host/services/playwright-sessions/profile-gc.d.ts.map +1 -0
  429. package/lib/types/host/services/playwright-sessions/profile-gc.js +72 -0
  430. package/lib/types/host/services/playwright-sessions/routes.d.ts +18 -0
  431. package/lib/types/host/services/playwright-sessions/routes.d.ts.map +1 -0
  432. package/lib/types/host/services/playwright-sessions/routes.js +87 -0
  433. package/lib/types/host/services/remote-access/boot-scripts.d.ts +55 -0
  434. package/lib/types/host/services/remote-access/boot-scripts.d.ts.map +1 -0
  435. package/lib/types/host/services/remote-access/boot-scripts.js +109 -0
  436. package/lib/types/host/services/remote-access/index.d.ts +28 -0
  437. package/lib/types/host/services/remote-access/index.d.ts.map +1 -0
  438. package/lib/types/host/services/remote-access/index.js +47 -0
  439. package/lib/types/host/services/remote-access/routes.d.ts +42 -0
  440. package/lib/types/host/services/remote-access/routes.d.ts.map +1 -0
  441. package/lib/types/host/services/remote-access/routes.js +119 -0
  442. package/lib/types/host/services/remote-web-ui/index.d.ts +21 -0
  443. package/lib/types/host/services/remote-web-ui/index.d.ts.map +1 -0
  444. package/lib/types/host/services/remote-web-ui/index.js +325 -0
  445. package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts +115 -0
  446. package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts.map +1 -0
  447. package/lib/types/host/services/remote-web-ui/server-mode/accounts.js +396 -0
  448. package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts +28 -0
  449. package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts.map +1 -0
  450. package/lib/types/host/services/remote-web-ui/server-mode/cookie.js +48 -0
  451. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts +17 -0
  452. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts.map +1 -0
  453. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.js +40 -0
  454. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts +73 -0
  455. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts.map +1 -0
  456. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.js +242 -0
  457. package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts +23 -0
  458. package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts.map +1 -0
  459. package/lib/types/host/services/remote-web-ui/server-mode/fence.js +24 -0
  460. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts +89 -0
  461. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts.map +1 -0
  462. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.js +768 -0
  463. package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts +99 -0
  464. package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts.map +1 -0
  465. package/lib/types/host/services/remote-web-ui/server-mode/gateway.js +679 -0
  466. package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts +43 -0
  467. package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts.map +1 -0
  468. package/lib/types/host/services/remote-web-ui/server-mode/http.js +92 -0
  469. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts +42 -0
  470. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts.map +1 -0
  471. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.js +73 -0
  472. package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts +13 -0
  473. package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts.map +1 -0
  474. package/lib/types/host/services/remote-web-ui/server-mode/lan.js +17 -0
  475. package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts +25 -0
  476. package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts.map +1 -0
  477. package/lib/types/host/services/remote-web-ui/server-mode/loopback.js +68 -0
  478. package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts +75 -0
  479. package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts.map +1 -0
  480. package/lib/types/host/services/remote-web-ui/server-mode/posture.js +116 -0
  481. package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts +44 -0
  482. package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts.map +1 -0
  483. package/lib/types/host/services/remote-web-ui/server-mode/roles.js +47 -0
  484. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts +21 -0
  485. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts.map +1 -0
  486. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.js +37 -0
  487. package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts +111 -0
  488. package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts.map +1 -0
  489. package/lib/types/host/services/remote-web-ui/server-mode/sessions.js +298 -0
  490. package/lib/types/host/services/remote-web-ui/server.d.ts +82 -0
  491. package/lib/types/host/services/remote-web-ui/server.d.ts.map +1 -0
  492. package/lib/types/host/services/remote-web-ui/server.js +492 -0
  493. package/lib/types/host/services/resources.d.ts +9 -0
  494. package/lib/types/host/services/resources.d.ts.map +1 -0
  495. package/lib/types/host/services/resources.js +98 -0
  496. package/lib/types/host/services/right-pane/browser.d.ts +42 -0
  497. package/lib/types/host/services/right-pane/browser.d.ts.map +1 -0
  498. package/lib/types/host/services/right-pane/browser.js +106 -0
  499. package/lib/types/host/services/right-pane/index.d.ts +22 -0
  500. package/lib/types/host/services/right-pane/index.d.ts.map +1 -0
  501. package/lib/types/host/services/right-pane/index.js +114 -0
  502. package/lib/types/host/services/right-pane/wire.d.ts +6 -0
  503. package/lib/types/host/services/right-pane/wire.d.ts.map +1 -0
  504. package/lib/types/host/services/right-pane/wire.js +9 -0
  505. package/lib/types/host/services/schedule-mode/config.d.ts +11 -0
  506. package/lib/types/host/services/schedule-mode/config.d.ts.map +1 -0
  507. package/lib/types/host/services/schedule-mode/config.js +15 -0
  508. package/lib/types/host/services/schedule-mode/engine.d.ts +150 -0
  509. package/lib/types/host/services/schedule-mode/engine.d.ts.map +1 -0
  510. package/lib/types/host/services/schedule-mode/engine.js +672 -0
  511. package/lib/types/host/services/schedule-mode/index.d.ts +33 -0
  512. package/lib/types/host/services/schedule-mode/index.d.ts.map +1 -0
  513. package/lib/types/host/services/schedule-mode/index.js +175 -0
  514. package/lib/types/host/services/schedule-mode/routes.d.ts +31 -0
  515. package/lib/types/host/services/schedule-mode/routes.d.ts.map +1 -0
  516. package/lib/types/host/services/schedule-mode/routes.js +109 -0
  517. package/lib/types/host/services/schedule-mode/session-create.d.ts +27 -0
  518. package/lib/types/host/services/schedule-mode/session-create.d.ts.map +1 -0
  519. package/lib/types/host/services/schedule-mode/session-create.js +21 -0
  520. package/lib/types/host/services/schedule-mode/store.d.ts +36 -0
  521. package/lib/types/host/services/schedule-mode/store.d.ts.map +1 -0
  522. package/lib/types/host/services/schedule-mode/store.js +309 -0
  523. package/lib/types/host/services/schedule-mode/tools.d.ts +13 -0
  524. package/lib/types/host/services/schedule-mode/tools.d.ts.map +1 -0
  525. package/lib/types/host/services/schedule-mode/tools.js +132 -0
  526. package/lib/types/host/services/ssh/engine.d.ts +162 -0
  527. package/lib/types/host/services/ssh/engine.d.ts.map +1 -0
  528. package/lib/types/host/services/ssh/engine.js +699 -0
  529. package/lib/types/host/services/ssh/host-keys.d.ts +10 -0
  530. package/lib/types/host/services/ssh/host-keys.d.ts.map +1 -0
  531. package/lib/types/host/services/ssh/host-keys.js +108 -0
  532. package/lib/types/host/services/ssh/index.d.ts +38 -0
  533. package/lib/types/host/services/ssh/index.d.ts.map +1 -0
  534. package/lib/types/host/services/ssh/index.js +47 -0
  535. package/lib/types/host/services/ssh/routes.d.ts +29 -0
  536. package/lib/types/host/services/ssh/routes.d.ts.map +1 -0
  537. package/lib/types/host/services/ssh/routes.js +465 -0
  538. package/lib/types/host/services/ssh/store.d.ts +40 -0
  539. package/lib/types/host/services/ssh/store.d.ts.map +1 -0
  540. package/lib/types/host/services/ssh/store.js +330 -0
  541. package/lib/types/host/services/ssh/terminal-ws.d.ts +9 -0
  542. package/lib/types/host/services/ssh/terminal-ws.d.ts.map +1 -0
  543. package/lib/types/host/services/ssh/terminal-ws.js +142 -0
  544. package/lib/types/host/services/ssh/tools.d.ts +11 -0
  545. package/lib/types/host/services/ssh/tools.d.ts.map +1 -0
  546. package/lib/types/host/services/ssh/tools.js +270 -0
  547. package/lib/types/host/services/web-render/contracts.d.ts +93 -0
  548. package/lib/types/host/services/web-render/contracts.d.ts.map +1 -0
  549. package/lib/types/host/services/web-render/contracts.js +60 -0
  550. package/lib/types/host/services/web-render/index.d.ts +58 -0
  551. package/lib/types/host/services/web-render/index.d.ts.map +1 -0
  552. package/lib/types/host/services/web-render/index.js +90 -0
  553. package/lib/types/host/services/web-render/provider.d.ts +37 -0
  554. package/lib/types/host/services/web-render/provider.d.ts.map +1 -0
  555. package/lib/types/host/services/web-render/provider.js +274 -0
  556. package/lib/types/host/services/web-search-anthropic/contracts.d.ts +117 -0
  557. package/lib/types/host/services/web-search-anthropic/contracts.d.ts.map +1 -0
  558. package/lib/types/host/services/web-search-anthropic/contracts.js +90 -0
  559. package/lib/types/host/services/web-search-anthropic/index.d.ts +53 -0
  560. package/lib/types/host/services/web-search-anthropic/index.d.ts.map +1 -0
  561. package/lib/types/host/services/web-search-anthropic/index.js +123 -0
  562. package/lib/types/host/services/web-search-anthropic/provider.d.ts +101 -0
  563. package/lib/types/host/services/web-search-anthropic/provider.d.ts.map +1 -0
  564. package/lib/types/host/services/web-search-anthropic/provider.js +237 -0
  565. package/lib/types/host/services/web-search-kaon/contracts.d.ts +114 -0
  566. package/lib/types/host/services/web-search-kaon/contracts.d.ts.map +1 -0
  567. package/lib/types/host/services/web-search-kaon/contracts.js +73 -0
  568. package/lib/types/host/services/web-search-kaon/index.d.ts +50 -0
  569. package/lib/types/host/services/web-search-kaon/index.d.ts.map +1 -0
  570. package/lib/types/host/services/web-search-kaon/index.js +114 -0
  571. package/lib/types/host/services/web-search-kaon/provider.d.ts +111 -0
  572. package/lib/types/host/services/web-search-kaon/provider.d.ts.map +1 -0
  573. package/lib/types/host/services/web-search-kaon/provider.js +244 -0
  574. package/lib/types/host/services/worktree/git-runner.d.ts +82 -0
  575. package/lib/types/host/services/worktree/git-runner.d.ts.map +1 -0
  576. package/lib/types/host/services/worktree/git-runner.js +81 -0
  577. package/lib/types/host/services/worktree/git.d.ts +94 -0
  578. package/lib/types/host/services/worktree/git.d.ts.map +1 -0
  579. package/lib/types/host/services/worktree/git.js +153 -0
  580. package/lib/types/host/services/worktree/http.d.ts +12 -0
  581. package/lib/types/host/services/worktree/http.d.ts.map +1 -0
  582. package/lib/types/host/services/worktree/http.js +34 -0
  583. package/lib/types/host/services/worktree/index.d.ts +38 -0
  584. package/lib/types/host/services/worktree/index.d.ts.map +1 -0
  585. package/lib/types/host/services/worktree/index.js +78 -0
  586. package/lib/types/host/services/worktree/lane-tool.d.ts +22 -0
  587. package/lib/types/host/services/worktree/lane-tool.d.ts.map +1 -0
  588. package/lib/types/host/services/worktree/lane-tool.js +92 -0
  589. package/lib/types/host/services/worktree/manager.d.ts +410 -0
  590. package/lib/types/host/services/worktree/manager.d.ts.map +1 -0
  591. package/lib/types/host/services/worktree/manager.js +1485 -0
  592. package/lib/types/host/services/worktree/model-override.d.ts +20 -0
  593. package/lib/types/host/services/worktree/model-override.d.ts.map +1 -0
  594. package/lib/types/host/services/worktree/model-override.js +35 -0
  595. package/lib/types/host/services/worktree/routes.d.ts +50 -0
  596. package/lib/types/host/services/worktree/routes.d.ts.map +1 -0
  597. package/lib/types/host/services/worktree/routes.js +695 -0
  598. package/lib/types/host/services/worktree/run-command.d.ts +26 -0
  599. package/lib/types/host/services/worktree/run-command.d.ts.map +1 -0
  600. package/lib/types/host/services/worktree/run-command.js +36 -0
  601. package/lib/types/host/services/worktree/session-lane/manager.d.ts +109 -0
  602. package/lib/types/host/services/worktree/session-lane/manager.d.ts.map +1 -0
  603. package/lib/types/host/services/worktree/session-lane/manager.js +172 -0
  604. package/lib/types/host/services/worktree/workspace-model-routes.d.ts +21 -0
  605. package/lib/types/host/services/worktree/workspace-model-routes.d.ts.map +1 -0
  606. package/lib/types/host/services/worktree/workspace-model-routes.js +198 -0
  607. package/lib/types/host/services/worktree/workspace-model.d.ts +48 -0
  608. package/lib/types/host/services/worktree/workspace-model.d.ts.map +1 -0
  609. package/lib/types/host/services/worktree/workspace-model.js +113 -0
  610. package/lib/types/index.d.ts +47 -0
  611. package/lib/types/index.d.ts.map +1 -0
  612. package/lib/types/index.js +52 -0
  613. package/lib/types/invariant.d.ts +4 -0
  614. package/lib/types/invariant.d.ts.map +1 -0
  615. package/lib/types/invariant.js +3 -0
  616. package/package.json +153 -3
  617. package/presets/code-vibe/THIRD_PARTY_NOTICES.md +55 -0
  618. package/presets/code-vibe/skills/UPSTREAM.md +104 -0
  619. package/presets/code-vibe/skills/agent-experience/SKILL.md +15 -0
  620. package/presets/code-vibe/skills/agent-operation/SKILL.md +43 -0
  621. package/presets/code-vibe/skills/code-review/SKILL.md +45 -0
  622. package/presets/code-vibe/skills/dsh-ci-test-reliability/SKILL.md +133 -0
  623. package/presets/code-vibe/skills/dsh-ci-test-reliability/references/ci-flake-diagnosis.md +60 -0
  624. package/presets/code-vibe/skills/dsh-find-simplifications/SKILL.md +69 -0
  625. package/presets/code-vibe/skills/dsh-find-simplifications/references/historical-patterns.md +45 -0
  626. package/presets/code-vibe/skills/dsh-merging-stacked-prs/SKILL.md +129 -0
  627. package/presets/code-vibe/skills/dsh-prose-standard/SKILL.md +83 -0
  628. package/presets/code-vibe/skills/dsh-prose-standard/references/examples.md +169 -0
  629. package/presets/code-vibe/skills/dsh-speed-up-perf/SKILL.md +94 -0
  630. package/presets/code-vibe/skills/dsh-trim-cot-leakage/SKILL.md +47 -0
  631. package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/examples.md +275 -0
  632. package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/recall-batteries.md +52 -0
  633. package/presets/code-vibe/skills/frontend-design/SKILL.md +60 -0
  634. package/presets/code-vibe/skills/frontend-design/references/critique-format.md +35 -0
  635. package/presets/code-vibe/skills/frontend-design/references/design-standards/LOAD-MAP.md +81 -0
  636. package/presets/code-vibe/skills/frontend-design/references/design-standards/README.md +53 -0
  637. package/presets/code-vibe/skills/frontend-design/references/design-standards/anchor.md +51 -0
  638. package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/ai-tells.md +59 -0
  639. package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/web-interface.md +14 -0
  640. package/presets/code-vibe/skills/frontend-design/references/design-standards/change-control.md +62 -0
  641. package/presets/code-vibe/skills/frontend-design/references/design-standards/copy.md +65 -0
  642. package/presets/code-vibe/skills/frontend-design/references/design-standards/craft-knobs.md +61 -0
  643. package/presets/code-vibe/skills/frontend-design/references/design-standards/debug-playbook.md +37 -0
  644. package/presets/code-vibe/skills/frontend-design/references/design-standards/exemplars/README.md +64 -0
  645. package/presets/code-vibe/skills/frontend-design/references/design-standards/plan-architecture.checklist.json +13 -0
  646. package/presets/code-vibe/skills/frontend-design/references/design-standards/product-judgment.md +113 -0
  647. package/presets/code-vibe/skills/frontend-design/references/design-standards/system-architecture.md +108 -0
  648. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/README.md +26 -0
  649. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/color-roles.md +49 -0
  650. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/motion.md +51 -0
  651. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/scale.md +89 -0
  652. package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-page-gate.md +61 -0
  653. package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-surface.checklist.json +49 -0
  654. package/presets/code-vibe/skills/frontend-design/references/design-standards/ux.md +76 -0
  655. package/presets/code-vibe/skills/frontend-design/references/design-standards/visual.md +52 -0
  656. package/presets/code-vibe/skills/frontend-design/references/perceptible-path.md +27 -0
  657. package/presets/code-vibe/skills/frontend-design/references/product-package.md +80 -0
  658. package/presets/code-vibe/skills/frontend-design/references/scheme-antipatterns.md +21 -0
  659. package/presets/code-vibe/skills/quality-review/SKILL.md +57 -0
  660. package/presets/code-vibe/skills/quality-review/references/bounded-verify.md +37 -0
  661. package/presets/code-vibe/skills/quality-review/references/browser-verify.md +81 -0
  662. package/presets/code-vibe/skills/quality-review/references/evidence-contract.md +194 -0
  663. package/presets/code-vibe/skills/quality-review/references/falsify-checklist.md +44 -0
  664. package/presets/code-vibe/skills/quality-review/references/human-acceptance-pack.md +68 -0
  665. package/presets/code-vibe/skills/quality-review/references/product-regression.md +51 -0
  666. package/presets/code-vibe/skills/quality-review/references/ux-standards.md +37 -0
  667. package/presets/code-vibe/skills/quality-review/references/ux-walkthrough.md +49 -0
  668. package/presets/code-vibe/skills/quality-review/references/validation-report.md +22 -0
  669. package/presets/code-vibe/skills/quality-review/references/verification-loop.md +95 -0
  670. package/presets/code-vibe/skills/quality-review/references/version-acceptance-matrix.md +131 -0
  671. package/presets/code-vibe/skills/record-browser-gif/SKILL.md +174 -0
  672. package/presets/code-vibe/skills/record-browser-gif/scripts/encode_gif.py +337 -0
  673. package/presets/code-vibe/skills/record-browser-gif/scripts/test_encode_gif.py +103 -0
  674. package/presets/code-vibe/skills/wish-programming/SKILL.md +150 -0
  675. package/presets/code-vibe/skills/wish-programming/references/roles/arch-reviewer.md +26 -0
  676. package/presets/code-vibe/skills/wish-programming/references/roles/design-reviewer.md +32 -0
  677. package/presets/code-vibe/skills/wish-programming/references/roles/pm-reviewer.md +26 -0
  678. package/presets/code-vibe/skills/wish-programming/references/roles/qa-reviewer.md +16 -0
  679. package/presets/code-vibe/skills/wish-programming/references/roles/security-reviewer.md +16 -0
  680. package/presets/code-vibe/skills/wish-programming/references/roles/sre-reviewer.md +16 -0
  681. package/presets/code-vibe/skills/wish-programming/references/roles/ux-adversary.md +16 -0
  682. package/presets/code-vibe/skills/wish-programming/references/templates/arch.md.tpl +51 -0
  683. package/presets/code-vibe/skills/wish-programming/references/templates/brief.md.tpl +36 -0
  684. package/presets/code-vibe/skills/wish-programming/references/templates/confirmation-pack.md +54 -0
  685. package/presets/code-vibe/skills/wish-programming/references/templates/design-spec.md.tpl +49 -0
  686. package/presets/code-vibe/skills/wish-programming/references/templates/module-readme.md +37 -0
  687. package/presets/code-vibe/skills/wish-programming/references/templates/product.md.tpl +74 -0
  688. package/presets/code-vibe/skills/wish-programming/references/templates/requirements.md.tpl +31 -0
  689. package/presets/code-vibe/skills/wish-programming/references/workflow-template.md +122 -0
  690. package/presets/code-vibe/skills/wish-programming/scripts/MANIFEST.sha256 +11 -0
  691. package/presets/code-vibe/skills/wish-programming/scripts/check_spec.py +416 -0
  692. package/presets/code-vibe/skills/wish-programming/scripts/check_whitelist.py +193 -0
  693. package/presets/code-vibe/skills/wish-programming/scripts/coverage_check.py +199 -0
  694. package/presets/code-vibe/skills/wish-programming/scripts/gate-lock.sh +46 -0
  695. package/presets/code-vibe/skills/wish-programming/scripts/journey.sh +281 -0
  696. package/presets/code-vibe/skills/wish-programming/scripts/project.sh +152 -0
  697. package/presets/code-vibe/skills/wish-programming/scripts/replay.sh +65 -0
  698. package/presets/code-vibe/skills/wish-programming/scripts/scan_drift.py +79 -0
  699. package/presets/code-vibe/skills/wish-programming/scripts/verify.sh +169 -0
  700. package/presets/code-vibe/skills/wish-programming/scripts/verify_preset_budgets.py +218 -0
  701. package/presets/code-vibe/skills/wish-programming/scripts/wish.sh +150 -0
  702. package/presets/code-vibe.patch.yml +325 -0
  703. package/presets/hiopen.patch.yml +109 -0
  704. package/src/client/compat.ts +86 -0
  705. package/src/client/conversation/conversation.module.css +264 -0
  706. package/src/client/conversation/git-branch.tsx +152 -0
  707. package/src/client/conversation/git-graph/LICENSE.git-graph +202 -0
  708. package/src/client/conversation/git-graph/api.ts +85 -0
  709. package/src/client/conversation/git-graph/branch-chip.tsx +354 -0
  710. package/src/client/conversation/git-graph/branch-popover.tsx +185 -0
  711. package/src/client/conversation/git-graph/chip.tsx +47 -0
  712. package/src/client/conversation/git-graph/create-branch-dialog.tsx +108 -0
  713. package/src/client/conversation/git-graph/error-copy.ts +50 -0
  714. package/src/client/conversation/git-graph/git-graph.module.css +792 -0
  715. package/src/client/conversation/git-graph/graph-dialog.tsx +196 -0
  716. package/src/client/conversation/git-graph/hero-seat.ts +76 -0
  717. package/src/client/conversation/git-graph/locales.ts +90 -0
  718. package/src/client/conversation/git-graph/sse-leader.ts +124 -0
  719. package/src/client/conversation/index.ts +82 -0
  720. package/src/client/conversation/selector-context.tsx +24 -0
  721. package/src/client/conversation/session-lane-chip.tsx +262 -0
  722. package/src/client/conversation/session-lane-locales.ts +34 -0
  723. package/src/client/conversation/subagent-model-dom.ts +157 -0
  724. package/src/client/conversation/subagent-model.ts +198 -0
  725. package/src/client/conversation/worktree/api.ts +283 -0
  726. package/src/client/conversation/worktree/dialogs/DeleteWorktreeDialog.tsx +111 -0
  727. package/src/client/conversation/worktree/dialogs/PrCreateDialog.tsx +114 -0
  728. package/src/client/conversation/worktree/lane-binding.ts +77 -0
  729. package/src/client/conversation/worktree/lane-menu.tsx +247 -0
  730. package/src/client/conversation/worktree/lane-open.ts +204 -0
  731. package/src/client/conversation/worktree/lane-workspace-sweeper.ts +136 -0
  732. package/src/client/conversation/worktree/lifecycle.ts +75 -0
  733. package/src/client/conversation/worktree/locales.ts +97 -0
  734. package/src/client/conversation/worktree/semantic.ts +10 -0
  735. package/src/client/conversation/worktree/worktree.module.css +70 -0
  736. package/src/client/css-modules.d.ts +8 -0
  737. package/src/client/index.ts +58 -0
  738. package/src/client/lark-inbox/i18n.ts +125 -0
  739. package/src/client/lark-inbox/lark-wizard.module.css +88 -0
  740. package/src/client/lark-inbox/wizard.tsx +211 -0
  741. package/src/client/notify/i18n.ts +93 -0
  742. package/src/client/settings/family-scope.ts +45 -0
  743. package/src/client/settings/lark-inbox.tsx +319 -0
  744. package/src/client/settings/notify.tsx +288 -0
  745. package/src/client/settings/primitives-0.2.ts +148 -0
  746. package/src/client/settings/settings-shell.module.css +56 -0
  747. package/src/client/sidebar/RenderBoundary.tsx +17 -0
  748. package/src/client/sidebar/agent-browser.tsx +114 -0
  749. package/src/client/sidebar/diff-view.tsx +314 -0
  750. package/src/client/sidebar/git-workbench.tsx +700 -0
  751. package/src/client/sidebar/icons.tsx +23 -0
  752. package/src/client/sidebar/index.ts +28 -0
  753. package/src/client/sidebar/native-panels.tsx +149 -0
  754. package/src/client/sidebar/page-shell.module.css +96 -0
  755. package/src/client/sidebar/page-shell.tsx +86 -0
  756. package/src/client/sidebar/panels/memoir/api.ts +300 -0
  757. package/src/client/sidebar/panels/memoir/controller.ts +47 -0
  758. package/src/client/sidebar/panels/memoir/cwd.ts +140 -0
  759. package/src/client/sidebar/panels/memoir/i18n.ts +300 -0
  760. package/src/client/sidebar/panels/memoir/panel-activation.ts +42 -0
  761. package/src/client/sidebar/panels/memoir/panel.tsx +869 -0
  762. package/src/client/sidebar/panels/memoir/styles.ts +776 -0
  763. package/src/client/sidebar/panels/memoir/types.ts +7 -0
  764. package/src/client/sidebar/panels/ssh/ClusterTab.tsx +123 -0
  765. package/src/client/sidebar/panels/ssh/HostFormDialog.tsx +243 -0
  766. package/src/client/sidebar/panels/ssh/HostsTab.tsx +290 -0
  767. package/src/client/sidebar/panels/ssh/SshPanel.tsx +76 -0
  768. package/src/client/sidebar/panels/ssh/TerminalTab.tsx +290 -0
  769. package/src/client/sidebar/panels/ssh/TransferTab.tsx +232 -0
  770. package/src/client/sidebar/panels/ssh/TunnelsTab.tsx +204 -0
  771. package/src/client/sidebar/panels/ssh/api.ts +388 -0
  772. package/src/client/sidebar/panels/ssh/controller.ts +48 -0
  773. package/src/client/sidebar/panels/ssh/helpers.ts +70 -0
  774. package/src/client/sidebar/panels/ssh/locales.ts +318 -0
  775. package/src/client/sidebar/panels/ssh/panel.module.css +801 -0
  776. package/src/client/sidebar/panels/ssh/xterm.css.ts +2 -0
  777. package/src/client/sidebar/right-pane-i18n.ts +243 -0
  778. package/src/client/sidebar/right-pane.tsx +156 -0
  779. package/src/client/sidebar/scope.ts +54 -0
  780. package/src/client/sidebar/sidebar-header.module.css +72 -0
  781. package/src/client/sidebar/sidebar.module.css +619 -0
  782. package/src/client/trust.ts +187 -0
  783. package/src/client/ui-icons.ts +35 -0
  784. package/src/core/git-graph/commands.ts +107 -0
  785. package/src/core/git-graph/protocol.ts +238 -0
  786. package/src/core/index.ts +2 -0
  787. package/src/core/lark-inbox/gating.ts +35 -0
  788. package/src/core/lark-inbox/queue.ts +100 -0
  789. package/src/core/memoir/protocol.ts +46 -0
  790. package/src/core/no-browser-auth/contract.ts +25 -0
  791. package/src/core/notify/contract.ts +236 -0
  792. package/src/core/notify/feed.ts +235 -0
  793. package/src/core/playwright-sessions/contracts.ts +143 -0
  794. package/src/core/playwright-sessions/control.ts +33 -0
  795. package/src/core/playwright-sessions/index.ts +3 -0
  796. package/src/core/playwright-sessions/names.ts +83 -0
  797. package/src/core/playwright-sessions/schema.ts +102 -0
  798. package/src/core/playwright-sessions/wire.ts +142 -0
  799. package/src/core/remote-access/paths.ts +23 -0
  800. package/src/core/remote-web-ui/security.ts +171 -0
  801. package/src/core/right-pane/protocol.ts +94 -0
  802. package/src/core/schedule-mode/index.ts +6 -0
  803. package/src/core/schedule-mode/native.ts +105 -0
  804. package/src/core/schedule-mode/types.ts +182 -0
  805. package/src/core/schedule-mode/view.ts +66 -0
  806. package/src/core/ssh/protocol.ts +212 -0
  807. package/src/core/subagent-model/badges.ts +161 -0
  808. package/src/core/worktree/invariant.ts +101 -0
  809. package/src/core/worktree/manifest.ts +135 -0
  810. package/src/core/worktree/paths.ts +123 -0
  811. package/src/core/worktree/pr-create.ts +157 -0
  812. package/src/core/worktree/protocol.ts +7 -0
  813. package/src/core/worktree/types.ts +317 -0
  814. package/src/core/worktree/workspace-model.ts +61 -0
  815. package/src/host/services/access-trust/index.ts +127 -0
  816. package/src/host/services/access-trust/trust.ts +189 -0
  817. package/src/host/services/codex-bridge/bridge.ts +392 -0
  818. package/src/host/services/codex-bridge/codex-auth.ts +352 -0
  819. package/src/host/services/codex-bridge/dsh-integration.ts +169 -0
  820. package/src/host/services/codex-bridge/http.ts +105 -0
  821. package/src/host/services/codex-bridge/index.ts +154 -0
  822. package/src/host/services/codex-bridge/loopback.ts +63 -0
  823. package/src/host/services/codex-bridge/routes.ts +143 -0
  824. package/src/host/services/family-config.ts +224 -0
  825. package/src/host/services/family-namespaces.ts +39 -0
  826. package/src/host/services/git-graph/index.ts +11 -0
  827. package/src/host/services/git-graph/routes.ts +212 -0
  828. package/src/host/services/git-graph/service.ts +305 -0
  829. package/src/host/services/index.ts +94 -0
  830. package/src/host/services/lark-inbox/config.ts +66 -0
  831. package/src/host/services/lark-inbox/gateway.ts +184 -0
  832. package/src/host/services/lark-inbox/host-routes.ts +113 -0
  833. package/src/host/services/lark-inbox/inbox-store.ts +160 -0
  834. package/src/host/services/lark-inbox/index.ts +141 -0
  835. package/src/host/services/lark-inbox/tools.ts +124 -0
  836. package/src/host/services/lark-inbox/wizard.ts +206 -0
  837. package/src/host/services/lifecycle.ts +107 -0
  838. package/src/host/services/memoir/index.ts +80 -0
  839. package/src/host/services/memoir/routes.ts +346 -0
  840. package/src/host/services/memoir/settings.ts +122 -0
  841. package/src/host/services/memoir/store.ts +132 -0
  842. package/src/host/services/memoir/tools.ts +158 -0
  843. package/src/host/services/no-browser-auth/index.ts +70 -0
  844. package/src/host/services/notify/config.ts +178 -0
  845. package/src/host/services/notify/feishu-sender.ts +220 -0
  846. package/src/host/services/notify/host-routes.ts +133 -0
  847. package/src/host/services/notify/index.ts +305 -0
  848. package/src/host/services/playwright-sessions/child.ts +251 -0
  849. package/src/host/services/playwright-sessions/controller.ts +102 -0
  850. package/src/host/services/playwright-sessions/index.ts +146 -0
  851. package/src/host/services/playwright-sessions/live-view.ts +225 -0
  852. package/src/host/services/playwright-sessions/manager.ts +239 -0
  853. package/src/host/services/playwright-sessions/profile-gc.ts +97 -0
  854. package/src/host/services/playwright-sessions/routes.ts +90 -0
  855. package/src/host/services/remote-access/boot-scripts.ts +118 -0
  856. package/src/host/services/remote-access/index.ts +62 -0
  857. package/src/host/services/remote-access/routes.ts +137 -0
  858. package/src/host/services/remote-web-ui/index.ts +344 -0
  859. package/src/host/services/remote-web-ui/server-mode/accounts.ts +423 -0
  860. package/src/host/services/remote-web-ui/server-mode/cookie.ts +57 -0
  861. package/src/host/services/remote-web-ui/server-mode/dsh-home.ts +42 -0
  862. package/src/host/services/remote-web-ui/server-mode/external-auth.ts +296 -0
  863. package/src/host/services/remote-web-ui/server-mode/fence.ts +27 -0
  864. package/src/host/services/remote-web-ui/server-mode/gateway-routes.ts +797 -0
  865. package/src/host/services/remote-web-ui/server-mode/gateway.ts +684 -0
  866. package/src/host/services/remote-web-ui/server-mode/http.ts +105 -0
  867. package/src/host/services/remote-web-ui/server-mode/integrated-auth.ts +118 -0
  868. package/src/host/services/remote-web-ui/server-mode/lan.ts +19 -0
  869. package/src/host/services/remote-web-ui/server-mode/loopback.ts +63 -0
  870. package/src/host/services/remote-web-ui/server-mode/posture.ts +154 -0
  871. package/src/host/services/remote-web-ui/server-mode/roles.ts +51 -0
  872. package/src/host/services/remote-web-ui/server-mode/server-boot.ts +38 -0
  873. package/src/host/services/remote-web-ui/server-mode/sessions.ts +347 -0
  874. package/src/host/services/remote-web-ui/server.ts +591 -0
  875. package/src/host/services/resources.ts +78 -0
  876. package/src/host/services/right-pane/browser.ts +106 -0
  877. package/src/host/services/right-pane/index.ts +117 -0
  878. package/src/host/services/right-pane/wire.ts +10 -0
  879. package/src/host/services/schedule-mode/config.ts +26 -0
  880. package/src/host/services/schedule-mode/engine.ts +689 -0
  881. package/src/host/services/schedule-mode/index.ts +214 -0
  882. package/src/host/services/schedule-mode/routes.ts +130 -0
  883. package/src/host/services/schedule-mode/session-create.ts +36 -0
  884. package/src/host/services/schedule-mode/store.ts +304 -0
  885. package/src/host/services/schedule-mode/tools.ts +154 -0
  886. package/src/host/services/ssh/engine.ts +675 -0
  887. package/src/host/services/ssh/host-keys.ts +99 -0
  888. package/src/host/services/ssh/index.ts +84 -0
  889. package/src/host/services/ssh/routes.ts +442 -0
  890. package/src/host/services/ssh/store.ts +310 -0
  891. package/src/host/services/ssh/terminal-ws.ts +157 -0
  892. package/src/host/services/ssh/tools.ts +279 -0
  893. package/src/host/services/web-render/contracts.ts +138 -0
  894. package/src/host/services/web-render/index.ts +112 -0
  895. package/src/host/services/web-render/provider.ts +282 -0
  896. package/src/host/services/web-search-anthropic/contracts.ts +163 -0
  897. package/src/host/services/web-search-anthropic/index.ts +152 -0
  898. package/src/host/services/web-search-anthropic/provider.ts +325 -0
  899. package/src/host/services/worktree/git-runner.ts +124 -0
  900. package/src/host/services/worktree/git.ts +183 -0
  901. package/src/host/services/worktree/http.ts +36 -0
  902. package/src/host/services/worktree/index.ts +92 -0
  903. package/src/host/services/worktree/lane-tool.ts +100 -0
  904. package/src/host/services/worktree/manager.ts +1553 -0
  905. package/src/host/services/worktree/model-override.ts +43 -0
  906. package/src/host/services/worktree/routes.ts +570 -0
  907. package/src/host/services/worktree/run-command.ts +66 -0
  908. package/src/host/services/worktree/session-lane/manager.ts +228 -0
  909. package/src/host/services/worktree/workspace-model-routes.ts +156 -0
  910. package/src/host/services/worktree/workspace-model.ts +132 -0
  911. package/src/index.ts +84 -0
  912. package/src/invariant.ts +4 -0
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Lane popover: what the conversation's branch directory is, and the three
3
+ * things a user can do about it.
4
+ *
5
+ * This is where the lifecycle lives now that there is no management panel: the
6
+ * branch is chosen once, when the conversation starts (the composer picker), and
7
+ * everything that happens *after* the branch exists — re-check, submit a PR,
8
+ * delete the directory — hangs off the header chip that names that branch. One
9
+ * control creates, one surface finishes.
10
+ *
11
+ * There used to be two teardown actions ("clean up worktree" / "remove
12
+ * worktree"); users could not tell them apart, so they are one `Delete…` whose
13
+ * dialog asks the only question that matters (does the local branch go too).
14
+ *
15
+ * Two safety rules are enforced here rather than discovered by failing:
16
+ * - a running conversation may not tear its own directory down (the directory
17
+ * would vanish under the running turn), so the action is disabled with the
18
+ * reason shown;
19
+ * - deleting the directory this conversation sits on archives the conversation
20
+ * (the host does that for every directory session), and the menu says so
21
+ * before the click instead of surprising the user afterwards.
22
+ * @module @dsh-cove/dsh-client-ui-worktree/client/lane-menu
23
+ */
24
+
25
+ import { useEffect, useRef, useState } from 'react'
26
+ import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots'
27
+ import type { LaneView } from '../../../core/worktree/types.ts'
28
+ import { WorktreeApi } from './api.ts'
29
+ import { PrCreateDialog } from './dialogs/PrCreateDialog.tsx'
30
+ import { DeleteWorktreeDialog } from './dialogs/DeleteWorktreeDialog.tsx'
31
+ import { worktreeErrorMessage } from './lifecycle.ts'
32
+ import { WORKTREE_PART_LANE_MENU, WORKTREE_PLUGIN } from './semantic.ts'
33
+ import css from '../conversation.module.css'
34
+
35
+ /** Which dialog is open, if any. */
36
+ type LaneDialog = 'pr' | 'delete'
37
+
38
+ /** A base-branch choice set for the PR dialog, read from the repo status. */
39
+ interface PrChoices {
40
+ branches: string[]
41
+ baseBranch: string
42
+ }
43
+
44
+ export interface LaneMenuProps {
45
+ /** The conversation the chip belongs to (the teardown caller identity). */
46
+ sessionId: string
47
+ /** The lane this conversation runs on. */
48
+ lane: LaneView
49
+ /** Worktree API surface (the menu owns its dialogs). */
50
+ api: WorktreeApi
51
+ /** Whether the conversation is running a turn right now. */
52
+ running: boolean
53
+ /**
54
+ * Whether the lane records this conversation as its own session. Only then do
55
+ * the teardown actions archive the conversation the user is looking at.
56
+ */
57
+ ownLane: boolean
58
+ onClose: () => void
59
+ /** The lane changed: the chip re-reads it. */
60
+ onChanged: () => void
61
+ t: PropsLocale<'worktree'>['t']
62
+ }
63
+
64
+ /**
65
+ * The lane popover.
66
+ * @param props - see {@link LaneMenuProps}.
67
+ */
68
+ export function LaneMenu(props: LaneMenuProps): JSX.Element {
69
+ const { sessionId, lane, api, running, ownLane, onClose, onChanged, t } = props
70
+ const [busy, setBusy] = useState<'refresh' | 'pr' | 'delete' | null>(null)
71
+ const [error, setError] = useState<unknown>(null)
72
+ const [dialog, setDialog] = useState<LaneDialog | null>(null)
73
+ const [prChoices, setPrChoices] = useState<PrChoices | null>(null)
74
+ /** Directory facts re-read for the delete dialog; see openDelete. */
75
+ const [deleteFacts, setDeleteFacts] = useState<{ merged: boolean; dirty: number } | null>(null)
76
+ const rootRef = useRef<HTMLDivElement>(null)
77
+
78
+ useEffect(() => {
79
+ // While one of the dialogs is showing, the menu must not dismiss itself on
80
+ // the next click: the dialog is portaled to the body (so every click in it
81
+ // is "outside" this popover) and it owns its own dismissal. Without this the
82
+ // dialog unmounted mid-flight and a PR or teardown the host had already
83
+ // started vanished from the screen.
84
+ if (dialog !== null) return undefined
85
+ const onPointerDown = (event: MouseEvent): void => {
86
+ if (rootRef.current !== null && !rootRef.current.contains(event.target as Node)) onClose()
87
+ }
88
+ const onKeyDown = (event: KeyboardEvent): void => {
89
+ if (event.key === 'Escape') onClose()
90
+ }
91
+ document.addEventListener('mousedown', onPointerDown)
92
+ document.addEventListener('keydown', onKeyDown)
93
+ return () => {
94
+ document.removeEventListener('mousedown', onPointerDown)
95
+ document.removeEventListener('keydown', onKeyDown)
96
+ }
97
+ }, [dialog, onClose])
98
+
99
+ /** Probe the lane again, remote included; the chip re-reads the answer. */
100
+ const refresh = async (): Promise<void> => {
101
+ if (busy !== null) return
102
+ setBusy('refresh')
103
+ setError(null)
104
+ try {
105
+ await api.status({ repoPath: lane.repoPath, name: lane.name, force: true })
106
+ onChanged()
107
+ } catch (err) {
108
+ setError(err)
109
+ } finally {
110
+ setBusy(null)
111
+ }
112
+ }
113
+
114
+ /**
115
+ * The PR dialog needs the repository's candidate branches, which only the
116
+ * status probe knows. Fetching them here keeps the dialog's contract (a base
117
+ * dropdown over real branches) instead of opening it with a guessed base.
118
+ */
119
+ const openPrDialog = async (): Promise<void> => {
120
+ if (busy !== null) return
121
+ setBusy('pr')
122
+ setError(null)
123
+ try {
124
+ const status = await api.status({ repoPath: lane.repoPath })
125
+ setPrChoices({ branches: status.branches, baseBranch: status.baseBranch })
126
+ setDialog('pr')
127
+ } catch (err) {
128
+ setError(err)
129
+ } finally {
130
+ setBusy(null)
131
+ }
132
+ }
133
+
134
+ /**
135
+ * The delete dialog owns the branch-checkbox decision; the guard is here.
136
+ *
137
+ * The facts are re-read first. `dirty` is a local git call the host makes on
138
+ * every lane read, and the chip's snapshot can predate work the user has just
139
+ * left in the directory — which is exactly what decides whether the host will
140
+ * demand the force choice. Reading that decision from the snapshot hid the
141
+ * force row the host needs, so the dialog lied about being one click.
142
+ */
143
+ const openDelete = async (): Promise<void> => {
144
+ if (running || busy !== null) return
145
+ setBusy('delete')
146
+ setError(null)
147
+ try {
148
+ const fresh = await api.lane({ path: lane.path })
149
+ setDeleteFacts({ merged: fresh?.merged ?? lane.merged, dirty: fresh?.dirty ?? lane.dirty ?? 0 })
150
+ setDialog('delete')
151
+ } catch (err) {
152
+ setError(err)
153
+ } finally {
154
+ setBusy(null)
155
+ }
156
+ }
157
+
158
+ /** The lane is gone (or changed) after a teardown: leave and re-read. */
159
+ const afterTeardown = (): void => {
160
+ setDialog(null)
161
+ setDeleteFacts(null)
162
+ onChanged()
163
+ onClose()
164
+ }
165
+
166
+ return (
167
+ <div
168
+ ref={rootRef}
169
+ className={css.laneMenu}
170
+ role="menu"
171
+ aria-label={t('menu.aria', { branch: lane.branch ?? lane.name })}
172
+ data-dsh-plugin={WORKTREE_PLUGIN}
173
+ data-dsh-part={WORKTREE_PART_LANE_MENU}
174
+ >
175
+ <div className={css.laneMenuFacts}>
176
+ <span className={css.laneMenuPathLabel}>{t('menu.path')}</span>
177
+ <span className={css.laneMenuPath} title={lane.path}>{lane.path}</span>
178
+ </div>
179
+ {/* The PR link is provenance, not an action: it only exists when this
180
+ plugin created one, and it stays reachable after the merge. */}
181
+ {lane.prUrl !== null && (
182
+ <a className={css.laneMenuLink} href={lane.prUrl} target="_blank" rel="noopener noreferrer">
183
+ {t('worktree.prOpen')}
184
+ </a>
185
+ )}
186
+ {error !== null && <div className={css.laneMenuError} role="alert">{worktreeErrorMessage(error, t)}</div>}
187
+ <div className={css.laneMenuActions}>
188
+ <button
189
+ type="button"
190
+ role="menuitem"
191
+ className={css.laneMenuItem}
192
+ disabled={busy !== null || lane.merged}
193
+ onClick={() => { void openPrDialog() }}
194
+ >
195
+ {t('menu.pr')}
196
+ </button>
197
+ <button
198
+ type="button"
199
+ role="menuitem"
200
+ className={css.laneMenuItem}
201
+ disabled={running || busy !== null}
202
+ onClick={() => { void openDelete() }}
203
+ >
204
+ {t('menu.delete')}
205
+ </button>
206
+ <button
207
+ type="button"
208
+ role="menuitem"
209
+ className={css.laneMenuItem}
210
+ disabled={busy !== null}
211
+ onClick={() => { void refresh() }}
212
+ >
213
+ {t('menu.refresh')}
214
+ </button>
215
+ </div>
216
+ {running && <div className={css.laneMenuHint}>{t('menu.running')}</div>}
217
+ {ownLane && <div className={css.laneMenuHint}>{t('menu.selfTeardown')}</div>}
218
+
219
+ {dialog === 'pr' && prChoices !== null && (
220
+ <PrCreateDialog
221
+ repoPath={lane.repoPath}
222
+ name={lane.name}
223
+ branches={prChoices.branches}
224
+ defaultBaseRef={prChoices.baseBranch}
225
+ api={api}
226
+ onClose={() => { setDialog(null) }}
227
+ onCreated={afterTeardown}
228
+ onSettled={onChanged}
229
+ t={t}
230
+ />
231
+ )}
232
+ {dialog === 'delete' && deleteFacts !== null && (
233
+ <DeleteWorktreeDialog
234
+ repoPath={lane.repoPath}
235
+ name={lane.name}
236
+ merged={deleteFacts.merged}
237
+ dirty={deleteFacts.dirty}
238
+ api={api}
239
+ sessionId={ownLane ? sessionId : undefined}
240
+ onClose={() => { setDialog(null) }}
241
+ onRemoved={afterTeardown}
242
+ t={t}
243
+ />
244
+ )}
245
+ </div>
246
+ )
247
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * "Choosing a branch means moving onto its lane": the browser half that turns a
3
+ * branch choice into (1) the branch's worktree on the host, (2) the conversation
4
+ * actually running in it, and (3) the binding the header chip, the teardown
5
+ * guards and the lane's permission preset all key off.
6
+ *
7
+ * Why the lane MUST be a registered DSH workspace
8
+ * The platform accounts a session to a workspace only while the session's cwd
9
+ * equals that workspace's path: `WorkspaceEntity.sessionIds` filters by
10
+ * `sessionPath(id) === record.path` and `attachSession` refuses a cwd that
11
+ * resolves anywhere else (`dsh-workspace`), and `session.create` takes either
12
+ * a workspace id (cwd := the workspace path) or a bare cwd, never both. A blank
13
+ * conversation that no workspace accounts for renders its composer inert
14
+ * ("choose a workspace to start"), so a lane session created with a bare
15
+ * `cwd` is a conversation the user cannot type into. Hence one workspace per
16
+ * lane, created with the lane directory as its path; teardown removes it
17
+ * again, so the sidebar only carries lanes that are still alive.
18
+ *
19
+ * Where the move comes from
20
+ * The `conversation.input.dock` seat is rendered with `{ session, input }`
21
+ * only (DSH's ConversationContent calls
22
+ * `renderSlot('conversation.input.dock', { session, input })`), so no seat prop
23
+ * can carry a workspace switch: a prop-based move is dead code that silently
24
+ * degrades to "the worktree is ready, pick it in the workspace selector".
25
+ * The platform keeps that call on a client service instead — the shell's own
26
+ * workspace picker performs `uiWorkspace.openWorkspace(workspaceId,
27
+ * migrateDraft)` — so calling the same service is the platform's navigation
28
+ * policy rather than a second implementation of it, and it is reachable from a
29
+ * plugin. It also reuses an existing blank conversation in that workspace
30
+ * instead of piling up a second one.
31
+ *
32
+ * `openWorkspace` reports the conversation it connected through the
33
+ * `beforeOpen` callback, which is the only moment that identity exists on this
34
+ * side. When the callback never fires (a later navigation superseded this one)
35
+ * the session list is polled for the conversation whose cwd is the lane, so the
36
+ * lane still gets its binding.
37
+ *
38
+ * The draft
39
+ * `openWorkspace` moves the *view*, not the composer text: the shell migrates
40
+ * draft text and attachments inside its own `beforeOpen`, and that half is not
41
+ * plugin-reachable (`ctx.conversation.input.for(actx)` needs a retained
42
+ * session scope). A prompt typed before the switch therefore stays in the
43
+ * conversation it was typed in — persisted, and not silently dropped in
44
+ * transit.
45
+ * @module @dsh-cove/dsh-client-ui-worktree/client/lane-open
46
+ */
47
+
48
+ import type { BindLaneInput, BindLaneResult, CreateLaneInput, CreateLaneResult } from '../../../core/worktree/types.ts'
49
+
50
+ /** The platform workspace navigation face (the call behind the shell's own workspace picker). */
51
+ export interface LaneOpenNavigation {
52
+ /**
53
+ * Connect a workspace and show its conversation.
54
+ * @param workspaceId - the lane's registered workspace.
55
+ * @param beforeOpen - receives the conversation being shown, synchronously.
56
+ */
57
+ openWorkspace?: (workspaceId: string, beforeOpen?: (sessionId: string) => void) => Promise<void>
58
+ }
59
+
60
+ /** The session-list slice the fallback lookup reads. */
61
+ export interface LaneOpenSessionList {
62
+ byId?: Record<string, { cwd?: string } | undefined>
63
+ ids?: readonly string[]
64
+ }
65
+
66
+ /** Everything one branch choice needs, injected so tests drive it without a network. */
67
+ export interface LaneOpenDeps {
68
+ /** `POST /worktree/lane/create` — the worktree behind the branch. */
69
+ createLane(input: CreateLaneInput): Promise<CreateLaneResult>
70
+ /** `POST /worktree/lane/bind` — record the conversation and apply the lane preset. */
71
+ bindLane(input: BindLaneInput): Promise<BindLaneResult>
72
+ /** Platform navigation; absent on a shell that does not provide the service. */
73
+ navigation?: LaneOpenNavigation | undefined
74
+ /** Current session-list snapshot, used only for the superseded-navigation fallback. */
75
+ listSessions(): LaneOpenSessionList
76
+ /** Bounded-poll knobs for that fallback (test seam). */
77
+ timeoutMs?: number
78
+ pollMs?: number
79
+ /** Warning sink (test seam). */
80
+ warn?(message: string, error: unknown): void
81
+ }
82
+
83
+ /** One branch choice: the conversation asking, the repo, and the branch. */
84
+ export interface LaneOpenInput {
85
+ /** The conversation that asked; undefined cannot be moved anywhere. */
86
+ sessionId: string | undefined
87
+ /** Repository root (any directory inside it resolves on the host). */
88
+ repoPath: string
89
+ /** Branch to check out in the lane; created at `base` when it does not exist. */
90
+ branch: string
91
+ /** Base commit-ish for a branch that has to be created. */
92
+ base?: string
93
+ }
94
+
95
+ /** The outcome of one branch choice, in worktree terms (the picker maps it to its own wire type). */
96
+ export type LaneOpenResult =
97
+ | {
98
+ ok: true
99
+ /** The lane's branch. */
100
+ branch: string
101
+ /** True only when this conversation now runs in the lane's directory. */
102
+ opened: boolean
103
+ }
104
+ | {
105
+ ok: false
106
+ /** The host's message for the failure. */
107
+ message: string
108
+ }
109
+
110
+ /** How often the fallback looks for the lane's conversation. */
111
+ const LANE_SESSION_POLL_MS = 100
112
+ /** How long the fallback waits for the shell to publish that conversation. */
113
+ const LANE_SESSION_TIMEOUT_MS = 8_000
114
+
115
+ /**
116
+ * Create (or attach) the branch's lane, move this conversation onto it, and
117
+ * record the binding.
118
+ *
119
+ * The lane is created first and never rolled back here: the worktree is a real
120
+ * place the user asked for, so a navigation that does not happen reports
121
+ * `opened: false` (the picker then says where to find it) instead of discarding
122
+ * the directory. A binding failure is reported and swallowed for the same
123
+ * reason — the conversation is in the lane either way, and the composer's own
124
+ * binder retries the record on its next status read.
125
+ * @param deps - the host calls, the navigation service and the session list.
126
+ * @param input - the conversation, repository and branch.
127
+ * @returns whether the conversation now runs in the lane.
128
+ */
129
+ export async function openLaneForBranch(deps: LaneOpenDeps, input: LaneOpenInput): Promise<LaneOpenResult> {
130
+ let lane: CreateLaneResult
131
+ try {
132
+ lane = await deps.createLane({
133
+ repoPath: input.repoPath,
134
+ branch: input.branch,
135
+ ...(input.base === undefined ? {} : { base: input.base }),
136
+ })
137
+ } catch (error) {
138
+ return { ok: false, message: error instanceof Error ? error.message : String(error) }
139
+ }
140
+
141
+ const opened = await moveOntoLane(deps, input.sessionId, lane)
142
+ if (opened === undefined) return { ok: true, branch: lane.branch, opened: false }
143
+
144
+ try {
145
+ await deps.bindLane({ repoPath: input.repoPath, branch: lane.branch, sessionId: opened })
146
+ } catch (error) {
147
+ deps.warn?.('[dsh-worktree] lane binding failed:', error)
148
+ }
149
+ return { ok: true, branch: lane.branch, opened: true }
150
+ }
151
+
152
+ /**
153
+ * Show the conversation that runs in `lane`, when the shell can be asked at all.
154
+ * @returns the conversation now in the lane, or undefined when nothing moved.
155
+ */
156
+ async function moveOntoLane(
157
+ deps: LaneOpenDeps,
158
+ sessionId: string | undefined,
159
+ lane: CreateLaneResult,
160
+ ): Promise<string | undefined> {
161
+ // Without a conversation to move, a workspace to connect, or a navigation
162
+ // service to ask there is nothing to do: the caller reports the lane as ready
163
+ // and says where to pick it up.
164
+ if (sessionId === undefined || lane.workspaceId === null) return undefined
165
+ const navigation = deps.navigation
166
+ if (navigation?.openWorkspace === undefined) return undefined
167
+
168
+ let opened: string | undefined
169
+ try {
170
+ await navigation.openWorkspace(lane.workspaceId, (sessionId) => { opened = sessionId })
171
+ } catch (error) {
172
+ deps.warn?.('[dsh-worktree] could not open a conversation on the lane:', error)
173
+ return undefined
174
+ }
175
+ if (opened !== undefined) return opened
176
+ // Superseded before it reported: the workspace may still have been connected,
177
+ // and the session list is then the only witness of the new conversation.
178
+ return await waitForLaneSession(deps, lane.path)
179
+ }
180
+
181
+ /**
182
+ * The conversation whose cwd is the lane directory, newest first, within the
183
+ * bounded wait. Used only when the navigation did not name it.
184
+ * @param deps - session list and the poll knobs.
185
+ * @param lanePath - the lane directory the conversation must run in.
186
+ * @returns the session id, or undefined when none appeared in time.
187
+ */
188
+ export async function waitForLaneSession(deps: LaneOpenDeps, lanePath: string): Promise<string | undefined> {
189
+ const pollMs = deps.pollMs ?? LANE_SESSION_POLL_MS
190
+ const timeoutMs = deps.timeoutMs ?? LANE_SESSION_TIMEOUT_MS
191
+ const deadline = Date.now() + timeoutMs
192
+ for (;;) {
193
+ const snapshot = deps.listSessions()
194
+ const byId = snapshot.byId ?? {}
195
+ const ids = snapshot.ids ?? Object.keys(byId)
196
+ // Newest first: the shell's freshly connected draft is the one we want, and
197
+ // a lane with several conversations must not hand back an old one.
198
+ for (const id of [...ids].reverse()) {
199
+ if (byId[id]?.cwd === lanePath) return id
200
+ }
201
+ if (Date.now() >= deadline) return undefined
202
+ await new Promise((resolve) => { setTimeout(resolve, pollMs) })
203
+ }
204
+ }
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Retire the sidebar row of a lane whose conversations are all archived.
3
+ *
4
+ * Why a lane ever has a workspace row
5
+ * The platform accounts a session to a workspace only while the session's cwd
6
+ * equals that workspace's path (`WorkspaceEntity.sessionIds` filters by the
7
+ * session's path, and `attachSession` refuses any other cwd), and a blank
8
+ * conversation that no workspace accounts for renders an inert composer
9
+ * ("choose a workspace to start"). So the lane's directory must BE a workspace
10
+ * while a conversation runs in it — that part is a platform requirement, not a
11
+ * taste, and no plugin can avoid the row.
12
+ *
13
+ * What this owns
14
+ * The row's LIFETIME. Once every conversation the lane accounts for is
15
+ * archived, the registration is dead weight: the directory, the branch and the
16
+ * manifest binding stay, so picking that branch again re-registers the
17
+ * directory in one call. The host half retires the same way from archive
18
+ * events; this half runs where the archive set is visible to the browser, so it
19
+ * also cleans up rows an earlier build left behind — including on an
20
+ * installation whose host bundle predates that change.
21
+ *
22
+ * Safety rules
23
+ * - only paths that are this plugin's lane directories (`<repo>/.dsh/workspaces/<branch>`);
24
+ * - only workspaces that account for at least one conversation (a lane created
25
+ * moments ago has none yet, and must not be retired from under its setup);
26
+ * - only when every accounted conversation is archived. A lane with a live
27
+ * conversation keeps its workspace, or that conversation loses the workspace
28
+ * it runs in.
29
+ * @module @dsh-cove/dsh-client-ui-worktree/client/lane-workspace-sweeper
30
+ */
31
+
32
+ import { isLaneDirectory } from '../../../core/worktree/paths.ts'
33
+
34
+ /** The workspace-list slice the sweep reads (mirrors the client workspace snapshot). */
35
+ export interface LaneSweepSnapshot {
36
+ /** `ready` once the host list has arrived; earlier phases carry no items. */
37
+ phase?: string
38
+ items?: readonly {
39
+ workspaceId?: string
40
+ path?: string
41
+ sessionIds?: readonly string[]
42
+ }[]
43
+ /** Complete registry-global archive set. */
44
+ archivedSessionIds?: readonly string[]
45
+ }
46
+
47
+ /** The client workspace face the sweep needs. */
48
+ export interface LaneSweeperWorkspaces {
49
+ list?: {
50
+ getSnapshot?: () => LaneSweepSnapshot
51
+ subscribe?: (listener: () => void) => () => void
52
+ }
53
+ delete?: (workspaceId: string) => Promise<void>
54
+ }
55
+
56
+ /** Everything the sweep needs, injected so tests drive it without a browser. */
57
+ export interface LaneSweeperFaces {
58
+ /** `ctx.workspaces` — the archived set and the delete command. */
59
+ workspaces?: LaneSweeperWorkspaces | undefined
60
+ /** Warning sink (test seam). */
61
+ warn?(message: string, error: unknown): void
62
+ }
63
+
64
+ /**
65
+ * The lane workspaces whose conversations are all archived, in snapshot order.
66
+ * @param snapshot - the client workspace snapshot.
67
+ * @returns workspace ids to retire.
68
+ */
69
+ export function laneWorkspacesToRetire(snapshot: LaneSweepSnapshot | undefined): string[] {
70
+ if (snapshot === undefined || snapshot.phase !== 'ready') return []
71
+ const archived = new Set(snapshot.archivedSessionIds ?? [])
72
+ const retiring: string[] = []
73
+ for (const workspace of snapshot.items ?? []) {
74
+ const id = workspace.workspaceId
75
+ const path = workspace.path
76
+ const sessionIds = workspace.sessionIds ?? []
77
+ if (id === undefined || path === undefined) continue
78
+ if (!isLaneDirectory(path)) continue
79
+ // A lane created moments ago accounts for no conversation yet: its workspace
80
+ // is being set up and must survive the sweep.
81
+ if (sessionIds.length === 0) continue
82
+ // A live conversation needs the workspace it runs in.
83
+ if (!sessionIds.every((sessionId) => archived.has(sessionId))) continue
84
+ retiring.push(id)
85
+ }
86
+ return retiring
87
+ }
88
+
89
+ /**
90
+ * Sweep once: delete the registration of every lane whose conversations are all
91
+ * archived. A failure is reported and does not stop the rest.
92
+ * @param faces - the workspace face and the warning sink.
93
+ * @returns the workspace ids that were retired.
94
+ */
95
+ export async function sweepLaneWorkspaces(faces: LaneSweeperFaces): Promise<string[]> {
96
+ const list = faces.workspaces?.list
97
+ const remove = faces.workspaces?.delete
98
+ if (list?.getSnapshot === undefined || remove === undefined) return []
99
+ const candidates = laneWorkspacesToRetire(list.getSnapshot())
100
+ const retired: string[] = []
101
+ for (const workspaceId of candidates) {
102
+ try {
103
+ await remove.call(faces.workspaces, workspaceId)
104
+ retired.push(workspaceId)
105
+ } catch (error) {
106
+ faces.warn?.('[dsh-worktree] could not retire a lane workspace:', error)
107
+ }
108
+ }
109
+ return retired
110
+ }
111
+
112
+ /**
113
+ * Sweep on mount and on every workspace-list change (an archive, a new lane, a
114
+ * deletion). Sweeps never overlap: a change arriving mid-sweep queues one more
115
+ * pass, so the pass always sees the list the changes produced.
116
+ * @param faces - the workspace face and the warning sink.
117
+ * @returns the disposer (unsubscribes).
118
+ */
119
+ export function mountLaneWorkspaceSweeper(faces: LaneSweeperFaces): () => void {
120
+ const list = faces.workspaces?.list
121
+ if (list?.getSnapshot === undefined || list.subscribe === undefined) return () => {}
122
+ let running = false
123
+ let queued = false
124
+ const run = (): void => {
125
+ if (running) { queued = true; return }
126
+ running = true
127
+ void sweepLaneWorkspaces(faces).catch((error: unknown) => {
128
+ faces.warn?.('[dsh-worktree] lane workspace sweep failed:', error)
129
+ }).finally(() => {
130
+ running = false
131
+ if (queued) { queued = false; run() }
132
+ })
133
+ }
134
+ run()
135
+ return list.subscribe(run)
136
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Worktree lifecycle stage derivation (pure, shared with tests): given the
3
+ * disk truth and the latest status probe, classify a linked worktree into
4
+ * one of the four panel stages that drive its primary action.
5
+ *
6
+ * Also the single place that turns a client/host failure into localized copy:
7
+ * the panel and the dialogs must never print the host's English `message`
8
+ * verbatim in a Chinese UI, and a fence refusal must not read like a git bug.
9
+ * @module @dsh-cove/dsh-client-ui-worktree/client/lifecycle
10
+ */
11
+
12
+ import type { Translate } from '@deepseek-ai/dsh-client-ui-slots'
13
+ import type { WorktreeStatusView, WorktreeView } from '../../../core/worktree/types.ts'
14
+ import type { WorktreeErrorCode } from '../../../core/worktree/invariant.ts'
15
+ import { WorktreeApiError } from './api.ts'
16
+ import type { WorktreeKey } from './locales.ts'
17
+
18
+ /** Lifecycle stage of one linked worktree — drives the row's primary action. */
19
+ export type WorktreeStage = 'missing' | 'developing' | 'in-review' | 'merged'
20
+
21
+ export function stageOfWorktree(
22
+ worktree: Pick<WorktreeView, 'exists' | 'branch'>,
23
+ status: WorktreeStatusView | undefined,
24
+ ): WorktreeStage {
25
+ if (!worktree.exists) return 'missing'
26
+ if (status?.merged === true) return 'merged'
27
+ // A pushed branch with a recorded PR url is under review; anything else
28
+ // is still developing (submit-PR is the next step).
29
+ if (status?.prUrl != null && status.prUrl !== '') return 'in-review'
30
+ return 'developing'
31
+ }
32
+
33
+ /** The localized key for one domain error code. */
34
+ function codeKeyOf(code: WorktreeErrorCode | undefined): WorktreeKey {
35
+ switch (code) {
36
+ case 'worktree-exists': return 'error.worktreeExists'
37
+ case 'worktree-not-found': return 'error.worktreeNotFound'
38
+ case 'not-a-repository': return 'error.notARepository'
39
+ case 'workspace-unknown': return 'error.workspaceUnknown'
40
+ case 'invalid-branch': return 'error.invalidBranch'
41
+ case 'worktree-busy': return 'error.worktreeBusy'
42
+ case 'not-merged': return 'error.notMerged'
43
+ case 'session-create-failed':
44
+ case 'session-unknown': return 'error.laneSession'
45
+ case 'lane-mismatch': return 'error.laneMismatch'
46
+ default: return 'error.gitFailed'
47
+ }
48
+ }
49
+
50
+ /**
51
+ * The localized key explaining one failure, or null when the error carries no
52
+ * known shape (the caller then shows its own message).
53
+ */
54
+ export function worktreeErrorKeyOf(error: unknown): WorktreeKey | null {
55
+ if (error instanceof WorktreeApiError) {
56
+ if (error.kind === 'permission') return 'error.permissionDenied'
57
+ if (error.kind === 'malformed' || error.kind === 'transport') return 'error.unreachable'
58
+ return codeKeyOf(error.code)
59
+ }
60
+ return null
61
+ }
62
+
63
+ /**
64
+ * Render one failure as user-facing copy.
65
+ * @param error - any thrown value from the worktree API.
66
+ * @param t - the `worktree` namespace translator.
67
+ * @returns localized text, with the raw detail attached for the git/unreachable cases.
68
+ */
69
+ export function worktreeErrorMessage(error: unknown, t: Translate<WorktreeKey>): string {
70
+ const detail = error instanceof Error ? error.message : String(error)
71
+ const key = worktreeErrorKeyOf(error)
72
+ if (key === null) return detail
73
+ if (key === 'error.gitFailed' || key === 'error.unreachable') return t(key, { error: detail })
74
+ return t(key)
75
+ }