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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. package/LICENSE +202 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +201 -2
  4. package/README.zh.md +202 -0
  5. package/cordis.patch.yml +59 -0
  6. package/lib/client.js +25413 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/index.js +20024 -0
  9. package/lib/invariant.js +6 -0
  10. package/lib/types/client/compat.d.ts +29 -0
  11. package/lib/types/client/compat.d.ts.map +1 -0
  12. package/lib/types/client/compat.js +69 -0
  13. package/lib/types/client/conversation/git-branch.d.ts +13 -0
  14. package/lib/types/client/conversation/git-branch.d.ts.map +1 -0
  15. package/lib/types/client/conversation/git-branch.js +121 -0
  16. package/lib/types/client/conversation/git-graph/api.d.ts +42 -0
  17. package/lib/types/client/conversation/git-graph/api.d.ts.map +1 -0
  18. package/lib/types/client/conversation/git-graph/api.js +72 -0
  19. package/lib/types/client/conversation/git-graph/branch-chip.d.ts +47 -0
  20. package/lib/types/client/conversation/git-graph/branch-chip.d.ts.map +1 -0
  21. package/lib/types/client/conversation/git-graph/branch-chip.js +268 -0
  22. package/lib/types/client/conversation/git-graph/branch-popover.d.ts +32 -0
  23. package/lib/types/client/conversation/git-graph/branch-popover.d.ts.map +1 -0
  24. package/lib/types/client/conversation/git-graph/branch-popover.js +108 -0
  25. package/lib/types/client/conversation/git-graph/chip.d.ts +24 -0
  26. package/lib/types/client/conversation/git-graph/chip.d.ts.map +1 -0
  27. package/lib/types/client/conversation/git-graph/chip.js +15 -0
  28. package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts +30 -0
  29. package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts.map +1 -0
  30. package/lib/types/client/conversation/git-graph/create-branch-dialog.js +52 -0
  31. package/lib/types/client/conversation/git-graph/error-copy.d.ts +17 -0
  32. package/lib/types/client/conversation/git-graph/error-copy.d.ts.map +1 -0
  33. package/lib/types/client/conversation/git-graph/error-copy.js +44 -0
  34. package/lib/types/client/conversation/git-graph/graph-dialog.d.ts +21 -0
  35. package/lib/types/client/conversation/git-graph/graph-dialog.d.ts.map +1 -0
  36. package/lib/types/client/conversation/git-graph/graph-dialog.js +112 -0
  37. package/lib/types/client/conversation/git-graph/hero-seat.d.ts +53 -0
  38. package/lib/types/client/conversation/git-graph/hero-seat.d.ts.map +1 -0
  39. package/lib/types/client/conversation/git-graph/hero-seat.js +54 -0
  40. package/lib/types/client/conversation/git-graph/locales.d.ts +88 -0
  41. package/lib/types/client/conversation/git-graph/locales.d.ts.map +1 -0
  42. package/lib/types/client/conversation/git-graph/locales.js +85 -0
  43. package/lib/types/client/conversation/git-graph/sse-leader.d.ts +37 -0
  44. package/lib/types/client/conversation/git-graph/sse-leader.d.ts.map +1 -0
  45. package/lib/types/client/conversation/git-graph/sse-leader.js +101 -0
  46. package/lib/types/client/conversation/index.d.ts +43 -0
  47. package/lib/types/client/conversation/index.d.ts.map +1 -0
  48. package/lib/types/client/conversation/index.js +39 -0
  49. package/lib/types/client/conversation/selector-context.d.ts +12 -0
  50. package/lib/types/client/conversation/selector-context.d.ts.map +1 -0
  51. package/lib/types/client/conversation/selector-context.js +11 -0
  52. package/lib/types/client/conversation/session-lane-chip.d.ts +72 -0
  53. package/lib/types/client/conversation/session-lane-chip.d.ts.map +1 -0
  54. package/lib/types/client/conversation/session-lane-chip.js +163 -0
  55. package/lib/types/client/conversation/session-lane-locales.d.ts +22 -0
  56. package/lib/types/client/conversation/session-lane-locales.d.ts.map +1 -0
  57. package/lib/types/client/conversation/session-lane-locales.js +29 -0
  58. package/lib/types/client/conversation/subagent-model-dom.d.ts +16 -0
  59. package/lib/types/client/conversation/subagent-model-dom.d.ts.map +1 -0
  60. package/lib/types/client/conversation/subagent-model-dom.js +138 -0
  61. package/lib/types/client/conversation/subagent-model.d.ts +17 -0
  62. package/lib/types/client/conversation/subagent-model.d.ts.map +1 -0
  63. package/lib/types/client/conversation/subagent-model.js +156 -0
  64. package/lib/types/client/conversation/worktree/api.d.ts +97 -0
  65. package/lib/types/client/conversation/worktree/api.d.ts.map +1 -0
  66. package/lib/types/client/conversation/worktree/api.js +239 -0
  67. package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts +35 -0
  68. package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts.map +1 -0
  69. package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.js +55 -0
  70. package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts +27 -0
  71. package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts.map +1 -0
  72. package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.js +49 -0
  73. package/lib/types/client/conversation/worktree/lane-binding.d.ts +46 -0
  74. package/lib/types/client/conversation/worktree/lane-binding.d.ts.map +1 -0
  75. package/lib/types/client/conversation/worktree/lane-binding.js +60 -0
  76. package/lib/types/client/conversation/worktree/lane-menu.d.ts +51 -0
  77. package/lib/types/client/conversation/worktree/lane-menu.d.ts.map +1 -0
  78. package/lib/types/client/conversation/worktree/lane-menu.js +140 -0
  79. package/lib/types/client/conversation/worktree/lane-open.d.ts +126 -0
  80. package/lib/types/client/conversation/worktree/lane-open.d.ts.map +1 -0
  81. package/lib/types/client/conversation/worktree/lane-open.js +140 -0
  82. package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts +79 -0
  83. package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts.map +1 -0
  84. package/lib/types/client/conversation/worktree/lane-workspace-sweeper.js +116 -0
  85. package/lib/types/client/conversation/worktree/lifecycle.d.ts +29 -0
  86. package/lib/types/client/conversation/worktree/lifecycle.d.ts.map +1 -0
  87. package/lib/types/client/conversation/worktree/lifecycle.js +67 -0
  88. package/lib/types/client/conversation/worktree/locales.d.ts +58 -0
  89. package/lib/types/client/conversation/worktree/locales.d.ts.map +1 -0
  90. package/lib/types/client/conversation/worktree/locales.js +86 -0
  91. package/lib/types/client/conversation/worktree/semantic.d.ts +11 -0
  92. package/lib/types/client/conversation/worktree/semantic.d.ts.map +1 -0
  93. package/lib/types/client/conversation/worktree/semantic.js +10 -0
  94. package/lib/types/client/index.d.ts +14 -0
  95. package/lib/types/client/index.d.ts.map +1 -0
  96. package/lib/types/client/index.js +45 -0
  97. package/lib/types/client/lark-inbox/i18n.d.ts +63 -0
  98. package/lib/types/client/lark-inbox/i18n.d.ts.map +1 -0
  99. package/lib/types/client/lark-inbox/i18n.js +119 -0
  100. package/lib/types/client/lark-inbox/wizard.d.ts +19 -0
  101. package/lib/types/client/lark-inbox/wizard.d.ts.map +1 -0
  102. package/lib/types/client/lark-inbox/wizard.js +158 -0
  103. package/lib/types/client/notify/i18n.d.ts +47 -0
  104. package/lib/types/client/notify/i18n.d.ts.map +1 -0
  105. package/lib/types/client/notify/i18n.js +87 -0
  106. package/lib/types/client/settings/family-scope.d.ts +23 -0
  107. package/lib/types/client/settings/family-scope.d.ts.map +1 -0
  108. package/lib/types/client/settings/family-scope.js +30 -0
  109. package/lib/types/client/settings/lark-inbox.d.ts +73 -0
  110. package/lib/types/client/settings/lark-inbox.d.ts.map +1 -0
  111. package/lib/types/client/settings/lark-inbox.js +144 -0
  112. package/lib/types/client/settings/notify.d.ts +66 -0
  113. package/lib/types/client/settings/notify.d.ts.map +1 -0
  114. package/lib/types/client/settings/notify.js +139 -0
  115. package/lib/types/client/settings/primitives-0.2.d.ts +137 -0
  116. package/lib/types/client/settings/primitives-0.2.d.ts.map +1 -0
  117. package/lib/types/client/settings/primitives-0.2.js +8 -0
  118. package/lib/types/client/sidebar/RenderBoundary.d.ts +17 -0
  119. package/lib/types/client/sidebar/RenderBoundary.d.ts.map +1 -0
  120. package/lib/types/client/sidebar/RenderBoundary.js +18 -0
  121. package/lib/types/client/sidebar/agent-browser.d.ts +9 -0
  122. package/lib/types/client/sidebar/agent-browser.d.ts.map +1 -0
  123. package/lib/types/client/sidebar/agent-browser.js +102 -0
  124. package/lib/types/client/sidebar/diff-view.d.ts +58 -0
  125. package/lib/types/client/sidebar/diff-view.d.ts.map +1 -0
  126. package/lib/types/client/sidebar/diff-view.js +223 -0
  127. package/lib/types/client/sidebar/git-workbench.d.ts +41 -0
  128. package/lib/types/client/sidebar/git-workbench.d.ts.map +1 -0
  129. package/lib/types/client/sidebar/git-workbench.js +480 -0
  130. package/lib/types/client/sidebar/icons.d.ts +9 -0
  131. package/lib/types/client/sidebar/icons.d.ts.map +1 -0
  132. package/lib/types/client/sidebar/icons.js +6 -0
  133. package/lib/types/client/sidebar/index.d.ts +19 -0
  134. package/lib/types/client/sidebar/index.d.ts.map +1 -0
  135. package/lib/types/client/sidebar/index.js +12 -0
  136. package/lib/types/client/sidebar/native-panels.d.ts +19 -0
  137. package/lib/types/client/sidebar/native-panels.d.ts.map +1 -0
  138. package/lib/types/client/sidebar/native-panels.js +103 -0
  139. package/lib/types/client/sidebar/page-shell.d.ts +52 -0
  140. package/lib/types/client/sidebar/page-shell.d.ts.map +1 -0
  141. package/lib/types/client/sidebar/page-shell.js +18 -0
  142. package/lib/types/client/sidebar/panels/memoir/api.d.ts +258 -0
  143. package/lib/types/client/sidebar/panels/memoir/api.d.ts.map +1 -0
  144. package/lib/types/client/sidebar/panels/memoir/api.js +135 -0
  145. package/lib/types/client/sidebar/panels/memoir/controller.d.ts +22 -0
  146. package/lib/types/client/sidebar/panels/memoir/controller.d.ts.map +1 -0
  147. package/lib/types/client/sidebar/panels/memoir/controller.js +38 -0
  148. package/lib/types/client/sidebar/panels/memoir/cwd.d.ts +80 -0
  149. package/lib/types/client/sidebar/panels/memoir/cwd.d.ts.map +1 -0
  150. package/lib/types/client/sidebar/panels/memoir/cwd.js +96 -0
  151. package/lib/types/client/sidebar/panels/memoir/i18n.d.ts +21 -0
  152. package/lib/types/client/sidebar/panels/memoir/i18n.d.ts.map +1 -0
  153. package/lib/types/client/sidebar/panels/memoir/i18n.js +288 -0
  154. package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts +11 -0
  155. package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts.map +1 -0
  156. package/lib/types/client/sidebar/panels/memoir/panel-activation.js +37 -0
  157. package/lib/types/client/sidebar/panels/memoir/panel.d.ts +26 -0
  158. package/lib/types/client/sidebar/panels/memoir/panel.d.ts.map +1 -0
  159. package/lib/types/client/sidebar/panels/memoir/panel.js +423 -0
  160. package/lib/types/client/sidebar/panels/memoir/styles.d.ts +22 -0
  161. package/lib/types/client/sidebar/panels/memoir/styles.d.ts.map +1 -0
  162. package/lib/types/client/sidebar/panels/memoir/styles.js +774 -0
  163. package/lib/types/client/sidebar/panels/memoir/types.d.ts +7 -0
  164. package/lib/types/client/sidebar/panels/memoir/types.d.ts.map +1 -0
  165. package/lib/types/client/sidebar/panels/memoir/types.js +5 -0
  166. package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts +8 -0
  167. package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts.map +1 -0
  168. package/lib/types/client/sidebar/panels/ssh/ClusterTab.js +53 -0
  169. package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts +13 -0
  170. package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts.map +1 -0
  171. package/lib/types/client/sidebar/panels/ssh/HostFormDialog.js +110 -0
  172. package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts +26 -0
  173. package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts.map +1 -0
  174. package/lib/types/client/sidebar/panels/ssh/HostsTab.js +175 -0
  175. package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts +14 -0
  176. package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts.map +1 -0
  177. package/lib/types/client/sidebar/panels/ssh/SshPanel.js +34 -0
  178. package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts +18 -0
  179. package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts.map +1 -0
  180. package/lib/types/client/sidebar/panels/ssh/TerminalTab.js +207 -0
  181. package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts +8 -0
  182. package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts.map +1 -0
  183. package/lib/types/client/sidebar/panels/ssh/TransferTab.js +168 -0
  184. package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts +18 -0
  185. package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts.map +1 -0
  186. package/lib/types/client/sidebar/panels/ssh/TunnelsTab.js +161 -0
  187. package/lib/types/client/sidebar/panels/ssh/api.d.ts +80 -0
  188. package/lib/types/client/sidebar/panels/ssh/api.d.ts.map +1 -0
  189. package/lib/types/client/sidebar/panels/ssh/api.js +333 -0
  190. package/lib/types/client/sidebar/panels/ssh/controller.d.ts +23 -0
  191. package/lib/types/client/sidebar/panels/ssh/controller.d.ts.map +1 -0
  192. package/lib/types/client/sidebar/panels/ssh/controller.js +41 -0
  193. package/lib/types/client/sidebar/panels/ssh/helpers.d.ts +44 -0
  194. package/lib/types/client/sidebar/panels/ssh/helpers.d.ts.map +1 -0
  195. package/lib/types/client/sidebar/panels/ssh/helpers.js +53 -0
  196. package/lib/types/client/sidebar/panels/ssh/locales.d.ts +155 -0
  197. package/lib/types/client/sidebar/panels/ssh/locales.d.ts.map +1 -0
  198. package/lib/types/client/sidebar/panels/ssh/locales.js +312 -0
  199. package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts +3 -0
  200. package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts.map +1 -0
  201. package/lib/types/client/sidebar/panels/ssh/xterm.css.js +2 -0
  202. package/lib/types/client/sidebar/right-pane-i18n.d.ts +121 -0
  203. package/lib/types/client/sidebar/right-pane-i18n.d.ts.map +1 -0
  204. package/lib/types/client/sidebar/right-pane-i18n.js +239 -0
  205. package/lib/types/client/sidebar/right-pane.d.ts +27 -0
  206. package/lib/types/client/sidebar/right-pane.d.ts.map +1 -0
  207. package/lib/types/client/sidebar/right-pane.js +112 -0
  208. package/lib/types/client/sidebar/scope.d.ts +17 -0
  209. package/lib/types/client/sidebar/scope.d.ts.map +1 -0
  210. package/lib/types/client/sidebar/scope.js +41 -0
  211. package/lib/types/client/trust.d.ts +78 -0
  212. package/lib/types/client/trust.d.ts.map +1 -0
  213. package/lib/types/client/trust.js +130 -0
  214. package/lib/types/client/ui-icons.d.ts +19 -0
  215. package/lib/types/client/ui-icons.d.ts.map +1 -0
  216. package/lib/types/client/ui-icons.js +33 -0
  217. package/lib/types/core/git-graph/commands.d.ts +36 -0
  218. package/lib/types/core/git-graph/commands.d.ts.map +1 -0
  219. package/lib/types/core/git-graph/commands.js +122 -0
  220. package/lib/types/core/git-graph/protocol.d.ts +104 -0
  221. package/lib/types/core/git-graph/protocol.d.ts.map +1 -0
  222. package/lib/types/core/git-graph/protocol.js +142 -0
  223. package/lib/types/core/index.d.ts +3 -0
  224. package/lib/types/core/index.d.ts.map +1 -0
  225. package/lib/types/core/index.js +2 -0
  226. package/lib/types/core/lark-inbox/gating.d.ts +21 -0
  227. package/lib/types/core/lark-inbox/gating.d.ts.map +1 -0
  228. package/lib/types/core/lark-inbox/gating.js +17 -0
  229. package/lib/types/core/lark-inbox/queue.d.ts +27 -0
  230. package/lib/types/core/lark-inbox/queue.d.ts.map +1 -0
  231. package/lib/types/core/lark-inbox/queue.js +78 -0
  232. package/lib/types/core/memoir/protocol.d.ts +42 -0
  233. package/lib/types/core/memoir/protocol.d.ts.map +1 -0
  234. package/lib/types/core/memoir/protocol.js +8 -0
  235. package/lib/types/core/no-browser-auth/contract.d.ts +22 -0
  236. package/lib/types/core/no-browser-auth/contract.d.ts.map +1 -0
  237. package/lib/types/core/no-browser-auth/contract.js +9 -0
  238. package/lib/types/core/notify/contract.d.ts +133 -0
  239. package/lib/types/core/notify/contract.d.ts.map +1 -0
  240. package/lib/types/core/notify/contract.js +186 -0
  241. package/lib/types/core/notify/feed.d.ts +116 -0
  242. package/lib/types/core/notify/feed.d.ts.map +1 -0
  243. package/lib/types/core/notify/feed.js +214 -0
  244. package/lib/types/core/playwright-sessions/contracts.d.ts +98 -0
  245. package/lib/types/core/playwright-sessions/contracts.d.ts.map +1 -0
  246. package/lib/types/core/playwright-sessions/contracts.js +68 -0
  247. package/lib/types/core/playwright-sessions/control.d.ts +19 -0
  248. package/lib/types/core/playwright-sessions/control.d.ts.map +1 -0
  249. package/lib/types/core/playwright-sessions/control.js +9 -0
  250. package/lib/types/core/playwright-sessions/index.d.ts +4 -0
  251. package/lib/types/core/playwright-sessions/index.d.ts.map +1 -0
  252. package/lib/types/core/playwright-sessions/index.js +3 -0
  253. package/lib/types/core/playwright-sessions/names.d.ts +4 -0
  254. package/lib/types/core/playwright-sessions/names.d.ts.map +1 -0
  255. package/lib/types/core/playwright-sessions/names.js +84 -0
  256. package/lib/types/core/playwright-sessions/schema.d.ts +4 -0
  257. package/lib/types/core/playwright-sessions/schema.d.ts.map +1 -0
  258. package/lib/types/core/playwright-sessions/schema.js +90 -0
  259. package/lib/types/core/playwright-sessions/wire.d.ts +78 -0
  260. package/lib/types/core/playwright-sessions/wire.d.ts.map +1 -0
  261. package/lib/types/core/playwright-sessions/wire.js +103 -0
  262. package/lib/types/core/remote-access/paths.d.ts +19 -0
  263. package/lib/types/core/remote-access/paths.d.ts.map +1 -0
  264. package/lib/types/core/remote-access/paths.js +18 -0
  265. package/lib/types/core/remote-web-ui/security.d.ts +35 -0
  266. package/lib/types/core/remote-web-ui/security.d.ts.map +1 -0
  267. package/lib/types/core/remote-web-ui/security.js +146 -0
  268. package/lib/types/core/right-pane/protocol.d.ts +25 -0
  269. package/lib/types/core/right-pane/protocol.d.ts.map +1 -0
  270. package/lib/types/core/right-pane/protocol.js +91 -0
  271. package/lib/types/core/schedule-mode/index.d.ts +7 -0
  272. package/lib/types/core/schedule-mode/index.d.ts.map +1 -0
  273. package/lib/types/core/schedule-mode/index.js +6 -0
  274. package/lib/types/core/schedule-mode/native.d.ts +35 -0
  275. package/lib/types/core/schedule-mode/native.d.ts.map +1 -0
  276. package/lib/types/core/schedule-mode/native.js +82 -0
  277. package/lib/types/core/schedule-mode/types.d.ts +177 -0
  278. package/lib/types/core/schedule-mode/types.d.ts.map +1 -0
  279. package/lib/types/core/schedule-mode/types.js +65 -0
  280. package/lib/types/core/schedule-mode/view.d.ts +62 -0
  281. package/lib/types/core/schedule-mode/view.d.ts.map +1 -0
  282. package/lib/types/core/schedule-mode/view.js +4 -0
  283. package/lib/types/core/ssh/protocol.d.ts +215 -0
  284. package/lib/types/core/ssh/protocol.d.ts.map +1 -0
  285. package/lib/types/core/ssh/protocol.js +23 -0
  286. package/lib/types/core/subagent-model/badges.d.ts +73 -0
  287. package/lib/types/core/subagent-model/badges.d.ts.map +1 -0
  288. package/lib/types/core/subagent-model/badges.js +105 -0
  289. package/lib/types/core/subagent-model/model-resolver.d.ts +25 -0
  290. package/lib/types/core/subagent-model/model-resolver.d.ts.map +1 -0
  291. package/lib/types/core/subagent-model/model-resolver.js +60 -0
  292. package/lib/types/core/worktree/invariant.d.ts +62 -0
  293. package/lib/types/core/worktree/invariant.d.ts.map +1 -0
  294. package/lib/types/core/worktree/invariant.js +72 -0
  295. package/lib/types/core/worktree/manifest.d.ts +71 -0
  296. package/lib/types/core/worktree/manifest.d.ts.map +1 -0
  297. package/lib/types/core/worktree/manifest.js +98 -0
  298. package/lib/types/core/worktree/paths.d.ts +60 -0
  299. package/lib/types/core/worktree/paths.d.ts.map +1 -0
  300. package/lib/types/core/worktree/paths.js +118 -0
  301. package/lib/types/core/worktree/pr-create.d.ts +67 -0
  302. package/lib/types/core/worktree/pr-create.d.ts.map +1 -0
  303. package/lib/types/core/worktree/pr-create.js +118 -0
  304. package/lib/types/core/worktree/protocol.d.ts +7 -0
  305. package/lib/types/core/worktree/protocol.d.ts.map +1 -0
  306. package/lib/types/core/worktree/protocol.js +6 -0
  307. package/lib/types/core/worktree/types.d.ts +292 -0
  308. package/lib/types/core/worktree/types.d.ts.map +1 -0
  309. package/lib/types/core/worktree/types.js +14 -0
  310. package/lib/types/core/worktree/workspace-model.d.ts +56 -0
  311. package/lib/types/core/worktree/workspace-model.d.ts.map +1 -0
  312. package/lib/types/core/worktree/workspace-model.js +14 -0
  313. package/lib/types/host/services/access-trust/index.d.ts +54 -0
  314. package/lib/types/host/services/access-trust/index.d.ts.map +1 -0
  315. package/lib/types/host/services/access-trust/index.js +82 -0
  316. package/lib/types/host/services/access-trust/trust.d.ts +70 -0
  317. package/lib/types/host/services/access-trust/trust.d.ts.map +1 -0
  318. package/lib/types/host/services/access-trust/trust.js +187 -0
  319. package/lib/types/host/services/codex-bridge/bridge.d.ts +106 -0
  320. package/lib/types/host/services/codex-bridge/bridge.d.ts.map +1 -0
  321. package/lib/types/host/services/codex-bridge/bridge.js +321 -0
  322. package/lib/types/host/services/codex-bridge/codex-auth.d.ts +108 -0
  323. package/lib/types/host/services/codex-bridge/codex-auth.d.ts.map +1 -0
  324. package/lib/types/host/services/codex-bridge/codex-auth.js +241 -0
  325. package/lib/types/host/services/codex-bridge/dsh-integration.d.ts +58 -0
  326. package/lib/types/host/services/codex-bridge/dsh-integration.d.ts.map +1 -0
  327. package/lib/types/host/services/codex-bridge/dsh-integration.js +120 -0
  328. package/lib/types/host/services/codex-bridge/http.d.ts +43 -0
  329. package/lib/types/host/services/codex-bridge/http.d.ts.map +1 -0
  330. package/lib/types/host/services/codex-bridge/http.js +92 -0
  331. package/lib/types/host/services/codex-bridge/index.d.ts +63 -0
  332. package/lib/types/host/services/codex-bridge/index.d.ts.map +1 -0
  333. package/lib/types/host/services/codex-bridge/index.js +111 -0
  334. package/lib/types/host/services/codex-bridge/loopback.d.ts +25 -0
  335. package/lib/types/host/services/codex-bridge/loopback.d.ts.map +1 -0
  336. package/lib/types/host/services/codex-bridge/loopback.js +68 -0
  337. package/lib/types/host/services/codex-bridge/routes.d.ts +31 -0
  338. package/lib/types/host/services/codex-bridge/routes.d.ts.map +1 -0
  339. package/lib/types/host/services/codex-bridge/routes.js +126 -0
  340. package/lib/types/host/services/family-config.d.ts +71 -0
  341. package/lib/types/host/services/family-config.d.ts.map +1 -0
  342. package/lib/types/host/services/family-config.js +166 -0
  343. package/lib/types/host/services/family-namespaces.d.ts +24 -0
  344. package/lib/types/host/services/family-namespaces.d.ts.map +1 -0
  345. package/lib/types/host/services/family-namespaces.js +30 -0
  346. package/lib/types/host/services/git-graph/index.d.ts +6 -0
  347. package/lib/types/host/services/git-graph/index.d.ts.map +1 -0
  348. package/lib/types/host/services/git-graph/index.js +7 -0
  349. package/lib/types/host/services/git-graph/routes.d.ts +4 -0
  350. package/lib/types/host/services/git-graph/routes.d.ts.map +1 -0
  351. package/lib/types/host/services/git-graph/routes.js +241 -0
  352. package/lib/types/host/services/git-graph/service.d.ts +52 -0
  353. package/lib/types/host/services/git-graph/service.d.ts.map +1 -0
  354. package/lib/types/host/services/git-graph/service.js +301 -0
  355. package/lib/types/host/services/index.d.ts +23 -0
  356. package/lib/types/host/services/index.d.ts.map +1 -0
  357. package/lib/types/host/services/index.js +80 -0
  358. package/lib/types/host/services/lark-inbox/config.d.ts +24 -0
  359. package/lib/types/host/services/lark-inbox/config.d.ts.map +1 -0
  360. package/lib/types/host/services/lark-inbox/config.js +48 -0
  361. package/lib/types/host/services/lark-inbox/gateway.d.ts +53 -0
  362. package/lib/types/host/services/lark-inbox/gateway.d.ts.map +1 -0
  363. package/lib/types/host/services/lark-inbox/gateway.js +171 -0
  364. package/lib/types/host/services/lark-inbox/host-routes.d.ts +22 -0
  365. package/lib/types/host/services/lark-inbox/host-routes.d.ts.map +1 -0
  366. package/lib/types/host/services/lark-inbox/host-routes.js +146 -0
  367. package/lib/types/host/services/lark-inbox/inbox-store.d.ts +39 -0
  368. package/lib/types/host/services/lark-inbox/inbox-store.d.ts.map +1 -0
  369. package/lib/types/host/services/lark-inbox/inbox-store.js +124 -0
  370. package/lib/types/host/services/lark-inbox/index.d.ts +26 -0
  371. package/lib/types/host/services/lark-inbox/index.d.ts.map +1 -0
  372. package/lib/types/host/services/lark-inbox/index.js +135 -0
  373. package/lib/types/host/services/lark-inbox/tools.d.ts +7 -0
  374. package/lib/types/host/services/lark-inbox/tools.d.ts.map +1 -0
  375. package/lib/types/host/services/lark-inbox/tools.js +119 -0
  376. package/lib/types/host/services/lark-inbox/wizard.d.ts +62 -0
  377. package/lib/types/host/services/lark-inbox/wizard.d.ts.map +1 -0
  378. package/lib/types/host/services/lark-inbox/wizard.js +211 -0
  379. package/lib/types/host/services/lifecycle.d.ts +29 -0
  380. package/lib/types/host/services/lifecycle.d.ts.map +1 -0
  381. package/lib/types/host/services/lifecycle.js +93 -0
  382. package/lib/types/host/services/memoir/index.d.ts +40 -0
  383. package/lib/types/host/services/memoir/index.d.ts.map +1 -0
  384. package/lib/types/host/services/memoir/index.js +52 -0
  385. package/lib/types/host/services/memoir/routes.d.ts +30 -0
  386. package/lib/types/host/services/memoir/routes.d.ts.map +1 -0
  387. package/lib/types/host/services/memoir/routes.js +364 -0
  388. package/lib/types/host/services/memoir/settings.d.ts +27 -0
  389. package/lib/types/host/services/memoir/settings.d.ts.map +1 -0
  390. package/lib/types/host/services/memoir/settings.js +120 -0
  391. package/lib/types/host/services/memoir/store.d.ts +35 -0
  392. package/lib/types/host/services/memoir/store.d.ts.map +1 -0
  393. package/lib/types/host/services/memoir/store.js +124 -0
  394. package/lib/types/host/services/memoir/tools.d.ts +8 -0
  395. package/lib/types/host/services/memoir/tools.d.ts.map +1 -0
  396. package/lib/types/host/services/memoir/tools.js +154 -0
  397. package/lib/types/host/services/no-browser-auth/index.d.ts +25 -0
  398. package/lib/types/host/services/no-browser-auth/index.d.ts.map +1 -0
  399. package/lib/types/host/services/no-browser-auth/index.js +42 -0
  400. package/lib/types/host/services/notify/config.d.ts +105 -0
  401. package/lib/types/host/services/notify/config.d.ts.map +1 -0
  402. package/lib/types/host/services/notify/config.js +123 -0
  403. package/lib/types/host/services/notify/feishu-sender.d.ts +120 -0
  404. package/lib/types/host/services/notify/feishu-sender.d.ts.map +1 -0
  405. package/lib/types/host/services/notify/feishu-sender.js +186 -0
  406. package/lib/types/host/services/notify/host-routes.d.ts +69 -0
  407. package/lib/types/host/services/notify/host-routes.d.ts.map +1 -0
  408. package/lib/types/host/services/notify/host-routes.js +112 -0
  409. package/lib/types/host/services/notify/index.d.ts +80 -0
  410. package/lib/types/host/services/notify/index.d.ts.map +1 -0
  411. package/lib/types/host/services/notify/index.js +263 -0
  412. package/lib/types/host/services/playwright-sessions/child.d.ts +76 -0
  413. package/lib/types/host/services/playwright-sessions/child.d.ts.map +1 -0
  414. package/lib/types/host/services/playwright-sessions/child.js +197 -0
  415. package/lib/types/host/services/playwright-sessions/controller.d.ts +25 -0
  416. package/lib/types/host/services/playwright-sessions/controller.d.ts.map +1 -0
  417. package/lib/types/host/services/playwright-sessions/controller.js +104 -0
  418. package/lib/types/host/services/playwright-sessions/index.d.ts +6 -0
  419. package/lib/types/host/services/playwright-sessions/index.d.ts.map +1 -0
  420. package/lib/types/host/services/playwright-sessions/index.js +161 -0
  421. package/lib/types/host/services/playwright-sessions/live-view.d.ts +32 -0
  422. package/lib/types/host/services/playwright-sessions/live-view.d.ts.map +1 -0
  423. package/lib/types/host/services/playwright-sessions/live-view.js +188 -0
  424. package/lib/types/host/services/playwright-sessions/manager.d.ts +87 -0
  425. package/lib/types/host/services/playwright-sessions/manager.d.ts.map +1 -0
  426. package/lib/types/host/services/playwright-sessions/manager.js +203 -0
  427. package/lib/types/host/services/playwright-sessions/profile-gc.d.ts +39 -0
  428. package/lib/types/host/services/playwright-sessions/profile-gc.d.ts.map +1 -0
  429. package/lib/types/host/services/playwright-sessions/profile-gc.js +72 -0
  430. package/lib/types/host/services/playwright-sessions/routes.d.ts +18 -0
  431. package/lib/types/host/services/playwright-sessions/routes.d.ts.map +1 -0
  432. package/lib/types/host/services/playwright-sessions/routes.js +87 -0
  433. package/lib/types/host/services/remote-access/boot-scripts.d.ts +55 -0
  434. package/lib/types/host/services/remote-access/boot-scripts.d.ts.map +1 -0
  435. package/lib/types/host/services/remote-access/boot-scripts.js +109 -0
  436. package/lib/types/host/services/remote-access/index.d.ts +28 -0
  437. package/lib/types/host/services/remote-access/index.d.ts.map +1 -0
  438. package/lib/types/host/services/remote-access/index.js +47 -0
  439. package/lib/types/host/services/remote-access/routes.d.ts +42 -0
  440. package/lib/types/host/services/remote-access/routes.d.ts.map +1 -0
  441. package/lib/types/host/services/remote-access/routes.js +119 -0
  442. package/lib/types/host/services/remote-web-ui/index.d.ts +21 -0
  443. package/lib/types/host/services/remote-web-ui/index.d.ts.map +1 -0
  444. package/lib/types/host/services/remote-web-ui/index.js +325 -0
  445. package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts +115 -0
  446. package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts.map +1 -0
  447. package/lib/types/host/services/remote-web-ui/server-mode/accounts.js +396 -0
  448. package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts +28 -0
  449. package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts.map +1 -0
  450. package/lib/types/host/services/remote-web-ui/server-mode/cookie.js +48 -0
  451. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts +17 -0
  452. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts.map +1 -0
  453. package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.js +40 -0
  454. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts +73 -0
  455. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts.map +1 -0
  456. package/lib/types/host/services/remote-web-ui/server-mode/external-auth.js +242 -0
  457. package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts +23 -0
  458. package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts.map +1 -0
  459. package/lib/types/host/services/remote-web-ui/server-mode/fence.js +24 -0
  460. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts +89 -0
  461. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts.map +1 -0
  462. package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.js +768 -0
  463. package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts +99 -0
  464. package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts.map +1 -0
  465. package/lib/types/host/services/remote-web-ui/server-mode/gateway.js +679 -0
  466. package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts +43 -0
  467. package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts.map +1 -0
  468. package/lib/types/host/services/remote-web-ui/server-mode/http.js +92 -0
  469. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts +42 -0
  470. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts.map +1 -0
  471. package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.js +73 -0
  472. package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts +13 -0
  473. package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts.map +1 -0
  474. package/lib/types/host/services/remote-web-ui/server-mode/lan.js +17 -0
  475. package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts +25 -0
  476. package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts.map +1 -0
  477. package/lib/types/host/services/remote-web-ui/server-mode/loopback.js +68 -0
  478. package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts +75 -0
  479. package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts.map +1 -0
  480. package/lib/types/host/services/remote-web-ui/server-mode/posture.js +116 -0
  481. package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts +44 -0
  482. package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts.map +1 -0
  483. package/lib/types/host/services/remote-web-ui/server-mode/roles.js +47 -0
  484. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts +21 -0
  485. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts.map +1 -0
  486. package/lib/types/host/services/remote-web-ui/server-mode/server-boot.js +37 -0
  487. package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts +111 -0
  488. package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts.map +1 -0
  489. package/lib/types/host/services/remote-web-ui/server-mode/sessions.js +298 -0
  490. package/lib/types/host/services/remote-web-ui/server.d.ts +82 -0
  491. package/lib/types/host/services/remote-web-ui/server.d.ts.map +1 -0
  492. package/lib/types/host/services/remote-web-ui/server.js +492 -0
  493. package/lib/types/host/services/resources.d.ts +9 -0
  494. package/lib/types/host/services/resources.d.ts.map +1 -0
  495. package/lib/types/host/services/resources.js +98 -0
  496. package/lib/types/host/services/right-pane/browser.d.ts +42 -0
  497. package/lib/types/host/services/right-pane/browser.d.ts.map +1 -0
  498. package/lib/types/host/services/right-pane/browser.js +106 -0
  499. package/lib/types/host/services/right-pane/index.d.ts +22 -0
  500. package/lib/types/host/services/right-pane/index.d.ts.map +1 -0
  501. package/lib/types/host/services/right-pane/index.js +114 -0
  502. package/lib/types/host/services/right-pane/wire.d.ts +6 -0
  503. package/lib/types/host/services/right-pane/wire.d.ts.map +1 -0
  504. package/lib/types/host/services/right-pane/wire.js +9 -0
  505. package/lib/types/host/services/schedule-mode/config.d.ts +11 -0
  506. package/lib/types/host/services/schedule-mode/config.d.ts.map +1 -0
  507. package/lib/types/host/services/schedule-mode/config.js +15 -0
  508. package/lib/types/host/services/schedule-mode/engine.d.ts +150 -0
  509. package/lib/types/host/services/schedule-mode/engine.d.ts.map +1 -0
  510. package/lib/types/host/services/schedule-mode/engine.js +672 -0
  511. package/lib/types/host/services/schedule-mode/index.d.ts +33 -0
  512. package/lib/types/host/services/schedule-mode/index.d.ts.map +1 -0
  513. package/lib/types/host/services/schedule-mode/index.js +175 -0
  514. package/lib/types/host/services/schedule-mode/routes.d.ts +31 -0
  515. package/lib/types/host/services/schedule-mode/routes.d.ts.map +1 -0
  516. package/lib/types/host/services/schedule-mode/routes.js +109 -0
  517. package/lib/types/host/services/schedule-mode/session-create.d.ts +27 -0
  518. package/lib/types/host/services/schedule-mode/session-create.d.ts.map +1 -0
  519. package/lib/types/host/services/schedule-mode/session-create.js +21 -0
  520. package/lib/types/host/services/schedule-mode/store.d.ts +36 -0
  521. package/lib/types/host/services/schedule-mode/store.d.ts.map +1 -0
  522. package/lib/types/host/services/schedule-mode/store.js +309 -0
  523. package/lib/types/host/services/schedule-mode/tools.d.ts +13 -0
  524. package/lib/types/host/services/schedule-mode/tools.d.ts.map +1 -0
  525. package/lib/types/host/services/schedule-mode/tools.js +132 -0
  526. package/lib/types/host/services/ssh/engine.d.ts +162 -0
  527. package/lib/types/host/services/ssh/engine.d.ts.map +1 -0
  528. package/lib/types/host/services/ssh/engine.js +699 -0
  529. package/lib/types/host/services/ssh/host-keys.d.ts +10 -0
  530. package/lib/types/host/services/ssh/host-keys.d.ts.map +1 -0
  531. package/lib/types/host/services/ssh/host-keys.js +108 -0
  532. package/lib/types/host/services/ssh/index.d.ts +38 -0
  533. package/lib/types/host/services/ssh/index.d.ts.map +1 -0
  534. package/lib/types/host/services/ssh/index.js +47 -0
  535. package/lib/types/host/services/ssh/routes.d.ts +29 -0
  536. package/lib/types/host/services/ssh/routes.d.ts.map +1 -0
  537. package/lib/types/host/services/ssh/routes.js +465 -0
  538. package/lib/types/host/services/ssh/store.d.ts +40 -0
  539. package/lib/types/host/services/ssh/store.d.ts.map +1 -0
  540. package/lib/types/host/services/ssh/store.js +330 -0
  541. package/lib/types/host/services/ssh/terminal-ws.d.ts +9 -0
  542. package/lib/types/host/services/ssh/terminal-ws.d.ts.map +1 -0
  543. package/lib/types/host/services/ssh/terminal-ws.js +142 -0
  544. package/lib/types/host/services/ssh/tools.d.ts +11 -0
  545. package/lib/types/host/services/ssh/tools.d.ts.map +1 -0
  546. package/lib/types/host/services/ssh/tools.js +270 -0
  547. package/lib/types/host/services/web-render/contracts.d.ts +93 -0
  548. package/lib/types/host/services/web-render/contracts.d.ts.map +1 -0
  549. package/lib/types/host/services/web-render/contracts.js +60 -0
  550. package/lib/types/host/services/web-render/index.d.ts +58 -0
  551. package/lib/types/host/services/web-render/index.d.ts.map +1 -0
  552. package/lib/types/host/services/web-render/index.js +90 -0
  553. package/lib/types/host/services/web-render/provider.d.ts +37 -0
  554. package/lib/types/host/services/web-render/provider.d.ts.map +1 -0
  555. package/lib/types/host/services/web-render/provider.js +274 -0
  556. package/lib/types/host/services/web-search-anthropic/contracts.d.ts +117 -0
  557. package/lib/types/host/services/web-search-anthropic/contracts.d.ts.map +1 -0
  558. package/lib/types/host/services/web-search-anthropic/contracts.js +90 -0
  559. package/lib/types/host/services/web-search-anthropic/index.d.ts +53 -0
  560. package/lib/types/host/services/web-search-anthropic/index.d.ts.map +1 -0
  561. package/lib/types/host/services/web-search-anthropic/index.js +123 -0
  562. package/lib/types/host/services/web-search-anthropic/provider.d.ts +101 -0
  563. package/lib/types/host/services/web-search-anthropic/provider.d.ts.map +1 -0
  564. package/lib/types/host/services/web-search-anthropic/provider.js +237 -0
  565. package/lib/types/host/services/web-search-kaon/contracts.d.ts +114 -0
  566. package/lib/types/host/services/web-search-kaon/contracts.d.ts.map +1 -0
  567. package/lib/types/host/services/web-search-kaon/contracts.js +73 -0
  568. package/lib/types/host/services/web-search-kaon/index.d.ts +50 -0
  569. package/lib/types/host/services/web-search-kaon/index.d.ts.map +1 -0
  570. package/lib/types/host/services/web-search-kaon/index.js +114 -0
  571. package/lib/types/host/services/web-search-kaon/provider.d.ts +111 -0
  572. package/lib/types/host/services/web-search-kaon/provider.d.ts.map +1 -0
  573. package/lib/types/host/services/web-search-kaon/provider.js +244 -0
  574. package/lib/types/host/services/worktree/git-runner.d.ts +82 -0
  575. package/lib/types/host/services/worktree/git-runner.d.ts.map +1 -0
  576. package/lib/types/host/services/worktree/git-runner.js +81 -0
  577. package/lib/types/host/services/worktree/git.d.ts +94 -0
  578. package/lib/types/host/services/worktree/git.d.ts.map +1 -0
  579. package/lib/types/host/services/worktree/git.js +153 -0
  580. package/lib/types/host/services/worktree/http.d.ts +12 -0
  581. package/lib/types/host/services/worktree/http.d.ts.map +1 -0
  582. package/lib/types/host/services/worktree/http.js +34 -0
  583. package/lib/types/host/services/worktree/index.d.ts +38 -0
  584. package/lib/types/host/services/worktree/index.d.ts.map +1 -0
  585. package/lib/types/host/services/worktree/index.js +78 -0
  586. package/lib/types/host/services/worktree/lane-tool.d.ts +22 -0
  587. package/lib/types/host/services/worktree/lane-tool.d.ts.map +1 -0
  588. package/lib/types/host/services/worktree/lane-tool.js +92 -0
  589. package/lib/types/host/services/worktree/manager.d.ts +410 -0
  590. package/lib/types/host/services/worktree/manager.d.ts.map +1 -0
  591. package/lib/types/host/services/worktree/manager.js +1485 -0
  592. package/lib/types/host/services/worktree/model-override.d.ts +20 -0
  593. package/lib/types/host/services/worktree/model-override.d.ts.map +1 -0
  594. package/lib/types/host/services/worktree/model-override.js +35 -0
  595. package/lib/types/host/services/worktree/routes.d.ts +50 -0
  596. package/lib/types/host/services/worktree/routes.d.ts.map +1 -0
  597. package/lib/types/host/services/worktree/routes.js +695 -0
  598. package/lib/types/host/services/worktree/run-command.d.ts +26 -0
  599. package/lib/types/host/services/worktree/run-command.d.ts.map +1 -0
  600. package/lib/types/host/services/worktree/run-command.js +36 -0
  601. package/lib/types/host/services/worktree/session-lane/manager.d.ts +109 -0
  602. package/lib/types/host/services/worktree/session-lane/manager.d.ts.map +1 -0
  603. package/lib/types/host/services/worktree/session-lane/manager.js +172 -0
  604. package/lib/types/host/services/worktree/workspace-model-routes.d.ts +21 -0
  605. package/lib/types/host/services/worktree/workspace-model-routes.d.ts.map +1 -0
  606. package/lib/types/host/services/worktree/workspace-model-routes.js +198 -0
  607. package/lib/types/host/services/worktree/workspace-model.d.ts +48 -0
  608. package/lib/types/host/services/worktree/workspace-model.d.ts.map +1 -0
  609. package/lib/types/host/services/worktree/workspace-model.js +113 -0
  610. package/lib/types/index.d.ts +47 -0
  611. package/lib/types/index.d.ts.map +1 -0
  612. package/lib/types/index.js +52 -0
  613. package/lib/types/invariant.d.ts +4 -0
  614. package/lib/types/invariant.d.ts.map +1 -0
  615. package/lib/types/invariant.js +3 -0
  616. package/package.json +153 -3
  617. package/presets/code-vibe/THIRD_PARTY_NOTICES.md +55 -0
  618. package/presets/code-vibe/skills/UPSTREAM.md +104 -0
  619. package/presets/code-vibe/skills/agent-experience/SKILL.md +15 -0
  620. package/presets/code-vibe/skills/agent-operation/SKILL.md +43 -0
  621. package/presets/code-vibe/skills/code-review/SKILL.md +45 -0
  622. package/presets/code-vibe/skills/dsh-ci-test-reliability/SKILL.md +133 -0
  623. package/presets/code-vibe/skills/dsh-ci-test-reliability/references/ci-flake-diagnosis.md +60 -0
  624. package/presets/code-vibe/skills/dsh-find-simplifications/SKILL.md +69 -0
  625. package/presets/code-vibe/skills/dsh-find-simplifications/references/historical-patterns.md +45 -0
  626. package/presets/code-vibe/skills/dsh-merging-stacked-prs/SKILL.md +129 -0
  627. package/presets/code-vibe/skills/dsh-prose-standard/SKILL.md +83 -0
  628. package/presets/code-vibe/skills/dsh-prose-standard/references/examples.md +169 -0
  629. package/presets/code-vibe/skills/dsh-speed-up-perf/SKILL.md +94 -0
  630. package/presets/code-vibe/skills/dsh-trim-cot-leakage/SKILL.md +47 -0
  631. package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/examples.md +275 -0
  632. package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/recall-batteries.md +52 -0
  633. package/presets/code-vibe/skills/frontend-design/SKILL.md +60 -0
  634. package/presets/code-vibe/skills/frontend-design/references/critique-format.md +35 -0
  635. package/presets/code-vibe/skills/frontend-design/references/design-standards/LOAD-MAP.md +81 -0
  636. package/presets/code-vibe/skills/frontend-design/references/design-standards/README.md +53 -0
  637. package/presets/code-vibe/skills/frontend-design/references/design-standards/anchor.md +51 -0
  638. package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/ai-tells.md +59 -0
  639. package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/web-interface.md +14 -0
  640. package/presets/code-vibe/skills/frontend-design/references/design-standards/change-control.md +62 -0
  641. package/presets/code-vibe/skills/frontend-design/references/design-standards/copy.md +65 -0
  642. package/presets/code-vibe/skills/frontend-design/references/design-standards/craft-knobs.md +61 -0
  643. package/presets/code-vibe/skills/frontend-design/references/design-standards/debug-playbook.md +37 -0
  644. package/presets/code-vibe/skills/frontend-design/references/design-standards/exemplars/README.md +64 -0
  645. package/presets/code-vibe/skills/frontend-design/references/design-standards/plan-architecture.checklist.json +13 -0
  646. package/presets/code-vibe/skills/frontend-design/references/design-standards/product-judgment.md +113 -0
  647. package/presets/code-vibe/skills/frontend-design/references/design-standards/system-architecture.md +108 -0
  648. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/README.md +26 -0
  649. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/color-roles.md +49 -0
  650. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/motion.md +51 -0
  651. package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/scale.md +89 -0
  652. package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-page-gate.md +61 -0
  653. package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-surface.checklist.json +49 -0
  654. package/presets/code-vibe/skills/frontend-design/references/design-standards/ux.md +76 -0
  655. package/presets/code-vibe/skills/frontend-design/references/design-standards/visual.md +52 -0
  656. package/presets/code-vibe/skills/frontend-design/references/perceptible-path.md +27 -0
  657. package/presets/code-vibe/skills/frontend-design/references/product-package.md +80 -0
  658. package/presets/code-vibe/skills/frontend-design/references/scheme-antipatterns.md +21 -0
  659. package/presets/code-vibe/skills/quality-review/SKILL.md +57 -0
  660. package/presets/code-vibe/skills/quality-review/references/bounded-verify.md +37 -0
  661. package/presets/code-vibe/skills/quality-review/references/browser-verify.md +81 -0
  662. package/presets/code-vibe/skills/quality-review/references/evidence-contract.md +194 -0
  663. package/presets/code-vibe/skills/quality-review/references/falsify-checklist.md +44 -0
  664. package/presets/code-vibe/skills/quality-review/references/human-acceptance-pack.md +68 -0
  665. package/presets/code-vibe/skills/quality-review/references/product-regression.md +51 -0
  666. package/presets/code-vibe/skills/quality-review/references/ux-standards.md +37 -0
  667. package/presets/code-vibe/skills/quality-review/references/ux-walkthrough.md +49 -0
  668. package/presets/code-vibe/skills/quality-review/references/validation-report.md +22 -0
  669. package/presets/code-vibe/skills/quality-review/references/verification-loop.md +95 -0
  670. package/presets/code-vibe/skills/quality-review/references/version-acceptance-matrix.md +131 -0
  671. package/presets/code-vibe/skills/record-browser-gif/SKILL.md +174 -0
  672. package/presets/code-vibe/skills/record-browser-gif/scripts/encode_gif.py +337 -0
  673. package/presets/code-vibe/skills/record-browser-gif/scripts/test_encode_gif.py +103 -0
  674. package/presets/code-vibe/skills/wish-programming/SKILL.md +150 -0
  675. package/presets/code-vibe/skills/wish-programming/references/roles/arch-reviewer.md +26 -0
  676. package/presets/code-vibe/skills/wish-programming/references/roles/design-reviewer.md +32 -0
  677. package/presets/code-vibe/skills/wish-programming/references/roles/pm-reviewer.md +26 -0
  678. package/presets/code-vibe/skills/wish-programming/references/roles/qa-reviewer.md +16 -0
  679. package/presets/code-vibe/skills/wish-programming/references/roles/security-reviewer.md +16 -0
  680. package/presets/code-vibe/skills/wish-programming/references/roles/sre-reviewer.md +16 -0
  681. package/presets/code-vibe/skills/wish-programming/references/roles/ux-adversary.md +16 -0
  682. package/presets/code-vibe/skills/wish-programming/references/templates/arch.md.tpl +51 -0
  683. package/presets/code-vibe/skills/wish-programming/references/templates/brief.md.tpl +36 -0
  684. package/presets/code-vibe/skills/wish-programming/references/templates/confirmation-pack.md +54 -0
  685. package/presets/code-vibe/skills/wish-programming/references/templates/design-spec.md.tpl +49 -0
  686. package/presets/code-vibe/skills/wish-programming/references/templates/module-readme.md +37 -0
  687. package/presets/code-vibe/skills/wish-programming/references/templates/product.md.tpl +74 -0
  688. package/presets/code-vibe/skills/wish-programming/references/templates/requirements.md.tpl +31 -0
  689. package/presets/code-vibe/skills/wish-programming/references/workflow-template.md +122 -0
  690. package/presets/code-vibe/skills/wish-programming/scripts/MANIFEST.sha256 +11 -0
  691. package/presets/code-vibe/skills/wish-programming/scripts/check_spec.py +416 -0
  692. package/presets/code-vibe/skills/wish-programming/scripts/check_whitelist.py +193 -0
  693. package/presets/code-vibe/skills/wish-programming/scripts/coverage_check.py +199 -0
  694. package/presets/code-vibe/skills/wish-programming/scripts/gate-lock.sh +46 -0
  695. package/presets/code-vibe/skills/wish-programming/scripts/journey.sh +281 -0
  696. package/presets/code-vibe/skills/wish-programming/scripts/project.sh +152 -0
  697. package/presets/code-vibe/skills/wish-programming/scripts/replay.sh +65 -0
  698. package/presets/code-vibe/skills/wish-programming/scripts/scan_drift.py +79 -0
  699. package/presets/code-vibe/skills/wish-programming/scripts/verify.sh +169 -0
  700. package/presets/code-vibe/skills/wish-programming/scripts/verify_preset_budgets.py +218 -0
  701. package/presets/code-vibe/skills/wish-programming/scripts/wish.sh +150 -0
  702. package/presets/code-vibe.patch.yml +325 -0
  703. package/presets/hiopen.patch.yml +109 -0
  704. package/src/client/compat.ts +86 -0
  705. package/src/client/conversation/conversation.module.css +264 -0
  706. package/src/client/conversation/git-branch.tsx +152 -0
  707. package/src/client/conversation/git-graph/LICENSE.git-graph +202 -0
  708. package/src/client/conversation/git-graph/api.ts +85 -0
  709. package/src/client/conversation/git-graph/branch-chip.tsx +354 -0
  710. package/src/client/conversation/git-graph/branch-popover.tsx +185 -0
  711. package/src/client/conversation/git-graph/chip.tsx +47 -0
  712. package/src/client/conversation/git-graph/create-branch-dialog.tsx +108 -0
  713. package/src/client/conversation/git-graph/error-copy.ts +50 -0
  714. package/src/client/conversation/git-graph/git-graph.module.css +792 -0
  715. package/src/client/conversation/git-graph/graph-dialog.tsx +196 -0
  716. package/src/client/conversation/git-graph/hero-seat.ts +76 -0
  717. package/src/client/conversation/git-graph/locales.ts +90 -0
  718. package/src/client/conversation/git-graph/sse-leader.ts +124 -0
  719. package/src/client/conversation/index.ts +82 -0
  720. package/src/client/conversation/selector-context.tsx +24 -0
  721. package/src/client/conversation/session-lane-chip.tsx +262 -0
  722. package/src/client/conversation/session-lane-locales.ts +34 -0
  723. package/src/client/conversation/subagent-model-dom.ts +157 -0
  724. package/src/client/conversation/subagent-model.ts +198 -0
  725. package/src/client/conversation/worktree/api.ts +283 -0
  726. package/src/client/conversation/worktree/dialogs/DeleteWorktreeDialog.tsx +111 -0
  727. package/src/client/conversation/worktree/dialogs/PrCreateDialog.tsx +114 -0
  728. package/src/client/conversation/worktree/lane-binding.ts +77 -0
  729. package/src/client/conversation/worktree/lane-menu.tsx +247 -0
  730. package/src/client/conversation/worktree/lane-open.ts +204 -0
  731. package/src/client/conversation/worktree/lane-workspace-sweeper.ts +136 -0
  732. package/src/client/conversation/worktree/lifecycle.ts +75 -0
  733. package/src/client/conversation/worktree/locales.ts +97 -0
  734. package/src/client/conversation/worktree/semantic.ts +10 -0
  735. package/src/client/conversation/worktree/worktree.module.css +70 -0
  736. package/src/client/css-modules.d.ts +8 -0
  737. package/src/client/index.ts +58 -0
  738. package/src/client/lark-inbox/i18n.ts +125 -0
  739. package/src/client/lark-inbox/lark-wizard.module.css +88 -0
  740. package/src/client/lark-inbox/wizard.tsx +211 -0
  741. package/src/client/notify/i18n.ts +93 -0
  742. package/src/client/settings/family-scope.ts +45 -0
  743. package/src/client/settings/lark-inbox.tsx +319 -0
  744. package/src/client/settings/notify.tsx +288 -0
  745. package/src/client/settings/primitives-0.2.ts +148 -0
  746. package/src/client/settings/settings-shell.module.css +56 -0
  747. package/src/client/sidebar/RenderBoundary.tsx +17 -0
  748. package/src/client/sidebar/agent-browser.tsx +114 -0
  749. package/src/client/sidebar/diff-view.tsx +314 -0
  750. package/src/client/sidebar/git-workbench.tsx +700 -0
  751. package/src/client/sidebar/icons.tsx +23 -0
  752. package/src/client/sidebar/index.ts +28 -0
  753. package/src/client/sidebar/native-panels.tsx +149 -0
  754. package/src/client/sidebar/page-shell.module.css +96 -0
  755. package/src/client/sidebar/page-shell.tsx +86 -0
  756. package/src/client/sidebar/panels/memoir/api.ts +300 -0
  757. package/src/client/sidebar/panels/memoir/controller.ts +47 -0
  758. package/src/client/sidebar/panels/memoir/cwd.ts +140 -0
  759. package/src/client/sidebar/panels/memoir/i18n.ts +300 -0
  760. package/src/client/sidebar/panels/memoir/panel-activation.ts +42 -0
  761. package/src/client/sidebar/panels/memoir/panel.tsx +869 -0
  762. package/src/client/sidebar/panels/memoir/styles.ts +776 -0
  763. package/src/client/sidebar/panels/memoir/types.ts +7 -0
  764. package/src/client/sidebar/panels/ssh/ClusterTab.tsx +123 -0
  765. package/src/client/sidebar/panels/ssh/HostFormDialog.tsx +243 -0
  766. package/src/client/sidebar/panels/ssh/HostsTab.tsx +290 -0
  767. package/src/client/sidebar/panels/ssh/SshPanel.tsx +76 -0
  768. package/src/client/sidebar/panels/ssh/TerminalTab.tsx +290 -0
  769. package/src/client/sidebar/panels/ssh/TransferTab.tsx +232 -0
  770. package/src/client/sidebar/panels/ssh/TunnelsTab.tsx +204 -0
  771. package/src/client/sidebar/panels/ssh/api.ts +388 -0
  772. package/src/client/sidebar/panels/ssh/controller.ts +48 -0
  773. package/src/client/sidebar/panels/ssh/helpers.ts +70 -0
  774. package/src/client/sidebar/panels/ssh/locales.ts +318 -0
  775. package/src/client/sidebar/panels/ssh/panel.module.css +801 -0
  776. package/src/client/sidebar/panels/ssh/xterm.css.ts +2 -0
  777. package/src/client/sidebar/right-pane-i18n.ts +243 -0
  778. package/src/client/sidebar/right-pane.tsx +156 -0
  779. package/src/client/sidebar/scope.ts +54 -0
  780. package/src/client/sidebar/sidebar-header.module.css +72 -0
  781. package/src/client/sidebar/sidebar.module.css +619 -0
  782. package/src/client/trust.ts +187 -0
  783. package/src/client/ui-icons.ts +35 -0
  784. package/src/core/git-graph/commands.ts +107 -0
  785. package/src/core/git-graph/protocol.ts +238 -0
  786. package/src/core/index.ts +2 -0
  787. package/src/core/lark-inbox/gating.ts +35 -0
  788. package/src/core/lark-inbox/queue.ts +100 -0
  789. package/src/core/memoir/protocol.ts +46 -0
  790. package/src/core/no-browser-auth/contract.ts +25 -0
  791. package/src/core/notify/contract.ts +236 -0
  792. package/src/core/notify/feed.ts +235 -0
  793. package/src/core/playwright-sessions/contracts.ts +143 -0
  794. package/src/core/playwright-sessions/control.ts +33 -0
  795. package/src/core/playwright-sessions/index.ts +3 -0
  796. package/src/core/playwright-sessions/names.ts +83 -0
  797. package/src/core/playwright-sessions/schema.ts +102 -0
  798. package/src/core/playwright-sessions/wire.ts +142 -0
  799. package/src/core/remote-access/paths.ts +23 -0
  800. package/src/core/remote-web-ui/security.ts +171 -0
  801. package/src/core/right-pane/protocol.ts +94 -0
  802. package/src/core/schedule-mode/index.ts +6 -0
  803. package/src/core/schedule-mode/native.ts +105 -0
  804. package/src/core/schedule-mode/types.ts +182 -0
  805. package/src/core/schedule-mode/view.ts +66 -0
  806. package/src/core/ssh/protocol.ts +212 -0
  807. package/src/core/subagent-model/badges.ts +161 -0
  808. package/src/core/worktree/invariant.ts +101 -0
  809. package/src/core/worktree/manifest.ts +135 -0
  810. package/src/core/worktree/paths.ts +123 -0
  811. package/src/core/worktree/pr-create.ts +157 -0
  812. package/src/core/worktree/protocol.ts +7 -0
  813. package/src/core/worktree/types.ts +317 -0
  814. package/src/core/worktree/workspace-model.ts +61 -0
  815. package/src/host/services/access-trust/index.ts +127 -0
  816. package/src/host/services/access-trust/trust.ts +189 -0
  817. package/src/host/services/codex-bridge/bridge.ts +392 -0
  818. package/src/host/services/codex-bridge/codex-auth.ts +352 -0
  819. package/src/host/services/codex-bridge/dsh-integration.ts +169 -0
  820. package/src/host/services/codex-bridge/http.ts +105 -0
  821. package/src/host/services/codex-bridge/index.ts +154 -0
  822. package/src/host/services/codex-bridge/loopback.ts +63 -0
  823. package/src/host/services/codex-bridge/routes.ts +143 -0
  824. package/src/host/services/family-config.ts +224 -0
  825. package/src/host/services/family-namespaces.ts +39 -0
  826. package/src/host/services/git-graph/index.ts +11 -0
  827. package/src/host/services/git-graph/routes.ts +212 -0
  828. package/src/host/services/git-graph/service.ts +305 -0
  829. package/src/host/services/index.ts +94 -0
  830. package/src/host/services/lark-inbox/config.ts +66 -0
  831. package/src/host/services/lark-inbox/gateway.ts +184 -0
  832. package/src/host/services/lark-inbox/host-routes.ts +113 -0
  833. package/src/host/services/lark-inbox/inbox-store.ts +160 -0
  834. package/src/host/services/lark-inbox/index.ts +141 -0
  835. package/src/host/services/lark-inbox/tools.ts +124 -0
  836. package/src/host/services/lark-inbox/wizard.ts +206 -0
  837. package/src/host/services/lifecycle.ts +107 -0
  838. package/src/host/services/memoir/index.ts +80 -0
  839. package/src/host/services/memoir/routes.ts +346 -0
  840. package/src/host/services/memoir/settings.ts +122 -0
  841. package/src/host/services/memoir/store.ts +132 -0
  842. package/src/host/services/memoir/tools.ts +158 -0
  843. package/src/host/services/no-browser-auth/index.ts +70 -0
  844. package/src/host/services/notify/config.ts +178 -0
  845. package/src/host/services/notify/feishu-sender.ts +220 -0
  846. package/src/host/services/notify/host-routes.ts +133 -0
  847. package/src/host/services/notify/index.ts +305 -0
  848. package/src/host/services/playwright-sessions/child.ts +251 -0
  849. package/src/host/services/playwright-sessions/controller.ts +102 -0
  850. package/src/host/services/playwright-sessions/index.ts +146 -0
  851. package/src/host/services/playwright-sessions/live-view.ts +225 -0
  852. package/src/host/services/playwright-sessions/manager.ts +239 -0
  853. package/src/host/services/playwright-sessions/profile-gc.ts +97 -0
  854. package/src/host/services/playwright-sessions/routes.ts +90 -0
  855. package/src/host/services/remote-access/boot-scripts.ts +118 -0
  856. package/src/host/services/remote-access/index.ts +62 -0
  857. package/src/host/services/remote-access/routes.ts +137 -0
  858. package/src/host/services/remote-web-ui/index.ts +344 -0
  859. package/src/host/services/remote-web-ui/server-mode/accounts.ts +423 -0
  860. package/src/host/services/remote-web-ui/server-mode/cookie.ts +57 -0
  861. package/src/host/services/remote-web-ui/server-mode/dsh-home.ts +42 -0
  862. package/src/host/services/remote-web-ui/server-mode/external-auth.ts +296 -0
  863. package/src/host/services/remote-web-ui/server-mode/fence.ts +27 -0
  864. package/src/host/services/remote-web-ui/server-mode/gateway-routes.ts +797 -0
  865. package/src/host/services/remote-web-ui/server-mode/gateway.ts +684 -0
  866. package/src/host/services/remote-web-ui/server-mode/http.ts +105 -0
  867. package/src/host/services/remote-web-ui/server-mode/integrated-auth.ts +118 -0
  868. package/src/host/services/remote-web-ui/server-mode/lan.ts +19 -0
  869. package/src/host/services/remote-web-ui/server-mode/loopback.ts +63 -0
  870. package/src/host/services/remote-web-ui/server-mode/posture.ts +154 -0
  871. package/src/host/services/remote-web-ui/server-mode/roles.ts +51 -0
  872. package/src/host/services/remote-web-ui/server-mode/server-boot.ts +38 -0
  873. package/src/host/services/remote-web-ui/server-mode/sessions.ts +347 -0
  874. package/src/host/services/remote-web-ui/server.ts +591 -0
  875. package/src/host/services/resources.ts +78 -0
  876. package/src/host/services/right-pane/browser.ts +106 -0
  877. package/src/host/services/right-pane/index.ts +117 -0
  878. package/src/host/services/right-pane/wire.ts +10 -0
  879. package/src/host/services/schedule-mode/config.ts +26 -0
  880. package/src/host/services/schedule-mode/engine.ts +689 -0
  881. package/src/host/services/schedule-mode/index.ts +214 -0
  882. package/src/host/services/schedule-mode/routes.ts +130 -0
  883. package/src/host/services/schedule-mode/session-create.ts +36 -0
  884. package/src/host/services/schedule-mode/store.ts +304 -0
  885. package/src/host/services/schedule-mode/tools.ts +154 -0
  886. package/src/host/services/ssh/engine.ts +675 -0
  887. package/src/host/services/ssh/host-keys.ts +99 -0
  888. package/src/host/services/ssh/index.ts +84 -0
  889. package/src/host/services/ssh/routes.ts +442 -0
  890. package/src/host/services/ssh/store.ts +310 -0
  891. package/src/host/services/ssh/terminal-ws.ts +157 -0
  892. package/src/host/services/ssh/tools.ts +279 -0
  893. package/src/host/services/web-render/contracts.ts +138 -0
  894. package/src/host/services/web-render/index.ts +112 -0
  895. package/src/host/services/web-render/provider.ts +282 -0
  896. package/src/host/services/web-search-anthropic/contracts.ts +163 -0
  897. package/src/host/services/web-search-anthropic/index.ts +152 -0
  898. package/src/host/services/web-search-anthropic/provider.ts +325 -0
  899. package/src/host/services/worktree/git-runner.ts +124 -0
  900. package/src/host/services/worktree/git.ts +183 -0
  901. package/src/host/services/worktree/http.ts +36 -0
  902. package/src/host/services/worktree/index.ts +92 -0
  903. package/src/host/services/worktree/lane-tool.ts +100 -0
  904. package/src/host/services/worktree/manager.ts +1553 -0
  905. package/src/host/services/worktree/model-override.ts +43 -0
  906. package/src/host/services/worktree/routes.ts +570 -0
  907. package/src/host/services/worktree/run-command.ts +66 -0
  908. package/src/host/services/worktree/session-lane/manager.ts +228 -0
  909. package/src/host/services/worktree/workspace-model-routes.ts +156 -0
  910. package/src/host/services/worktree/workspace-model.ts +132 -0
  911. package/src/index.ts +84 -0
  912. package/src/invariant.ts +4 -0
