@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.
- package/LICENSE +202 -0
- package/README.i18n.yaml +6 -0
- package/README.md +201 -2
- package/README.zh.md +202 -0
- package/cordis.patch.yml +59 -0
- package/lib/client.js +25413 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +20024 -0
- package/lib/invariant.js +6 -0
- package/lib/types/client/compat.d.ts +29 -0
- package/lib/types/client/compat.d.ts.map +1 -0
- package/lib/types/client/compat.js +69 -0
- package/lib/types/client/conversation/git-branch.d.ts +13 -0
- package/lib/types/client/conversation/git-branch.d.ts.map +1 -0
- package/lib/types/client/conversation/git-branch.js +121 -0
- package/lib/types/client/conversation/git-graph/api.d.ts +42 -0
- package/lib/types/client/conversation/git-graph/api.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/api.js +72 -0
- package/lib/types/client/conversation/git-graph/branch-chip.d.ts +47 -0
- package/lib/types/client/conversation/git-graph/branch-chip.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/branch-chip.js +268 -0
- package/lib/types/client/conversation/git-graph/branch-popover.d.ts +32 -0
- package/lib/types/client/conversation/git-graph/branch-popover.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/branch-popover.js +108 -0
- package/lib/types/client/conversation/git-graph/chip.d.ts +24 -0
- package/lib/types/client/conversation/git-graph/chip.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/chip.js +15 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts +30 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.js +52 -0
- package/lib/types/client/conversation/git-graph/error-copy.d.ts +17 -0
- package/lib/types/client/conversation/git-graph/error-copy.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/error-copy.js +44 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.d.ts +21 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.js +112 -0
- package/lib/types/client/conversation/git-graph/hero-seat.d.ts +53 -0
- package/lib/types/client/conversation/git-graph/hero-seat.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/hero-seat.js +54 -0
- package/lib/types/client/conversation/git-graph/locales.d.ts +88 -0
- package/lib/types/client/conversation/git-graph/locales.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/locales.js +85 -0
- package/lib/types/client/conversation/git-graph/sse-leader.d.ts +37 -0
- package/lib/types/client/conversation/git-graph/sse-leader.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/sse-leader.js +101 -0
- package/lib/types/client/conversation/index.d.ts +43 -0
- package/lib/types/client/conversation/index.d.ts.map +1 -0
- package/lib/types/client/conversation/index.js +39 -0
- package/lib/types/client/conversation/selector-context.d.ts +12 -0
- package/lib/types/client/conversation/selector-context.d.ts.map +1 -0
- package/lib/types/client/conversation/selector-context.js +11 -0
- package/lib/types/client/conversation/session-lane-chip.d.ts +72 -0
- package/lib/types/client/conversation/session-lane-chip.d.ts.map +1 -0
- package/lib/types/client/conversation/session-lane-chip.js +163 -0
- package/lib/types/client/conversation/session-lane-locales.d.ts +22 -0
- package/lib/types/client/conversation/session-lane-locales.d.ts.map +1 -0
- package/lib/types/client/conversation/session-lane-locales.js +29 -0
- package/lib/types/client/conversation/subagent-model-dom.d.ts +16 -0
- package/lib/types/client/conversation/subagent-model-dom.d.ts.map +1 -0
- package/lib/types/client/conversation/subagent-model-dom.js +138 -0
- package/lib/types/client/conversation/subagent-model.d.ts +17 -0
- package/lib/types/client/conversation/subagent-model.d.ts.map +1 -0
- package/lib/types/client/conversation/subagent-model.js +156 -0
- package/lib/types/client/conversation/worktree/api.d.ts +97 -0
- package/lib/types/client/conversation/worktree/api.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/api.js +239 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts +35 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.js +55 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts +27 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.js +49 -0
- package/lib/types/client/conversation/worktree/lane-binding.d.ts +46 -0
- package/lib/types/client/conversation/worktree/lane-binding.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-binding.js +60 -0
- package/lib/types/client/conversation/worktree/lane-menu.d.ts +51 -0
- package/lib/types/client/conversation/worktree/lane-menu.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-menu.js +140 -0
- package/lib/types/client/conversation/worktree/lane-open.d.ts +126 -0
- package/lib/types/client/conversation/worktree/lane-open.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-open.js +140 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts +79 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.js +116 -0
- package/lib/types/client/conversation/worktree/lifecycle.d.ts +29 -0
- package/lib/types/client/conversation/worktree/lifecycle.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lifecycle.js +67 -0
- package/lib/types/client/conversation/worktree/locales.d.ts +58 -0
- package/lib/types/client/conversation/worktree/locales.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/locales.js +86 -0
- package/lib/types/client/conversation/worktree/semantic.d.ts +11 -0
- package/lib/types/client/conversation/worktree/semantic.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/semantic.js +10 -0
- package/lib/types/client/index.d.ts +14 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +45 -0
- package/lib/types/client/lark-inbox/i18n.d.ts +63 -0
- package/lib/types/client/lark-inbox/i18n.d.ts.map +1 -0
- package/lib/types/client/lark-inbox/i18n.js +119 -0
- package/lib/types/client/lark-inbox/wizard.d.ts +19 -0
- package/lib/types/client/lark-inbox/wizard.d.ts.map +1 -0
- package/lib/types/client/lark-inbox/wizard.js +158 -0
- package/lib/types/client/notify/i18n.d.ts +47 -0
- package/lib/types/client/notify/i18n.d.ts.map +1 -0
- package/lib/types/client/notify/i18n.js +87 -0
- package/lib/types/client/settings/family-scope.d.ts +23 -0
- package/lib/types/client/settings/family-scope.d.ts.map +1 -0
- package/lib/types/client/settings/family-scope.js +30 -0
- package/lib/types/client/settings/lark-inbox.d.ts +73 -0
- package/lib/types/client/settings/lark-inbox.d.ts.map +1 -0
- package/lib/types/client/settings/lark-inbox.js +144 -0
- package/lib/types/client/settings/notify.d.ts +66 -0
- package/lib/types/client/settings/notify.d.ts.map +1 -0
- package/lib/types/client/settings/notify.js +139 -0
- package/lib/types/client/settings/primitives-0.2.d.ts +137 -0
- package/lib/types/client/settings/primitives-0.2.d.ts.map +1 -0
- package/lib/types/client/settings/primitives-0.2.js +8 -0
- package/lib/types/client/sidebar/RenderBoundary.d.ts +17 -0
- package/lib/types/client/sidebar/RenderBoundary.d.ts.map +1 -0
- package/lib/types/client/sidebar/RenderBoundary.js +18 -0
- package/lib/types/client/sidebar/agent-browser.d.ts +9 -0
- package/lib/types/client/sidebar/agent-browser.d.ts.map +1 -0
- package/lib/types/client/sidebar/agent-browser.js +102 -0
- package/lib/types/client/sidebar/diff-view.d.ts +58 -0
- package/lib/types/client/sidebar/diff-view.d.ts.map +1 -0
- package/lib/types/client/sidebar/diff-view.js +223 -0
- package/lib/types/client/sidebar/git-workbench.d.ts +41 -0
- package/lib/types/client/sidebar/git-workbench.d.ts.map +1 -0
- package/lib/types/client/sidebar/git-workbench.js +480 -0
- package/lib/types/client/sidebar/icons.d.ts +9 -0
- package/lib/types/client/sidebar/icons.d.ts.map +1 -0
- package/lib/types/client/sidebar/icons.js +6 -0
- package/lib/types/client/sidebar/index.d.ts +19 -0
- package/lib/types/client/sidebar/index.d.ts.map +1 -0
- package/lib/types/client/sidebar/index.js +12 -0
- package/lib/types/client/sidebar/native-panels.d.ts +19 -0
- package/lib/types/client/sidebar/native-panels.d.ts.map +1 -0
- package/lib/types/client/sidebar/native-panels.js +103 -0
- package/lib/types/client/sidebar/page-shell.d.ts +52 -0
- package/lib/types/client/sidebar/page-shell.d.ts.map +1 -0
- package/lib/types/client/sidebar/page-shell.js +18 -0
- package/lib/types/client/sidebar/panels/memoir/api.d.ts +258 -0
- package/lib/types/client/sidebar/panels/memoir/api.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/api.js +135 -0
- package/lib/types/client/sidebar/panels/memoir/controller.d.ts +22 -0
- package/lib/types/client/sidebar/panels/memoir/controller.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/controller.js +38 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.d.ts +80 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.js +96 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.d.ts +21 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.js +288 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts +11 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.js +37 -0
- package/lib/types/client/sidebar/panels/memoir/panel.d.ts +26 -0
- package/lib/types/client/sidebar/panels/memoir/panel.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/panel.js +423 -0
- package/lib/types/client/sidebar/panels/memoir/styles.d.ts +22 -0
- package/lib/types/client/sidebar/panels/memoir/styles.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/styles.js +774 -0
- package/lib/types/client/sidebar/panels/memoir/types.d.ts +7 -0
- package/lib/types/client/sidebar/panels/memoir/types.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/types.js +5 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts +8 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.js +53 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts +13 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.js +110 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts +26 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.js +175 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts +14 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.js +34 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts +18 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.js +207 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts +8 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.js +168 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts +18 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.js +161 -0
- package/lib/types/client/sidebar/panels/ssh/api.d.ts +80 -0
- package/lib/types/client/sidebar/panels/ssh/api.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/api.js +333 -0
- package/lib/types/client/sidebar/panels/ssh/controller.d.ts +23 -0
- package/lib/types/client/sidebar/panels/ssh/controller.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/controller.js +41 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.d.ts +44 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.js +53 -0
- package/lib/types/client/sidebar/panels/ssh/locales.d.ts +155 -0
- package/lib/types/client/sidebar/panels/ssh/locales.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/locales.js +312 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts +3 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.js +2 -0
- package/lib/types/client/sidebar/right-pane-i18n.d.ts +121 -0
- package/lib/types/client/sidebar/right-pane-i18n.d.ts.map +1 -0
- package/lib/types/client/sidebar/right-pane-i18n.js +239 -0
- package/lib/types/client/sidebar/right-pane.d.ts +27 -0
- package/lib/types/client/sidebar/right-pane.d.ts.map +1 -0
- package/lib/types/client/sidebar/right-pane.js +112 -0
- package/lib/types/client/sidebar/scope.d.ts +17 -0
- package/lib/types/client/sidebar/scope.d.ts.map +1 -0
- package/lib/types/client/sidebar/scope.js +41 -0
- package/lib/types/client/trust.d.ts +78 -0
- package/lib/types/client/trust.d.ts.map +1 -0
- package/lib/types/client/trust.js +130 -0
- package/lib/types/client/ui-icons.d.ts +19 -0
- package/lib/types/client/ui-icons.d.ts.map +1 -0
- package/lib/types/client/ui-icons.js +33 -0
- package/lib/types/core/git-graph/commands.d.ts +36 -0
- package/lib/types/core/git-graph/commands.d.ts.map +1 -0
- package/lib/types/core/git-graph/commands.js +122 -0
- package/lib/types/core/git-graph/protocol.d.ts +104 -0
- package/lib/types/core/git-graph/protocol.d.ts.map +1 -0
- package/lib/types/core/git-graph/protocol.js +142 -0
- package/lib/types/core/index.d.ts +3 -0
- package/lib/types/core/index.d.ts.map +1 -0
- package/lib/types/core/index.js +2 -0
- package/lib/types/core/lark-inbox/gating.d.ts +21 -0
- package/lib/types/core/lark-inbox/gating.d.ts.map +1 -0
- package/lib/types/core/lark-inbox/gating.js +17 -0
- package/lib/types/core/lark-inbox/queue.d.ts +27 -0
- package/lib/types/core/lark-inbox/queue.d.ts.map +1 -0
- package/lib/types/core/lark-inbox/queue.js +78 -0
- package/lib/types/core/memoir/protocol.d.ts +42 -0
- package/lib/types/core/memoir/protocol.d.ts.map +1 -0
- package/lib/types/core/memoir/protocol.js +8 -0
- package/lib/types/core/no-browser-auth/contract.d.ts +22 -0
- package/lib/types/core/no-browser-auth/contract.d.ts.map +1 -0
- package/lib/types/core/no-browser-auth/contract.js +9 -0
- package/lib/types/core/notify/contract.d.ts +133 -0
- package/lib/types/core/notify/contract.d.ts.map +1 -0
- package/lib/types/core/notify/contract.js +186 -0
- package/lib/types/core/notify/feed.d.ts +116 -0
- package/lib/types/core/notify/feed.d.ts.map +1 -0
- package/lib/types/core/notify/feed.js +214 -0
- package/lib/types/core/playwright-sessions/contracts.d.ts +98 -0
- package/lib/types/core/playwright-sessions/contracts.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/contracts.js +68 -0
- package/lib/types/core/playwright-sessions/control.d.ts +19 -0
- package/lib/types/core/playwright-sessions/control.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/control.js +9 -0
- package/lib/types/core/playwright-sessions/index.d.ts +4 -0
- package/lib/types/core/playwright-sessions/index.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/index.js +3 -0
- package/lib/types/core/playwright-sessions/names.d.ts +4 -0
- package/lib/types/core/playwright-sessions/names.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/names.js +84 -0
- package/lib/types/core/playwright-sessions/schema.d.ts +4 -0
- package/lib/types/core/playwright-sessions/schema.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/schema.js +90 -0
- package/lib/types/core/playwright-sessions/wire.d.ts +78 -0
- package/lib/types/core/playwright-sessions/wire.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/wire.js +103 -0
- package/lib/types/core/remote-access/paths.d.ts +19 -0
- package/lib/types/core/remote-access/paths.d.ts.map +1 -0
- package/lib/types/core/remote-access/paths.js +18 -0
- package/lib/types/core/remote-web-ui/security.d.ts +35 -0
- package/lib/types/core/remote-web-ui/security.d.ts.map +1 -0
- package/lib/types/core/remote-web-ui/security.js +146 -0
- package/lib/types/core/right-pane/protocol.d.ts +25 -0
- package/lib/types/core/right-pane/protocol.d.ts.map +1 -0
- package/lib/types/core/right-pane/protocol.js +91 -0
- package/lib/types/core/schedule-mode/index.d.ts +7 -0
- package/lib/types/core/schedule-mode/index.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/index.js +6 -0
- package/lib/types/core/schedule-mode/native.d.ts +35 -0
- package/lib/types/core/schedule-mode/native.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/native.js +82 -0
- package/lib/types/core/schedule-mode/types.d.ts +177 -0
- package/lib/types/core/schedule-mode/types.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/types.js +65 -0
- package/lib/types/core/schedule-mode/view.d.ts +62 -0
- package/lib/types/core/schedule-mode/view.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/view.js +4 -0
- package/lib/types/core/ssh/protocol.d.ts +215 -0
- package/lib/types/core/ssh/protocol.d.ts.map +1 -0
- package/lib/types/core/ssh/protocol.js +23 -0
- package/lib/types/core/subagent-model/badges.d.ts +73 -0
- package/lib/types/core/subagent-model/badges.d.ts.map +1 -0
- package/lib/types/core/subagent-model/badges.js +105 -0
- package/lib/types/core/subagent-model/model-resolver.d.ts +25 -0
- package/lib/types/core/subagent-model/model-resolver.d.ts.map +1 -0
- package/lib/types/core/subagent-model/model-resolver.js +60 -0
- package/lib/types/core/worktree/invariant.d.ts +62 -0
- package/lib/types/core/worktree/invariant.d.ts.map +1 -0
- package/lib/types/core/worktree/invariant.js +72 -0
- package/lib/types/core/worktree/manifest.d.ts +71 -0
- package/lib/types/core/worktree/manifest.d.ts.map +1 -0
- package/lib/types/core/worktree/manifest.js +98 -0
- package/lib/types/core/worktree/paths.d.ts +60 -0
- package/lib/types/core/worktree/paths.d.ts.map +1 -0
- package/lib/types/core/worktree/paths.js +118 -0
- package/lib/types/core/worktree/pr-create.d.ts +67 -0
- package/lib/types/core/worktree/pr-create.d.ts.map +1 -0
- package/lib/types/core/worktree/pr-create.js +118 -0
- package/lib/types/core/worktree/protocol.d.ts +7 -0
- package/lib/types/core/worktree/protocol.d.ts.map +1 -0
- package/lib/types/core/worktree/protocol.js +6 -0
- package/lib/types/core/worktree/types.d.ts +292 -0
- package/lib/types/core/worktree/types.d.ts.map +1 -0
- package/lib/types/core/worktree/types.js +14 -0
- package/lib/types/core/worktree/workspace-model.d.ts +56 -0
- package/lib/types/core/worktree/workspace-model.d.ts.map +1 -0
- package/lib/types/core/worktree/workspace-model.js +14 -0
- package/lib/types/host/services/access-trust/index.d.ts +54 -0
- package/lib/types/host/services/access-trust/index.d.ts.map +1 -0
- package/lib/types/host/services/access-trust/index.js +82 -0
- package/lib/types/host/services/access-trust/trust.d.ts +70 -0
- package/lib/types/host/services/access-trust/trust.d.ts.map +1 -0
- package/lib/types/host/services/access-trust/trust.js +187 -0
- package/lib/types/host/services/codex-bridge/bridge.d.ts +106 -0
- package/lib/types/host/services/codex-bridge/bridge.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/bridge.js +321 -0
- package/lib/types/host/services/codex-bridge/codex-auth.d.ts +108 -0
- package/lib/types/host/services/codex-bridge/codex-auth.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/codex-auth.js +241 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.d.ts +58 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.js +120 -0
- package/lib/types/host/services/codex-bridge/http.d.ts +43 -0
- package/lib/types/host/services/codex-bridge/http.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/http.js +92 -0
- package/lib/types/host/services/codex-bridge/index.d.ts +63 -0
- package/lib/types/host/services/codex-bridge/index.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/index.js +111 -0
- package/lib/types/host/services/codex-bridge/loopback.d.ts +25 -0
- package/lib/types/host/services/codex-bridge/loopback.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/loopback.js +68 -0
- package/lib/types/host/services/codex-bridge/routes.d.ts +31 -0
- package/lib/types/host/services/codex-bridge/routes.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/routes.js +126 -0
- package/lib/types/host/services/family-config.d.ts +71 -0
- package/lib/types/host/services/family-config.d.ts.map +1 -0
- package/lib/types/host/services/family-config.js +166 -0
- package/lib/types/host/services/family-namespaces.d.ts +24 -0
- package/lib/types/host/services/family-namespaces.d.ts.map +1 -0
- package/lib/types/host/services/family-namespaces.js +30 -0
- package/lib/types/host/services/git-graph/index.d.ts +6 -0
- package/lib/types/host/services/git-graph/index.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/index.js +7 -0
- package/lib/types/host/services/git-graph/routes.d.ts +4 -0
- package/lib/types/host/services/git-graph/routes.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/routes.js +241 -0
- package/lib/types/host/services/git-graph/service.d.ts +52 -0
- package/lib/types/host/services/git-graph/service.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/service.js +301 -0
- package/lib/types/host/services/index.d.ts +23 -0
- package/lib/types/host/services/index.d.ts.map +1 -0
- package/lib/types/host/services/index.js +80 -0
- package/lib/types/host/services/lark-inbox/config.d.ts +24 -0
- package/lib/types/host/services/lark-inbox/config.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/config.js +48 -0
- package/lib/types/host/services/lark-inbox/gateway.d.ts +53 -0
- package/lib/types/host/services/lark-inbox/gateway.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/gateway.js +171 -0
- package/lib/types/host/services/lark-inbox/host-routes.d.ts +22 -0
- package/lib/types/host/services/lark-inbox/host-routes.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/host-routes.js +146 -0
- package/lib/types/host/services/lark-inbox/inbox-store.d.ts +39 -0
- package/lib/types/host/services/lark-inbox/inbox-store.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/inbox-store.js +124 -0
- package/lib/types/host/services/lark-inbox/index.d.ts +26 -0
- package/lib/types/host/services/lark-inbox/index.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/index.js +135 -0
- package/lib/types/host/services/lark-inbox/tools.d.ts +7 -0
- package/lib/types/host/services/lark-inbox/tools.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/tools.js +119 -0
- package/lib/types/host/services/lark-inbox/wizard.d.ts +62 -0
- package/lib/types/host/services/lark-inbox/wizard.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/wizard.js +211 -0
- package/lib/types/host/services/lifecycle.d.ts +29 -0
- package/lib/types/host/services/lifecycle.d.ts.map +1 -0
- package/lib/types/host/services/lifecycle.js +93 -0
- package/lib/types/host/services/memoir/index.d.ts +40 -0
- package/lib/types/host/services/memoir/index.d.ts.map +1 -0
- package/lib/types/host/services/memoir/index.js +52 -0
- package/lib/types/host/services/memoir/routes.d.ts +30 -0
- package/lib/types/host/services/memoir/routes.d.ts.map +1 -0
- package/lib/types/host/services/memoir/routes.js +364 -0
- package/lib/types/host/services/memoir/settings.d.ts +27 -0
- package/lib/types/host/services/memoir/settings.d.ts.map +1 -0
- package/lib/types/host/services/memoir/settings.js +120 -0
- package/lib/types/host/services/memoir/store.d.ts +35 -0
- package/lib/types/host/services/memoir/store.d.ts.map +1 -0
- package/lib/types/host/services/memoir/store.js +124 -0
- package/lib/types/host/services/memoir/tools.d.ts +8 -0
- package/lib/types/host/services/memoir/tools.d.ts.map +1 -0
- package/lib/types/host/services/memoir/tools.js +154 -0
- package/lib/types/host/services/no-browser-auth/index.d.ts +25 -0
- package/lib/types/host/services/no-browser-auth/index.d.ts.map +1 -0
- package/lib/types/host/services/no-browser-auth/index.js +42 -0
- package/lib/types/host/services/notify/config.d.ts +105 -0
- package/lib/types/host/services/notify/config.d.ts.map +1 -0
- package/lib/types/host/services/notify/config.js +123 -0
- package/lib/types/host/services/notify/feishu-sender.d.ts +120 -0
- package/lib/types/host/services/notify/feishu-sender.d.ts.map +1 -0
- package/lib/types/host/services/notify/feishu-sender.js +186 -0
- package/lib/types/host/services/notify/host-routes.d.ts +69 -0
- package/lib/types/host/services/notify/host-routes.d.ts.map +1 -0
- package/lib/types/host/services/notify/host-routes.js +112 -0
- package/lib/types/host/services/notify/index.d.ts +80 -0
- package/lib/types/host/services/notify/index.d.ts.map +1 -0
- package/lib/types/host/services/notify/index.js +263 -0
- package/lib/types/host/services/playwright-sessions/child.d.ts +76 -0
- package/lib/types/host/services/playwright-sessions/child.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/child.js +197 -0
- package/lib/types/host/services/playwright-sessions/controller.d.ts +25 -0
- package/lib/types/host/services/playwright-sessions/controller.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/controller.js +104 -0
- package/lib/types/host/services/playwright-sessions/index.d.ts +6 -0
- package/lib/types/host/services/playwright-sessions/index.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/index.js +161 -0
- package/lib/types/host/services/playwright-sessions/live-view.d.ts +32 -0
- package/lib/types/host/services/playwright-sessions/live-view.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/live-view.js +188 -0
- package/lib/types/host/services/playwright-sessions/manager.d.ts +87 -0
- package/lib/types/host/services/playwright-sessions/manager.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/manager.js +203 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.d.ts +39 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.js +72 -0
- package/lib/types/host/services/playwright-sessions/routes.d.ts +18 -0
- package/lib/types/host/services/playwright-sessions/routes.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/routes.js +87 -0
- package/lib/types/host/services/remote-access/boot-scripts.d.ts +55 -0
- package/lib/types/host/services/remote-access/boot-scripts.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/boot-scripts.js +109 -0
- package/lib/types/host/services/remote-access/index.d.ts +28 -0
- package/lib/types/host/services/remote-access/index.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/index.js +47 -0
- package/lib/types/host/services/remote-access/routes.d.ts +42 -0
- package/lib/types/host/services/remote-access/routes.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/routes.js +119 -0
- package/lib/types/host/services/remote-web-ui/index.d.ts +21 -0
- package/lib/types/host/services/remote-web-ui/index.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/index.js +325 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts +115 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.js +396 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts +28 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.js +48 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts +17 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.js +40 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts +73 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.js +242 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts +23 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.js +24 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts +89 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.js +768 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts +99 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.js +679 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts +43 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.js +92 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts +42 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.js +73 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts +13 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.js +17 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts +25 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.js +68 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts +75 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.js +116 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts +44 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.js +47 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts +21 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.js +37 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts +111 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.js +298 -0
- package/lib/types/host/services/remote-web-ui/server.d.ts +82 -0
- package/lib/types/host/services/remote-web-ui/server.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server.js +492 -0
- package/lib/types/host/services/resources.d.ts +9 -0
- package/lib/types/host/services/resources.d.ts.map +1 -0
- package/lib/types/host/services/resources.js +98 -0
- package/lib/types/host/services/right-pane/browser.d.ts +42 -0
- package/lib/types/host/services/right-pane/browser.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/browser.js +106 -0
- package/lib/types/host/services/right-pane/index.d.ts +22 -0
- package/lib/types/host/services/right-pane/index.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/index.js +114 -0
- package/lib/types/host/services/right-pane/wire.d.ts +6 -0
- package/lib/types/host/services/right-pane/wire.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/wire.js +9 -0
- package/lib/types/host/services/schedule-mode/config.d.ts +11 -0
- package/lib/types/host/services/schedule-mode/config.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/config.js +15 -0
- package/lib/types/host/services/schedule-mode/engine.d.ts +150 -0
- package/lib/types/host/services/schedule-mode/engine.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/engine.js +672 -0
- package/lib/types/host/services/schedule-mode/index.d.ts +33 -0
- package/lib/types/host/services/schedule-mode/index.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/index.js +175 -0
- package/lib/types/host/services/schedule-mode/routes.d.ts +31 -0
- package/lib/types/host/services/schedule-mode/routes.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/routes.js +109 -0
- package/lib/types/host/services/schedule-mode/session-create.d.ts +27 -0
- package/lib/types/host/services/schedule-mode/session-create.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/session-create.js +21 -0
- package/lib/types/host/services/schedule-mode/store.d.ts +36 -0
- package/lib/types/host/services/schedule-mode/store.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/store.js +309 -0
- package/lib/types/host/services/schedule-mode/tools.d.ts +13 -0
- package/lib/types/host/services/schedule-mode/tools.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/tools.js +132 -0
- package/lib/types/host/services/ssh/engine.d.ts +162 -0
- package/lib/types/host/services/ssh/engine.d.ts.map +1 -0
- package/lib/types/host/services/ssh/engine.js +699 -0
- package/lib/types/host/services/ssh/host-keys.d.ts +10 -0
- package/lib/types/host/services/ssh/host-keys.d.ts.map +1 -0
- package/lib/types/host/services/ssh/host-keys.js +108 -0
- package/lib/types/host/services/ssh/index.d.ts +38 -0
- package/lib/types/host/services/ssh/index.d.ts.map +1 -0
- package/lib/types/host/services/ssh/index.js +47 -0
- package/lib/types/host/services/ssh/routes.d.ts +29 -0
- package/lib/types/host/services/ssh/routes.d.ts.map +1 -0
- package/lib/types/host/services/ssh/routes.js +465 -0
- package/lib/types/host/services/ssh/store.d.ts +40 -0
- package/lib/types/host/services/ssh/store.d.ts.map +1 -0
- package/lib/types/host/services/ssh/store.js +330 -0
- package/lib/types/host/services/ssh/terminal-ws.d.ts +9 -0
- package/lib/types/host/services/ssh/terminal-ws.d.ts.map +1 -0
- package/lib/types/host/services/ssh/terminal-ws.js +142 -0
- package/lib/types/host/services/ssh/tools.d.ts +11 -0
- package/lib/types/host/services/ssh/tools.d.ts.map +1 -0
- package/lib/types/host/services/ssh/tools.js +270 -0
- package/lib/types/host/services/web-render/contracts.d.ts +93 -0
- package/lib/types/host/services/web-render/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-render/contracts.js +60 -0
- package/lib/types/host/services/web-render/index.d.ts +58 -0
- package/lib/types/host/services/web-render/index.d.ts.map +1 -0
- package/lib/types/host/services/web-render/index.js +90 -0
- package/lib/types/host/services/web-render/provider.d.ts +37 -0
- package/lib/types/host/services/web-render/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-render/provider.js +274 -0
- package/lib/types/host/services/web-search-anthropic/contracts.d.ts +117 -0
- package/lib/types/host/services/web-search-anthropic/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/contracts.js +90 -0
- package/lib/types/host/services/web-search-anthropic/index.d.ts +53 -0
- package/lib/types/host/services/web-search-anthropic/index.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/index.js +123 -0
- package/lib/types/host/services/web-search-anthropic/provider.d.ts +101 -0
- package/lib/types/host/services/web-search-anthropic/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/provider.js +237 -0
- package/lib/types/host/services/web-search-kaon/contracts.d.ts +114 -0
- package/lib/types/host/services/web-search-kaon/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-search-kaon/contracts.js +73 -0
- package/lib/types/host/services/web-search-kaon/index.d.ts +50 -0
- package/lib/types/host/services/web-search-kaon/index.d.ts.map +1 -0
- package/lib/types/host/services/web-search-kaon/index.js +114 -0
- package/lib/types/host/services/web-search-kaon/provider.d.ts +111 -0
- package/lib/types/host/services/web-search-kaon/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-search-kaon/provider.js +244 -0
- package/lib/types/host/services/worktree/git-runner.d.ts +82 -0
- package/lib/types/host/services/worktree/git-runner.d.ts.map +1 -0
- package/lib/types/host/services/worktree/git-runner.js +81 -0
- package/lib/types/host/services/worktree/git.d.ts +94 -0
- package/lib/types/host/services/worktree/git.d.ts.map +1 -0
- package/lib/types/host/services/worktree/git.js +153 -0
- package/lib/types/host/services/worktree/http.d.ts +12 -0
- package/lib/types/host/services/worktree/http.d.ts.map +1 -0
- package/lib/types/host/services/worktree/http.js +34 -0
- package/lib/types/host/services/worktree/index.d.ts +38 -0
- package/lib/types/host/services/worktree/index.d.ts.map +1 -0
- package/lib/types/host/services/worktree/index.js +78 -0
- package/lib/types/host/services/worktree/lane-tool.d.ts +22 -0
- package/lib/types/host/services/worktree/lane-tool.d.ts.map +1 -0
- package/lib/types/host/services/worktree/lane-tool.js +92 -0
- package/lib/types/host/services/worktree/manager.d.ts +410 -0
- package/lib/types/host/services/worktree/manager.d.ts.map +1 -0
- package/lib/types/host/services/worktree/manager.js +1485 -0
- package/lib/types/host/services/worktree/model-override.d.ts +20 -0
- package/lib/types/host/services/worktree/model-override.d.ts.map +1 -0
- package/lib/types/host/services/worktree/model-override.js +35 -0
- package/lib/types/host/services/worktree/routes.d.ts +50 -0
- package/lib/types/host/services/worktree/routes.d.ts.map +1 -0
- package/lib/types/host/services/worktree/routes.js +695 -0
- package/lib/types/host/services/worktree/run-command.d.ts +26 -0
- package/lib/types/host/services/worktree/run-command.d.ts.map +1 -0
- package/lib/types/host/services/worktree/run-command.js +36 -0
- package/lib/types/host/services/worktree/session-lane/manager.d.ts +109 -0
- package/lib/types/host/services/worktree/session-lane/manager.d.ts.map +1 -0
- package/lib/types/host/services/worktree/session-lane/manager.js +172 -0
- package/lib/types/host/services/worktree/workspace-model-routes.d.ts +21 -0
- package/lib/types/host/services/worktree/workspace-model-routes.d.ts.map +1 -0
- package/lib/types/host/services/worktree/workspace-model-routes.js +198 -0
- package/lib/types/host/services/worktree/workspace-model.d.ts +48 -0
- package/lib/types/host/services/worktree/workspace-model.d.ts.map +1 -0
- package/lib/types/host/services/worktree/workspace-model.js +113 -0
- package/lib/types/index.d.ts +47 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +52 -0
- package/lib/types/invariant.d.ts +4 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/invariant.js +3 -0
- package/package.json +153 -3
- package/presets/code-vibe/THIRD_PARTY_NOTICES.md +55 -0
- package/presets/code-vibe/skills/UPSTREAM.md +104 -0
- package/presets/code-vibe/skills/agent-experience/SKILL.md +15 -0
- package/presets/code-vibe/skills/agent-operation/SKILL.md +43 -0
- package/presets/code-vibe/skills/code-review/SKILL.md +45 -0
- package/presets/code-vibe/skills/dsh-ci-test-reliability/SKILL.md +133 -0
- package/presets/code-vibe/skills/dsh-ci-test-reliability/references/ci-flake-diagnosis.md +60 -0
- package/presets/code-vibe/skills/dsh-find-simplifications/SKILL.md +69 -0
- package/presets/code-vibe/skills/dsh-find-simplifications/references/historical-patterns.md +45 -0
- package/presets/code-vibe/skills/dsh-merging-stacked-prs/SKILL.md +129 -0
- package/presets/code-vibe/skills/dsh-prose-standard/SKILL.md +83 -0
- package/presets/code-vibe/skills/dsh-prose-standard/references/examples.md +169 -0
- package/presets/code-vibe/skills/dsh-speed-up-perf/SKILL.md +94 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/SKILL.md +47 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/examples.md +275 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/recall-batteries.md +52 -0
- package/presets/code-vibe/skills/frontend-design/SKILL.md +60 -0
- package/presets/code-vibe/skills/frontend-design/references/critique-format.md +35 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/LOAD-MAP.md +81 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/README.md +53 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/anchor.md +51 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/ai-tells.md +59 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/web-interface.md +14 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/change-control.md +62 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/copy.md +65 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/craft-knobs.md +61 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/debug-playbook.md +37 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/exemplars/README.md +64 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/plan-architecture.checklist.json +13 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/product-judgment.md +113 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/system-architecture.md +108 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/README.md +26 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/color-roles.md +49 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/motion.md +51 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/scale.md +89 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-page-gate.md +61 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-surface.checklist.json +49 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ux.md +76 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/visual.md +52 -0
- package/presets/code-vibe/skills/frontend-design/references/perceptible-path.md +27 -0
- package/presets/code-vibe/skills/frontend-design/references/product-package.md +80 -0
- package/presets/code-vibe/skills/frontend-design/references/scheme-antipatterns.md +21 -0
- package/presets/code-vibe/skills/quality-review/SKILL.md +57 -0
- package/presets/code-vibe/skills/quality-review/references/bounded-verify.md +37 -0
- package/presets/code-vibe/skills/quality-review/references/browser-verify.md +81 -0
- package/presets/code-vibe/skills/quality-review/references/evidence-contract.md +194 -0
- package/presets/code-vibe/skills/quality-review/references/falsify-checklist.md +44 -0
- package/presets/code-vibe/skills/quality-review/references/human-acceptance-pack.md +68 -0
- package/presets/code-vibe/skills/quality-review/references/product-regression.md +51 -0
- package/presets/code-vibe/skills/quality-review/references/ux-standards.md +37 -0
- package/presets/code-vibe/skills/quality-review/references/ux-walkthrough.md +49 -0
- package/presets/code-vibe/skills/quality-review/references/validation-report.md +22 -0
- package/presets/code-vibe/skills/quality-review/references/verification-loop.md +95 -0
- package/presets/code-vibe/skills/quality-review/references/version-acceptance-matrix.md +131 -0
- package/presets/code-vibe/skills/record-browser-gif/SKILL.md +174 -0
- package/presets/code-vibe/skills/record-browser-gif/scripts/encode_gif.py +337 -0
- package/presets/code-vibe/skills/record-browser-gif/scripts/test_encode_gif.py +103 -0
- package/presets/code-vibe/skills/wish-programming/SKILL.md +150 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/arch-reviewer.md +26 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/design-reviewer.md +32 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/pm-reviewer.md +26 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/qa-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/security-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/sre-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/ux-adversary.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/arch.md.tpl +51 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/brief.md.tpl +36 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/confirmation-pack.md +54 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/design-spec.md.tpl +49 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/module-readme.md +37 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/product.md.tpl +74 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/requirements.md.tpl +31 -0
- package/presets/code-vibe/skills/wish-programming/references/workflow-template.md +122 -0
- package/presets/code-vibe/skills/wish-programming/scripts/MANIFEST.sha256 +11 -0
- package/presets/code-vibe/skills/wish-programming/scripts/check_spec.py +416 -0
- package/presets/code-vibe/skills/wish-programming/scripts/check_whitelist.py +193 -0
- package/presets/code-vibe/skills/wish-programming/scripts/coverage_check.py +199 -0
- package/presets/code-vibe/skills/wish-programming/scripts/gate-lock.sh +46 -0
- package/presets/code-vibe/skills/wish-programming/scripts/journey.sh +281 -0
- package/presets/code-vibe/skills/wish-programming/scripts/project.sh +152 -0
- package/presets/code-vibe/skills/wish-programming/scripts/replay.sh +65 -0
- package/presets/code-vibe/skills/wish-programming/scripts/scan_drift.py +79 -0
- package/presets/code-vibe/skills/wish-programming/scripts/verify.sh +169 -0
- package/presets/code-vibe/skills/wish-programming/scripts/verify_preset_budgets.py +218 -0
- package/presets/code-vibe/skills/wish-programming/scripts/wish.sh +150 -0
- package/presets/code-vibe.patch.yml +325 -0
- package/presets/hiopen.patch.yml +109 -0
- package/src/client/compat.ts +86 -0
- package/src/client/conversation/conversation.module.css +264 -0
- package/src/client/conversation/git-branch.tsx +152 -0
- package/src/client/conversation/git-graph/LICENSE.git-graph +202 -0
- package/src/client/conversation/git-graph/api.ts +85 -0
- package/src/client/conversation/git-graph/branch-chip.tsx +354 -0
- package/src/client/conversation/git-graph/branch-popover.tsx +185 -0
- package/src/client/conversation/git-graph/chip.tsx +47 -0
- package/src/client/conversation/git-graph/create-branch-dialog.tsx +108 -0
- package/src/client/conversation/git-graph/error-copy.ts +50 -0
- package/src/client/conversation/git-graph/git-graph.module.css +792 -0
- package/src/client/conversation/git-graph/graph-dialog.tsx +196 -0
- package/src/client/conversation/git-graph/hero-seat.ts +76 -0
- package/src/client/conversation/git-graph/locales.ts +90 -0
- package/src/client/conversation/git-graph/sse-leader.ts +124 -0
- package/src/client/conversation/index.ts +82 -0
- package/src/client/conversation/selector-context.tsx +24 -0
- package/src/client/conversation/session-lane-chip.tsx +262 -0
- package/src/client/conversation/session-lane-locales.ts +34 -0
- package/src/client/conversation/subagent-model-dom.ts +157 -0
- package/src/client/conversation/subagent-model.ts +198 -0
- package/src/client/conversation/worktree/api.ts +283 -0
- package/src/client/conversation/worktree/dialogs/DeleteWorktreeDialog.tsx +111 -0
- package/src/client/conversation/worktree/dialogs/PrCreateDialog.tsx +114 -0
- package/src/client/conversation/worktree/lane-binding.ts +77 -0
- package/src/client/conversation/worktree/lane-menu.tsx +247 -0
- package/src/client/conversation/worktree/lane-open.ts +204 -0
- package/src/client/conversation/worktree/lane-workspace-sweeper.ts +136 -0
- package/src/client/conversation/worktree/lifecycle.ts +75 -0
- package/src/client/conversation/worktree/locales.ts +97 -0
- package/src/client/conversation/worktree/semantic.ts +10 -0
- package/src/client/conversation/worktree/worktree.module.css +70 -0
- package/src/client/css-modules.d.ts +8 -0
- package/src/client/index.ts +58 -0
- package/src/client/lark-inbox/i18n.ts +125 -0
- package/src/client/lark-inbox/lark-wizard.module.css +88 -0
- package/src/client/lark-inbox/wizard.tsx +211 -0
- package/src/client/notify/i18n.ts +93 -0
- package/src/client/settings/family-scope.ts +45 -0
- package/src/client/settings/lark-inbox.tsx +319 -0
- package/src/client/settings/notify.tsx +288 -0
- package/src/client/settings/primitives-0.2.ts +148 -0
- package/src/client/settings/settings-shell.module.css +56 -0
- package/src/client/sidebar/RenderBoundary.tsx +17 -0
- package/src/client/sidebar/agent-browser.tsx +114 -0
- package/src/client/sidebar/diff-view.tsx +314 -0
- package/src/client/sidebar/git-workbench.tsx +700 -0
- package/src/client/sidebar/icons.tsx +23 -0
- package/src/client/sidebar/index.ts +28 -0
- package/src/client/sidebar/native-panels.tsx +149 -0
- package/src/client/sidebar/page-shell.module.css +96 -0
- package/src/client/sidebar/page-shell.tsx +86 -0
- package/src/client/sidebar/panels/memoir/api.ts +300 -0
- package/src/client/sidebar/panels/memoir/controller.ts +47 -0
- package/src/client/sidebar/panels/memoir/cwd.ts +140 -0
- package/src/client/sidebar/panels/memoir/i18n.ts +300 -0
- package/src/client/sidebar/panels/memoir/panel-activation.ts +42 -0
- package/src/client/sidebar/panels/memoir/panel.tsx +869 -0
- package/src/client/sidebar/panels/memoir/styles.ts +776 -0
- package/src/client/sidebar/panels/memoir/types.ts +7 -0
- package/src/client/sidebar/panels/ssh/ClusterTab.tsx +123 -0
- package/src/client/sidebar/panels/ssh/HostFormDialog.tsx +243 -0
- package/src/client/sidebar/panels/ssh/HostsTab.tsx +290 -0
- package/src/client/sidebar/panels/ssh/SshPanel.tsx +76 -0
- package/src/client/sidebar/panels/ssh/TerminalTab.tsx +290 -0
- package/src/client/sidebar/panels/ssh/TransferTab.tsx +232 -0
- package/src/client/sidebar/panels/ssh/TunnelsTab.tsx +204 -0
- package/src/client/sidebar/panels/ssh/api.ts +388 -0
- package/src/client/sidebar/panels/ssh/controller.ts +48 -0
- package/src/client/sidebar/panels/ssh/helpers.ts +70 -0
- package/src/client/sidebar/panels/ssh/locales.ts +318 -0
- package/src/client/sidebar/panels/ssh/panel.module.css +801 -0
- package/src/client/sidebar/panels/ssh/xterm.css.ts +2 -0
- package/src/client/sidebar/right-pane-i18n.ts +243 -0
- package/src/client/sidebar/right-pane.tsx +156 -0
- package/src/client/sidebar/scope.ts +54 -0
- package/src/client/sidebar/sidebar-header.module.css +72 -0
- package/src/client/sidebar/sidebar.module.css +619 -0
- package/src/client/trust.ts +187 -0
- package/src/client/ui-icons.ts +35 -0
- package/src/core/git-graph/commands.ts +107 -0
- package/src/core/git-graph/protocol.ts +238 -0
- package/src/core/index.ts +2 -0
- package/src/core/lark-inbox/gating.ts +35 -0
- package/src/core/lark-inbox/queue.ts +100 -0
- package/src/core/memoir/protocol.ts +46 -0
- package/src/core/no-browser-auth/contract.ts +25 -0
- package/src/core/notify/contract.ts +236 -0
- package/src/core/notify/feed.ts +235 -0
- package/src/core/playwright-sessions/contracts.ts +143 -0
- package/src/core/playwright-sessions/control.ts +33 -0
- package/src/core/playwright-sessions/index.ts +3 -0
- package/src/core/playwright-sessions/names.ts +83 -0
- package/src/core/playwright-sessions/schema.ts +102 -0
- package/src/core/playwright-sessions/wire.ts +142 -0
- package/src/core/remote-access/paths.ts +23 -0
- package/src/core/remote-web-ui/security.ts +171 -0
- package/src/core/right-pane/protocol.ts +94 -0
- package/src/core/schedule-mode/index.ts +6 -0
- package/src/core/schedule-mode/native.ts +105 -0
- package/src/core/schedule-mode/types.ts +182 -0
- package/src/core/schedule-mode/view.ts +66 -0
- package/src/core/ssh/protocol.ts +212 -0
- package/src/core/subagent-model/badges.ts +161 -0
- package/src/core/worktree/invariant.ts +101 -0
- package/src/core/worktree/manifest.ts +135 -0
- package/src/core/worktree/paths.ts +123 -0
- package/src/core/worktree/pr-create.ts +157 -0
- package/src/core/worktree/protocol.ts +7 -0
- package/src/core/worktree/types.ts +317 -0
- package/src/core/worktree/workspace-model.ts +61 -0
- package/src/host/services/access-trust/index.ts +127 -0
- package/src/host/services/access-trust/trust.ts +189 -0
- package/src/host/services/codex-bridge/bridge.ts +392 -0
- package/src/host/services/codex-bridge/codex-auth.ts +352 -0
- package/src/host/services/codex-bridge/dsh-integration.ts +169 -0
- package/src/host/services/codex-bridge/http.ts +105 -0
- package/src/host/services/codex-bridge/index.ts +154 -0
- package/src/host/services/codex-bridge/loopback.ts +63 -0
- package/src/host/services/codex-bridge/routes.ts +143 -0
- package/src/host/services/family-config.ts +224 -0
- package/src/host/services/family-namespaces.ts +39 -0
- package/src/host/services/git-graph/index.ts +11 -0
- package/src/host/services/git-graph/routes.ts +212 -0
- package/src/host/services/git-graph/service.ts +305 -0
- package/src/host/services/index.ts +94 -0
- package/src/host/services/lark-inbox/config.ts +66 -0
- package/src/host/services/lark-inbox/gateway.ts +184 -0
- package/src/host/services/lark-inbox/host-routes.ts +113 -0
- package/src/host/services/lark-inbox/inbox-store.ts +160 -0
- package/src/host/services/lark-inbox/index.ts +141 -0
- package/src/host/services/lark-inbox/tools.ts +124 -0
- package/src/host/services/lark-inbox/wizard.ts +206 -0
- package/src/host/services/lifecycle.ts +107 -0
- package/src/host/services/memoir/index.ts +80 -0
- package/src/host/services/memoir/routes.ts +346 -0
- package/src/host/services/memoir/settings.ts +122 -0
- package/src/host/services/memoir/store.ts +132 -0
- package/src/host/services/memoir/tools.ts +158 -0
- package/src/host/services/no-browser-auth/index.ts +70 -0
- package/src/host/services/notify/config.ts +178 -0
- package/src/host/services/notify/feishu-sender.ts +220 -0
- package/src/host/services/notify/host-routes.ts +133 -0
- package/src/host/services/notify/index.ts +305 -0
- package/src/host/services/playwright-sessions/child.ts +251 -0
- package/src/host/services/playwright-sessions/controller.ts +102 -0
- package/src/host/services/playwright-sessions/index.ts +146 -0
- package/src/host/services/playwright-sessions/live-view.ts +225 -0
- package/src/host/services/playwright-sessions/manager.ts +239 -0
- package/src/host/services/playwright-sessions/profile-gc.ts +97 -0
- package/src/host/services/playwright-sessions/routes.ts +90 -0
- package/src/host/services/remote-access/boot-scripts.ts +118 -0
- package/src/host/services/remote-access/index.ts +62 -0
- package/src/host/services/remote-access/routes.ts +137 -0
- package/src/host/services/remote-web-ui/index.ts +344 -0
- package/src/host/services/remote-web-ui/server-mode/accounts.ts +423 -0
- package/src/host/services/remote-web-ui/server-mode/cookie.ts +57 -0
- package/src/host/services/remote-web-ui/server-mode/dsh-home.ts +42 -0
- package/src/host/services/remote-web-ui/server-mode/external-auth.ts +296 -0
- package/src/host/services/remote-web-ui/server-mode/fence.ts +27 -0
- package/src/host/services/remote-web-ui/server-mode/gateway-routes.ts +797 -0
- package/src/host/services/remote-web-ui/server-mode/gateway.ts +684 -0
- package/src/host/services/remote-web-ui/server-mode/http.ts +105 -0
- package/src/host/services/remote-web-ui/server-mode/integrated-auth.ts +118 -0
- package/src/host/services/remote-web-ui/server-mode/lan.ts +19 -0
- package/src/host/services/remote-web-ui/server-mode/loopback.ts +63 -0
- package/src/host/services/remote-web-ui/server-mode/posture.ts +154 -0
- package/src/host/services/remote-web-ui/server-mode/roles.ts +51 -0
- package/src/host/services/remote-web-ui/server-mode/server-boot.ts +38 -0
- package/src/host/services/remote-web-ui/server-mode/sessions.ts +347 -0
- package/src/host/services/remote-web-ui/server.ts +591 -0
- package/src/host/services/resources.ts +78 -0
- package/src/host/services/right-pane/browser.ts +106 -0
- package/src/host/services/right-pane/index.ts +117 -0
- package/src/host/services/right-pane/wire.ts +10 -0
- package/src/host/services/schedule-mode/config.ts +26 -0
- package/src/host/services/schedule-mode/engine.ts +689 -0
- package/src/host/services/schedule-mode/index.ts +214 -0
- package/src/host/services/schedule-mode/routes.ts +130 -0
- package/src/host/services/schedule-mode/session-create.ts +36 -0
- package/src/host/services/schedule-mode/store.ts +304 -0
- package/src/host/services/schedule-mode/tools.ts +154 -0
- package/src/host/services/ssh/engine.ts +675 -0
- package/src/host/services/ssh/host-keys.ts +99 -0
- package/src/host/services/ssh/index.ts +84 -0
- package/src/host/services/ssh/routes.ts +442 -0
- package/src/host/services/ssh/store.ts +310 -0
- package/src/host/services/ssh/terminal-ws.ts +157 -0
- package/src/host/services/ssh/tools.ts +279 -0
- package/src/host/services/web-render/contracts.ts +138 -0
- package/src/host/services/web-render/index.ts +112 -0
- package/src/host/services/web-render/provider.ts +282 -0
- package/src/host/services/web-search-anthropic/contracts.ts +163 -0
- package/src/host/services/web-search-anthropic/index.ts +152 -0
- package/src/host/services/web-search-anthropic/provider.ts +325 -0
- package/src/host/services/worktree/git-runner.ts +124 -0
- package/src/host/services/worktree/git.ts +183 -0
- package/src/host/services/worktree/http.ts +36 -0
- package/src/host/services/worktree/index.ts +92 -0
- package/src/host/services/worktree/lane-tool.ts +100 -0
- package/src/host/services/worktree/manager.ts +1553 -0
- package/src/host/services/worktree/model-override.ts +43 -0
- package/src/host/services/worktree/routes.ts +570 -0
- package/src/host/services/worktree/run-command.ts +66 -0
- package/src/host/services/worktree/session-lane/manager.ts +228 -0
- package/src/host/services/worktree/workspace-model-routes.ts +156 -0
- package/src/host/services/worktree/workspace-model.ts +132 -0
- package/src/index.ts +84 -0
- package/src/invariant.ts +4 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lane popover: what the conversation's branch directory is, and the three
|
|
3
|
+
* things a user can do about it.
|
|
4
|
+
*
|
|
5
|
+
* This is where the lifecycle lives now that there is no management panel: the
|
|
6
|
+
* branch is chosen once, when the conversation starts (the composer picker), and
|
|
7
|
+
* everything that happens *after* the branch exists — re-check, submit a PR,
|
|
8
|
+
* delete the directory — hangs off the header chip that names that branch. One
|
|
9
|
+
* control creates, one surface finishes.
|
|
10
|
+
*
|
|
11
|
+
* There used to be two teardown actions ("clean up worktree" / "remove
|
|
12
|
+
* worktree"); users could not tell them apart, so they are one `Delete…` whose
|
|
13
|
+
* dialog asks the only question that matters (does the local branch go too).
|
|
14
|
+
*
|
|
15
|
+
* Two safety rules are enforced here rather than discovered by failing:
|
|
16
|
+
* - a running conversation may not tear its own directory down (the directory
|
|
17
|
+
* would vanish under the running turn), so the action is disabled with the
|
|
18
|
+
* reason shown;
|
|
19
|
+
* - deleting the directory this conversation sits on archives the conversation
|
|
20
|
+
* (the host does that for every directory session), and the menu says so
|
|
21
|
+
* before the click instead of surprising the user afterwards.
|
|
22
|
+
* @module @dsh-cove/dsh-client-ui-worktree/client/lane-menu
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { useEffect, useRef, useState } from 'react'
|
|
26
|
+
import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots'
|
|
27
|
+
import type { LaneView } from '../../../core/worktree/types.ts'
|
|
28
|
+
import { WorktreeApi } from './api.ts'
|
|
29
|
+
import { PrCreateDialog } from './dialogs/PrCreateDialog.tsx'
|
|
30
|
+
import { DeleteWorktreeDialog } from './dialogs/DeleteWorktreeDialog.tsx'
|
|
31
|
+
import { worktreeErrorMessage } from './lifecycle.ts'
|
|
32
|
+
import { WORKTREE_PART_LANE_MENU, WORKTREE_PLUGIN } from './semantic.ts'
|
|
33
|
+
import css from '../conversation.module.css'
|
|
34
|
+
|
|
35
|
+
/** Which dialog is open, if any. */
|
|
36
|
+
type LaneDialog = 'pr' | 'delete'
|
|
37
|
+
|
|
38
|
+
/** A base-branch choice set for the PR dialog, read from the repo status. */
|
|
39
|
+
interface PrChoices {
|
|
40
|
+
branches: string[]
|
|
41
|
+
baseBranch: string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface LaneMenuProps {
|
|
45
|
+
/** The conversation the chip belongs to (the teardown caller identity). */
|
|
46
|
+
sessionId: string
|
|
47
|
+
/** The lane this conversation runs on. */
|
|
48
|
+
lane: LaneView
|
|
49
|
+
/** Worktree API surface (the menu owns its dialogs). */
|
|
50
|
+
api: WorktreeApi
|
|
51
|
+
/** Whether the conversation is running a turn right now. */
|
|
52
|
+
running: boolean
|
|
53
|
+
/**
|
|
54
|
+
* Whether the lane records this conversation as its own session. Only then do
|
|
55
|
+
* the teardown actions archive the conversation the user is looking at.
|
|
56
|
+
*/
|
|
57
|
+
ownLane: boolean
|
|
58
|
+
onClose: () => void
|
|
59
|
+
/** The lane changed: the chip re-reads it. */
|
|
60
|
+
onChanged: () => void
|
|
61
|
+
t: PropsLocale<'worktree'>['t']
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The lane popover.
|
|
66
|
+
* @param props - see {@link LaneMenuProps}.
|
|
67
|
+
*/
|
|
68
|
+
export function LaneMenu(props: LaneMenuProps): JSX.Element {
|
|
69
|
+
const { sessionId, lane, api, running, ownLane, onClose, onChanged, t } = props
|
|
70
|
+
const [busy, setBusy] = useState<'refresh' | 'pr' | 'delete' | null>(null)
|
|
71
|
+
const [error, setError] = useState<unknown>(null)
|
|
72
|
+
const [dialog, setDialog] = useState<LaneDialog | null>(null)
|
|
73
|
+
const [prChoices, setPrChoices] = useState<PrChoices | null>(null)
|
|
74
|
+
/** Directory facts re-read for the delete dialog; see openDelete. */
|
|
75
|
+
const [deleteFacts, setDeleteFacts] = useState<{ merged: boolean; dirty: number } | null>(null)
|
|
76
|
+
const rootRef = useRef<HTMLDivElement>(null)
|
|
77
|
+
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
// While one of the dialogs is showing, the menu must not dismiss itself on
|
|
80
|
+
// the next click: the dialog is portaled to the body (so every click in it
|
|
81
|
+
// is "outside" this popover) and it owns its own dismissal. Without this the
|
|
82
|
+
// dialog unmounted mid-flight and a PR or teardown the host had already
|
|
83
|
+
// started vanished from the screen.
|
|
84
|
+
if (dialog !== null) return undefined
|
|
85
|
+
const onPointerDown = (event: MouseEvent): void => {
|
|
86
|
+
if (rootRef.current !== null && !rootRef.current.contains(event.target as Node)) onClose()
|
|
87
|
+
}
|
|
88
|
+
const onKeyDown = (event: KeyboardEvent): void => {
|
|
89
|
+
if (event.key === 'Escape') onClose()
|
|
90
|
+
}
|
|
91
|
+
document.addEventListener('mousedown', onPointerDown)
|
|
92
|
+
document.addEventListener('keydown', onKeyDown)
|
|
93
|
+
return () => {
|
|
94
|
+
document.removeEventListener('mousedown', onPointerDown)
|
|
95
|
+
document.removeEventListener('keydown', onKeyDown)
|
|
96
|
+
}
|
|
97
|
+
}, [dialog, onClose])
|
|
98
|
+
|
|
99
|
+
/** Probe the lane again, remote included; the chip re-reads the answer. */
|
|
100
|
+
const refresh = async (): Promise<void> => {
|
|
101
|
+
if (busy !== null) return
|
|
102
|
+
setBusy('refresh')
|
|
103
|
+
setError(null)
|
|
104
|
+
try {
|
|
105
|
+
await api.status({ repoPath: lane.repoPath, name: lane.name, force: true })
|
|
106
|
+
onChanged()
|
|
107
|
+
} catch (err) {
|
|
108
|
+
setError(err)
|
|
109
|
+
} finally {
|
|
110
|
+
setBusy(null)
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* The PR dialog needs the repository's candidate branches, which only the
|
|
116
|
+
* status probe knows. Fetching them here keeps the dialog's contract (a base
|
|
117
|
+
* dropdown over real branches) instead of opening it with a guessed base.
|
|
118
|
+
*/
|
|
119
|
+
const openPrDialog = async (): Promise<void> => {
|
|
120
|
+
if (busy !== null) return
|
|
121
|
+
setBusy('pr')
|
|
122
|
+
setError(null)
|
|
123
|
+
try {
|
|
124
|
+
const status = await api.status({ repoPath: lane.repoPath })
|
|
125
|
+
setPrChoices({ branches: status.branches, baseBranch: status.baseBranch })
|
|
126
|
+
setDialog('pr')
|
|
127
|
+
} catch (err) {
|
|
128
|
+
setError(err)
|
|
129
|
+
} finally {
|
|
130
|
+
setBusy(null)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* The delete dialog owns the branch-checkbox decision; the guard is here.
|
|
136
|
+
*
|
|
137
|
+
* The facts are re-read first. `dirty` is a local git call the host makes on
|
|
138
|
+
* every lane read, and the chip's snapshot can predate work the user has just
|
|
139
|
+
* left in the directory — which is exactly what decides whether the host will
|
|
140
|
+
* demand the force choice. Reading that decision from the snapshot hid the
|
|
141
|
+
* force row the host needs, so the dialog lied about being one click.
|
|
142
|
+
*/
|
|
143
|
+
const openDelete = async (): Promise<void> => {
|
|
144
|
+
if (running || busy !== null) return
|
|
145
|
+
setBusy('delete')
|
|
146
|
+
setError(null)
|
|
147
|
+
try {
|
|
148
|
+
const fresh = await api.lane({ path: lane.path })
|
|
149
|
+
setDeleteFacts({ merged: fresh?.merged ?? lane.merged, dirty: fresh?.dirty ?? lane.dirty ?? 0 })
|
|
150
|
+
setDialog('delete')
|
|
151
|
+
} catch (err) {
|
|
152
|
+
setError(err)
|
|
153
|
+
} finally {
|
|
154
|
+
setBusy(null)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** The lane is gone (or changed) after a teardown: leave and re-read. */
|
|
159
|
+
const afterTeardown = (): void => {
|
|
160
|
+
setDialog(null)
|
|
161
|
+
setDeleteFacts(null)
|
|
162
|
+
onChanged()
|
|
163
|
+
onClose()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<div
|
|
168
|
+
ref={rootRef}
|
|
169
|
+
className={css.laneMenu}
|
|
170
|
+
role="menu"
|
|
171
|
+
aria-label={t('menu.aria', { branch: lane.branch ?? lane.name })}
|
|
172
|
+
data-dsh-plugin={WORKTREE_PLUGIN}
|
|
173
|
+
data-dsh-part={WORKTREE_PART_LANE_MENU}
|
|
174
|
+
>
|
|
175
|
+
<div className={css.laneMenuFacts}>
|
|
176
|
+
<span className={css.laneMenuPathLabel}>{t('menu.path')}</span>
|
|
177
|
+
<span className={css.laneMenuPath} title={lane.path}>{lane.path}</span>
|
|
178
|
+
</div>
|
|
179
|
+
{/* The PR link is provenance, not an action: it only exists when this
|
|
180
|
+
plugin created one, and it stays reachable after the merge. */}
|
|
181
|
+
{lane.prUrl !== null && (
|
|
182
|
+
<a className={css.laneMenuLink} href={lane.prUrl} target="_blank" rel="noopener noreferrer">
|
|
183
|
+
{t('worktree.prOpen')}
|
|
184
|
+
</a>
|
|
185
|
+
)}
|
|
186
|
+
{error !== null && <div className={css.laneMenuError} role="alert">{worktreeErrorMessage(error, t)}</div>}
|
|
187
|
+
<div className={css.laneMenuActions}>
|
|
188
|
+
<button
|
|
189
|
+
type="button"
|
|
190
|
+
role="menuitem"
|
|
191
|
+
className={css.laneMenuItem}
|
|
192
|
+
disabled={busy !== null || lane.merged}
|
|
193
|
+
onClick={() => { void openPrDialog() }}
|
|
194
|
+
>
|
|
195
|
+
{t('menu.pr')}
|
|
196
|
+
</button>
|
|
197
|
+
<button
|
|
198
|
+
type="button"
|
|
199
|
+
role="menuitem"
|
|
200
|
+
className={css.laneMenuItem}
|
|
201
|
+
disabled={running || busy !== null}
|
|
202
|
+
onClick={() => { void openDelete() }}
|
|
203
|
+
>
|
|
204
|
+
{t('menu.delete')}
|
|
205
|
+
</button>
|
|
206
|
+
<button
|
|
207
|
+
type="button"
|
|
208
|
+
role="menuitem"
|
|
209
|
+
className={css.laneMenuItem}
|
|
210
|
+
disabled={busy !== null}
|
|
211
|
+
onClick={() => { void refresh() }}
|
|
212
|
+
>
|
|
213
|
+
{t('menu.refresh')}
|
|
214
|
+
</button>
|
|
215
|
+
</div>
|
|
216
|
+
{running && <div className={css.laneMenuHint}>{t('menu.running')}</div>}
|
|
217
|
+
{ownLane && <div className={css.laneMenuHint}>{t('menu.selfTeardown')}</div>}
|
|
218
|
+
|
|
219
|
+
{dialog === 'pr' && prChoices !== null && (
|
|
220
|
+
<PrCreateDialog
|
|
221
|
+
repoPath={lane.repoPath}
|
|
222
|
+
name={lane.name}
|
|
223
|
+
branches={prChoices.branches}
|
|
224
|
+
defaultBaseRef={prChoices.baseBranch}
|
|
225
|
+
api={api}
|
|
226
|
+
onClose={() => { setDialog(null) }}
|
|
227
|
+
onCreated={afterTeardown}
|
|
228
|
+
onSettled={onChanged}
|
|
229
|
+
t={t}
|
|
230
|
+
/>
|
|
231
|
+
)}
|
|
232
|
+
{dialog === 'delete' && deleteFacts !== null && (
|
|
233
|
+
<DeleteWorktreeDialog
|
|
234
|
+
repoPath={lane.repoPath}
|
|
235
|
+
name={lane.name}
|
|
236
|
+
merged={deleteFacts.merged}
|
|
237
|
+
dirty={deleteFacts.dirty}
|
|
238
|
+
api={api}
|
|
239
|
+
sessionId={ownLane ? sessionId : undefined}
|
|
240
|
+
onClose={() => { setDialog(null) }}
|
|
241
|
+
onRemoved={afterTeardown}
|
|
242
|
+
t={t}
|
|
243
|
+
/>
|
|
244
|
+
)}
|
|
245
|
+
</div>
|
|
246
|
+
)
|
|
247
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Choosing a branch means moving onto its lane": the browser half that turns a
|
|
3
|
+
* branch choice into (1) the branch's worktree on the host, (2) the conversation
|
|
4
|
+
* actually running in it, and (3) the binding the header chip, the teardown
|
|
5
|
+
* guards and the lane's permission preset all key off.
|
|
6
|
+
*
|
|
7
|
+
* Why the lane MUST be a registered DSH workspace
|
|
8
|
+
* The platform accounts a session to a workspace only while the session's cwd
|
|
9
|
+
* equals that workspace's path: `WorkspaceEntity.sessionIds` filters by
|
|
10
|
+
* `sessionPath(id) === record.path` and `attachSession` refuses a cwd that
|
|
11
|
+
* resolves anywhere else (`dsh-workspace`), and `session.create` takes either
|
|
12
|
+
* a workspace id (cwd := the workspace path) or a bare cwd, never both. A blank
|
|
13
|
+
* conversation that no workspace accounts for renders its composer inert
|
|
14
|
+
* ("choose a workspace to start"), so a lane session created with a bare
|
|
15
|
+
* `cwd` is a conversation the user cannot type into. Hence one workspace per
|
|
16
|
+
* lane, created with the lane directory as its path; teardown removes it
|
|
17
|
+
* again, so the sidebar only carries lanes that are still alive.
|
|
18
|
+
*
|
|
19
|
+
* Where the move comes from
|
|
20
|
+
* The `conversation.input.dock` seat is rendered with `{ session, input }`
|
|
21
|
+
* only (DSH's ConversationContent calls
|
|
22
|
+
* `renderSlot('conversation.input.dock', { session, input })`), so no seat prop
|
|
23
|
+
* can carry a workspace switch: a prop-based move is dead code that silently
|
|
24
|
+
* degrades to "the worktree is ready, pick it in the workspace selector".
|
|
25
|
+
* The platform keeps that call on a client service instead — the shell's own
|
|
26
|
+
* workspace picker performs `uiWorkspace.openWorkspace(workspaceId,
|
|
27
|
+
* migrateDraft)` — so calling the same service is the platform's navigation
|
|
28
|
+
* policy rather than a second implementation of it, and it is reachable from a
|
|
29
|
+
* plugin. It also reuses an existing blank conversation in that workspace
|
|
30
|
+
* instead of piling up a second one.
|
|
31
|
+
*
|
|
32
|
+
* `openWorkspace` reports the conversation it connected through the
|
|
33
|
+
* `beforeOpen` callback, which is the only moment that identity exists on this
|
|
34
|
+
* side. When the callback never fires (a later navigation superseded this one)
|
|
35
|
+
* the session list is polled for the conversation whose cwd is the lane, so the
|
|
36
|
+
* lane still gets its binding.
|
|
37
|
+
*
|
|
38
|
+
* The draft
|
|
39
|
+
* `openWorkspace` moves the *view*, not the composer text: the shell migrates
|
|
40
|
+
* draft text and attachments inside its own `beforeOpen`, and that half is not
|
|
41
|
+
* plugin-reachable (`ctx.conversation.input.for(actx)` needs a retained
|
|
42
|
+
* session scope). A prompt typed before the switch therefore stays in the
|
|
43
|
+
* conversation it was typed in — persisted, and not silently dropped in
|
|
44
|
+
* transit.
|
|
45
|
+
* @module @dsh-cove/dsh-client-ui-worktree/client/lane-open
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
import type { BindLaneInput, BindLaneResult, CreateLaneInput, CreateLaneResult } from '../../../core/worktree/types.ts'
|
|
49
|
+
|
|
50
|
+
/** The platform workspace navigation face (the call behind the shell's own workspace picker). */
|
|
51
|
+
export interface LaneOpenNavigation {
|
|
52
|
+
/**
|
|
53
|
+
* Connect a workspace and show its conversation.
|
|
54
|
+
* @param workspaceId - the lane's registered workspace.
|
|
55
|
+
* @param beforeOpen - receives the conversation being shown, synchronously.
|
|
56
|
+
*/
|
|
57
|
+
openWorkspace?: (workspaceId: string, beforeOpen?: (sessionId: string) => void) => Promise<void>
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** The session-list slice the fallback lookup reads. */
|
|
61
|
+
export interface LaneOpenSessionList {
|
|
62
|
+
byId?: Record<string, { cwd?: string } | undefined>
|
|
63
|
+
ids?: readonly string[]
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Everything one branch choice needs, injected so tests drive it without a network. */
|
|
67
|
+
export interface LaneOpenDeps {
|
|
68
|
+
/** `POST /worktree/lane/create` — the worktree behind the branch. */
|
|
69
|
+
createLane(input: CreateLaneInput): Promise<CreateLaneResult>
|
|
70
|
+
/** `POST /worktree/lane/bind` — record the conversation and apply the lane preset. */
|
|
71
|
+
bindLane(input: BindLaneInput): Promise<BindLaneResult>
|
|
72
|
+
/** Platform navigation; absent on a shell that does not provide the service. */
|
|
73
|
+
navigation?: LaneOpenNavigation | undefined
|
|
74
|
+
/** Current session-list snapshot, used only for the superseded-navigation fallback. */
|
|
75
|
+
listSessions(): LaneOpenSessionList
|
|
76
|
+
/** Bounded-poll knobs for that fallback (test seam). */
|
|
77
|
+
timeoutMs?: number
|
|
78
|
+
pollMs?: number
|
|
79
|
+
/** Warning sink (test seam). */
|
|
80
|
+
warn?(message: string, error: unknown): void
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** One branch choice: the conversation asking, the repo, and the branch. */
|
|
84
|
+
export interface LaneOpenInput {
|
|
85
|
+
/** The conversation that asked; undefined cannot be moved anywhere. */
|
|
86
|
+
sessionId: string | undefined
|
|
87
|
+
/** Repository root (any directory inside it resolves on the host). */
|
|
88
|
+
repoPath: string
|
|
89
|
+
/** Branch to check out in the lane; created at `base` when it does not exist. */
|
|
90
|
+
branch: string
|
|
91
|
+
/** Base commit-ish for a branch that has to be created. */
|
|
92
|
+
base?: string
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The outcome of one branch choice, in worktree terms (the picker maps it to its own wire type). */
|
|
96
|
+
export type LaneOpenResult =
|
|
97
|
+
| {
|
|
98
|
+
ok: true
|
|
99
|
+
/** The lane's branch. */
|
|
100
|
+
branch: string
|
|
101
|
+
/** True only when this conversation now runs in the lane's directory. */
|
|
102
|
+
opened: boolean
|
|
103
|
+
}
|
|
104
|
+
| {
|
|
105
|
+
ok: false
|
|
106
|
+
/** The host's message for the failure. */
|
|
107
|
+
message: string
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** How often the fallback looks for the lane's conversation. */
|
|
111
|
+
const LANE_SESSION_POLL_MS = 100
|
|
112
|
+
/** How long the fallback waits for the shell to publish that conversation. */
|
|
113
|
+
const LANE_SESSION_TIMEOUT_MS = 8_000
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Create (or attach) the branch's lane, move this conversation onto it, and
|
|
117
|
+
* record the binding.
|
|
118
|
+
*
|
|
119
|
+
* The lane is created first and never rolled back here: the worktree is a real
|
|
120
|
+
* place the user asked for, so a navigation that does not happen reports
|
|
121
|
+
* `opened: false` (the picker then says where to find it) instead of discarding
|
|
122
|
+
* the directory. A binding failure is reported and swallowed for the same
|
|
123
|
+
* reason — the conversation is in the lane either way, and the composer's own
|
|
124
|
+
* binder retries the record on its next status read.
|
|
125
|
+
* @param deps - the host calls, the navigation service and the session list.
|
|
126
|
+
* @param input - the conversation, repository and branch.
|
|
127
|
+
* @returns whether the conversation now runs in the lane.
|
|
128
|
+
*/
|
|
129
|
+
export async function openLaneForBranch(deps: LaneOpenDeps, input: LaneOpenInput): Promise<LaneOpenResult> {
|
|
130
|
+
let lane: CreateLaneResult
|
|
131
|
+
try {
|
|
132
|
+
lane = await deps.createLane({
|
|
133
|
+
repoPath: input.repoPath,
|
|
134
|
+
branch: input.branch,
|
|
135
|
+
...(input.base === undefined ? {} : { base: input.base }),
|
|
136
|
+
})
|
|
137
|
+
} catch (error) {
|
|
138
|
+
return { ok: false, message: error instanceof Error ? error.message : String(error) }
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const opened = await moveOntoLane(deps, input.sessionId, lane)
|
|
142
|
+
if (opened === undefined) return { ok: true, branch: lane.branch, opened: false }
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
await deps.bindLane({ repoPath: input.repoPath, branch: lane.branch, sessionId: opened })
|
|
146
|
+
} catch (error) {
|
|
147
|
+
deps.warn?.('[dsh-worktree] lane binding failed:', error)
|
|
148
|
+
}
|
|
149
|
+
return { ok: true, branch: lane.branch, opened: true }
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Show the conversation that runs in `lane`, when the shell can be asked at all.
|
|
154
|
+
* @returns the conversation now in the lane, or undefined when nothing moved.
|
|
155
|
+
*/
|
|
156
|
+
async function moveOntoLane(
|
|
157
|
+
deps: LaneOpenDeps,
|
|
158
|
+
sessionId: string | undefined,
|
|
159
|
+
lane: CreateLaneResult,
|
|
160
|
+
): Promise<string | undefined> {
|
|
161
|
+
// Without a conversation to move, a workspace to connect, or a navigation
|
|
162
|
+
// service to ask there is nothing to do: the caller reports the lane as ready
|
|
163
|
+
// and says where to pick it up.
|
|
164
|
+
if (sessionId === undefined || lane.workspaceId === null) return undefined
|
|
165
|
+
const navigation = deps.navigation
|
|
166
|
+
if (navigation?.openWorkspace === undefined) return undefined
|
|
167
|
+
|
|
168
|
+
let opened: string | undefined
|
|
169
|
+
try {
|
|
170
|
+
await navigation.openWorkspace(lane.workspaceId, (sessionId) => { opened = sessionId })
|
|
171
|
+
} catch (error) {
|
|
172
|
+
deps.warn?.('[dsh-worktree] could not open a conversation on the lane:', error)
|
|
173
|
+
return undefined
|
|
174
|
+
}
|
|
175
|
+
if (opened !== undefined) return opened
|
|
176
|
+
// Superseded before it reported: the workspace may still have been connected,
|
|
177
|
+
// and the session list is then the only witness of the new conversation.
|
|
178
|
+
return await waitForLaneSession(deps, lane.path)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* The conversation whose cwd is the lane directory, newest first, within the
|
|
183
|
+
* bounded wait. Used only when the navigation did not name it.
|
|
184
|
+
* @param deps - session list and the poll knobs.
|
|
185
|
+
* @param lanePath - the lane directory the conversation must run in.
|
|
186
|
+
* @returns the session id, or undefined when none appeared in time.
|
|
187
|
+
*/
|
|
188
|
+
export async function waitForLaneSession(deps: LaneOpenDeps, lanePath: string): Promise<string | undefined> {
|
|
189
|
+
const pollMs = deps.pollMs ?? LANE_SESSION_POLL_MS
|
|
190
|
+
const timeoutMs = deps.timeoutMs ?? LANE_SESSION_TIMEOUT_MS
|
|
191
|
+
const deadline = Date.now() + timeoutMs
|
|
192
|
+
for (;;) {
|
|
193
|
+
const snapshot = deps.listSessions()
|
|
194
|
+
const byId = snapshot.byId ?? {}
|
|
195
|
+
const ids = snapshot.ids ?? Object.keys(byId)
|
|
196
|
+
// Newest first: the shell's freshly connected draft is the one we want, and
|
|
197
|
+
// a lane with several conversations must not hand back an old one.
|
|
198
|
+
for (const id of [...ids].reverse()) {
|
|
199
|
+
if (byId[id]?.cwd === lanePath) return id
|
|
200
|
+
}
|
|
201
|
+
if (Date.now() >= deadline) return undefined
|
|
202
|
+
await new Promise((resolve) => { setTimeout(resolve, pollMs) })
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retire the sidebar row of a lane whose conversations are all archived.
|
|
3
|
+
*
|
|
4
|
+
* Why a lane ever has a workspace row
|
|
5
|
+
* The platform accounts a session to a workspace only while the session's cwd
|
|
6
|
+
* equals that workspace's path (`WorkspaceEntity.sessionIds` filters by the
|
|
7
|
+
* session's path, and `attachSession` refuses any other cwd), and a blank
|
|
8
|
+
* conversation that no workspace accounts for renders an inert composer
|
|
9
|
+
* ("choose a workspace to start"). So the lane's directory must BE a workspace
|
|
10
|
+
* while a conversation runs in it — that part is a platform requirement, not a
|
|
11
|
+
* taste, and no plugin can avoid the row.
|
|
12
|
+
*
|
|
13
|
+
* What this owns
|
|
14
|
+
* The row's LIFETIME. Once every conversation the lane accounts for is
|
|
15
|
+
* archived, the registration is dead weight: the directory, the branch and the
|
|
16
|
+
* manifest binding stay, so picking that branch again re-registers the
|
|
17
|
+
* directory in one call. The host half retires the same way from archive
|
|
18
|
+
* events; this half runs where the archive set is visible to the browser, so it
|
|
19
|
+
* also cleans up rows an earlier build left behind — including on an
|
|
20
|
+
* installation whose host bundle predates that change.
|
|
21
|
+
*
|
|
22
|
+
* Safety rules
|
|
23
|
+
* - only paths that are this plugin's lane directories (`<repo>/.dsh/workspaces/<branch>`);
|
|
24
|
+
* - only workspaces that account for at least one conversation (a lane created
|
|
25
|
+
* moments ago has none yet, and must not be retired from under its setup);
|
|
26
|
+
* - only when every accounted conversation is archived. A lane with a live
|
|
27
|
+
* conversation keeps its workspace, or that conversation loses the workspace
|
|
28
|
+
* it runs in.
|
|
29
|
+
* @module @dsh-cove/dsh-client-ui-worktree/client/lane-workspace-sweeper
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import { isLaneDirectory } from '../../../core/worktree/paths.ts'
|
|
33
|
+
|
|
34
|
+
/** The workspace-list slice the sweep reads (mirrors the client workspace snapshot). */
|
|
35
|
+
export interface LaneSweepSnapshot {
|
|
36
|
+
/** `ready` once the host list has arrived; earlier phases carry no items. */
|
|
37
|
+
phase?: string
|
|
38
|
+
items?: readonly {
|
|
39
|
+
workspaceId?: string
|
|
40
|
+
path?: string
|
|
41
|
+
sessionIds?: readonly string[]
|
|
42
|
+
}[]
|
|
43
|
+
/** Complete registry-global archive set. */
|
|
44
|
+
archivedSessionIds?: readonly string[]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The client workspace face the sweep needs. */
|
|
48
|
+
export interface LaneSweeperWorkspaces {
|
|
49
|
+
list?: {
|
|
50
|
+
getSnapshot?: () => LaneSweepSnapshot
|
|
51
|
+
subscribe?: (listener: () => void) => () => void
|
|
52
|
+
}
|
|
53
|
+
delete?: (workspaceId: string) => Promise<void>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Everything the sweep needs, injected so tests drive it without a browser. */
|
|
57
|
+
export interface LaneSweeperFaces {
|
|
58
|
+
/** `ctx.workspaces` — the archived set and the delete command. */
|
|
59
|
+
workspaces?: LaneSweeperWorkspaces | undefined
|
|
60
|
+
/** Warning sink (test seam). */
|
|
61
|
+
warn?(message: string, error: unknown): void
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The lane workspaces whose conversations are all archived, in snapshot order.
|
|
66
|
+
* @param snapshot - the client workspace snapshot.
|
|
67
|
+
* @returns workspace ids to retire.
|
|
68
|
+
*/
|
|
69
|
+
export function laneWorkspacesToRetire(snapshot: LaneSweepSnapshot | undefined): string[] {
|
|
70
|
+
if (snapshot === undefined || snapshot.phase !== 'ready') return []
|
|
71
|
+
const archived = new Set(snapshot.archivedSessionIds ?? [])
|
|
72
|
+
const retiring: string[] = []
|
|
73
|
+
for (const workspace of snapshot.items ?? []) {
|
|
74
|
+
const id = workspace.workspaceId
|
|
75
|
+
const path = workspace.path
|
|
76
|
+
const sessionIds = workspace.sessionIds ?? []
|
|
77
|
+
if (id === undefined || path === undefined) continue
|
|
78
|
+
if (!isLaneDirectory(path)) continue
|
|
79
|
+
// A lane created moments ago accounts for no conversation yet: its workspace
|
|
80
|
+
// is being set up and must survive the sweep.
|
|
81
|
+
if (sessionIds.length === 0) continue
|
|
82
|
+
// A live conversation needs the workspace it runs in.
|
|
83
|
+
if (!sessionIds.every((sessionId) => archived.has(sessionId))) continue
|
|
84
|
+
retiring.push(id)
|
|
85
|
+
}
|
|
86
|
+
return retiring
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Sweep once: delete the registration of every lane whose conversations are all
|
|
91
|
+
* archived. A failure is reported and does not stop the rest.
|
|
92
|
+
* @param faces - the workspace face and the warning sink.
|
|
93
|
+
* @returns the workspace ids that were retired.
|
|
94
|
+
*/
|
|
95
|
+
export async function sweepLaneWorkspaces(faces: LaneSweeperFaces): Promise<string[]> {
|
|
96
|
+
const list = faces.workspaces?.list
|
|
97
|
+
const remove = faces.workspaces?.delete
|
|
98
|
+
if (list?.getSnapshot === undefined || remove === undefined) return []
|
|
99
|
+
const candidates = laneWorkspacesToRetire(list.getSnapshot())
|
|
100
|
+
const retired: string[] = []
|
|
101
|
+
for (const workspaceId of candidates) {
|
|
102
|
+
try {
|
|
103
|
+
await remove.call(faces.workspaces, workspaceId)
|
|
104
|
+
retired.push(workspaceId)
|
|
105
|
+
} catch (error) {
|
|
106
|
+
faces.warn?.('[dsh-worktree] could not retire a lane workspace:', error)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return retired
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Sweep on mount and on every workspace-list change (an archive, a new lane, a
|
|
114
|
+
* deletion). Sweeps never overlap: a change arriving mid-sweep queues one more
|
|
115
|
+
* pass, so the pass always sees the list the changes produced.
|
|
116
|
+
* @param faces - the workspace face and the warning sink.
|
|
117
|
+
* @returns the disposer (unsubscribes).
|
|
118
|
+
*/
|
|
119
|
+
export function mountLaneWorkspaceSweeper(faces: LaneSweeperFaces): () => void {
|
|
120
|
+
const list = faces.workspaces?.list
|
|
121
|
+
if (list?.getSnapshot === undefined || list.subscribe === undefined) return () => {}
|
|
122
|
+
let running = false
|
|
123
|
+
let queued = false
|
|
124
|
+
const run = (): void => {
|
|
125
|
+
if (running) { queued = true; return }
|
|
126
|
+
running = true
|
|
127
|
+
void sweepLaneWorkspaces(faces).catch((error: unknown) => {
|
|
128
|
+
faces.warn?.('[dsh-worktree] lane workspace sweep failed:', error)
|
|
129
|
+
}).finally(() => {
|
|
130
|
+
running = false
|
|
131
|
+
if (queued) { queued = false; run() }
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
run()
|
|
135
|
+
return list.subscribe(run)
|
|
136
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree lifecycle stage derivation (pure, shared with tests): given the
|
|
3
|
+
* disk truth and the latest status probe, classify a linked worktree into
|
|
4
|
+
* one of the four panel stages that drive its primary action.
|
|
5
|
+
*
|
|
6
|
+
* Also the single place that turns a client/host failure into localized copy:
|
|
7
|
+
* the panel and the dialogs must never print the host's English `message`
|
|
8
|
+
* verbatim in a Chinese UI, and a fence refusal must not read like a git bug.
|
|
9
|
+
* @module @dsh-cove/dsh-client-ui-worktree/client/lifecycle
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Translate } from '@deepseek-ai/dsh-client-ui-slots'
|
|
13
|
+
import type { WorktreeStatusView, WorktreeView } from '../../../core/worktree/types.ts'
|
|
14
|
+
import type { WorktreeErrorCode } from '../../../core/worktree/invariant.ts'
|
|
15
|
+
import { WorktreeApiError } from './api.ts'
|
|
16
|
+
import type { WorktreeKey } from './locales.ts'
|
|
17
|
+
|
|
18
|
+
/** Lifecycle stage of one linked worktree — drives the row's primary action. */
|
|
19
|
+
export type WorktreeStage = 'missing' | 'developing' | 'in-review' | 'merged'
|
|
20
|
+
|
|
21
|
+
export function stageOfWorktree(
|
|
22
|
+
worktree: Pick<WorktreeView, 'exists' | 'branch'>,
|
|
23
|
+
status: WorktreeStatusView | undefined,
|
|
24
|
+
): WorktreeStage {
|
|
25
|
+
if (!worktree.exists) return 'missing'
|
|
26
|
+
if (status?.merged === true) return 'merged'
|
|
27
|
+
// A pushed branch with a recorded PR url is under review; anything else
|
|
28
|
+
// is still developing (submit-PR is the next step).
|
|
29
|
+
if (status?.prUrl != null && status.prUrl !== '') return 'in-review'
|
|
30
|
+
return 'developing'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** The localized key for one domain error code. */
|
|
34
|
+
function codeKeyOf(code: WorktreeErrorCode | undefined): WorktreeKey {
|
|
35
|
+
switch (code) {
|
|
36
|
+
case 'worktree-exists': return 'error.worktreeExists'
|
|
37
|
+
case 'worktree-not-found': return 'error.worktreeNotFound'
|
|
38
|
+
case 'not-a-repository': return 'error.notARepository'
|
|
39
|
+
case 'workspace-unknown': return 'error.workspaceUnknown'
|
|
40
|
+
case 'invalid-branch': return 'error.invalidBranch'
|
|
41
|
+
case 'worktree-busy': return 'error.worktreeBusy'
|
|
42
|
+
case 'not-merged': return 'error.notMerged'
|
|
43
|
+
case 'session-create-failed':
|
|
44
|
+
case 'session-unknown': return 'error.laneSession'
|
|
45
|
+
case 'lane-mismatch': return 'error.laneMismatch'
|
|
46
|
+
default: return 'error.gitFailed'
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The localized key explaining one failure, or null when the error carries no
|
|
52
|
+
* known shape (the caller then shows its own message).
|
|
53
|
+
*/
|
|
54
|
+
export function worktreeErrorKeyOf(error: unknown): WorktreeKey | null {
|
|
55
|
+
if (error instanceof WorktreeApiError) {
|
|
56
|
+
if (error.kind === 'permission') return 'error.permissionDenied'
|
|
57
|
+
if (error.kind === 'malformed' || error.kind === 'transport') return 'error.unreachable'
|
|
58
|
+
return codeKeyOf(error.code)
|
|
59
|
+
}
|
|
60
|
+
return null
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Render one failure as user-facing copy.
|
|
65
|
+
* @param error - any thrown value from the worktree API.
|
|
66
|
+
* @param t - the `worktree` namespace translator.
|
|
67
|
+
* @returns localized text, with the raw detail attached for the git/unreachable cases.
|
|
68
|
+
*/
|
|
69
|
+
export function worktreeErrorMessage(error: unknown, t: Translate<WorktreeKey>): string {
|
|
70
|
+
const detail = error instanceof Error ? error.message : String(error)
|
|
71
|
+
const key = worktreeErrorKeyOf(error)
|
|
72
|
+
if (key === null) return detail
|
|
73
|
+
if (key === 'error.gitFailed' || key === 'error.unreachable') return t(key, { error: detail })
|
|
74
|
+
return t(key)
|
|
75
|
+
}
|