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

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 (900) hide show
  1. package/LICENSE +202 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +205 -2
  4. package/README.zh.md +205 -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/worktree/invariant.d.ts +62 -0
  290. package/lib/types/core/worktree/invariant.d.ts.map +1 -0
  291. package/lib/types/core/worktree/invariant.js +72 -0
  292. package/lib/types/core/worktree/manifest.d.ts +71 -0
  293. package/lib/types/core/worktree/manifest.d.ts.map +1 -0
  294. package/lib/types/core/worktree/manifest.js +98 -0
  295. package/lib/types/core/worktree/paths.d.ts +60 -0
  296. package/lib/types/core/worktree/paths.d.ts.map +1 -0
  297. package/lib/types/core/worktree/paths.js +118 -0
  298. package/lib/types/core/worktree/pr-create.d.ts +67 -0
  299. package/lib/types/core/worktree/pr-create.d.ts.map +1 -0
  300. package/lib/types/core/worktree/pr-create.js +118 -0
  301. package/lib/types/core/worktree/protocol.d.ts +7 -0
  302. package/lib/types/core/worktree/protocol.d.ts.map +1 -0
  303. package/lib/types/core/worktree/protocol.js +6 -0
  304. package/lib/types/core/worktree/types.d.ts +292 -0
  305. package/lib/types/core/worktree/types.d.ts.map +1 -0
  306. package/lib/types/core/worktree/types.js +14 -0
  307. package/lib/types/core/worktree/workspace-model.d.ts +56 -0
  308. package/lib/types/core/worktree/workspace-model.d.ts.map +1 -0
  309. package/lib/types/core/worktree/workspace-model.js +14 -0
  310. package/lib/types/host/services/access-trust/index.d.ts +54 -0
  311. package/lib/types/host/services/access-trust/index.d.ts.map +1 -0
  312. package/lib/types/host/services/access-trust/index.js +82 -0
  313. package/lib/types/host/services/access-trust/trust.d.ts +70 -0
  314. package/lib/types/host/services/access-trust/trust.d.ts.map +1 -0
  315. package/lib/types/host/services/access-trust/trust.js +187 -0
  316. package/lib/types/host/services/codex-bridge/bridge.d.ts +106 -0
  317. package/lib/types/host/services/codex-bridge/bridge.d.ts.map +1 -0
  318. package/lib/types/host/services/codex-bridge/bridge.js +321 -0
  319. package/lib/types/host/services/codex-bridge/codex-auth.d.ts +108 -0
  320. package/lib/types/host/services/codex-bridge/codex-auth.d.ts.map +1 -0
  321. package/lib/types/host/services/codex-bridge/codex-auth.js +241 -0
  322. package/lib/types/host/services/codex-bridge/dsh-integration.d.ts +58 -0
  323. package/lib/types/host/services/codex-bridge/dsh-integration.d.ts.map +1 -0
  324. package/lib/types/host/services/codex-bridge/dsh-integration.js +120 -0
  325. package/lib/types/host/services/codex-bridge/http.d.ts +43 -0
  326. package/lib/types/host/services/codex-bridge/http.d.ts.map +1 -0
  327. package/lib/types/host/services/codex-bridge/http.js +92 -0
  328. package/lib/types/host/services/codex-bridge/index.d.ts +63 -0
  329. package/lib/types/host/services/codex-bridge/index.d.ts.map +1 -0
  330. package/lib/types/host/services/codex-bridge/index.js +111 -0
  331. package/lib/types/host/services/codex-bridge/loopback.d.ts +25 -0
  332. package/lib/types/host/services/codex-bridge/loopback.d.ts.map +1 -0
  333. package/lib/types/host/services/codex-bridge/loopback.js +68 -0
  334. package/lib/types/host/services/codex-bridge/routes.d.ts +31 -0
  335. package/lib/types/host/services/codex-bridge/routes.d.ts.map +1 -0
  336. package/lib/types/host/services/codex-bridge/routes.js +126 -0
  337. package/lib/types/host/services/family-config.d.ts +71 -0
  338. package/lib/types/host/services/family-config.d.ts.map +1 -0
  339. package/lib/types/host/services/family-config.js +166 -0
  340. package/lib/types/host/services/family-namespaces.d.ts +24 -0
  341. package/lib/types/host/services/family-namespaces.d.ts.map +1 -0
  342. package/lib/types/host/services/family-namespaces.js +30 -0
  343. package/lib/types/host/services/git-graph/index.d.ts +6 -0
  344. package/lib/types/host/services/git-graph/index.d.ts.map +1 -0
  345. package/lib/types/host/services/git-graph/index.js +7 -0
  346. package/lib/types/host/services/git-graph/routes.d.ts +4 -0
  347. package/lib/types/host/services/git-graph/routes.d.ts.map +1 -0
  348. package/lib/types/host/services/git-graph/routes.js +241 -0
  349. package/lib/types/host/services/git-graph/service.d.ts +52 -0
  350. package/lib/types/host/services/git-graph/service.d.ts.map +1 -0
  351. package/lib/types/host/services/git-graph/service.js +301 -0
  352. package/lib/types/host/services/index.d.ts +23 -0
  353. package/lib/types/host/services/index.d.ts.map +1 -0
  354. package/lib/types/host/services/index.js +80 -0
  355. package/lib/types/host/services/lark-inbox/config.d.ts +24 -0
  356. package/lib/types/host/services/lark-inbox/config.d.ts.map +1 -0
  357. package/lib/types/host/services/lark-inbox/config.js +48 -0
  358. package/lib/types/host/services/lark-inbox/gateway.d.ts +53 -0
  359. package/lib/types/host/services/lark-inbox/gateway.d.ts.map +1 -0
  360. package/lib/types/host/services/lark-inbox/gateway.js +171 -0
  361. package/lib/types/host/services/lark-inbox/host-routes.d.ts +22 -0
  362. package/lib/types/host/services/lark-inbox/host-routes.d.ts.map +1 -0
  363. package/lib/types/host/services/lark-inbox/host-routes.js +146 -0
  364. package/lib/types/host/services/lark-inbox/inbox-store.d.ts +39 -0
  365. package/lib/types/host/services/lark-inbox/inbox-store.d.ts.map +1 -0
  366. package/lib/types/host/services/lark-inbox/inbox-store.js +124 -0
  367. package/lib/types/host/services/lark-inbox/index.d.ts +26 -0
  368. package/lib/types/host/services/lark-inbox/index.d.ts.map +1 -0
  369. package/lib/types/host/services/lark-inbox/index.js +135 -0
  370. package/lib/types/host/services/lark-inbox/tools.d.ts +7 -0
  371. package/lib/types/host/services/lark-inbox/tools.d.ts.map +1 -0
  372. package/lib/types/host/services/lark-inbox/tools.js +119 -0
  373. package/lib/types/host/services/lark-inbox/wizard.d.ts +62 -0
  374. package/lib/types/host/services/lark-inbox/wizard.d.ts.map +1 -0
  375. package/lib/types/host/services/lark-inbox/wizard.js +211 -0
  376. package/lib/types/host/services/lifecycle.d.ts +29 -0
  377. package/lib/types/host/services/lifecycle.d.ts.map +1 -0
  378. package/lib/types/host/services/lifecycle.js +93 -0
  379. package/lib/types/host/services/memoir/index.d.ts +40 -0
  380. package/lib/types/host/services/memoir/index.d.ts.map +1 -0
  381. package/lib/types/host/services/memoir/index.js +52 -0
  382. package/lib/types/host/services/memoir/routes.d.ts +30 -0
  383. package/lib/types/host/services/memoir/routes.d.ts.map +1 -0
  384. package/lib/types/host/services/memoir/routes.js +364 -0
  385. package/lib/types/host/services/memoir/settings.d.ts +27 -0
  386. package/lib/types/host/services/memoir/settings.d.ts.map +1 -0
  387. package/lib/types/host/services/memoir/settings.js +120 -0
  388. package/lib/types/host/services/memoir/store.d.ts +35 -0
  389. package/lib/types/host/services/memoir/store.d.ts.map +1 -0
  390. package/lib/types/host/services/memoir/store.js +124 -0
  391. package/lib/types/host/services/memoir/tools.d.ts +8 -0
  392. package/lib/types/host/services/memoir/tools.d.ts.map +1 -0
  393. package/lib/types/host/services/memoir/tools.js +154 -0
  394. package/lib/types/host/services/no-browser-auth/index.d.ts +25 -0
  395. package/lib/types/host/services/no-browser-auth/index.d.ts.map +1 -0
  396. package/lib/types/host/services/no-browser-auth/index.js +42 -0
  397. package/lib/types/host/services/notify/config.d.ts +105 -0
  398. package/lib/types/host/services/notify/config.d.ts.map +1 -0
  399. package/lib/types/host/services/notify/config.js +123 -0
  400. package/lib/types/host/services/notify/feishu-sender.d.ts +120 -0
  401. package/lib/types/host/services/notify/feishu-sender.d.ts.map +1 -0
  402. package/lib/types/host/services/notify/feishu-sender.js +186 -0
  403. package/lib/types/host/services/notify/host-routes.d.ts +69 -0
  404. package/lib/types/host/services/notify/host-routes.d.ts.map +1 -0
  405. package/lib/types/host/services/notify/host-routes.js +112 -0
  406. package/lib/types/host/services/notify/index.d.ts +80 -0
  407. package/lib/types/host/services/notify/index.d.ts.map +1 -0
  408. package/lib/types/host/services/notify/index.js +263 -0
  409. package/lib/types/host/services/playwright-sessions/child.d.ts +76 -0
  410. package/lib/types/host/services/playwright-sessions/child.d.ts.map +1 -0
  411. package/lib/types/host/services/playwright-sessions/child.js +197 -0
  412. package/lib/types/host/services/playwright-sessions/controller.d.ts +25 -0
  413. package/lib/types/host/services/playwright-sessions/controller.d.ts.map +1 -0
  414. package/lib/types/host/services/playwright-sessions/controller.js +104 -0
  415. package/lib/types/host/services/playwright-sessions/index.d.ts +6 -0
  416. package/lib/types/host/services/playwright-sessions/index.d.ts.map +1 -0
  417. package/lib/types/host/services/playwright-sessions/index.js +161 -0
  418. package/lib/types/host/services/playwright-sessions/live-view.d.ts +32 -0
  419. package/lib/types/host/services/playwright-sessions/live-view.d.ts.map +1 -0
  420. package/lib/types/host/services/playwright-sessions/live-view.js +188 -0
  421. package/lib/types/host/services/playwright-sessions/manager.d.ts +87 -0
  422. package/lib/types/host/services/playwright-sessions/manager.d.ts.map +1 -0
  423. package/lib/types/host/services/playwright-sessions/manager.js +203 -0
  424. package/lib/types/host/services/playwright-sessions/profile-gc.d.ts +39 -0
  425. package/lib/types/host/services/playwright-sessions/profile-gc.d.ts.map +1 -0
  426. package/lib/types/host/services/playwright-sessions/profile-gc.js +72 -0
  427. package/lib/types/host/services/playwright-sessions/routes.d.ts +18 -0
  428. package/lib/types/host/services/playwright-sessions/routes.d.ts.map +1 -0
  429. package/lib/types/host/services/playwright-sessions/routes.js +87 -0
  430. package/lib/types/host/services/remote-access/boot-scripts.d.ts +55 -0
  431. package/lib/types/host/services/remote-access/boot-scripts.d.ts.map +1 -0
  432. package/lib/types/host/services/remote-access/boot-scripts.js +109 -0
  433. package/lib/types/host/services/remote-access/index.d.ts +28 -0
  434. package/lib/types/host/services/remote-access/index.d.ts.map +1 -0
  435. package/lib/types/host/services/remote-access/index.js +47 -0
  436. package/lib/types/host/services/remote-access/routes.d.ts +42 -0
  437. package/lib/types/host/services/remote-access/routes.d.ts.map +1 -0
  438. package/lib/types/host/services/remote-access/routes.js +119 -0
  439. package/lib/types/host/services/remote-web-ui/index.d.ts +21 -0
  440. package/lib/types/host/services/remote-web-ui/index.d.ts.map +1 -0
  441. package/lib/types/host/services/remote-web-ui/index.js +325 -0
  442. package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts +115 -0
  443. package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts.map +1 -0
  444. package/lib/types/host/services/remote-web-ui/server-mode/accounts.js +396 -0
  445. package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts +28 -0
  446. package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts.map +1 -0
  447. package/lib/types/host/services/remote-web-ui/server-mode/cookie.js +48 -0
  448. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts +17 -0
  449. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts.map +1 -0
  450. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.js +40 -0
  451. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts +73 -0
  452. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts.map +1 -0
  453. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.js +242 -0
  454. package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts +23 -0
  455. package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts.map +1 -0
  456. package/lib/types/host/services/remote-web-ui/server-mode/fence.js +24 -0
  457. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts +89 -0
  458. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts.map +1 -0
  459. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.js +768 -0
  460. package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts +99 -0
  461. package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts.map +1 -0
  462. package/lib/types/host/services/remote-web-ui/server-mode/gateway.js +679 -0
  463. package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts +43 -0
  464. package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts.map +1 -0
  465. package/lib/types/host/services/remote-web-ui/server-mode/http.js +92 -0
  466. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts +42 -0
  467. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts.map +1 -0
  468. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.js +73 -0
  469. package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts +13 -0
  470. package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts.map +1 -0
  471. package/lib/types/host/services/remote-web-ui/server-mode/lan.js +17 -0
  472. package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts +25 -0
  473. package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts.map +1 -0
  474. package/lib/types/host/services/remote-web-ui/server-mode/loopback.js +68 -0
  475. package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts +75 -0
  476. package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts.map +1 -0
  477. package/lib/types/host/services/remote-web-ui/server-mode/posture.js +116 -0
  478. package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts +44 -0
  479. package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts.map +1 -0
  480. package/lib/types/host/services/remote-web-ui/server-mode/roles.js +47 -0
  481. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts +21 -0
  482. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts.map +1 -0
  483. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.js +37 -0
  484. package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts +111 -0
  485. package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts.map +1 -0
  486. package/lib/types/host/services/remote-web-ui/server-mode/sessions.js +298 -0
  487. package/lib/types/host/services/remote-web-ui/server.d.ts +82 -0
  488. package/lib/types/host/services/remote-web-ui/server.d.ts.map +1 -0
  489. package/lib/types/host/services/remote-web-ui/server.js +492 -0
  490. package/lib/types/host/services/resources.d.ts +9 -0
  491. package/lib/types/host/services/resources.d.ts.map +1 -0
  492. package/lib/types/host/services/resources.js +98 -0
  493. package/lib/types/host/services/right-pane/browser.d.ts +42 -0
  494. package/lib/types/host/services/right-pane/browser.d.ts.map +1 -0
  495. package/lib/types/host/services/right-pane/browser.js +106 -0
  496. package/lib/types/host/services/right-pane/index.d.ts +22 -0
  497. package/lib/types/host/services/right-pane/index.d.ts.map +1 -0
  498. package/lib/types/host/services/right-pane/index.js +114 -0
  499. package/lib/types/host/services/right-pane/wire.d.ts +6 -0
  500. package/lib/types/host/services/right-pane/wire.d.ts.map +1 -0
  501. package/lib/types/host/services/right-pane/wire.js +9 -0
  502. package/lib/types/host/services/schedule-mode/config.d.ts +11 -0
  503. package/lib/types/host/services/schedule-mode/config.d.ts.map +1 -0
  504. package/lib/types/host/services/schedule-mode/config.js +15 -0
  505. package/lib/types/host/services/schedule-mode/engine.d.ts +150 -0
  506. package/lib/types/host/services/schedule-mode/engine.d.ts.map +1 -0
  507. package/lib/types/host/services/schedule-mode/engine.js +672 -0
  508. package/lib/types/host/services/schedule-mode/index.d.ts +33 -0
  509. package/lib/types/host/services/schedule-mode/index.d.ts.map +1 -0
  510. package/lib/types/host/services/schedule-mode/index.js +175 -0
  511. package/lib/types/host/services/schedule-mode/routes.d.ts +31 -0
  512. package/lib/types/host/services/schedule-mode/routes.d.ts.map +1 -0
  513. package/lib/types/host/services/schedule-mode/routes.js +109 -0
  514. package/lib/types/host/services/schedule-mode/session-create.d.ts +27 -0
  515. package/lib/types/host/services/schedule-mode/session-create.d.ts.map +1 -0
  516. package/lib/types/host/services/schedule-mode/session-create.js +21 -0
  517. package/lib/types/host/services/schedule-mode/store.d.ts +36 -0
  518. package/lib/types/host/services/schedule-mode/store.d.ts.map +1 -0
  519. package/lib/types/host/services/schedule-mode/store.js +309 -0
  520. package/lib/types/host/services/schedule-mode/tools.d.ts +13 -0
  521. package/lib/types/host/services/schedule-mode/tools.d.ts.map +1 -0
  522. package/lib/types/host/services/schedule-mode/tools.js +132 -0
  523. package/lib/types/host/services/ssh/engine.d.ts +162 -0
  524. package/lib/types/host/services/ssh/engine.d.ts.map +1 -0
  525. package/lib/types/host/services/ssh/engine.js +699 -0
  526. package/lib/types/host/services/ssh/host-keys.d.ts +10 -0
  527. package/lib/types/host/services/ssh/host-keys.d.ts.map +1 -0
  528. package/lib/types/host/services/ssh/host-keys.js +108 -0
  529. package/lib/types/host/services/ssh/index.d.ts +38 -0
  530. package/lib/types/host/services/ssh/index.d.ts.map +1 -0
  531. package/lib/types/host/services/ssh/index.js +47 -0
  532. package/lib/types/host/services/ssh/routes.d.ts +29 -0
  533. package/lib/types/host/services/ssh/routes.d.ts.map +1 -0
  534. package/lib/types/host/services/ssh/routes.js +465 -0
  535. package/lib/types/host/services/ssh/store.d.ts +40 -0
  536. package/lib/types/host/services/ssh/store.d.ts.map +1 -0
  537. package/lib/types/host/services/ssh/store.js +330 -0
  538. package/lib/types/host/services/ssh/terminal-ws.d.ts +9 -0
  539. package/lib/types/host/services/ssh/terminal-ws.d.ts.map +1 -0
  540. package/lib/types/host/services/ssh/terminal-ws.js +142 -0
  541. package/lib/types/host/services/ssh/tools.d.ts +11 -0
  542. package/lib/types/host/services/ssh/tools.d.ts.map +1 -0
  543. package/lib/types/host/services/ssh/tools.js +270 -0
  544. package/lib/types/host/services/web-render/contracts.d.ts +93 -0
  545. package/lib/types/host/services/web-render/contracts.d.ts.map +1 -0
  546. package/lib/types/host/services/web-render/contracts.js +60 -0
  547. package/lib/types/host/services/web-render/index.d.ts +58 -0
  548. package/lib/types/host/services/web-render/index.d.ts.map +1 -0
  549. package/lib/types/host/services/web-render/index.js +90 -0
  550. package/lib/types/host/services/web-render/provider.d.ts +37 -0
  551. package/lib/types/host/services/web-render/provider.d.ts.map +1 -0
  552. package/lib/types/host/services/web-render/provider.js +274 -0
  553. package/lib/types/host/services/web-search-anthropic/contracts.d.ts +117 -0
  554. package/lib/types/host/services/web-search-anthropic/contracts.d.ts.map +1 -0
  555. package/lib/types/host/services/web-search-anthropic/contracts.js +90 -0
  556. package/lib/types/host/services/web-search-anthropic/index.d.ts +53 -0
  557. package/lib/types/host/services/web-search-anthropic/index.d.ts.map +1 -0
  558. package/lib/types/host/services/web-search-anthropic/index.js +123 -0
  559. package/lib/types/host/services/web-search-anthropic/provider.d.ts +101 -0
  560. package/lib/types/host/services/web-search-anthropic/provider.d.ts.map +1 -0
  561. package/lib/types/host/services/web-search-anthropic/provider.js +237 -0
  562. package/lib/types/host/services/worktree/git-runner.d.ts +82 -0
  563. package/lib/types/host/services/worktree/git-runner.d.ts.map +1 -0
  564. package/lib/types/host/services/worktree/git-runner.js +81 -0
  565. package/lib/types/host/services/worktree/git.d.ts +94 -0
  566. package/lib/types/host/services/worktree/git.d.ts.map +1 -0
  567. package/lib/types/host/services/worktree/git.js +153 -0
  568. package/lib/types/host/services/worktree/http.d.ts +12 -0
  569. package/lib/types/host/services/worktree/http.d.ts.map +1 -0
  570. package/lib/types/host/services/worktree/http.js +34 -0
  571. package/lib/types/host/services/worktree/index.d.ts +38 -0
  572. package/lib/types/host/services/worktree/index.d.ts.map +1 -0
  573. package/lib/types/host/services/worktree/index.js +78 -0
  574. package/lib/types/host/services/worktree/lane-tool.d.ts +22 -0
  575. package/lib/types/host/services/worktree/lane-tool.d.ts.map +1 -0
  576. package/lib/types/host/services/worktree/lane-tool.js +92 -0
  577. package/lib/types/host/services/worktree/manager.d.ts +410 -0
  578. package/lib/types/host/services/worktree/manager.d.ts.map +1 -0
  579. package/lib/types/host/services/worktree/manager.js +1485 -0
  580. package/lib/types/host/services/worktree/model-override.d.ts +20 -0
  581. package/lib/types/host/services/worktree/model-override.d.ts.map +1 -0
  582. package/lib/types/host/services/worktree/model-override.js +35 -0
  583. package/lib/types/host/services/worktree/routes.d.ts +50 -0
  584. package/lib/types/host/services/worktree/routes.d.ts.map +1 -0
  585. package/lib/types/host/services/worktree/routes.js +695 -0
  586. package/lib/types/host/services/worktree/run-command.d.ts +26 -0
  587. package/lib/types/host/services/worktree/run-command.d.ts.map +1 -0
  588. package/lib/types/host/services/worktree/run-command.js +36 -0
  589. package/lib/types/host/services/worktree/session-lane/manager.d.ts +109 -0
  590. package/lib/types/host/services/worktree/session-lane/manager.d.ts.map +1 -0
  591. package/lib/types/host/services/worktree/session-lane/manager.js +172 -0
  592. package/lib/types/host/services/worktree/workspace-model-routes.d.ts +21 -0
  593. package/lib/types/host/services/worktree/workspace-model-routes.d.ts.map +1 -0
  594. package/lib/types/host/services/worktree/workspace-model-routes.js +198 -0
  595. package/lib/types/host/services/worktree/workspace-model.d.ts +48 -0
  596. package/lib/types/host/services/worktree/workspace-model.d.ts.map +1 -0
  597. package/lib/types/host/services/worktree/workspace-model.js +113 -0
  598. package/lib/types/index.d.ts +47 -0
  599. package/lib/types/index.d.ts.map +1 -0
  600. package/lib/types/index.js +52 -0
  601. package/lib/types/invariant.d.ts +4 -0
  602. package/lib/types/invariant.d.ts.map +1 -0
  603. package/lib/types/invariant.js +3 -0
  604. package/package.json +153 -3
  605. package/presets/code-vibe/THIRD_PARTY_NOTICES.md +55 -0
  606. package/presets/code-vibe/skills/UPSTREAM.md +104 -0
  607. package/presets/code-vibe/skills/agent-experience/SKILL.md +15 -0
  608. package/presets/code-vibe/skills/agent-operation/SKILL.md +43 -0
  609. package/presets/code-vibe/skills/code-review/SKILL.md +45 -0
  610. package/presets/code-vibe/skills/dsh-ci-test-reliability/SKILL.md +133 -0
  611. package/presets/code-vibe/skills/dsh-ci-test-reliability/references/ci-flake-diagnosis.md +60 -0
  612. package/presets/code-vibe/skills/dsh-find-simplifications/SKILL.md +69 -0
  613. package/presets/code-vibe/skills/dsh-find-simplifications/references/historical-patterns.md +45 -0
  614. package/presets/code-vibe/skills/dsh-merging-stacked-prs/SKILL.md +129 -0
  615. package/presets/code-vibe/skills/dsh-prose-standard/SKILL.md +83 -0
  616. package/presets/code-vibe/skills/dsh-prose-standard/references/examples.md +169 -0
  617. package/presets/code-vibe/skills/dsh-speed-up-perf/SKILL.md +94 -0
  618. package/presets/code-vibe/skills/dsh-trim-cot-leakage/SKILL.md +47 -0
  619. package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/examples.md +275 -0
  620. package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/recall-batteries.md +52 -0
  621. package/presets/code-vibe/skills/frontend-design/SKILL.md +60 -0
  622. package/presets/code-vibe/skills/frontend-design/references/critique-format.md +35 -0
  623. package/presets/code-vibe/skills/frontend-design/references/design-standards/LOAD-MAP.md +81 -0
  624. package/presets/code-vibe/skills/frontend-design/references/design-standards/README.md +53 -0
  625. package/presets/code-vibe/skills/frontend-design/references/design-standards/anchor.md +51 -0
  626. package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/ai-tells.md +59 -0
  627. package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/web-interface.md +14 -0
  628. package/presets/code-vibe/skills/frontend-design/references/design-standards/change-control.md +62 -0
  629. package/presets/code-vibe/skills/frontend-design/references/design-standards/copy.md +65 -0
  630. package/presets/code-vibe/skills/frontend-design/references/design-standards/craft-knobs.md +61 -0
  631. package/presets/code-vibe/skills/frontend-design/references/design-standards/debug-playbook.md +37 -0
  632. package/presets/code-vibe/skills/frontend-design/references/design-standards/exemplars/README.md +64 -0
  633. package/presets/code-vibe/skills/frontend-design/references/design-standards/plan-architecture.checklist.json +13 -0
  634. package/presets/code-vibe/skills/frontend-design/references/design-standards/product-judgment.md +113 -0
  635. package/presets/code-vibe/skills/frontend-design/references/design-standards/system-architecture.md +108 -0
  636. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/README.md +26 -0
  637. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/color-roles.md +49 -0
  638. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/motion.md +51 -0
  639. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/scale.md +89 -0
  640. package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-page-gate.md +61 -0
  641. package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-surface.checklist.json +49 -0
  642. package/presets/code-vibe/skills/frontend-design/references/design-standards/ux.md +76 -0
  643. package/presets/code-vibe/skills/frontend-design/references/design-standards/visual.md +52 -0
  644. package/presets/code-vibe/skills/frontend-design/references/perceptible-path.md +27 -0
  645. package/presets/code-vibe/skills/frontend-design/references/product-package.md +80 -0
  646. package/presets/code-vibe/skills/frontend-design/references/scheme-antipatterns.md +21 -0
  647. package/presets/code-vibe/skills/quality-review/SKILL.md +57 -0
  648. package/presets/code-vibe/skills/quality-review/references/bounded-verify.md +37 -0
  649. package/presets/code-vibe/skills/quality-review/references/browser-verify.md +81 -0
  650. package/presets/code-vibe/skills/quality-review/references/evidence-contract.md +194 -0
  651. package/presets/code-vibe/skills/quality-review/references/falsify-checklist.md +44 -0
  652. package/presets/code-vibe/skills/quality-review/references/human-acceptance-pack.md +68 -0
  653. package/presets/code-vibe/skills/quality-review/references/product-regression.md +51 -0
  654. package/presets/code-vibe/skills/quality-review/references/ux-standards.md +37 -0
  655. package/presets/code-vibe/skills/quality-review/references/ux-walkthrough.md +49 -0
  656. package/presets/code-vibe/skills/quality-review/references/validation-report.md +22 -0
  657. package/presets/code-vibe/skills/quality-review/references/verification-loop.md +95 -0
  658. package/presets/code-vibe/skills/quality-review/references/version-acceptance-matrix.md +131 -0
  659. package/presets/code-vibe/skills/record-browser-gif/SKILL.md +174 -0
  660. package/presets/code-vibe/skills/record-browser-gif/scripts/encode_gif.py +337 -0
  661. package/presets/code-vibe/skills/record-browser-gif/scripts/test_encode_gif.py +103 -0
  662. package/presets/code-vibe/skills/wish-programming/SKILL.md +150 -0
  663. package/presets/code-vibe/skills/wish-programming/references/roles/arch-reviewer.md +26 -0
  664. package/presets/code-vibe/skills/wish-programming/references/roles/design-reviewer.md +32 -0
  665. package/presets/code-vibe/skills/wish-programming/references/roles/pm-reviewer.md +26 -0
  666. package/presets/code-vibe/skills/wish-programming/references/roles/qa-reviewer.md +16 -0
  667. package/presets/code-vibe/skills/wish-programming/references/roles/security-reviewer.md +16 -0
  668. package/presets/code-vibe/skills/wish-programming/references/roles/sre-reviewer.md +16 -0
  669. package/presets/code-vibe/skills/wish-programming/references/roles/ux-adversary.md +16 -0
  670. package/presets/code-vibe/skills/wish-programming/references/templates/arch.md.tpl +51 -0
  671. package/presets/code-vibe/skills/wish-programming/references/templates/brief.md.tpl +36 -0
  672. package/presets/code-vibe/skills/wish-programming/references/templates/confirmation-pack.md +54 -0
  673. package/presets/code-vibe/skills/wish-programming/references/templates/design-spec.md.tpl +49 -0
  674. package/presets/code-vibe/skills/wish-programming/references/templates/module-readme.md +37 -0
  675. package/presets/code-vibe/skills/wish-programming/references/templates/product.md.tpl +74 -0
  676. package/presets/code-vibe/skills/wish-programming/references/templates/requirements.md.tpl +31 -0
  677. package/presets/code-vibe/skills/wish-programming/references/workflow-template.md +122 -0
  678. package/presets/code-vibe/skills/wish-programming/scripts/MANIFEST.sha256 +11 -0
  679. package/presets/code-vibe/skills/wish-programming/scripts/check_spec.py +416 -0
  680. package/presets/code-vibe/skills/wish-programming/scripts/check_whitelist.py +193 -0
  681. package/presets/code-vibe/skills/wish-programming/scripts/coverage_check.py +199 -0
  682. package/presets/code-vibe/skills/wish-programming/scripts/gate-lock.sh +46 -0
  683. package/presets/code-vibe/skills/wish-programming/scripts/journey.sh +281 -0
  684. package/presets/code-vibe/skills/wish-programming/scripts/project.sh +152 -0
  685. package/presets/code-vibe/skills/wish-programming/scripts/replay.sh +65 -0
  686. package/presets/code-vibe/skills/wish-programming/scripts/scan_drift.py +79 -0
  687. package/presets/code-vibe/skills/wish-programming/scripts/verify.sh +169 -0
  688. package/presets/code-vibe/skills/wish-programming/scripts/verify_preset_budgets.py +218 -0
  689. package/presets/code-vibe/skills/wish-programming/scripts/wish.sh +150 -0
  690. package/presets/code-vibe.patch.yml +325 -0
  691. package/presets/hiopen.patch.yml +109 -0
  692. package/src/client/compat.ts +86 -0
  693. package/src/client/conversation/conversation.module.css +264 -0
  694. package/src/client/conversation/git-branch.tsx +152 -0
  695. package/src/client/conversation/git-graph/LICENSE.git-graph +202 -0
  696. package/src/client/conversation/git-graph/api.ts +85 -0
  697. package/src/client/conversation/git-graph/branch-chip.tsx +354 -0
  698. package/src/client/conversation/git-graph/branch-popover.tsx +185 -0
  699. package/src/client/conversation/git-graph/chip.tsx +47 -0
  700. package/src/client/conversation/git-graph/create-branch-dialog.tsx +108 -0
  701. package/src/client/conversation/git-graph/error-copy.ts +50 -0
  702. package/src/client/conversation/git-graph/git-graph.module.css +792 -0
  703. package/src/client/conversation/git-graph/graph-dialog.tsx +196 -0
  704. package/src/client/conversation/git-graph/hero-seat.ts +76 -0
  705. package/src/client/conversation/git-graph/locales.ts +90 -0
  706. package/src/client/conversation/git-graph/sse-leader.ts +124 -0
  707. package/src/client/conversation/index.ts +82 -0
  708. package/src/client/conversation/selector-context.tsx +24 -0
  709. package/src/client/conversation/session-lane-chip.tsx +262 -0
  710. package/src/client/conversation/session-lane-locales.ts +34 -0
  711. package/src/client/conversation/subagent-model-dom.ts +157 -0
  712. package/src/client/conversation/subagent-model.ts +198 -0
  713. package/src/client/conversation/worktree/api.ts +283 -0
  714. package/src/client/conversation/worktree/dialogs/DeleteWorktreeDialog.tsx +111 -0
  715. package/src/client/conversation/worktree/dialogs/PrCreateDialog.tsx +114 -0
  716. package/src/client/conversation/worktree/lane-binding.ts +77 -0
  717. package/src/client/conversation/worktree/lane-menu.tsx +247 -0
  718. package/src/client/conversation/worktree/lane-open.ts +204 -0
  719. package/src/client/conversation/worktree/lane-workspace-sweeper.ts +136 -0
  720. package/src/client/conversation/worktree/lifecycle.ts +75 -0
  721. package/src/client/conversation/worktree/locales.ts +97 -0
  722. package/src/client/conversation/worktree/semantic.ts +10 -0
  723. package/src/client/conversation/worktree/worktree.module.css +70 -0
  724. package/src/client/css-modules.d.ts +8 -0
  725. package/src/client/index.ts +58 -0
  726. package/src/client/lark-inbox/i18n.ts +125 -0
  727. package/src/client/lark-inbox/lark-wizard.module.css +88 -0
  728. package/src/client/lark-inbox/wizard.tsx +211 -0
  729. package/src/client/notify/i18n.ts +93 -0
  730. package/src/client/settings/family-scope.ts +45 -0
  731. package/src/client/settings/lark-inbox.tsx +319 -0
  732. package/src/client/settings/notify.tsx +288 -0
  733. package/src/client/settings/primitives-0.2.ts +148 -0
  734. package/src/client/settings/settings-shell.module.css +56 -0
  735. package/src/client/sidebar/RenderBoundary.tsx +17 -0
  736. package/src/client/sidebar/agent-browser.tsx +114 -0
  737. package/src/client/sidebar/diff-view.tsx +314 -0
  738. package/src/client/sidebar/git-workbench.tsx +700 -0
  739. package/src/client/sidebar/icons.tsx +23 -0
  740. package/src/client/sidebar/index.ts +28 -0
  741. package/src/client/sidebar/native-panels.tsx +149 -0
  742. package/src/client/sidebar/page-shell.module.css +96 -0
  743. package/src/client/sidebar/page-shell.tsx +86 -0
  744. package/src/client/sidebar/panels/memoir/api.ts +300 -0
  745. package/src/client/sidebar/panels/memoir/controller.ts +47 -0
  746. package/src/client/sidebar/panels/memoir/cwd.ts +140 -0
  747. package/src/client/sidebar/panels/memoir/i18n.ts +300 -0
  748. package/src/client/sidebar/panels/memoir/panel-activation.ts +42 -0
  749. package/src/client/sidebar/panels/memoir/panel.tsx +869 -0
  750. package/src/client/sidebar/panels/memoir/styles.ts +776 -0
  751. package/src/client/sidebar/panels/memoir/types.ts +7 -0
  752. package/src/client/sidebar/panels/ssh/ClusterTab.tsx +123 -0
  753. package/src/client/sidebar/panels/ssh/HostFormDialog.tsx +243 -0
  754. package/src/client/sidebar/panels/ssh/HostsTab.tsx +290 -0
  755. package/src/client/sidebar/panels/ssh/SshPanel.tsx +76 -0
  756. package/src/client/sidebar/panels/ssh/TerminalTab.tsx +290 -0
  757. package/src/client/sidebar/panels/ssh/TransferTab.tsx +232 -0
  758. package/src/client/sidebar/panels/ssh/TunnelsTab.tsx +204 -0
  759. package/src/client/sidebar/panels/ssh/api.ts +388 -0
  760. package/src/client/sidebar/panels/ssh/controller.ts +48 -0
  761. package/src/client/sidebar/panels/ssh/helpers.ts +70 -0
  762. package/src/client/sidebar/panels/ssh/locales.ts +318 -0
  763. package/src/client/sidebar/panels/ssh/panel.module.css +801 -0
  764. package/src/client/sidebar/panels/ssh/xterm.css.ts +2 -0
  765. package/src/client/sidebar/right-pane-i18n.ts +243 -0
  766. package/src/client/sidebar/right-pane.tsx +156 -0
  767. package/src/client/sidebar/scope.ts +54 -0
  768. package/src/client/sidebar/sidebar-header.module.css +72 -0
  769. package/src/client/sidebar/sidebar.module.css +619 -0
  770. package/src/client/trust.ts +187 -0
  771. package/src/client/ui-icons.ts +35 -0
  772. package/src/core/git-graph/commands.ts +107 -0
  773. package/src/core/git-graph/protocol.ts +238 -0
  774. package/src/core/index.ts +2 -0
  775. package/src/core/lark-inbox/gating.ts +35 -0
  776. package/src/core/lark-inbox/queue.ts +100 -0
  777. package/src/core/memoir/protocol.ts +46 -0
  778. package/src/core/no-browser-auth/contract.ts +25 -0
  779. package/src/core/notify/contract.ts +236 -0
  780. package/src/core/notify/feed.ts +235 -0
  781. package/src/core/playwright-sessions/contracts.ts +143 -0
  782. package/src/core/playwright-sessions/control.ts +33 -0
  783. package/src/core/playwright-sessions/index.ts +3 -0
  784. package/src/core/playwright-sessions/names.ts +83 -0
  785. package/src/core/playwright-sessions/schema.ts +102 -0
  786. package/src/core/playwright-sessions/wire.ts +142 -0
  787. package/src/core/remote-access/paths.ts +23 -0
  788. package/src/core/remote-web-ui/security.ts +171 -0
  789. package/src/core/right-pane/protocol.ts +94 -0
  790. package/src/core/schedule-mode/index.ts +6 -0
  791. package/src/core/schedule-mode/native.ts +105 -0
  792. package/src/core/schedule-mode/types.ts +182 -0
  793. package/src/core/schedule-mode/view.ts +66 -0
  794. package/src/core/ssh/protocol.ts +212 -0
  795. package/src/core/subagent-model/badges.ts +161 -0
  796. package/src/core/worktree/invariant.ts +101 -0
  797. package/src/core/worktree/manifest.ts +135 -0
  798. package/src/core/worktree/paths.ts +123 -0
  799. package/src/core/worktree/pr-create.ts +157 -0
  800. package/src/core/worktree/protocol.ts +7 -0
  801. package/src/core/worktree/types.ts +317 -0
  802. package/src/core/worktree/workspace-model.ts +61 -0
  803. package/src/host/services/access-trust/index.ts +127 -0
  804. package/src/host/services/access-trust/trust.ts +189 -0
  805. package/src/host/services/codex-bridge/bridge.ts +392 -0
  806. package/src/host/services/codex-bridge/codex-auth.ts +352 -0
  807. package/src/host/services/codex-bridge/dsh-integration.ts +169 -0
  808. package/src/host/services/codex-bridge/http.ts +105 -0
  809. package/src/host/services/codex-bridge/index.ts +154 -0
  810. package/src/host/services/codex-bridge/loopback.ts +63 -0
  811. package/src/host/services/codex-bridge/routes.ts +143 -0
  812. package/src/host/services/family-config.ts +224 -0
  813. package/src/host/services/family-namespaces.ts +39 -0
  814. package/src/host/services/git-graph/index.ts +11 -0
  815. package/src/host/services/git-graph/routes.ts +212 -0
  816. package/src/host/services/git-graph/service.ts +305 -0
  817. package/src/host/services/index.ts +94 -0
  818. package/src/host/services/lark-inbox/config.ts +66 -0
  819. package/src/host/services/lark-inbox/gateway.ts +184 -0
  820. package/src/host/services/lark-inbox/host-routes.ts +113 -0
  821. package/src/host/services/lark-inbox/inbox-store.ts +160 -0
  822. package/src/host/services/lark-inbox/index.ts +141 -0
  823. package/src/host/services/lark-inbox/tools.ts +124 -0
  824. package/src/host/services/lark-inbox/wizard.ts +206 -0
  825. package/src/host/services/lifecycle.ts +107 -0
  826. package/src/host/services/memoir/index.ts +80 -0
  827. package/src/host/services/memoir/routes.ts +346 -0
  828. package/src/host/services/memoir/settings.ts +122 -0
  829. package/src/host/services/memoir/store.ts +132 -0
  830. package/src/host/services/memoir/tools.ts +158 -0
  831. package/src/host/services/no-browser-auth/index.ts +70 -0
  832. package/src/host/services/notify/config.ts +178 -0
  833. package/src/host/services/notify/feishu-sender.ts +220 -0
  834. package/src/host/services/notify/host-routes.ts +133 -0
  835. package/src/host/services/notify/index.ts +305 -0
  836. package/src/host/services/playwright-sessions/child.ts +251 -0
  837. package/src/host/services/playwright-sessions/controller.ts +102 -0
  838. package/src/host/services/playwright-sessions/index.ts +146 -0
  839. package/src/host/services/playwright-sessions/live-view.ts +225 -0
  840. package/src/host/services/playwright-sessions/manager.ts +239 -0
  841. package/src/host/services/playwright-sessions/profile-gc.ts +97 -0
  842. package/src/host/services/playwright-sessions/routes.ts +90 -0
  843. package/src/host/services/remote-access/boot-scripts.ts +118 -0
  844. package/src/host/services/remote-access/index.ts +62 -0
  845. package/src/host/services/remote-access/routes.ts +137 -0
  846. package/src/host/services/remote-web-ui/index.ts +344 -0
  847. package/src/host/services/remote-web-ui/server-mode/accounts.ts +423 -0
  848. package/src/host/services/remote-web-ui/server-mode/cookie.ts +57 -0
  849. package/src/host/services/remote-web-ui/server-mode/dsh-home.ts +42 -0
  850. package/src/host/services/remote-web-ui/server-mode/external-auth.ts +296 -0
  851. package/src/host/services/remote-web-ui/server-mode/fence.ts +27 -0
  852. package/src/host/services/remote-web-ui/server-mode/gateway-routes.ts +797 -0
  853. package/src/host/services/remote-web-ui/server-mode/gateway.ts +684 -0
  854. package/src/host/services/remote-web-ui/server-mode/http.ts +105 -0
  855. package/src/host/services/remote-web-ui/server-mode/integrated-auth.ts +118 -0
  856. package/src/host/services/remote-web-ui/server-mode/lan.ts +19 -0
  857. package/src/host/services/remote-web-ui/server-mode/loopback.ts +63 -0
  858. package/src/host/services/remote-web-ui/server-mode/posture.ts +154 -0
  859. package/src/host/services/remote-web-ui/server-mode/roles.ts +51 -0
  860. package/src/host/services/remote-web-ui/server-mode/server-boot.ts +38 -0
  861. package/src/host/services/remote-web-ui/server-mode/sessions.ts +347 -0
  862. package/src/host/services/remote-web-ui/server.ts +591 -0
  863. package/src/host/services/resources.ts +78 -0
  864. package/src/host/services/right-pane/browser.ts +106 -0
  865. package/src/host/services/right-pane/index.ts +117 -0
  866. package/src/host/services/right-pane/wire.ts +10 -0
  867. package/src/host/services/schedule-mode/config.ts +26 -0
  868. package/src/host/services/schedule-mode/engine.ts +689 -0
  869. package/src/host/services/schedule-mode/index.ts +214 -0
  870. package/src/host/services/schedule-mode/routes.ts +130 -0
  871. package/src/host/services/schedule-mode/session-create.ts +36 -0
  872. package/src/host/services/schedule-mode/store.ts +304 -0
  873. package/src/host/services/schedule-mode/tools.ts +154 -0
  874. package/src/host/services/ssh/engine.ts +675 -0
  875. package/src/host/services/ssh/host-keys.ts +99 -0
  876. package/src/host/services/ssh/index.ts +84 -0
  877. package/src/host/services/ssh/routes.ts +442 -0
  878. package/src/host/services/ssh/store.ts +310 -0
  879. package/src/host/services/ssh/terminal-ws.ts +157 -0
  880. package/src/host/services/ssh/tools.ts +279 -0
  881. package/src/host/services/web-render/contracts.ts +138 -0
  882. package/src/host/services/web-render/index.ts +112 -0
  883. package/src/host/services/web-render/provider.ts +282 -0
  884. package/src/host/services/web-search-anthropic/contracts.ts +163 -0
  885. package/src/host/services/web-search-anthropic/index.ts +152 -0
  886. package/src/host/services/web-search-anthropic/provider.ts +325 -0
  887. package/src/host/services/worktree/git-runner.ts +124 -0
  888. package/src/host/services/worktree/git.ts +183 -0
  889. package/src/host/services/worktree/http.ts +36 -0
  890. package/src/host/services/worktree/index.ts +92 -0
  891. package/src/host/services/worktree/lane-tool.ts +100 -0
  892. package/src/host/services/worktree/manager.ts +1553 -0
  893. package/src/host/services/worktree/model-override.ts +43 -0
  894. package/src/host/services/worktree/routes.ts +570 -0
  895. package/src/host/services/worktree/run-command.ts +66 -0
  896. package/src/host/services/worktree/session-lane/manager.ts +228 -0
  897. package/src/host/services/worktree/workspace-model-routes.ts +156 -0
  898. package/src/host/services/worktree/workspace-model.ts +132 -0
  899. package/src/index.ts +84 -0
  900. package/src/invariant.ts +4 -0
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Notification capability: records finished runs, serves them, and pushes them.
3
+ *
4
+ * Where it sits. `dsh-session` already owns the durable answer to "what
5
+ * happened" (the append-only log) and `dsh-agent` owns the live answer to "is
6
+ * anything still running" (`agent/status`). This domain adds the third thing
7
+ * neither provides: a small, recent, cross-surface answer to "did the work I
8
+ * left running finish, and how did it end" that a phone or a desktop fleet list
9
+ * can read without holding a session log.
10
+ *
11
+ * What it therefore does NOT do. It keeps no durable copy of anything the
12
+ * session log already holds — see `core/notify/feed.ts` for why the notice log
13
+ * is deliberately in-memory. It records nothing for subagent sessions, because
14
+ * a child's turns are internal to a parent's work and a dot that lights up for
15
+ * every delegation is a dot nobody trusts. It records nothing for a turn that
16
+ * never entered a step, because an empty turn is not finished work.
17
+ *
18
+ * Two delivery shapes, one setting. `each-turn` reports every finished turn;
19
+ * `idle` waits until the agent has no driver left and reports the batch, which
20
+ * is what a notification is for. The feed ignores the setting entirely and
21
+ * always records every eligible turn, so a client's badge stays accurate no
22
+ * matter which push shape the deployment chose.
23
+ *
24
+ * @module dsh-web-all/notify
25
+ */
26
+ import { hostname } from 'node:os';
27
+ import { NOTIFY_MAX_LIMIT } from "../../../core/notify/contract.js";
28
+ import { NoticeLog, TitleBook, textOfContent } from "../../../core/notify/feed.js";
29
+ import { registerResources } from "../resources.js";
30
+ import { accessTrustOf } from "../access-trust/index.js";
31
+ import { familyNamespace, onFamilyConfigChange } from "../family-config.js";
32
+ import { LARK_INBOX_SETTINGS_NAMESPACE } from "../lark-inbox/config.js";
33
+ import { NOTIFY_SETTINGS_NAMESPACE, effectiveConfig, normalizeRecipients, resolveFeishuCredentials, } from "./config.js";
34
+ import { FeishuSender } from "./feishu-sender.js";
35
+ import { makeNotifyRoutes } from "./host-routes.js";
36
+ export { Config, NOTIFY_SETTINGS_NAMESPACE, resolveFeishuCredentials } from "./config.js";
37
+ export { FeishuSender, composeFeishuText } from "./feishu-sender.js";
38
+ export { makeNotifyRoutes, readFeedQuery, requestAuthority } from "./host-routes.js";
39
+ /** Turns buffered for one session before the oldest are dropped. */
40
+ const PENDING_TURN_CAP = 20;
41
+ /**
42
+ * Whether a session belongs to a subagent.
43
+ *
44
+ * `delegationDepth` is the durable field (a resumed child keeps its depth);
45
+ * `origin` is the coarser presentation marker. Either one answering "child" is
46
+ * enough, because recording a child's finished turn would put internal
47
+ * delegation on the same list as the user's own work.
48
+ *
49
+ * @param session - the session the event belongs to.
50
+ * @returns true when the session is a subagent child.
51
+ */
52
+ export function isSubagentSession(session) {
53
+ const header = session?.header;
54
+ if (header === undefined)
55
+ return false;
56
+ if (header.origin === 'subagent')
57
+ return true;
58
+ const depth = header.delegationDepth;
59
+ return typeof depth === 'number' && depth > 0;
60
+ }
61
+ /**
62
+ * Register the notification capability.
63
+ *
64
+ * @param ctx - host plugin context.
65
+ * @param base - namespace value used when the family settings document has none.
66
+ * @param deps - injectables for tests.
67
+ * @returns the disposer releasing the route, the subscriptions and the sender.
68
+ */
69
+ export function register(ctx, base = {}, deps = {}) {
70
+ const log = ctx.logger('notify');
71
+ const env = deps.env ?? process.env;
72
+ const hostLabel = deps.hostLabel ?? hostname();
73
+ // Retention is the contract's maximum so a settings change never renumbers
74
+ // notices; `feedLimit` only decides the default size of one read.
75
+ const notices = new NoticeLog(NOTIFY_MAX_LIMIT);
76
+ const titles = new TitleBook();
77
+ /** Turns that entered a step, keyed `${sessionId}\u0000${turn}`. */
78
+ const enteredSteps = new Set();
79
+ /** Notices waiting for their session's agent to go idle, in `idle` mode only. */
80
+ const pending = new Map();
81
+ let active = effectiveConfig(base);
82
+ let sender;
83
+ const current = () => familyNamespace(NOTIFY_SETTINGS_NAMESPACE) ?? base;
84
+ const stepKey = (sessionId, turn) => `${sessionId}\u0000${turn}`;
85
+ const buffered = (sessionId) => active.feishuMode === 'idle';
86
+ /** Model-facing label for one session, refreshed from the title event. */
87
+ const nameOf = (sessionId) => titles.titleOf(sessionId);
88
+ const wantOutcome = (notice) => active.feishuOutcomes.includes(notice.outcome);
89
+ const deliver = (batch) => {
90
+ if (sender === undefined)
91
+ return;
92
+ const worthy = batch.filter(wantOutcome);
93
+ if (worthy.length === 0)
94
+ return;
95
+ // Fire and forget: a delivery failure must never reach the session log's
96
+ // append path, which is synchronous and must not wait on a network call.
97
+ void sender.notify(worthy).catch(error => {
98
+ log.warn('dsh-notify: 推送失败:%s', error instanceof Error ? error.message : String(error));
99
+ });
100
+ };
101
+ const buffer = (notice) => {
102
+ const list = pending.get(notice.sessionId);
103
+ if (list === undefined) {
104
+ pending.set(notice.sessionId, [notice]);
105
+ return;
106
+ }
107
+ list.push(notice);
108
+ if (list.length > PENDING_TURN_CAP)
109
+ list.splice(0, list.length - PENDING_TURN_CAP);
110
+ };
111
+ const flush = (sessionId) => {
112
+ const list = pending.get(sessionId);
113
+ if (list === undefined)
114
+ return;
115
+ pending.delete(sessionId);
116
+ deliver(list);
117
+ };
118
+ /** Rebuild the sender from the current settings; drop it when nothing can send. */
119
+ const syncSender = () => {
120
+ sender = undefined;
121
+ if (!active.enabled || !active.feishuEnabled)
122
+ return;
123
+ const recipients = normalizeRecipients(active.feishuRecipients);
124
+ if (recipients.length === 0) {
125
+ log.warn('dsh-notify: 已启用飞书推送但没有收件人(feishuRecipients),未创建发送器');
126
+ return;
127
+ }
128
+ let credentials;
129
+ try {
130
+ credentials = resolveFeishuCredentials(active, familyNamespace(LARK_INBOX_SETTINGS_NAMESPACE), env);
131
+ }
132
+ catch (error) {
133
+ log.warn('dsh-notify: %s', error instanceof Error ? error.message : String(error));
134
+ return;
135
+ }
136
+ if (credentials === null) {
137
+ log.warn('dsh-notify: 已启用飞书推送但缺少应用凭据(feishuAppId / feishuAppSecret,或 lark-inbox 的 appId / appSecret)');
138
+ return;
139
+ }
140
+ const built = deps.createSender !== undefined
141
+ ? deps.createSender({ credentials, recipients, hostLabel })
142
+ : new FeishuSender({
143
+ credentials,
144
+ recipients,
145
+ hostLabel,
146
+ log: message => log.warn('%s', message),
147
+ });
148
+ if (built === null)
149
+ return;
150
+ sender = built;
151
+ log.info('dsh-notify: 飞书推送已就绪(应用来源 %s,收件人 %d,模式 %s)', credentials.source, recipients.length, active.feishuMode);
152
+ };
153
+ /**
154
+ * Apply a settings change without remounting.
155
+ *
156
+ * An edit while the capability runs keeps what it has recorded — changing the
157
+ * recipient list or the push shape must not wipe the results a client is part
158
+ * way through reading. Turning the capability OFF does drop them, because a
159
+ * disabled capability must not keep a list of the conversations this machine
160
+ * has been running, and because a later enable would otherwise publish a burst
161
+ * of results the user never chose to collect.
162
+ */
163
+ const sync = () => {
164
+ const wasEnabled = active.enabled;
165
+ active = effectiveConfig(current());
166
+ if (wasEnabled && !active.enabled) {
167
+ notices.clear();
168
+ pending.clear();
169
+ enteredSteps.clear();
170
+ }
171
+ syncSender();
172
+ };
173
+ return registerResources(own => {
174
+ own(ctx.on('session/event', (session, event) => {
175
+ if (!active.enabled)
176
+ return;
177
+ const sessionId = typeof session?.id === 'string' ? session.id : '';
178
+ if (sessionId === '' || isSubagentSession(session))
179
+ return;
180
+ const type = event?.type;
181
+ const data = event?.data;
182
+ if (type === 'session/title') {
183
+ const title = data?.title;
184
+ if (typeof title === 'string')
185
+ titles.setTitle(sessionId, title);
186
+ return;
187
+ }
188
+ const at = typeof event?.time === 'number' ? event.time : Date.now();
189
+ if (type === 'user/message') {
190
+ const source = data?.source;
191
+ // Only a human prompt may name a session: the same event type also
192
+ // carries synthetic injections (file-change notices, cron wakes, skill
193
+ // content), and quoting one of those as the conversation's name would
194
+ // be wrong in a way the user cannot correct.
195
+ if (source?.kind === 'user') {
196
+ titles.rememberPrompt(sessionId, textOfContent(data?.content));
197
+ }
198
+ return;
199
+ }
200
+ if (type === 'step/start') {
201
+ const turn = data?.turn;
202
+ if (typeof turn === 'number')
203
+ enteredSteps.add(stepKey(sessionId, turn));
204
+ return;
205
+ }
206
+ if (type !== 'turn/end')
207
+ return;
208
+ const payload = data;
209
+ const turn = typeof payload?.turn === 'number' ? payload.turn : -1;
210
+ // A turn that never entered a step did no work, so there is nothing to
211
+ // report; recording it would make every cancelled empty prompt a notice.
212
+ const key = stepKey(sessionId, turn);
213
+ if (!enteredSteps.delete(key))
214
+ return;
215
+ const reason = typeof payload?.reason?.kind === 'string' ? payload.reason.kind : '';
216
+ const notice = notices.append({ at, sessionId, title: nameOf(sessionId), turn, reason });
217
+ if (buffered(sessionId))
218
+ buffer(notice);
219
+ else
220
+ deliver([notice]);
221
+ }));
222
+ own(ctx.on('agent/status', (payload) => {
223
+ if (!active.enabled)
224
+ return;
225
+ if (payload?.status !== 'idle')
226
+ return;
227
+ const sessionId = typeof payload.agent?.id === 'string' ? payload.agent.id : '';
228
+ if (sessionId === '')
229
+ return;
230
+ flush(sessionId);
231
+ }));
232
+ own(ctx.on('session/disposed', (session) => {
233
+ const sessionId = typeof session?.id === 'string' ? session.id : '';
234
+ if (sessionId === '')
235
+ return;
236
+ titles.forget(sessionId);
237
+ pending.delete(sessionId);
238
+ // Dropping the entered-step marks keeps the set from growing with the
239
+ // process: a session that is disposed can no longer close a turn.
240
+ for (const key of [...enteredSteps]) {
241
+ if (key.startsWith(`${sessionId}\u0000`))
242
+ enteredSteps.delete(key);
243
+ }
244
+ }));
245
+ for (const route of makeNotifyRoutes({
246
+ log: () => notices,
247
+ defaultLimit: () => active.feedLimit,
248
+ isTrusted: request => accessTrustOf(ctx).isTrusted(request),
249
+ enabled: () => active.enabled,
250
+ }))
251
+ own(ctx.webServer.register(route));
252
+ own(onFamilyConfigChange(() => {
253
+ try {
254
+ sync();
255
+ }
256
+ catch (error) {
257
+ log.warn('dsh-notify: 应用设置失败:%s', error instanceof Error ? error.message : String(error));
258
+ }
259
+ }));
260
+ sync();
261
+ log.info('dsh-notify: 能力已挂载(%s)', active.enabled ? '启用' : '停用');
262
+ });
263
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * One per-session Playwright MCP child process.
3
+ *
4
+ * Each conversation owns a dedicated `@playwright/mcp` server spawned over
5
+ * stdio with a per-session `--user-data-dir` (browser profile) and `cwd`
6
+ * (screenshot / file output). Because every child serves exactly one MCP
7
+ * client, no `--shared-browser-context` or `--isolated` flag is needed: the
8
+ * default per-client browser model already gives this session a private
9
+ * browser, and the explicit user-data-dir keeps its login state durable
10
+ * without ever touching another session's profile.
11
+ *
12
+ * In `liveView` mode the host starts the persistent Chromium itself with
13
+ * `launchPersistentContext` (CDP endpoint on an ephemeral port) and passes
14
+ * `--cdp-endpoint` to the MCP child, which connects to that SAME browser as
15
+ * its default context. The host keeps the `BrowserContext` handle so the
16
+ * live-view WebSocket (see live-view.ts) can stream CDP screencast frames of
17
+ * the pages the MCP tools drive. This is the dual-owner launch path the
18
+ * older implementation documented; without `liveView` the child launches its
19
+ * own browser exactly as before.
20
+ */
21
+ import { type BrowserContext } from 'playwright-core';
22
+ import type { PlaywrightConnectionMode } from '../../../core/playwright-sessions/contracts.ts';
23
+ export interface SessionBrowserOptions {
24
+ /** Absolute path to the @playwright/mcp cli.js entry. */
25
+ cliPath: string;
26
+ /** Durable session identity used for the profile directory name. */
27
+ sessionId: string;
28
+ /** Root directory holding every session's profile + output folders. */
29
+ sessionsRoot: string;
30
+ /** Environment for the child; PLAYWRIGHT_BROWSERS_PATH is expected here. */
31
+ env: Record<string, string>;
32
+ mode: PlaywrightConnectionMode;
33
+ headless: boolean;
34
+ browserChannel: 'chrome' | 'msedge';
35
+ executablePath: string;
36
+ allowedHosts: string[];
37
+ allowedOrigins: string[];
38
+ blockedOrigins: string[];
39
+ /** Per-tool-call timeout in milliseconds. */
40
+ toolCallTimeoutMs: number;
41
+ /**
42
+ * Dual-owner mode: the host starts the persistent Chromium and the MCP
43
+ * child connects over `--cdp-endpoint`; the returned browser exposes the
44
+ * `context` handle for the live view. False (default) keeps the plain
45
+ * child-launched browser with no live view.
46
+ */
47
+ liveView?: boolean;
48
+ }
49
+ export interface SessionBrowser {
50
+ readonly sessionId: string;
51
+ /** Durable per-session profile directory (user-data-dir). */
52
+ readonly profileDir: string;
53
+ /** Per-session output directory (screenshots, saved files). */
54
+ readonly outputDir: string;
55
+ /** Forward one raw MCP tool call to this session's browser. */
56
+ call(rawName: string, args: unknown, signal?: AbortSignal): Promise<SessionBrowserResult>;
57
+ /** Close the browser (equivalent to the browser_close tool). */
58
+ close(): Promise<void>;
59
+ /** Close the browser and terminate the child process. */
60
+ dispose(): Promise<void>;
61
+ /** The host-owned persistent context (liveView mode only). */
62
+ readonly context?: BrowserContext | null;
63
+ }
64
+ export interface SessionBrowserResult {
65
+ content: unknown[];
66
+ isError: boolean;
67
+ }
68
+ /** Read the ephemeral CDP endpoint Chromium chose (DevToolsActivePort:
69
+ * first line = port, second line = browser websocket path). */
70
+ export declare function readCdpEndpoint(profileDir: string): string;
71
+ /** Poll for the CDP port file with a bounded wait. */
72
+ export declare function waitForCdpEndpoint(profileDir: string, timeoutMs?: number): Promise<string>;
73
+ export declare function createSessionBrowser(options: SessionBrowserOptions): Promise<SessionBrowser>;
74
+ /** Best-effort text rendering of an MCP content array for error paths. */
75
+ export declare function extractText(content: unknown[] | undefined, rawName: string): string;
76
+ //# sourceMappingURL=child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/playwright-sessions/child.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAA;AAE9F,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,wBAAwB,CAAA;IAC9B,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,CAAA;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,+DAA+D;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACzF,gEAAgE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,yDAAyD;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB;AAWD;gEACgE;AAChE,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,sDAAsD;AACtD,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlH;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6HlG;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAWnF"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * One per-session Playwright MCP child process.
3
+ *
4
+ * Each conversation owns a dedicated `@playwright/mcp` server spawned over
5
+ * stdio with a per-session `--user-data-dir` (browser profile) and `cwd`
6
+ * (screenshot / file output). Because every child serves exactly one MCP
7
+ * client, no `--shared-browser-context` or `--isolated` flag is needed: the
8
+ * default per-client browser model already gives this session a private
9
+ * browser, and the explicit user-data-dir keeps its login state durable
10
+ * without ever touching another session's profile.
11
+ *
12
+ * In `liveView` mode the host starts the persistent Chromium itself with
13
+ * `launchPersistentContext` (CDP endpoint on an ephemeral port) and passes
14
+ * `--cdp-endpoint` to the MCP child, which connects to that SAME browser as
15
+ * its default context. The host keeps the `BrowserContext` handle so the
16
+ * live-view WebSocket (see live-view.ts) can stream CDP screencast frames of
17
+ * the pages the MCP tools drive. This is the dual-owner launch path the
18
+ * older implementation documented; without `liveView` the child launches its
19
+ * own browser exactly as before.
20
+ */
21
+ import { mkdirSync, readFileSync } from 'node:fs';
22
+ import { join } from 'node:path';
23
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
24
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
25
+ import { chromium as playwrightChromium } from 'playwright-core';
26
+ import { sanitizePlaywrightSessionKey } from "../../../core/playwright-sessions/names.js";
27
+ const STDERR_CAPTURE_LIMIT = 8192;
28
+ /** Wait for the DevToolsActivePort file after launching Chromium. */
29
+ const CDP_PORT_FILE_TIMEOUT_MS = 15_000;
30
+ /** The file Chromium writes with its --remote-debugging-port=0 choice. */
31
+ function cdpPortFile(profileDir) {
32
+ return join(profileDir, 'DevToolsActivePort');
33
+ }
34
+ /** Read the ephemeral CDP endpoint Chromium chose (DevToolsActivePort:
35
+ * first line = port, second line = browser websocket path). */
36
+ export function readCdpEndpoint(profileDir) {
37
+ const lines = readFileSync(cdpPortFile(profileDir), 'utf8').trim().split('\n');
38
+ const port = Number.parseInt(lines[0] ?? '', 10);
39
+ if (!Number.isFinite(port) || port <= 0)
40
+ throw new Error(`unreadable DevToolsActivePort: ${lines.join(' | ').slice(0, 80)}`);
41
+ const wsPath = (lines[1] ?? '').trim();
42
+ return `ws://127.0.0.1:${port}${wsPath === '' ? '' : wsPath}`;
43
+ }
44
+ /** Poll for the CDP port file with a bounded wait. */
45
+ export async function waitForCdpEndpoint(profileDir, timeoutMs = CDP_PORT_FILE_TIMEOUT_MS) {
46
+ const deadline = Date.now() + timeoutMs;
47
+ let lastError;
48
+ while (Date.now() < deadline) {
49
+ try {
50
+ return readCdpEndpoint(profileDir);
51
+ }
52
+ catch (error) {
53
+ lastError = error;
54
+ await new Promise(resolve => setTimeout(resolve, 250));
55
+ }
56
+ }
57
+ throw new Error(`CDP port file did not appear within ${timeoutMs}ms` + (lastError !== undefined ? ` (${String(lastError)})` : ''));
58
+ }
59
+ export async function createSessionBrowser(options) {
60
+ const profileDir = join(options.sessionsRoot, sanitizePlaywrightSessionKey(options.sessionId));
61
+ const outputDir = join(profileDir, 'output');
62
+ mkdirSync(outputDir, { recursive: true });
63
+ // Dual-owner mode: the host owns the persistent Chromium, the MCP child
64
+ // connects to it over the CDP endpoint. The context handle is kept for the
65
+ // live-view screencast.
66
+ let hostedContext = null;
67
+ const args = [
68
+ options.cliPath,
69
+ '--allowed-hosts',
70
+ options.allowedHosts.join(','),
71
+ '--output-dir',
72
+ outputDir,
73
+ ];
74
+ if (options.allowedOrigins.length > 0)
75
+ args.push('--allowed-origins', options.allowedOrigins.join(';'));
76
+ if (options.blockedOrigins.length > 0)
77
+ args.push('--blocked-origins', options.blockedOrigins.join(';'));
78
+ if (options.mode === 'extension') {
79
+ // The official extension opens its own connection/approval page in the
80
+ // selected Chrome profile and exposes only the tabs assigned to this MCP
81
+ // client. The external browser remains owned by the user.
82
+ args.push('--extension', '--browser', options.browserChannel);
83
+ if (options.executablePath !== '')
84
+ args.push('--executable-path', options.executablePath);
85
+ }
86
+ else {
87
+ if (options.headless)
88
+ args.push('--headless');
89
+ if (options.liveView === true) {
90
+ hostedContext = await playwrightChromium.launchPersistentContext(profileDir, {
91
+ headless: options.headless,
92
+ args: ['--remote-debugging-port=0'],
93
+ env: options.env,
94
+ });
95
+ const endpoint = await waitForCdpEndpoint(profileDir);
96
+ args.push('--cdp-endpoint', endpoint);
97
+ }
98
+ else {
99
+ args.push('--user-data-dir', profileDir);
100
+ }
101
+ }
102
+ const childEnv = options.env;
103
+ let stderrCapture = '';
104
+ const transport = new StdioClientTransport({
105
+ command: process.execPath,
106
+ args,
107
+ cwd: outputDir,
108
+ env: childEnv,
109
+ stderr: 'pipe',
110
+ });
111
+ transport.stderr?.on('data', (chunk) => {
112
+ const text = typeof chunk === 'string' ? chunk : chunk.toString('utf8');
113
+ if (stderrCapture.length < STDERR_CAPTURE_LIMIT) {
114
+ stderrCapture = (stderrCapture + text).slice(-STDERR_CAPTURE_LIMIT);
115
+ }
116
+ });
117
+ const client = new Client({ name: 'dsh-playwright-sessions', version: '1.0.0' });
118
+ let closed = false;
119
+ let closePromise;
120
+ const markClosed = () => {
121
+ closed = true;
122
+ };
123
+ client.onclose = markClosed;
124
+ try {
125
+ await client.connect(transport);
126
+ }
127
+ catch (error) {
128
+ if (hostedContext !== null) {
129
+ try {
130
+ await hostedContext.close();
131
+ }
132
+ catch { /* ignore */ }
133
+ hostedContext = null;
134
+ }
135
+ void transport.close().catch(() => { });
136
+ throw new Error(`playwright-sessions: failed to start browser for session ${options.sessionId}: ${String(error)}` +
137
+ (stderrCapture ? ` (child stderr: ${stderrCapture.slice(-2000)})` : ''));
138
+ }
139
+ const ensureOpen = () => {
140
+ if (closed) {
141
+ throw new Error(`playwright-sessions: browser for session ${options.sessionId} is closed` +
142
+ (stderrCapture ? ` (last child stderr: ${stderrCapture.slice(-1000)})` : ''));
143
+ }
144
+ };
145
+ const shutdown = async () => {
146
+ if (closePromise)
147
+ return closePromise;
148
+ closePromise = (async () => {
149
+ try {
150
+ await client.close();
151
+ }
152
+ catch {
153
+ // Transport may already be gone; nothing left to do.
154
+ }
155
+ if (hostedContext !== null) {
156
+ try {
157
+ await hostedContext.close();
158
+ }
159
+ catch { /* ignore */ }
160
+ hostedContext = null;
161
+ }
162
+ closed = true;
163
+ })();
164
+ return closePromise;
165
+ };
166
+ return {
167
+ sessionId: options.sessionId,
168
+ profileDir,
169
+ outputDir,
170
+ context: hostedContext,
171
+ async call(rawName, args, signal) {
172
+ ensureOpen();
173
+ const result = await client.callTool({ name: rawName, arguments: (args ?? {}) }, undefined, { signal, timeout: options.toolCallTimeoutMs });
174
+ if (result.isError === true) {
175
+ throw new Error(extractText(result.content, rawName));
176
+ }
177
+ return { content: (result.content ?? []), isError: false };
178
+ },
179
+ close: shutdown,
180
+ dispose: shutdown,
181
+ };
182
+ }
183
+ /** Best-effort text rendering of an MCP content array for error paths. */
184
+ export function extractText(content, rawName) {
185
+ const blocks = Array.isArray(content) ? content : [];
186
+ const texts = [];
187
+ for (const block of blocks) {
188
+ if (typeof block === 'object' && block !== null && block.type === 'text') {
189
+ const text = block.text;
190
+ if (typeof text === 'string')
191
+ texts.push(text);
192
+ }
193
+ }
194
+ if (texts.length > 0)
195
+ return texts.join('\n');
196
+ return blocks.length > 0 ? JSON.stringify(blocks) : `${rawName} returned no text content`;
197
+ }
@@ -0,0 +1,25 @@
1
+ /** Attended, single-owner lease for the user's attached Chrome browser. */
2
+ import type { ResolvedPlaywrightSessionsConfig } from '../../../core/playwright-sessions/contracts.ts';
3
+ import { type PlaywrightConnectionStatus } from '../../../core/playwright-sessions/control.ts';
4
+ import type { SessionBrowserManager } from './manager.ts';
5
+ interface ControllerOptions {
6
+ config: ResolvedPlaywrightSessionsConfig;
7
+ manager: SessionBrowserManager;
8
+ sessionExists(sessionId: string): boolean | Promise<boolean>;
9
+ }
10
+ export declare class PlaywrightSessionsController {
11
+ private readonly options;
12
+ private ownerId;
13
+ private state;
14
+ private error;
15
+ private connectPromise;
16
+ constructor(options: ControllerOptions);
17
+ status(sessionId: string): PlaywrightConnectionStatus;
18
+ connect(sessionId: string): Promise<PlaywrightConnectionStatus>;
19
+ disconnect(sessionId: string): Promise<PlaywrightConnectionStatus>;
20
+ requireOwner(sessionId: string): void;
21
+ release(sessionId: string): void;
22
+ dispose(): Promise<void>;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/playwright-sessions/controller.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAA;AACtG,OAAO,EAA0B,KAAK,0BAA0B,EAAE,MAAM,8CAA8C,CAAA;AACtH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEzD,UAAU,iBAAiB;IACzB,MAAM,EAAE,gCAAgC,CAAA;IACxC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7D;AAED,qBAAa,4BAA4B;IAM3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAAwE;IACrF,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,cAAc,CAAiD;gBAE1C,OAAO,EAAE,iBAAiB;IAEvD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B;IAqB/C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAiC/D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQxE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOrC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
@@ -0,0 +1,104 @@
1
+ import { PlaywrightControlError } from "../../../core/playwright-sessions/control.js";
2
+ export class PlaywrightSessionsController {
3
+ options;
4
+ ownerId;
5
+ state = 'disconnected';
6
+ error;
7
+ connectPromise;
8
+ constructor(options) {
9
+ this.options = options;
10
+ }
11
+ status(sessionId) {
12
+ if (this.options.config.mode !== 'extension') {
13
+ return {
14
+ mode: this.options.config.mode,
15
+ state: 'unavailable',
16
+ ownedByThisSession: false,
17
+ busy: false,
18
+ liveView: this.options.config.liveView,
19
+ };
20
+ }
21
+ const ownedByThisSession = this.ownerId === sessionId;
22
+ return {
23
+ mode: 'extension',
24
+ state: ownedByThisSession ? this.state : 'disconnected',
25
+ ownedByThisSession,
26
+ busy: this.ownerId !== undefined && !ownedByThisSession,
27
+ liveView: false,
28
+ ...(ownedByThisSession && this.error !== undefined ? { errorCode: this.error.code, errorMessage: this.error.message } : {}),
29
+ };
30
+ }
31
+ async connect(sessionId) {
32
+ if (this.options.config.mode !== 'extension')
33
+ throw new PlaywrightControlError('wrong-mode', 'Chrome extension mode is not enabled');
34
+ if (!await this.options.sessionExists(sessionId))
35
+ throw new PlaywrightControlError('not-found', 'session does not exist');
36
+ if (this.ownerId !== undefined && this.ownerId !== sessionId)
37
+ throw new PlaywrightControlError('busy', 'Chrome is already connected to another session');
38
+ if (this.ownerId === sessionId && this.state === 'connected')
39
+ return this.status(sessionId);
40
+ if (this.ownerId === sessionId && this.connectPromise !== undefined)
41
+ return this.connectPromise;
42
+ this.ownerId = sessionId;
43
+ this.state = 'connecting';
44
+ this.error = undefined;
45
+ const run = (async () => {
46
+ try {
47
+ const browser = await this.options.manager.get(sessionId);
48
+ // Browser creation is lazy inside Playwright MCP. This harmless call
49
+ // deliberately opens the official extension approval/tab picker.
50
+ await browser.call('browser_tabs', { action: 'list' });
51
+ this.state = 'connected';
52
+ return this.status(sessionId);
53
+ }
54
+ catch (cause) {
55
+ await this.options.manager.dispose(sessionId);
56
+ if (this.ownerId === sessionId) {
57
+ this.ownerId = undefined;
58
+ this.state = 'disconnected';
59
+ this.error = undefined;
60
+ }
61
+ const message = cause instanceof Error ? cause.message : String(cause);
62
+ throw new PlaywrightControlError('connect-failed', message);
63
+ }
64
+ })();
65
+ this.connectPromise = run;
66
+ try {
67
+ return await run;
68
+ }
69
+ finally {
70
+ if (this.connectPromise === run)
71
+ this.connectPromise = undefined;
72
+ }
73
+ }
74
+ async disconnect(sessionId) {
75
+ if (this.options.config.mode !== 'extension')
76
+ throw new PlaywrightControlError('wrong-mode', 'Chrome extension mode is not enabled');
77
+ if (this.ownerId !== undefined && this.ownerId !== sessionId)
78
+ throw new PlaywrightControlError('not-owner', 'this session does not own the Chrome connection');
79
+ await this.options.manager.dispose(sessionId);
80
+ this.release(sessionId);
81
+ return this.status(sessionId);
82
+ }
83
+ requireOwner(sessionId) {
84
+ if (this.options.config.mode !== 'extension')
85
+ return;
86
+ if (sessionId === '' || this.ownerId !== sessionId || this.state !== 'connected') {
87
+ throw new PlaywrightControlError('not-owner', 'Connect this session from the Agent Browser panel before using local Chrome');
88
+ }
89
+ }
90
+ release(sessionId) {
91
+ if (this.ownerId !== sessionId)
92
+ return;
93
+ this.ownerId = undefined;
94
+ this.state = 'disconnected';
95
+ this.error = undefined;
96
+ this.connectPromise = undefined;
97
+ }
98
+ async dispose() {
99
+ const owner = this.ownerId;
100
+ if (owner !== undefined)
101
+ await this.options.manager.dispose(owner);
102
+ this.release(owner ?? '');
103
+ }
104
+ }