@@ -0,0 +1,672 @@
1
+ import { appendRun, isRecurringRule, policyKey, ruleCanArm, runSessionTitle, timingArgs, } from "../../../core/schedule-mode/types.js";
2
+ /** 引擎可预期的失败。 */
3
+ export class ScheduleModeError extends Error {
4
+ code;
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.code = code;
8
+ this.name = 'ScheduleModeError';
9
+ }
10
+ }
11
+ /** 规则结构比较(忽略对象键序)。 */
12
+ function sameRule(left, right) {
13
+ if (left.kind !== right.kind)
14
+ return false;
15
+ switch (left.kind) {
16
+ case 'after': return right.kind === 'after' && left.afterSeconds === right.afterSeconds;
17
+ case 'at': return right.kind === 'at' && left.at === right.at;
18
+ case 'every': return right.kind === 'every' && left.everySeconds === right.everySeconds;
19
+ case 'daily': return right.kind === 'daily' && left.time === right.time && left.timeZone === right.timeZone;
20
+ case 'weekly':
21
+ return right.kind === 'weekly' && left.time === right.time && left.timeZone === right.timeZone
22
+ && left.weekdays.length === right.weekdays.length && left.weekdays.every((day, index) => day === right.weekdays[index]);
23
+ case 'cron': return right.kind === 'cron' && left.expression === right.expression && left.timeZone === right.timeZone;
24
+ }
25
+ }
26
+ export class ScheduleModeEngine {
27
+ store;
28
+ ports;
29
+ pending = 0;
30
+ disposed = false;
31
+ enabled = true;
32
+ epoch = 0;
33
+ executingEpoch;
34
+ dispose() { this.disposed = true; this.epoch++; }
35
+ setEnabled(value) { this.enabled = value; if (!value)
36
+ this.epoch++; }
37
+ assertActive() {
38
+ if (this.disposed || !this.enabled || (this.executingEpoch !== undefined && this.executingEpoch !== this.epoch))
39
+ throw new ScheduleModeError('recovery-required', 'schedule engine is stopped; pending effects require recovery');
40
+ }
41
+ constructor(store, ports) {
42
+ this.store = store;
43
+ this.ports = ports;
44
+ }
45
+ /** 串行化所有写操作(与原生 schedule 的 FIFO 对齐)。 */
46
+ serialize(work, cancellation = false) {
47
+ this.assertActive();
48
+ // Cancellation on this engine queues normally. An independent engine cannot
49
+ // claim success while another owner is paused inside an external create.
50
+ const rejectBusy = cancellation && this.pending === 0;
51
+ this.pending++;
52
+ const epoch = this.epoch;
53
+ return this.store.coordinate(async () => {
54
+ this.executingEpoch = epoch;
55
+ try {
56
+ this.assertActive();
57
+ return await work();
58
+ }
59
+ finally {
60
+ this.executingEpoch = undefined;
61
+ }
62
+ }, rejectBusy).finally(() => { this.pending--; });
63
+ }
64
+ async nativeTasks() {
65
+ const tasks = await this.ports.listTasks();
66
+ if (!Array.isArray(tasks) || tasks.some(task => !task || !task.id?.trim() || !task.sessionId?.trim()
67
+ || (task.status !== 'active' && task.status !== 'inactive') || !Number.isFinite(Date.parse(task.scheduledAt)))) {
68
+ throw new Error('native schedule catalog schema is invalid; absence is unconfirmed');
69
+ }
70
+ if (new Set(tasks.map(task => task.id)).size !== tasks.length)
71
+ throw new Error('native schedule catalog identity is ambiguous');
72
+ return tasks;
73
+ }
74
+ get historyLimit() {
75
+ return this.ports.runHistoryLimit ?? 50;
76
+ }
77
+ /** 原生侧(自动化任务页/原生工具)对副本的编辑是否与策略快照不一致。 */
78
+ isCopyEdited(policy, armed) {
79
+ return armed.title !== policy.title
80
+ || armed.prompt !== policy.prompt
81
+ || !sameRule(armed.rule, policy.rule);
82
+ }
83
+ /**
84
+ * 把原生侧对副本的编辑并入策略并落盘,返回更新后的策略。
85
+ * 编辑会重排副本时点,所以同时把 `nextScheduledAt` 对齐到副本,避免
86
+ * 「编辑造成的时点变化」被误判成一次投递而触发无意义轮转。
87
+ */
88
+ adoptCopyEdits(policy, armed) {
89
+ const adopted = {
90
+ ...policy,
91
+ rule: armed.rule,
92
+ title: armed.title,
93
+ prompt: armed.prompt,
94
+ // 必须一并回传给调用方:否则调用方手里的策略仍是旧时点,
95
+ // 「编辑重排时点」会被当成一次投递而触发无意义轮转。
96
+ nextScheduledAt: armed.scheduledAt,
97
+ updatedAt: this.ports.now(),
98
+ };
99
+ this.store.upsert(adopted);
100
+ this.ports.log(`schedule-mode: adopted native-side edits for ${policy.logicalId}`);
101
+ return adopted;
102
+ }
103
+ /**
104
+ * 合并视图:`new` 模式的一条逻辑任务 + 其余原生任务。
105
+ * 原生 schedule 不可用时返回 `available: false`(面板给出提示),不抛错。
106
+ */
107
+ async list() {
108
+ let tasks;
109
+ try {
110
+ tasks = await this.nativeTasks();
111
+ }
112
+ catch (error) {
113
+ this.ports.log('schedule-mode: native schedule catalog unavailable', error);
114
+ return { tasks: [], available: false };
115
+ }
116
+ let policies;
117
+ try {
118
+ policies = this.store.list();
119
+ }
120
+ catch (error) {
121
+ this.ports.log('schedule-mode: policy store unavailable', error);
122
+ return { tasks: [], available: false };
123
+ }
124
+ // 读路径自愈:策略认为有副本、但目录里找不到 → 先收敛一次,再按最新状态返回。
125
+ // 这样「用户在原生页把任务删光」能立刻反映到工具与接口,而不是一直停在 active。
126
+ if (policies.some(policy => policy.active && policy.transition === undefined && policy.armedTaskId !== undefined
127
+ && !tasks.some(task => task.id === policy.armedTaskId))) {
128
+ await this.reconcile();
129
+ policies = this.store.list();
130
+ try {
131
+ tasks = await this.nativeTasks();
132
+ }
133
+ catch {
134
+ /* 二次读取失败:沿用上面的快照,照常返回 */
135
+ }
136
+ }
137
+ const owned = new Set();
138
+ for (const policy of policies) {
139
+ owned.add(policy.logicalId);
140
+ for (const ref of policy.transition?.deleteTasks ?? [])
141
+ owned.add(ref.id);
142
+ if (policy.transition?.created !== undefined)
143
+ owned.add(policy.transition.created.id);
144
+ if (policy.armedTaskId !== undefined)
145
+ owned.add(policy.armedTaskId);
146
+ }
147
+ // 用户在原生页删掉的任务已退役(策略仅留作历史),不再出现在面板里。
148
+ const rows = policies
149
+ .filter(policy => policy.endedReason !== 'deleted')
150
+ .map(policy => this.viewForPolicy(policy, tasks));
151
+ for (const task of tasks) {
152
+ if (owned.has(task.id))
153
+ continue;
154
+ rows.push(this.viewForNative(task));
155
+ }
156
+ rows.sort((left, right) => (left.scheduledAt ?? '').localeCompare(right.scheduledAt ?? '') || left.title.localeCompare(right.title));
157
+ return { tasks: rows, available: true };
158
+ }
159
+ /** 读取一条逻辑任务的当前视图(找不到返回 undefined)。 */
160
+ async task(sessionId, id) {
161
+ const listed = await this.list();
162
+ return listed.tasks.find(task => task.sessionId === sessionId && task.id === id);
163
+ }
164
+ /**
165
+ * 切换运行目标。
166
+ * - `original`:撤下轮转副本并把任务还原到原会话(规则仍可挂时)。
167
+ * - `new`:把原任务轮转到一条新建运行会话上,原会话不再接收投递。
168
+ */
169
+ async setMode(sessionId, id, mode) {
170
+ if (sessionId === '' || id === '')
171
+ throw new ScheduleModeError('invalid-request', 'sessionId and id are required');
172
+ return this.serialize(async () => {
173
+ const tasks = await this.nativeTasks();
174
+ // 已因用户在原生页删除而退役的策略视同不存在,不允许被切换复活。
175
+ const found = this.resolvePolicy(sessionId, id);
176
+ let policy = found?.endedReason === 'deleted' ? undefined : found;
177
+ if (policy?.transition !== undefined || policy?.rotationInFlight === true || (policy?.active === true
178
+ && (policy.armedTaskId === undefined || !tasks.some(task => task.id === policy?.armedTaskId)))) {
179
+ await this.reconcileOne(policy, tasks, tasks.length === 0);
180
+ policy = this.store.get(policy.key);
181
+ if (policy?.endedReason === 'deleted')
182
+ throw new ScheduleModeError('unknown-task', 'the run copy was deleted');
183
+ if (policy?.transition !== undefined)
184
+ throw new ScheduleModeError('recovery-required', policy.transition.reason ?? 'schedule transition needs recovery');
185
+ // Recovery can change the native row association. Never use the stale catalog below.
186
+ tasks.splice(0, tasks.length, ...await this.nativeTasks());
187
+ }
188
+ const logicalId = policy?.logicalId ?? id;
189
+ // 策略一旦确定,原会话以策略为准(调用方给的可能是运行会话)。
190
+ const sourceSessionId = policy?.sourceSessionId ?? sessionId;
191
+ let currentRow = policy?.armedTaskId === undefined
192
+ ? tasks.find(task => task.sessionId === sourceSessionId && task.id === logicalId)
193
+ : tasks.find(task => task.id === policy?.armedTaskId);
194
+ if (policy?.active && currentRow?.lastDelivery !== undefined
195
+ && (!isRecurringRule(policy.rule) || currentRow.lastDelivery.deliveredAt !== policy.lastDeliveredAt)) {
196
+ await this.reconcileOne(policy, tasks);
197
+ policy = this.store.get(policy.key);
198
+ tasks.splice(0, tasks.length, ...await this.nativeTasks());
199
+ currentRow = tasks.find(task => task.id === policy?.armedTaskId);
200
+ if (policy !== undefined && !isRecurringRule(policy.rule))
201
+ return this.viewForPolicy(policy, tasks);
202
+ if (policy?.transition !== undefined)
203
+ throw new ScheduleModeError('recovery-required', 'delivery reconciliation remains pending');
204
+ }
205
+ if (mode === 'original') {
206
+ if (policy === undefined || !policy.active) {
207
+ if (currentRow === undefined)
208
+ throw new ScheduleModeError('unknown-task', `no task ${logicalId} in session ${sourceSessionId}`);
209
+ return this.viewForNative(currentRow, policy);
210
+ }
211
+ return await this.disarm(policy, tasks);
212
+ }
213
+ if (policy !== undefined && policy.active && policy.armedTaskId !== undefined) {
214
+ return this.viewForPolicy(policy, tasks);
215
+ }
216
+ const rule = policy?.rule ?? currentRow?.rule;
217
+ const title = policy?.title ?? currentRow?.title;
218
+ const prompt = policy?.prompt ?? currentRow?.prompt;
219
+ if (rule === undefined || title === undefined || prompt === undefined) {
220
+ throw new ScheduleModeError('unknown-task', `no task ${logicalId} in session ${sourceSessionId}`);
221
+ }
222
+ if (currentRow !== undefined && currentRow.status !== 'active') {
223
+ throw new ScheduleModeError('task-ended', `task ${logicalId} is no longer active`);
224
+ }
225
+ const inspection = await this.inspect(sourceSessionId);
226
+ const header = policy !== undefined && (policy.cwd !== undefined || policy.agentPreset !== undefined)
227
+ ? { cwd: policy.cwd, agentPreset: policy.agentPreset }
228
+ : inspection;
229
+ // 旧策略里已经建好、但从未投递过的运行会话可以直接复用:它已经占了一轮空会话,
230
+ // 复用比再建一条更干净(重建副本时同理)。
231
+ const reusableRunSession = policy === undefined ? undefined : this.pendingRunSession(policy);
232
+ if (!ruleCanArm(rule, this.ports.now()))
233
+ throw new ScheduleModeError('task-ended', 'the task deadline has passed; the existing task was not removed');
234
+ const base = {
235
+ key: policyKey(sourceSessionId, logicalId),
236
+ sourceSessionId,
237
+ logicalId,
238
+ title,
239
+ prompt,
240
+ rule,
241
+ runs: policy?.runs ?? [],
242
+ active: true,
243
+ createdAt: policy?.createdAt ?? this.ports.now(),
244
+ updatedAt: this.ports.now(),
245
+ ...(reusableRunSession === undefined ? {} : { runSessionId: reusableRunSession }),
246
+ ...(header.cwd === undefined ? {} : { cwd: header.cwd }),
247
+ ...(header.agentPreset === undefined ? {} : { agentPreset: header.agentPreset }),
248
+ ...(policy?.lastDeliveredAt === undefined ? {} : { lastDeliveredAt: policy.lastDeliveredAt }),
249
+ };
250
+ const pending = this.store.upsert({ ...base, nextScheduledAt: currentRow?.scheduledAt,
251
+ transition: { kind: 'new', phase: 'deleting', deleteTasks: currentRow === undefined ? [] : [{ sessionId: currentRow.sessionId, id: currentRow.id }],
252
+ ...(reusableRunSession === undefined ? {} : { sessionId: reusableRunSession }) } });
253
+ await this.resumeTransition(pending);
254
+ return this.viewForPolicy(this.store.get(pending.key), await this.nativeTasks());
255
+ });
256
+ }
257
+ /** 删除一条逻辑任务(`new` 模式一并撤下轮转副本),返回是否删除成功。 */
258
+ async deleteTask(sessionId, id) {
259
+ if (sessionId === '' || id === '')
260
+ throw new ScheduleModeError('invalid-request', 'sessionId and id are required');
261
+ return this.serialize(async () => {
262
+ // 接受 (原会话, 逻辑 id) / (原会话, 副本 id) / (运行会话, 副本 id):原生页只看得到运行会话上的副本。
263
+ const policy = this.resolvePolicy(sessionId, id);
264
+ if (policy !== undefined) {
265
+ await this.beginCleanup(policy, 'delete');
266
+ return true;
267
+ }
268
+ const logicalId = id;
269
+ const row = (await this.nativeTasks()).find(task => task.sessionId === sessionId && task.id === logicalId);
270
+ if (row === undefined)
271
+ return false;
272
+ await this.ports.deleteTask(sessionId, logicalId);
273
+ return true;
274
+ });
275
+ }
276
+ /**
277
+ * 与原生目录对齐的幂等收敛:记录已完成的新会话运行,并把副本轮转到下一条会话。
278
+ * 由 `schedule/changed`、Host 启动、以及面板显式刷新触发。
279
+ */
280
+ async reconcile() {
281
+ return this.serialize(async () => {
282
+ let policies;
283
+ try {
284
+ policies = this.store.list().filter(policy => policy.active || policy.transition !== undefined);
285
+ }
286
+ catch (error) {
287
+ this.ports.log('schedule-mode: policy store invalid; refusing reconcile', error);
288
+ return;
289
+ }
290
+ if (policies.length === 0)
291
+ return;
292
+ // 目录读不到时整体跳过:把「读不到」当成「副本被删」会误退役策略。
293
+ let tasks;
294
+ try {
295
+ tasks = await this.nativeTasks();
296
+ }
297
+ catch (error) {
298
+ this.ports.log('schedule-mode: native schedule catalog unavailable; skipping reconcile', error);
299
+ return;
300
+ }
301
+ // 目录整表为空多半是原生 catalog 启动瞬间的空表:此时不据此退役任何策略(重建仍照常)。
302
+ const catalogEmpty = tasks.length === 0;
303
+ for (const policy of policies) {
304
+ try {
305
+ await this.reconcileOne(policy, tasks, catalogEmpty);
306
+ }
307
+ catch (error) {
308
+ this.ports.log(`schedule-mode: reconcile failed for ${policy.key}`, error);
309
+ }
310
+ }
311
+ });
312
+ }
313
+ /** 原会话被归档/停止时撤下轮转副本(原生只清理绑定在原会话上的任务)。 */
314
+ async stopSession(sourceSessionId) {
315
+ return this.serialize(async () => {
316
+ const policies = this.store.list().filter(policy => (policy.active || policy.transition !== undefined) && policy.sourceSessionId === sourceSessionId);
317
+ const errors = [];
318
+ for (const policy of policies) {
319
+ try {
320
+ await this.beginCleanup(policy, 'stop');
321
+ }
322
+ catch (error) {
323
+ errors.push(error);
324
+ }
325
+ }
326
+ if (errors.length > 0)
327
+ throw new AggregateError(errors, 'schedule-mode stop cleanup remains pending');
328
+ }, true);
329
+ }
330
+ /**
331
+ * 解析策略:面板与工具给的是 (原会话, 逻辑 id);原生页给的是副本 id,且副本挂在
332
+ * 运行会话上,所以副本 id 不再要求会话与原会话一致,但**必须**是这个策略自己的
333
+ * 会话(原会话或运行会话)。任务 id 不是凭证:外部只要枚举到 id 就能凭它操作别的
334
+ * 会话的任务,因此这条回退只在调用方属于同一策略时生效。
335
+ */
336
+ resolvePolicy(sessionId, id) {
337
+ const direct = this.store.find(id, sessionId);
338
+ if (direct !== undefined)
339
+ return direct;
340
+ const byArmed = this.store.findArmed(id);
341
+ if (byArmed !== undefined) {
342
+ if (byArmed.sourceSessionId === sessionId || byArmed.runSessionId === sessionId)
343
+ return byArmed;
344
+ return undefined;
345
+ }
346
+ return this.store.list().find(policy => {
347
+ if (policy.logicalId === id && (policy.runSessionId === sessionId || policy.transition?.sessionId === sessionId))
348
+ return true;
349
+ const refs = [...(policy.transition?.deleteTasks ?? []), ...(policy.transition?.created === undefined ? [] : [policy.transition.created])];
350
+ return refs.some(ref => ref.id === id && (sessionId === policy.sourceSessionId || sessionId === ref.sessionId));
351
+ });
352
+ }
353
+ /**
354
+ * 空目录二次确认:再读一次,只有确实仍为空才算「原生侧被删光了」。
355
+ * 读失败视为未确认(宁可暂时保留策略,也不误退役一个还在跑的任务)。
356
+ */
357
+ async catalogConfirmedEmpty() {
358
+ try {
359
+ const again = await this.nativeTasks();
360
+ return again.length === 0;
361
+ }
362
+ catch (error) {
363
+ this.ports.log('schedule-mode: catalog recheck failed; treating the empty read as unconfirmed', error);
364
+ return false;
365
+ }
366
+ }
367
+ /**
368
+ * 待运行会话:已经建好、但还没有投递过的那条运行会话(`runSessionId` 尚未出现在
369
+ * `runs` 里)。它已经占用了一轮 `#N`,重建副本时复用它可以避免同一轮留下两条同名
370
+ * 会话、以及被弃用的那条以空会话身份留在会话列表里。已投递过的会话不算待运行会话。
371
+ */
372
+ pendingRunSession(policy) {
373
+ const runSessionId = policy.runSessionId;
374
+ if (runSessionId === undefined)
375
+ return undefined;
376
+ return policy.runs.some(run => run.sessionId === runSessionId) ? undefined : runSessionId;
377
+ }
378
+ /** 投递已确认的运行会话挂回工作区(待运行期间它一直留在工作区之外)。 */
379
+ async attachRunSession(sessionId, cwd) {
380
+ if (this.ports.attachSession === undefined)
381
+ return;
382
+ await this.ports.attachSession(sessionId, cwd)
383
+ .catch(error => this.ports.log('schedule-mode: attaching the delivered run session failed', error));
384
+ }
385
+ async reconcileOne(policy, tasks, catalogEmpty = false) {
386
+ if (policy.transition !== undefined) {
387
+ await this.resumeTransition(policy);
388
+ return;
389
+ }
390
+ // v1 has no reliable intent/create-result association. Even a missing row can
391
+ // mean create succeeded before its ID was saved. Never guess or recreate it.
392
+ if (policy.rotationInFlight === true || policy.armedTaskId === undefined) {
393
+ this.blockRecovery(policy, 'legacy v1 interrupted transition has no reliable native create association');
394
+ return;
395
+ }
396
+ const armed = tasks.find(task => task.id === policy.armedTaskId);
397
+ if (armed === undefined) {
398
+ if (catalogEmpty && !(await this.catalogConfirmedEmpty()))
399
+ return;
400
+ this.store.upsert({ ...policy, active: false, endedReason: 'deleted', armedTaskId: undefined,
401
+ nextScheduledAt: undefined, updatedAt: this.ports.now() });
402
+ return;
403
+ }
404
+ // 原生侧(自动化任务页/原生工具)可能改过副本:轮转前先把改动并入策略,
405
+ // 否则下一轮会按策略快照重建、把这次修改覆盖掉。
406
+ if (this.isCopyEdited(policy, armed)) {
407
+ policy = this.adoptCopyEdits(policy, armed);
408
+ }
409
+ const receipt = armed.lastDelivery;
410
+ const isNewDelivery = receipt !== undefined
411
+ && (policy.lastDeliveredAt === undefined || receipt.deliveredAt > policy.lastDeliveredAt);
412
+ // 副本时点已推进即代表它投递过一次(原生在投递提交后推进时点)。
413
+ const advanced = policy.nextScheduledAt !== undefined && armed.scheduledAt !== policy.nextScheduledAt;
414
+ const completedOneShot = !isRecurringRule(policy.rule) && armed.status === 'inactive' && receipt !== undefined;
415
+ if (!isNewDelivery && !advanced && !completedOneShot)
416
+ return;
417
+ const alreadyRecorded = policy.lastDeliveredAt !== undefined
418
+ && receipt !== undefined
419
+ && policy.lastDeliveredAt === receipt.deliveredAt;
420
+ const runs = isNewDelivery
421
+ ? appendRun(policy.runs, {
422
+ scheduledAt: receipt.scheduledAt,
423
+ deliveredAt: receipt.deliveredAt,
424
+ sessionId: armed.sessionId,
425
+ taskId: armed.id,
426
+ }, this.historyLimit)
427
+ : (alreadyRecorded
428
+ ? [...policy.runs]
429
+ : appendRun(policy.runs, {
430
+ scheduledAt: policy.nextScheduledAt ?? armed.scheduledAt,
431
+ deliveredAt: receipt?.deliveredAt ?? new Date(this.ports.now()).toISOString(),
432
+ sessionId: armed.sessionId,
433
+ taskId: armed.id,
434
+ }, this.historyLimit));
435
+ const lastDeliveredAt = receipt?.deliveredAt ?? policy.lastDeliveredAt;
436
+ // 投递已确认:这条运行会话从此是真实对话,挂回工作区;待运行期间它一直不挂。
437
+ await this.attachRunSession(armed.sessionId, policy.cwd);
438
+ const pending = this.store.upsert({ ...policy, runs,
439
+ ...(lastDeliveredAt === undefined ? {} : { lastDeliveredAt }),
440
+ rotationInFlight: undefined,
441
+ transition: { kind: armed.status === 'active' ? 'rotate' : 'complete', phase: 'deleting',
442
+ deleteTasks: [{ sessionId: armed.sessionId, id: armed.id }] }, updatedAt: this.ports.now() });
443
+ await this.resumeTransition(pending);
444
+ }
445
+ blockRecovery(policy, reason) {
446
+ this.store.upsert({ ...policy, transition: { ...(policy.transition ?? { kind: 'new', deleteTasks: [] }),
447
+ phase: 'recovery-required', reason }, updatedAt: this.ports.now() });
448
+ this.ports.log(`schedule-mode: recovery required for ${policy.key}: ${reason}`);
449
+ }
450
+ /** Write-ahead journal driver. Only exact saved row IDs may be deleted/adopted. */
451
+ async resumeTransition(initial) {
452
+ this.assertActive();
453
+ let policy = initial;
454
+ let transition = policy.transition;
455
+ const save = (next) => {
456
+ policy = this.store.upsert({ ...policy, transition: next, updatedAt: this.ports.now() });
457
+ transition = next;
458
+ };
459
+ if (transition.phase === 'recovery-required')
460
+ return;
461
+ if (transition.phase === 'creating-session' || transition.phase === 'creating-task') {
462
+ this.blockRecovery(policy, `${transition.phase}: external create outcome is unknown; automatic retry disabled`);
463
+ return;
464
+ }
465
+ const cleanup = transition.kind === 'stop' || transition.kind === 'delete' || transition.kind === 'complete';
466
+ const requireFutureDeadline = () => {
467
+ if (cleanup || ruleCanArm(policy.rule, this.ports.now()))
468
+ return;
469
+ const reason = 'task deadline passed during transition; delivery outcome is unknown; automatic recreation disabled';
470
+ this.blockRecovery(policy, reason);
471
+ throw new ScheduleModeError('recovery-required', reason);
472
+ };
473
+ if (transition.phase === 'deleting') {
474
+ // A failed catalog is not an empty catalog. Keep every cleanup association.
475
+ const tasks = await this.nativeTasks();
476
+ if (tasks.length === 0 && transition.deleteTasks.length > 0 && !(await this.catalogConfirmedEmpty()))
477
+ return;
478
+ const deleted = new Set();
479
+ for (const ref of transition.deleteTasks) {
480
+ const key = policyKey(ref.sessionId, ref.id);
481
+ if (deleted.has(key))
482
+ continue;
483
+ deleted.add(key);
484
+ if (tasks.some(task => task.id === ref.id && task.sessionId === ref.sessionId)) {
485
+ requireFutureDeadline();
486
+ if (!cleanup)
487
+ await this.inspect(policy.sourceSessionId);
488
+ this.assertActive();
489
+ const snapshot = tasks.find(task => task.id === ref.id && task.sessionId === ref.sessionId);
490
+ await this.ports.deleteTask(ref.sessionId, ref.id);
491
+ this.assertActive();
492
+ // The native delete port returns no delivery receipt/CAS token. If its
493
+ // scheduled instant passed during deletion, an unseen delivery may have
494
+ // committed: keep the journal rather than replaying or inventing runs.
495
+ if (!cleanup && Number.isFinite(Date.parse(snapshot.scheduledAt))
496
+ && this.ports.now() >= Date.parse(snapshot.scheduledAt)) {
497
+ const reason = 'task deadline passed during transition; delivery outcome is unknown; automatic recreation disabled';
498
+ this.blockRecovery(policy, reason);
499
+ throw new ScheduleModeError('recovery-required', reason);
500
+ }
501
+ }
502
+ }
503
+ save({ ...transition, phase: 'prepare', deleteTasks: [] });
504
+ }
505
+ if (cleanup) {
506
+ if (transition.kind === 'delete') {
507
+ this.store.remove(policy.key);
508
+ return;
509
+ }
510
+ this.store.upsert({ ...policy, transition: undefined, rotationInFlight: undefined, active: false,
511
+ endedReason: transition.kind === 'complete' ? 'completed' : 'ended', armedTaskId: undefined,
512
+ nextScheduledAt: undefined, updatedAt: this.ports.now() });
513
+ return;
514
+ }
515
+ if (transition.phase === 'prepare') {
516
+ this.assertActive();
517
+ requireFutureDeadline();
518
+ let sessionId = transition.kind === 'original' ? policy.sourceSessionId : transition.sessionId;
519
+ if (sessionId === undefined) {
520
+ await this.inspect(policy.sourceSessionId);
521
+ this.assertActive();
522
+ save({ ...transition, phase: 'creating-session' });
523
+ sessionId = await this.ports.createSession({
524
+ ...(policy.cwd === undefined ? {} : { cwd: policy.cwd }),
525
+ ...(policy.agentPreset === undefined ? {} : { agentPreset: policy.agentPreset }),
526
+ });
527
+ // A crash or failed save here is ambiguous too: do not create another empty session.
528
+ if (typeof sessionId !== 'string' || sessionId.trim() === '') {
529
+ this.blockRecovery(policy, 'session creation returned an invalid identity');
530
+ throw new ScheduleModeError('recovery-required', 'session creation identity is unknown');
531
+ }
532
+ save({ ...transition, phase: 'prepare', sessionId });
533
+ this.assertActive();
534
+ }
535
+ // Session creation can outlast a one-shot deadline too. Never replay a possibly delivered reminder.
536
+ requireFutureDeadline();
537
+ await this.inspect(policy.sourceSessionId);
538
+ this.assertActive();
539
+ save({ ...transition, phase: 'creating-task', sessionId });
540
+ const created = await this.ports.createTask(sessionId, {
541
+ prompt: policy.prompt, title: policy.title, selector: timingArgs(policy.rule),
542
+ });
543
+ // Record the returned ID before any optional effect or final mode commit.
544
+ if (typeof created.id !== 'string' || created.id.trim() === '' || !Number.isFinite(Date.parse(created.scheduledAt))) {
545
+ this.blockRecovery(policy, 'task creation returned an invalid identity or scheduled instant');
546
+ throw new ScheduleModeError('recovery-required', 'task creation identity is unknown');
547
+ }
548
+ save({ ...transition, phase: 'created', created: { sessionId, ...created } });
549
+ this.assertActive();
550
+ }
551
+ if (transition.phase === 'created') {
552
+ const created = transition.created;
553
+ let tasks;
554
+ try {
555
+ tasks = await this.nativeTasks();
556
+ }
557
+ catch (error) {
558
+ if (error instanceof Error && /identity is ambiguous/.test(error.message))
559
+ this.blockRecovery(policy, 'native catalog identity is ambiguous after task creation');
560
+ throw error;
561
+ }
562
+ if (tasks.filter(task => task.id === created.id).length > 1) {
563
+ this.blockRecovery(policy, 'native catalog returned a duplicate task identity');
564
+ throw new ScheduleModeError('recovery-required', 'native task identity is ambiguous');
565
+ }
566
+ if (!tasks.some(task => task.id === created.id && task.sessionId === created.sessionId)) {
567
+ if (tasks.length === 0 && !(await this.catalogConfirmedEmpty()))
568
+ return;
569
+ // A user deleting the newly created copy means stop, not rebuild.
570
+ this.store.upsert({ ...policy, active: false, endedReason: 'deleted', transition: undefined,
571
+ rotationInFlight: undefined, armedTaskId: undefined, nextScheduledAt: undefined, updatedAt: this.ports.now() });
572
+ return;
573
+ }
574
+ this.assertActive();
575
+ const isNew = transition.kind !== 'original';
576
+ this.store.upsert({ ...policy, active: isNew, endedReason: isNew ? undefined : 'ended',
577
+ transition: undefined, rotationInFlight: undefined, armedTaskId: created.id,
578
+ ...(isNew ? { runSessionId: created.sessionId } : {}), nextScheduledAt: created.scheduledAt,
579
+ updatedAt: this.ports.now() });
580
+ if (isNew && this.ports.renameSession !== undefined) {
581
+ await this.ports.renameSession(created.sessionId, runSessionTitle(policy.title, policy.runs.length + 1))
582
+ .catch(error => this.ports.log('schedule-mode: run session rename failed', error));
583
+ }
584
+ }
585
+ }
586
+ /** Persist cancellation before reading the directory, including during a failed switch. */
587
+ async beginCleanup(policy, kind) {
588
+ const prior = policy.transition;
589
+ // Unknown create outcomes cannot be safely forgotten, including after stop.
590
+ if (prior?.phase === 'creating-session' || prior?.phase === 'creating-task' || prior?.phase === 'recovery-required'
591
+ || policy.rotationInFlight === true || (policy.active && policy.armedTaskId === undefined && prior === undefined)) {
592
+ this.blockRecovery(policy, `${kind} requested, but an external create outcome is unknown; manual recovery required`);
593
+ throw new ScheduleModeError('recovery-required', `${kind} is not confirmed: external create outcome unknown`);
594
+ }
595
+ const refs = [...(prior?.deleteTasks ?? [])];
596
+ if (policy.armedTaskId !== undefined)
597
+ refs.push({ id: policy.armedTaskId, sessionId: policy.active ? policy.runSessionId ?? policy.sourceSessionId : policy.sourceSessionId });
598
+ if (prior?.created !== undefined)
599
+ refs.push(prior.created);
600
+ const pending = this.store.upsert({ ...policy, transition: { kind, phase: 'deleting', deleteTasks: refs }, updatedAt: this.ports.now() });
601
+ await this.resumeTransition(pending);
602
+ if (this.store.get(policy.key)?.transition !== undefined) {
603
+ throw new ScheduleModeError('recovery-required', `${kind} cleanup is still pending catalog confirmation`);
604
+ }
605
+ }
606
+ /** Restore through the same journal as rotation; recovery retains the requested direction. */
607
+ async disarm(policy, tasks) {
608
+ const armed = tasks.find(task => task.id === policy.armedTaskId);
609
+ if (armed === undefined) {
610
+ this.store.upsert({ ...policy, active: false, endedReason: 'deleted', armedTaskId: undefined, nextScheduledAt: undefined, updatedAt: this.ports.now() });
611
+ throw new ScheduleModeError('unknown-task', 'the run copy was deleted');
612
+ }
613
+ if (this.isCopyEdited(policy, armed))
614
+ policy = this.adoptCopyEdits(policy, armed);
615
+ await this.inspect(policy.sourceSessionId);
616
+ this.assertActive();
617
+ if (!ruleCanArm(policy.rule, this.ports.now()))
618
+ throw new ScheduleModeError('task-ended', 'the task deadline has passed; the existing task was not removed');
619
+ const pending = this.store.upsert({ ...policy, transition: { kind: 'original', phase: 'deleting',
620
+ deleteTasks: [{ id: armed.id, sessionId: armed.sessionId }] }, updatedAt: this.ports.now() });
621
+ await this.resumeTransition(pending);
622
+ return this.viewForPolicy(this.store.get(policy.key), await this.nativeTasks());
623
+ }
624
+ async inspect(sessionId) {
625
+ this.assertActive();
626
+ return this.ports.inspectSession(sessionId);
627
+ }
628
+ viewForNative(task, policy) {
629
+ return {
630
+ sessionId: task.sessionId,
631
+ id: task.id,
632
+ title: task.title,
633
+ prompt: task.prompt,
634
+ mode: 'original',
635
+ status: task.status === 'inactive' ? 'inactive' : 'active',
636
+ rule: task.rule,
637
+ ...(task.scheduledAt === '' ? {} : { scheduledAt: task.scheduledAt }),
638
+ ...(policy?.runSessionId === undefined ? {} : { runSessionId: policy.runSessionId }),
639
+ ...(policy?.lastDeliveredAt === undefined ? {} : { lastDeliveredAt: policy.lastDeliveredAt }),
640
+ runs: policy?.runs ?? [],
641
+ updatedAt: policy?.updatedAt ?? this.ports.now(),
642
+ };
643
+ }
644
+ /**
645
+ * 策略视图。逻辑 id 恒为 `logicalId`(面板据此稳定定位),`activeTaskId`
646
+ * 指向当前真正挂在原生调度上的那一行;策略停止后任务回到 `original`,
647
+ * 状态改由还原出来的原生行决定。
648
+ */
649
+ viewForPolicy(policy, tasks) {
650
+ const armed = policy.armedTaskId === undefined ? undefined : tasks.find(task => task.id === policy.armedTaskId);
651
+ const status = policy.transition !== undefined ? 'inactive' : !policy.active
652
+ ? (armed === undefined ? 'ended' : armed.status)
653
+ : armed?.status === 'inactive' ? 'inactive' : 'active';
654
+ const scheduledAt = armed?.scheduledAt ?? policy.nextScheduledAt;
655
+ return {
656
+ sessionId: policy.sourceSessionId,
657
+ id: policy.logicalId,
658
+ ...(armed === undefined ? {} : { activeTaskId: armed.id }),
659
+ title: policy.title,
660
+ prompt: policy.prompt,
661
+ mode: policy.active ? 'new' : 'original',
662
+ status,
663
+ rule: policy.rule,
664
+ ...(scheduledAt === undefined || scheduledAt === '' ? {} : { scheduledAt }),
665
+ ...(policy.runSessionId === undefined ? {} : { runSessionId: policy.runSessionId }),
666
+ ...(policy.lastDeliveredAt === undefined ? {} : { lastDeliveredAt: policy.lastDeliveredAt }),
667
+ runs: policy.runs,
668
+ ...(policy.transition === undefined ? {} : { recovery: { phase: policy.transition.phase, reason: policy.transition.reason } }),
669
+ updatedAt: policy.updatedAt,
670
+ };
671
+ }
672
+ }