@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,120 @@
1
+ /**
2
+ * Outbound Feishu/Lark delivery for finished runs.
3
+ *
4
+ * This is the mirror of `lark-inbox/gateway.ts`: that file owns the inbound
5
+ * WebSocket connection and this one owns the outbound message call, and both
6
+ * hide the vendor SDK behind a narrow injected seam so the behaviour the
7
+ * capability actually promises can be tested without a network or a tenant.
8
+ *
9
+ * Two properties matter more than throughput here, because this runs from an
10
+ * event handler rather than from a request:
11
+ *
12
+ * 1. It never throws into the emitter. A notification that cannot be delivered
13
+ * is logged and dropped; it must not turn a finished run into a failed one.
14
+ * 2. It stays under the application's rate limit. Feishu caps one application at
15
+ * five calls per second, and one finished run addresses several recipients,
16
+ * so sends are serialized with a minimum gap instead of fired in parallel.
17
+ *
18
+ * Messages are plain text rather than interactive cards on purpose: a card's
19
+ * schema is versioned and a rejected card is a silently lost notification,
20
+ * while a text message delivers the same three facts with nothing to validate.
21
+ */
22
+ import { type RunNotice } from '../../../core/notify/contract.ts';
23
+ import type { FeishuCredentials } from './config.ts';
24
+ /** The vendor surface this module uses, so tests can supply their own. */
25
+ export interface FeishuSenderSdk {
26
+ createClient(options: {
27
+ appId: string;
28
+ appSecret: string;
29
+ domain: unknown;
30
+ }): {
31
+ im: {
32
+ message: {
33
+ create(payload: unknown): Promise<unknown>;
34
+ };
35
+ };
36
+ };
37
+ domain: {
38
+ Feishu: unknown;
39
+ Lark: unknown;
40
+ };
41
+ }
42
+ /** One delivery's outcome, reported rather than thrown. */
43
+ export interface DeliveryAttempt {
44
+ recipient: string;
45
+ ok: boolean;
46
+ /** Vendor error text when the call failed. */
47
+ error?: string;
48
+ }
49
+ /** Options for one sender instance. */
50
+ export interface FeishuSenderOptions {
51
+ credentials: FeishuCredentials;
52
+ /** Open ids (`ou_…`), user ids, or chat ids to address as `open_id`. */
53
+ recipients: readonly string[];
54
+ /** Human name of the machine the run happened on. */
55
+ hostLabel: string;
56
+ log?: (message: string) => void;
57
+ sdk?: FeishuSenderSdk;
58
+ /** Minimum gap between two vendor calls, keeping the app under its rate limit. */
59
+ minGapMs?: number;
60
+ now?: () => number;
61
+ sleep?: (ms: number) => Promise<void>;
62
+ }
63
+ /**
64
+ * Compose the message body for one delivery.
65
+ *
66
+ * The text states three things and nothing else: how it ended, which
67
+ * conversation it was, and which machine it ran on. It deliberately carries no
68
+ * session ids, no turn numbers and no raw reason kinds — those are diagnosable
69
+ * in the workspace, and putting them in a phone notification makes the one line
70
+ * that matters harder to find.
71
+ *
72
+ * @param notices - the finished runs this delivery covers, oldest first.
73
+ * @param hostLabel - the machine's name.
74
+ * @returns the message text, with no trailing newline.
75
+ */
76
+ export declare function composeFeishuText(notices: readonly RunNotice[], hostLabel: string): string;
77
+ /**
78
+ * Delivers composed messages to every configured recipient.
79
+ *
80
+ * One instance is bound to one credential set and one recipient list; the
81
+ * owning service rebuilds it when the configuration changes, so a credential
82
+ * rotation cannot leave a stale token cache behind.
83
+ */
84
+ export declare class FeishuSender {
85
+ private readonly options;
86
+ private readonly log;
87
+ private readonly sdk;
88
+ private readonly minGapMs;
89
+ private readonly sleep;
90
+ private readonly now;
91
+ private client;
92
+ /** Serializes sends and carries the last call time, so the rate limit holds across callers. */
93
+ private chain;
94
+ private lastCallAt;
95
+ constructor(options: FeishuSenderOptions);
96
+ /** Recipients this sender will address. */
97
+ get recipients(): readonly string[];
98
+ /** Domain the credentials address. */
99
+ get domain(): string;
100
+ private vendorClient;
101
+ /**
102
+ * Deliver one text message to every recipient, serially and rate limited.
103
+ * @param text - the message body.
104
+ * @returns one attempt per recipient; empty when no recipient is configured.
105
+ */
106
+ send(text: string): Promise<DeliveryAttempt[]>;
107
+ private sendOne;
108
+ private respectGap;
109
+ /**
110
+ * Deliver and reduce the result to one log line.
111
+ *
112
+ * Event handlers cannot await a promise they do not own, and a rejected one
113
+ * would be an unhandled rejection, so the caller uses this instead of
114
+ * {@link send} whenever the notification is fire-and-forget.
115
+ *
116
+ * @param notices - the finished runs to report.
117
+ */
118
+ notify(notices: readonly RunNotice[]): Promise<void>;
119
+ }
120
+ //# sourceMappingURL=feishu-sender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-sender.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/notify/feishu-sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QAC5E,EAAE,EAAE;YAAE,OAAO,EAAE;gBAAE,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAChE,CAAA;IACD,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAC3C;AAQD,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,OAAO,CAAA;IACX,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,iBAAiB,CAAA;IAC9B,wEAAwE;IACxE,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,GAAG,CAAC,EAAE,eAAe,CAAA;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB1F;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,MAAM,CAAyD;IACvE,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,UAAU,CAAI;gBAEV,OAAO,EAAE,mBAAmB;IASxC,2CAA2C;IAC3C,IAAI,UAAU,IAAI,SAAS,MAAM,EAAE,CAElC;IAED,sCAAsC;IACtC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAUtC,OAAO;YA2BP,UAAU;IAMxB;;;;;;;;OAQG;IACG,MAAM,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAc3D"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Outbound Feishu/Lark delivery for finished runs.
3
+ *
4
+ * This is the mirror of `lark-inbox/gateway.ts`: that file owns the inbound
5
+ * WebSocket connection and this one owns the outbound message call, and both
6
+ * hide the vendor SDK behind a narrow injected seam so the behaviour the
7
+ * capability actually promises can be tested without a network or a tenant.
8
+ *
9
+ * Two properties matter more than throughput here, because this runs from an
10
+ * event handler rather than from a request:
11
+ *
12
+ * 1. It never throws into the emitter. A notification that cannot be delivered
13
+ * is logged and dropped; it must not turn a finished run into a failed one.
14
+ * 2. It stays under the application's rate limit. Feishu caps one application at
15
+ * five calls per second, and one finished run addresses several recipients,
16
+ * so sends are serialized with a minimum gap instead of fired in parallel.
17
+ *
18
+ * Messages are plain text rather than interactive cards on purpose: a card's
19
+ * schema is versioned and a rejected card is a silently lost notification,
20
+ * while a text message delivers the same three facts with nothing to validate.
21
+ */
22
+ import { Domain, Client } from '@larksuiteoapi/node-sdk';
23
+ import { OUTCOME_LABEL_ZH } from "../../../core/notify/contract.js";
24
+ /** The real SDK, narrowed to {@link FeishuSenderSdk}. */
25
+ const officialSdk = {
26
+ domain: { Feishu: Domain.Feishu, Lark: Domain.Lark },
27
+ createClient: options => new Client(options),
28
+ };
29
+ /** Default gap: five calls per second is the application ceiling, so 250 ms is the floor. */
30
+ const DEFAULT_MIN_GAP_MS = 250;
31
+ /**
32
+ * Compose the message body for one delivery.
33
+ *
34
+ * The text states three things and nothing else: how it ended, which
35
+ * conversation it was, and which machine it ran on. It deliberately carries no
36
+ * session ids, no turn numbers and no raw reason kinds — those are diagnosable
37
+ * in the workspace, and putting them in a phone notification makes the one line
38
+ * that matters harder to find.
39
+ *
40
+ * @param notices - the finished runs this delivery covers, oldest first.
41
+ * @param hostLabel - the machine's name.
42
+ * @returns the message text, with no trailing newline.
43
+ */
44
+ export function composeFeishuText(notices, hostLabel) {
45
+ const machine = hostLabel.trim() === '' ? '' : `机器:${hostLabel.trim()}`;
46
+ if (notices.length === 0)
47
+ return machine;
48
+ const lines = [];
49
+ if (notices.length === 1) {
50
+ const notice = notices[0];
51
+ lines.push(`运行结束:${OUTCOME_LABEL_ZH[notice.outcome]}`);
52
+ if (notice.title !== '')
53
+ lines.push(`会话:${notice.title}`);
54
+ }
55
+ else {
56
+ lines.push(`${notices.length} 个会话运行结束`);
57
+ for (const notice of notices) {
58
+ const label = OUTCOME_LABEL_ZH[notice.outcome];
59
+ lines.push(notice.title === '' ? `- ${label}` : `- ${label} · ${notice.title}`);
60
+ }
61
+ }
62
+ if (machine !== '')
63
+ lines.push(machine);
64
+ return lines.join('\n');
65
+ }
66
+ /**
67
+ * Delivers composed messages to every configured recipient.
68
+ *
69
+ * One instance is bound to one credential set and one recipient list; the
70
+ * owning service rebuilds it when the configuration changes, so a credential
71
+ * rotation cannot leave a stale token cache behind.
72
+ */
73
+ export class FeishuSender {
74
+ options;
75
+ log;
76
+ sdk;
77
+ minGapMs;
78
+ sleep;
79
+ now;
80
+ client;
81
+ /** Serializes sends and carries the last call time, so the rate limit holds across callers. */
82
+ chain = Promise.resolve();
83
+ lastCallAt = 0;
84
+ constructor(options) {
85
+ this.options = options;
86
+ this.log = options.log ?? (() => undefined);
87
+ this.sdk = options.sdk ?? officialSdk;
88
+ this.minGapMs = options.minGapMs ?? DEFAULT_MIN_GAP_MS;
89
+ this.now = options.now ?? Date.now;
90
+ this.sleep = options.sleep ?? (ms => new Promise(resolve => { setTimeout(resolve, ms); }));
91
+ }
92
+ /** Recipients this sender will address. */
93
+ get recipients() {
94
+ return this.options.recipients;
95
+ }
96
+ /** Domain the credentials address. */
97
+ get domain() {
98
+ return this.options.credentials.domain;
99
+ }
100
+ vendorClient() {
101
+ if (this.client !== undefined)
102
+ return this.client;
103
+ const domain = this.options.credentials.domain;
104
+ const mapped = domain === 'feishu' ? this.sdk.domain.Feishu : this.sdk.domain.Lark;
105
+ this.client = this.sdk.createClient({
106
+ appId: this.options.credentials.appId,
107
+ appSecret: this.options.credentials.appSecret,
108
+ domain: mapped,
109
+ });
110
+ return this.client;
111
+ }
112
+ /**
113
+ * Deliver one text message to every recipient, serially and rate limited.
114
+ * @param text - the message body.
115
+ * @returns one attempt per recipient; empty when no recipient is configured.
116
+ */
117
+ async send(text) {
118
+ const body = text.trim();
119
+ if (body === '' || this.options.recipients.length === 0)
120
+ return [];
121
+ const attempts = [];
122
+ for (const recipient of this.options.recipients) {
123
+ attempts.push(await this.sendOne(recipient, body));
124
+ }
125
+ return attempts;
126
+ }
127
+ async sendOne(recipient, text) {
128
+ // Serialize every call through one chain: `notify()` is not concurrency safe
129
+ // and the vendor limit is per application, not per recipient.
130
+ const run = this.chain.then(async () => {
131
+ await this.respectGap();
132
+ try {
133
+ const response = await this.vendorClient().im.message.create({
134
+ params: { receive_id_type: 'open_id' },
135
+ data: { receive_id: recipient, msg_type: 'text', content: JSON.stringify({ text }) },
136
+ });
137
+ const code = response?.code;
138
+ // The SDK resolves even for a business error, so the envelope decides.
139
+ if (typeof code === 'number' && code !== 0) {
140
+ return { recipient, ok: false, error: `feishu code ${code}: ${String(response.msg ?? '')}` };
141
+ }
142
+ return { recipient, ok: true };
143
+ }
144
+ catch (error) {
145
+ return { recipient, ok: false, error: error instanceof Error ? error.message : String(error) };
146
+ }
147
+ finally {
148
+ this.lastCallAt = this.now();
149
+ }
150
+ });
151
+ // Keep the chain alive after a rejection so one failure cannot block later sends.
152
+ this.chain = run.then(() => undefined, () => undefined);
153
+ return run;
154
+ }
155
+ async respectGap() {
156
+ if (this.minGapMs <= 0)
157
+ return;
158
+ const elapsed = this.now() - this.lastCallAt;
159
+ if (this.lastCallAt !== 0 && elapsed < this.minGapMs)
160
+ await this.sleep(this.minGapMs - elapsed);
161
+ }
162
+ /**
163
+ * Deliver and reduce the result to one log line.
164
+ *
165
+ * Event handlers cannot await a promise they do not own, and a rejected one
166
+ * would be an unhandled rejection, so the caller uses this instead of
167
+ * {@link send} whenever the notification is fire-and-forget.
168
+ *
169
+ * @param notices - the finished runs to report.
170
+ */
171
+ async notify(notices) {
172
+ if (notices.length === 0)
173
+ return;
174
+ const text = composeFeishuText(notices, this.options.hostLabel);
175
+ const attempts = await this.send(text);
176
+ const failed = attempts.filter(attempt => !attempt.ok);
177
+ const delivered = attempts.length - failed.length;
178
+ if (attempts.length > 0 && failed.length === 0) {
179
+ this.log(`dsh-notify: 已推送 ${delivered} 条飞书通知`);
180
+ return;
181
+ }
182
+ for (const attempt of failed) {
183
+ this.log(`dsh-notify: 推送给 ${attempt.recipient} 失败:${attempt.error ?? '未知错误'}`);
184
+ }
185
+ }
186
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The one host route the notification capability serves: a read-only feed of
3
+ * finished runs.
4
+ *
5
+ * It is a privileged read surface like every other web-all host route family
6
+ * and goes through the shared admission fence, because the feed names the
7
+ * conversations this machine has been running. A partially mounted plugin can
8
+ * never widen access: without the fence service the strict loopback rule
9
+ * applies.
10
+ *
11
+ * There is deliberately no write route. A client's read watermark lives on the
12
+ * client, so the host keeps no per-client state to acknowledge and exposes no
13
+ * mutation an attacker could aim at. The only effect a caller can have is
14
+ * reading, which is why this family needs no CSRF-shaped defence beyond the
15
+ * fence itself.
16
+ */
17
+ import type { IncomingMessage } from 'node:http';
18
+ import type { WebRoute } from '@deepseek-ai/dsh-host-webserver';
19
+ import type { NoticeLog } from '../../../core/notify/feed.ts';
20
+ /** Query values one feed read is built from. */
21
+ export interface FeedQuery {
22
+ /** Notices strictly newer than this id. */
23
+ since: number;
24
+ /** Maximum notices to return. */
25
+ limit: number;
26
+ }
27
+ /** What the route handler needs from its owning service. */
28
+ export interface NotifyRouteDeps {
29
+ /** Retained notices, read fresh per request. */
30
+ log: () => NoticeLog;
31
+ /** Notices one read returns when the caller does not say. */
32
+ defaultLimit: () => number;
33
+ /** Host access fence; defaults to the strict loopback rule. */
34
+ isTrusted?: (request: IncomingMessage) => boolean;
35
+ /** Whether the capability is enabled right now, read per request. */
36
+ enabled?: () => boolean;
37
+ }
38
+ /**
39
+ * Read `since` and `limit` out of a request URL.
40
+ *
41
+ * Both are clamped rather than rejected: a client sending nonsense is asking
42
+ * for an answer, not for a diagnostic, and the bounded log already limits what
43
+ * any of these values can do.
44
+ *
45
+ * @param request - the request whose query string is read.
46
+ * @param defaultLimit - the limit used when the caller does not supply one.
47
+ * @returns the effective query.
48
+ */
49
+ export declare function readFeedQuery(request: IncomingMessage, defaultLimit: number): FeedQuery;
50
+ /**
51
+ * The authority to report as this feed's origin.
52
+ *
53
+ * It comes from the request's own `Host` header rather than from configuration,
54
+ * because the caller reached the machine under that name and a client listing
55
+ * several machines must be able to label each row with what it dialed. A header
56
+ * carrying separators or whitespace is not an authority and is reported empty
57
+ * instead of being echoed into a document.
58
+ *
59
+ * @param request - the request being answered.
60
+ * @returns the authority, or '' when the header is unusable.
61
+ */
62
+ export declare function requestAuthority(request: IncomingMessage): string;
63
+ /**
64
+ * Build the feed route.
65
+ * @param deps - the owning service's read surface.
66
+ * @returns the routes to register on the web server.
67
+ */
68
+ export declare function makeNotifyRoutes(deps: NotifyRouteDeps): WebRoute[];
69
+ //# sourceMappingURL=host-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-routes.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/notify/host-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAQ/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAE7D,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,GAAG,EAAE,MAAM,SAAS,CAAA;IACpB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAA;IACjD,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAA;CACxB;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAiBvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,EAAE,CAyBlE"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * The one host route the notification capability serves: a read-only feed of
3
+ * finished runs.
4
+ *
5
+ * It is a privileged read surface like every other web-all host route family
6
+ * and goes through the shared admission fence, because the feed names the
7
+ * conversations this machine has been running. A partially mounted plugin can
8
+ * never widen access: without the fence service the strict loopback rule
9
+ * applies.
10
+ *
11
+ * There is deliberately no write route. A client's read watermark lives on the
12
+ * client, so the host keeps no per-client state to acknowledge and exposes no
13
+ * mutation an attacker could aim at. The only effect a caller can have is
14
+ * reading, which is why this family needs no CSRF-shaped defence beyond the
15
+ * fence itself.
16
+ */
17
+ import { NOTIFY_FEED_PATH, clampLimit, clampWatermark, } from "../../../core/notify/contract.js";
18
+ import { isLoopbackRequest } from "../access-trust/trust.js";
19
+ function writeJson(response, status, body) {
20
+ response.writeHead(status, { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' });
21
+ response.end(JSON.stringify(body));
22
+ }
23
+ /**
24
+ * Read `since` and `limit` out of a request URL.
25
+ *
26
+ * Both are clamped rather than rejected: a client sending nonsense is asking
27
+ * for an answer, not for a diagnostic, and the bounded log already limits what
28
+ * any of these values can do.
29
+ *
30
+ * @param request - the request whose query string is read.
31
+ * @param defaultLimit - the limit used when the caller does not supply one.
32
+ * @returns the effective query.
33
+ */
34
+ export function readFeedQuery(request, defaultLimit) {
35
+ let search = '';
36
+ try {
37
+ search = new URL(request.url ?? '/', 'http://feed.invalid').search;
38
+ }
39
+ catch {
40
+ search = '';
41
+ }
42
+ let params;
43
+ try {
44
+ params = new URLSearchParams(search);
45
+ }
46
+ catch {
47
+ params = new URLSearchParams();
48
+ }
49
+ return {
50
+ since: clampWatermark(params.get('since') ?? ''),
51
+ limit: clampLimit(params.get('limit') ?? '', defaultLimit),
52
+ };
53
+ }
54
+ /**
55
+ * The authority to report as this feed's origin.
56
+ *
57
+ * It comes from the request's own `Host` header rather than from configuration,
58
+ * because the caller reached the machine under that name and a client listing
59
+ * several machines must be able to label each row with what it dialed. A header
60
+ * carrying separators or whitespace is not an authority and is reported empty
61
+ * instead of being echoed into a document.
62
+ *
63
+ * @param request - the request being answered.
64
+ * @returns the authority, or '' when the header is unusable.
65
+ */
66
+ export function requestAuthority(request) {
67
+ const raw = request.headers.host;
68
+ const value = typeof raw === 'string' ? raw.trim() : '';
69
+ if (value === '' || value.length > 255 || /[\s/\\@?#]/.test(value))
70
+ return '';
71
+ return value;
72
+ }
73
+ /**
74
+ * Build the feed route.
75
+ * @param deps - the owning service's read surface.
76
+ * @returns the routes to register on the web server.
77
+ */
78
+ export function makeNotifyRoutes(deps) {
79
+ const isTrusted = deps.isTrusted ?? isLoopbackRequest;
80
+ const enabled = deps.enabled ?? (() => true);
81
+ return [
82
+ {
83
+ kind: 'exact',
84
+ path: NOTIFY_FEED_PATH,
85
+ handler: (request, response) => {
86
+ if (!isTrusted(request)) {
87
+ writeJson(response, 403, { error: 'forbidden' });
88
+ return;
89
+ }
90
+ // The capability's switch gates reads as well as writes. A disabled
91
+ // capability that still answers would publish the list of conversations
92
+ // this machine has been running, which is the whole reason it is off.
93
+ if (!enabled()) {
94
+ writeJson(response, 409, { error: 'notify-disabled' });
95
+ return;
96
+ }
97
+ if (request.method !== 'GET') {
98
+ writeJson(response, 405, { error: 'method-not-allowed' });
99
+ return;
100
+ }
101
+ const query = readFeedQuery(request, deps.defaultLimit());
102
+ const log = deps.log();
103
+ const body = {
104
+ origin: requestAuthority(request),
105
+ latest: log.latest,
106
+ notices: log.since(query.since, query.limit),
107
+ };
108
+ writeJson(response, 200, body);
109
+ },
110
+ },
111
+ ];
112
+ }
@@ -0,0 +1,80 @@
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 type { Context } from '@deepseek-ai/cordis';
27
+ import { type RunNotice } from '../../../core/notify/contract.ts';
28
+ import { resolveFeishuCredentials, type NotifyConfig } from './config.ts';
29
+ export { Config, NOTIFY_SETTINGS_NAMESPACE, resolveFeishuCredentials } from './config.ts';
30
+ export { FeishuSender, composeFeishuText } from './feishu-sender.ts';
31
+ export { makeNotifyRoutes, readFeedQuery, requestAuthority } from './host-routes.ts';
32
+ export type { DeliveryAttempt } from './feishu-sender.ts';
33
+ /** The sender surface this domain needs, so tests can supply their own. */
34
+ export interface NotifySender {
35
+ notify(notices: readonly RunNotice[]): Promise<void>;
36
+ readonly recipients: readonly string[];
37
+ readonly domain: string;
38
+ }
39
+ /** Injectables that let tests run the domain without a tenant or a clock. */
40
+ export interface NotifyServiceDeps {
41
+ env?: NodeJS.ProcessEnv;
42
+ /** Name this machine reports in a pushed message. */
43
+ hostLabel?: string;
44
+ /** Builds the outbound sender; returns null when nothing can be sent. */
45
+ createSender?: (options: {
46
+ credentials: ReturnType<typeof resolveFeishuCredentials>;
47
+ recipients: readonly string[];
48
+ hostLabel: string;
49
+ }) => NotifySender | null;
50
+ }
51
+ /** Minimal shape of the session the domain reads. */
52
+ interface SessionLike {
53
+ id?: unknown;
54
+ header?: {
55
+ origin?: unknown;
56
+ delegationDepth?: unknown;
57
+ } | undefined;
58
+ }
59
+ /**
60
+ * Whether a session belongs to a subagent.
61
+ *
62
+ * `delegationDepth` is the durable field (a resumed child keeps its depth);
63
+ * `origin` is the coarser presentation marker. Either one answering "child" is
64
+ * enough, because recording a child's finished turn would put internal
65
+ * delegation on the same list as the user's own work.
66
+ *
67
+ * @param session - the session the event belongs to.
68
+ * @returns true when the session is a subagent child.
69
+ */
70
+ export declare function isSubagentSession(session: SessionLike | undefined): boolean;
71
+ /**
72
+ * Register the notification capability.
73
+ *
74
+ * @param ctx - host plugin context.
75
+ * @param base - namespace value used when the family settings document has none.
76
+ * @param deps - injectables for tests.
77
+ * @returns the disposer releasing the route, the subscriptions and the sender.
78
+ */
79
+ export declare function register(ctx: Context, base?: NotifyConfig, deps?: NotifyServiceDeps): () => void;
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/notify/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAMnF,OAAO,EAIL,wBAAwB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACpF,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAKzD,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE;QACvB,WAAW,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;QACxD,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;QAC7B,SAAS,EAAE,MAAM,CAAA;KAClB,KAAK,YAAY,GAAG,IAAI,CAAA;CAC1B;AASD,qDAAqD;AACrD,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;CACrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAM3E;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,YAAiB,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,IAAI,CA6LxG"}