@dsh-cove/dsh-web-all 0.0.0-stage → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.i18n.yaml +6 -0
- package/README.md +205 -2
- package/README.zh.md +205 -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/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/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,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-session browser registry.
|
|
3
|
+
*
|
|
4
|
+
* Lazily creates one {@link SessionBrowser} per conversation and keeps the
|
|
5
|
+
* mapping stable while the session stays active: a session's first playwright
|
|
6
|
+
* tool call spawns its browser, every later call reuses it, and no other
|
|
7
|
+
* session can ever see it. Failure to create a handle removes the entry so the
|
|
8
|
+
* next call retries instead of wedging the session.
|
|
9
|
+
*
|
|
10
|
+
* Lifecycle guards (both optional via config):
|
|
11
|
+
* - idle TTL — unused browsers are disposed after `idleTimeoutMs`
|
|
12
|
+
* - concurrency cap — creating a new browser may dispose the least-recently
|
|
13
|
+
* used idle browser so at most `maxConcurrentBrowsers` stay alive
|
|
14
|
+
*/
|
|
15
|
+
export class SessionBrowserManager {
|
|
16
|
+
factory;
|
|
17
|
+
options;
|
|
18
|
+
sessions = new Map();
|
|
19
|
+
now;
|
|
20
|
+
setTimeoutFn;
|
|
21
|
+
clearTimeoutFn;
|
|
22
|
+
constructor(factory, options) {
|
|
23
|
+
this.factory = factory;
|
|
24
|
+
this.options = options;
|
|
25
|
+
this.now = options.now ?? Date.now;
|
|
26
|
+
this.setTimeoutFn = options.setTimeout ?? setTimeout;
|
|
27
|
+
this.clearTimeoutFn = options.clearTimeout ?? clearTimeout;
|
|
28
|
+
}
|
|
29
|
+
/** Resolve the browser for one session, creating it on first use. */
|
|
30
|
+
async get(sessionId) {
|
|
31
|
+
let entry = this.sessions.get(sessionId);
|
|
32
|
+
if (entry === undefined) {
|
|
33
|
+
await this.ensureCapacity(sessionId);
|
|
34
|
+
const browser = this.factory(sessionId).catch((error) => {
|
|
35
|
+
this.sessions.delete(sessionId);
|
|
36
|
+
throw error;
|
|
37
|
+
});
|
|
38
|
+
entry = { browser, lastUsedAt: this.now(), busy: 0 };
|
|
39
|
+
this.sessions.set(sessionId, entry);
|
|
40
|
+
this.armIdleTimer(sessionId, entry);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.touch(sessionId);
|
|
44
|
+
}
|
|
45
|
+
return this.wrap(sessionId, await entry.browser);
|
|
46
|
+
}
|
|
47
|
+
/** Number of sessions that have (or are creating) a browser. */
|
|
48
|
+
get size() {
|
|
49
|
+
return this.sessions.size;
|
|
50
|
+
}
|
|
51
|
+
/** Every session id currently tracked. */
|
|
52
|
+
ids() {
|
|
53
|
+
return [...this.sessions.keys()];
|
|
54
|
+
}
|
|
55
|
+
/** Whether a session currently owns (or is creating) a browser connection. */
|
|
56
|
+
has(sessionId) {
|
|
57
|
+
return this.sessions.has(sessionId);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The host-owned persistent context of a session browser, when one exists
|
|
61
|
+
* AND was created in liveView mode (dual-owner). Never creates a browser:
|
|
62
|
+
* the live-view upgrade must not spawn a browser just because a client
|
|
63
|
+
* opened the view.
|
|
64
|
+
*/
|
|
65
|
+
contextOf(sessionId) {
|
|
66
|
+
const entry = this.sessions.get(sessionId);
|
|
67
|
+
if (entry === undefined)
|
|
68
|
+
return Promise.resolve(null);
|
|
69
|
+
return entry.browser.then(browser => browser.context ?? null, () => null);
|
|
70
|
+
}
|
|
71
|
+
/** Dispose one session browser and drop it from the registry. */
|
|
72
|
+
async dispose(sessionId) {
|
|
73
|
+
const entry = this.sessions.get(sessionId);
|
|
74
|
+
if (entry === undefined)
|
|
75
|
+
return;
|
|
76
|
+
this.clearIdleTimer(entry);
|
|
77
|
+
this.sessions.delete(sessionId);
|
|
78
|
+
try {
|
|
79
|
+
await (await entry.browser).dispose();
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// A failed creation leaves no browser to dispose.
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await this.options.onDispose?.(sessionId);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Disk GC failures must not block browser lifecycle.
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** Close and dispose every session browser; the registry empties. */
|
|
92
|
+
async disposeAll() {
|
|
93
|
+
const ids = [...this.sessions.keys()];
|
|
94
|
+
await Promise.allSettled(ids.map((id) => this.dispose(id)));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Wrap call so each use refreshes the idle timer and marks the entry busy
|
|
98
|
+
* (idle eviction will not steal a browser mid-call).
|
|
99
|
+
*/
|
|
100
|
+
wrap(sessionId, browser) {
|
|
101
|
+
return {
|
|
102
|
+
sessionId: browser.sessionId,
|
|
103
|
+
profileDir: browser.profileDir,
|
|
104
|
+
outputDir: browser.outputDir,
|
|
105
|
+
call: async (rawName, args, signal) => {
|
|
106
|
+
this.beginUse(sessionId);
|
|
107
|
+
try {
|
|
108
|
+
return await browser.call(rawName, args, signal);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
this.endUse(sessionId);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
close: () => browser.close(),
|
|
115
|
+
dispose: () => browser.dispose(),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
beginUse(sessionId) {
|
|
119
|
+
const entry = this.sessions.get(sessionId);
|
|
120
|
+
if (entry === undefined)
|
|
121
|
+
return;
|
|
122
|
+
entry.busy += 1;
|
|
123
|
+
this.touch(sessionId);
|
|
124
|
+
}
|
|
125
|
+
endUse(sessionId) {
|
|
126
|
+
const entry = this.sessions.get(sessionId);
|
|
127
|
+
if (entry === undefined)
|
|
128
|
+
return;
|
|
129
|
+
entry.busy = Math.max(0, entry.busy - 1);
|
|
130
|
+
this.touch(sessionId);
|
|
131
|
+
}
|
|
132
|
+
touch(sessionId) {
|
|
133
|
+
const entry = this.sessions.get(sessionId);
|
|
134
|
+
if (entry === undefined)
|
|
135
|
+
return;
|
|
136
|
+
entry.lastUsedAt = this.now();
|
|
137
|
+
this.armIdleTimer(sessionId, entry);
|
|
138
|
+
}
|
|
139
|
+
armIdleTimer(sessionId, entry) {
|
|
140
|
+
this.clearIdleTimer(entry);
|
|
141
|
+
const idleTimeoutMs = this.options.idleTimeoutMs;
|
|
142
|
+
if (idleTimeoutMs <= 0)
|
|
143
|
+
return;
|
|
144
|
+
entry.idleTimer = this.setTimeoutFn(() => {
|
|
145
|
+
void this.disposeIdle(sessionId);
|
|
146
|
+
}, idleTimeoutMs);
|
|
147
|
+
}
|
|
148
|
+
clearIdleTimer(entry) {
|
|
149
|
+
if (entry.idleTimer === undefined)
|
|
150
|
+
return;
|
|
151
|
+
this.clearTimeoutFn(entry.idleTimer);
|
|
152
|
+
entry.idleTimer = undefined;
|
|
153
|
+
}
|
|
154
|
+
/** Idle timer fired: dispose only if still idle and not busy. */
|
|
155
|
+
async disposeIdle(sessionId) {
|
|
156
|
+
const entry = this.sessions.get(sessionId);
|
|
157
|
+
if (entry === undefined)
|
|
158
|
+
return;
|
|
159
|
+
if (entry.busy > 0) {
|
|
160
|
+
this.armIdleTimer(sessionId, entry);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const idleTimeoutMs = this.options.idleTimeoutMs;
|
|
164
|
+
if (idleTimeoutMs > 0 && this.now() - entry.lastUsedAt < idleTimeoutMs) {
|
|
165
|
+
this.armIdleTimer(sessionId, entry);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
await this.dispose(sessionId);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Before creating `incomingId`, dispose LRU idle browsers until under the
|
|
172
|
+
* concurrency cap. Busy browsers are skipped; if every other browser is
|
|
173
|
+
* busy and the cap is still reached, the absolute LRU (including busy) is
|
|
174
|
+
* force-disposed so a new session can start.
|
|
175
|
+
*/
|
|
176
|
+
async ensureCapacity(incomingId) {
|
|
177
|
+
const max = this.options.maxConcurrentBrowsers;
|
|
178
|
+
if (max <= 0)
|
|
179
|
+
return;
|
|
180
|
+
while (this.sessions.size >= max) {
|
|
181
|
+
const victim = this.pickEvictionVictim(incomingId, /*preferIdle*/ true)
|
|
182
|
+
?? this.pickEvictionVictim(incomingId, /*preferIdle*/ false);
|
|
183
|
+
if (victim === undefined)
|
|
184
|
+
return;
|
|
185
|
+
await this.dispose(victim);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
pickEvictionVictim(incomingId, preferIdle) {
|
|
189
|
+
let bestId;
|
|
190
|
+
let bestUsed = Number.POSITIVE_INFINITY;
|
|
191
|
+
for (const [id, entry] of this.sessions) {
|
|
192
|
+
if (id === incomingId)
|
|
193
|
+
continue;
|
|
194
|
+
if (preferIdle && entry.busy > 0)
|
|
195
|
+
continue;
|
|
196
|
+
if (entry.lastUsedAt < bestUsed) {
|
|
197
|
+
bestUsed = entry.lastUsedAt;
|
|
198
|
+
bestId = id;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return bestId;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disk GC for per-session Playwright profiles under `sessionsRoot`.
|
|
3
|
+
*
|
|
4
|
+
* Process-level idle eviction already stops Chromium/MCP children; this module
|
|
5
|
+
* reclaims the leftover profile directories (cookies, cache, screenshots) that
|
|
6
|
+
* otherwise grow without bound under `$DSH_HOME/playwright-sessions/`.
|
|
7
|
+
*/
|
|
8
|
+
export interface PruneProfilesOptions {
|
|
9
|
+
/** Absolute root that holds one directory per session. */
|
|
10
|
+
sessionsRoot: string;
|
|
11
|
+
/**
|
|
12
|
+
* Delete a profile directory when its mtime is older than this many ms.
|
|
13
|
+
* `0` disables age-based pruning.
|
|
14
|
+
*/
|
|
15
|
+
maxAgeMs: number;
|
|
16
|
+
/** Session ids whose live browsers must not be deleted. */
|
|
17
|
+
keepSessionIds?: Iterable<string>;
|
|
18
|
+
/** Optional clock for tests. */
|
|
19
|
+
now?: () => number;
|
|
20
|
+
}
|
|
21
|
+
export interface PruneProfilesResult {
|
|
22
|
+
removed: string[];
|
|
23
|
+
skippedLive: string[];
|
|
24
|
+
errors: string[];
|
|
25
|
+
}
|
|
26
|
+
/** Resolve the on-disk profile directory for one durable session id. */
|
|
27
|
+
export declare function profileDirFor(sessionsRoot: string, sessionId: string): string;
|
|
28
|
+
/** Best-effort recursive remove of one session profile directory. */
|
|
29
|
+
export declare function removeProfileDir(sessionsRoot: string, sessionId: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Delete stale profile directories under `sessionsRoot`.
|
|
32
|
+
*
|
|
33
|
+
* A directory is removed when:
|
|
34
|
+
* - it is a direct child of `sessionsRoot`, and
|
|
35
|
+
* - its mtime is older than `maxAgeMs` (when maxAgeMs > 0), and
|
|
36
|
+
* - its basename is not the sanitized key of any id in `keepSessionIds`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function pruneStaleProfiles(options: PruneProfilesOptions): PruneProfilesResult;
|
|
39
|
+
//# sourceMappingURL=profile-gc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-gc.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/playwright-sessions/profile-gc.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACjC,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKjF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CA2CrF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disk GC for per-session Playwright profiles under `sessionsRoot`.
|
|
3
|
+
*
|
|
4
|
+
* Process-level idle eviction already stops Chromium/MCP children; this module
|
|
5
|
+
* reclaims the leftover profile directories (cookies, cache, screenshots) that
|
|
6
|
+
* otherwise grow without bound under `$DSH_HOME/playwright-sessions/`.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { sanitizePlaywrightSessionKey } from "../../../core/playwright-sessions/names.js";
|
|
11
|
+
/** Resolve the on-disk profile directory for one durable session id. */
|
|
12
|
+
export function profileDirFor(sessionsRoot, sessionId) {
|
|
13
|
+
return join(sessionsRoot, sanitizePlaywrightSessionKey(sessionId));
|
|
14
|
+
}
|
|
15
|
+
/** Best-effort recursive remove of one session profile directory. */
|
|
16
|
+
export function removeProfileDir(sessionsRoot, sessionId) {
|
|
17
|
+
const dir = profileDirFor(sessionsRoot, sessionId);
|
|
18
|
+
if (!existsSync(dir))
|
|
19
|
+
return false;
|
|
20
|
+
rmSync(dir, { recursive: true, force: true });
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Delete stale profile directories under `sessionsRoot`.
|
|
25
|
+
*
|
|
26
|
+
* A directory is removed when:
|
|
27
|
+
* - it is a direct child of `sessionsRoot`, and
|
|
28
|
+
* - its mtime is older than `maxAgeMs` (when maxAgeMs > 0), and
|
|
29
|
+
* - its basename is not the sanitized key of any id in `keepSessionIds`.
|
|
30
|
+
*/
|
|
31
|
+
export function pruneStaleProfiles(options) {
|
|
32
|
+
const removed = [];
|
|
33
|
+
const skippedLive = [];
|
|
34
|
+
const errors = [];
|
|
35
|
+
const now = options.now ?? Date.now;
|
|
36
|
+
const keep = new Set([...(options.keepSessionIds ?? [])].map((id) => sanitizePlaywrightSessionKey(id)));
|
|
37
|
+
if (!existsSync(options.sessionsRoot)) {
|
|
38
|
+
return { removed, skippedLive, errors };
|
|
39
|
+
}
|
|
40
|
+
if (options.maxAgeMs <= 0) {
|
|
41
|
+
return { removed, skippedLive, errors };
|
|
42
|
+
}
|
|
43
|
+
const cutoff = now() - options.maxAgeMs;
|
|
44
|
+
let entries;
|
|
45
|
+
try {
|
|
46
|
+
entries = readdirSync(options.sessionsRoot);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
errors.push(String(err));
|
|
50
|
+
return { removed, skippedLive, errors };
|
|
51
|
+
}
|
|
52
|
+
for (const name of entries) {
|
|
53
|
+
if (keep.has(name)) {
|
|
54
|
+
skippedLive.push(name);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const full = join(options.sessionsRoot, name);
|
|
58
|
+
try {
|
|
59
|
+
const st = statSync(full);
|
|
60
|
+
if (!st.isDirectory())
|
|
61
|
+
continue;
|
|
62
|
+
if (st.mtimeMs >= cutoff)
|
|
63
|
+
continue;
|
|
64
|
+
rmSync(full, { recursive: true, force: true });
|
|
65
|
+
removed.push(name);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
errors.push(`${name}: ${String(err)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { removed, skippedLive, errors };
|
|
72
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Loopback and same-origin control plane for the attended Chrome lease. */
|
|
2
|
+
import type { IncomingMessage } from 'node:http';
|
|
3
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
4
|
+
import type { WebRoute } from '@deepseek-ai/dsh-host-webserver';
|
|
5
|
+
import type { PlaywrightSessionsController } from './controller.ts';
|
|
6
|
+
/**
|
|
7
|
+
* The strict loopback core fence for this control plane: a loopback socket,
|
|
8
|
+
* a loopback Host, and same-origin browser markers. The route family is mounted
|
|
9
|
+
* with the shared host access fence (see `registerPlaywrightControlRoutes`), so
|
|
10
|
+
* the deployment's canonical browser entry reaches the host's Chrome through an
|
|
11
|
+
* authenticated session; this predicate stays available for the loopback-only
|
|
12
|
+
* callers and tests.
|
|
13
|
+
*/
|
|
14
|
+
declare function trusted(request: IncomingMessage): boolean;
|
|
15
|
+
export declare function makePlaywrightControlRoutes(controller: PlaywrightSessionsController, isTrusted?: (request: IncomingMessage) => boolean): WebRoute[];
|
|
16
|
+
export declare function registerPlaywrightControlRoutes(ctx: Context, controller: PlaywrightSessionsController): () => void;
|
|
17
|
+
export { trusted as trustedPlaywrightControlRequest };
|
|
18
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/playwright-sessions/routes.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAI/D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAEnE;;;;;;;GAOG;AACH,iBAAS,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAElD;AA2BD,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,4BAA4B,EACxC,SAAS,GAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAiB,GACzD,QAAQ,EAAE,CAgCZ;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,4BAA4B,GAAG,MAAM,IAAI,CAIlH;AAED,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,CAAA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { PLAYWRIGHT_CONTROL_API_PREFIX, PlaywrightControlError } from "../../../core/playwright-sessions/control.js";
|
|
2
|
+
import { isLoopbackRequest } from "../access-trust/trust.js";
|
|
3
|
+
import { accessTrustOf } from "../access-trust/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* The strict loopback core fence for this control plane: a loopback socket,
|
|
6
|
+
* a loopback Host, and same-origin browser markers. The route family is mounted
|
|
7
|
+
* with the shared host access fence (see `registerPlaywrightControlRoutes`), so
|
|
8
|
+
* the deployment's canonical browser entry reaches the host's Chrome through an
|
|
9
|
+
* authenticated session; this predicate stays available for the loopback-only
|
|
10
|
+
* callers and tests.
|
|
11
|
+
*/
|
|
12
|
+
function trusted(request) {
|
|
13
|
+
return isLoopbackRequest(request);
|
|
14
|
+
}
|
|
15
|
+
function json(response, status, body) {
|
|
16
|
+
response.writeHead(status, {
|
|
17
|
+
'content-type': 'application/json; charset=utf-8',
|
|
18
|
+
'cache-control': 'no-store',
|
|
19
|
+
'x-content-type-options': 'nosniff',
|
|
20
|
+
'referrer-policy': 'no-referrer',
|
|
21
|
+
});
|
|
22
|
+
response.end(JSON.stringify(body));
|
|
23
|
+
}
|
|
24
|
+
async function body(request, maxBytes = 16 * 1024) {
|
|
25
|
+
const chunks = [];
|
|
26
|
+
let size = 0;
|
|
27
|
+
for await (const chunk of request) {
|
|
28
|
+
const value = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
29
|
+
size += value.length;
|
|
30
|
+
if (size > maxBytes)
|
|
31
|
+
return null;
|
|
32
|
+
chunks.push(value);
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const parsed = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
36
|
+
return typeof parsed === 'object' && parsed !== null ? parsed : null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function makePlaywrightControlRoutes(controller, isTrusted = trusted) {
|
|
43
|
+
const handler = async (request, response) => {
|
|
44
|
+
if (!isTrusted(request)) {
|
|
45
|
+
json(response, 403, { ok: false, error: { code: 'forbidden', message: 'loopback same-origin access only' } });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const url = new URL(request.url ?? '/', 'http://dsh.local');
|
|
49
|
+
try {
|
|
50
|
+
if (url.pathname === `${PLAYWRIGHT_CONTROL_API_PREFIX}/status` && request.method === 'GET') {
|
|
51
|
+
const sessionId = url.searchParams.get('sessionId');
|
|
52
|
+
if (!sessionId)
|
|
53
|
+
throw new PlaywrightControlError('bad-request', 'sessionId is required');
|
|
54
|
+
json(response, 200, { ok: true, value: controller.status(sessionId) });
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if ((url.pathname === `${PLAYWRIGHT_CONTROL_API_PREFIX}/connect` || url.pathname === `${PLAYWRIGHT_CONTROL_API_PREFIX}/disconnect`) && request.method === 'POST') {
|
|
58
|
+
if (!String(request.headers['content-type'] ?? '').toLowerCase().startsWith('application/json')) {
|
|
59
|
+
json(response, 415, { ok: false, error: { code: 'bad-request', message: 'application/json required' } });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const input = await body(request);
|
|
63
|
+
if (typeof input?.['sessionId'] !== 'string' || input['sessionId'] === '')
|
|
64
|
+
throw new PlaywrightControlError('bad-request', 'sessionId is required');
|
|
65
|
+
const value = url.pathname.endsWith('/connect')
|
|
66
|
+
? await controller.connect(input['sessionId'])
|
|
67
|
+
: await controller.disconnect(input['sessionId']);
|
|
68
|
+
json(response, 200, { ok: true, value });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
json(response, 404, { ok: false, error: { code: 'not-found', message: 'unknown route' } });
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const code = error instanceof PlaywrightControlError ? error.code : 'internal';
|
|
75
|
+
const status = code === 'forbidden' ? 403 : code === 'not-found' ? 404 : code === 'busy' || code === 'not-owner' || code === 'wrong-mode' ? 409 : code === 'bad-request' ? 400 : code === 'connect-failed' ? 502 : 500;
|
|
76
|
+
json(response, status, { ok: false, error: { code, message: error instanceof Error ? error.message : String(error) } });
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
return [{ kind: 'prefix', path: PLAYWRIGHT_CONTROL_API_PREFIX, handler }];
|
|
80
|
+
}
|
|
81
|
+
export function registerPlaywrightControlRoutes(ctx, controller) {
|
|
82
|
+
const isTrusted = accessTrustOf(ctx).isTrusted;
|
|
83
|
+
const disposers = makePlaywrightControlRoutes(controller, isTrusted).map(route => ctx.webServer.register(route));
|
|
84
|
+
return () => { for (const dispose of disposers.reverse())
|
|
85
|
+
dispose(); };
|
|
86
|
+
}
|
|
87
|
+
export { trusted as trustedPlaywrightControlRequest };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Index boot scripts and wire constants of the remote-access domain.
|
|
3
|
+
*
|
|
4
|
+
* The deployment's canonical entry (browser -> reverse proxy -> loopback
|
|
5
|
+
* `dsh web`) is a plain-HTTP origin. Two browser facts follow, and both are
|
|
6
|
+
* fixed here for every entry, whether or not the optional server-mode gateway
|
|
7
|
+
* is mounted:
|
|
8
|
+
*
|
|
9
|
+
* 1. `crypto.randomUUID` does not exist outside a secure context. The DSH
|
|
10
|
+
* client mints RPC ids with it, so the polyfill is injected into every
|
|
11
|
+
* served index document (issue #1024).
|
|
12
|
+
* 2. `navigator.clipboard` does not exist either, because the Clipboard API is
|
|
13
|
+
* secure-context gated. Upstream DSH copy affordances call
|
|
14
|
+
* `navigator.clipboard.writeText` without a fallback, so a copy button
|
|
15
|
+
* throws on a remote page while working on the loopback page. The shim backs
|
|
16
|
+
* `writeText` with the legacy `document.execCommand('copy')` path and never
|
|
17
|
+
* replaces a real clipboard object.
|
|
18
|
+
*
|
|
19
|
+
* Host ownership is per request instead of a static row: the index document
|
|
20
|
+
* points at {@link HOST_ACCESS_BOOT_PATH} with a parser-blocking
|
|
21
|
+
* `<script src>`, whose handler decides from the request Host whether this page
|
|
22
|
+
* may claim the Host (`__DSH_TRANSPORT__.ownsHost`). Without the claim the DSH
|
|
23
|
+
* client keeps the whole settings plane in a process-local memory store and
|
|
24
|
+
* renders Settings -> Models as "settings are unavailable in this browser",
|
|
25
|
+
* while the provider directory, the account page and the config-file entry all
|
|
26
|
+
* stay empty.
|
|
27
|
+
* @module dsh-web-all/host/services/remote-access/boot-scripts
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Parser-blocking boot script path; the handler decides per request.
|
|
31
|
+
* Re-exported from `core/remote-access/paths.ts`, the single home the browser
|
|
32
|
+
* half reads too.
|
|
33
|
+
*/
|
|
34
|
+
export { HOST_ACCESS_BOOT_PATH, HOST_ACCESS_MARKER_COOKIE, HOST_ACCESS_MARKER_MAX_AGE_SECONDS, HOST_ACCESS_MARKER_VALUE, HOST_ACCESS_SESSION_PATH, } from '../../../core/remote-access/paths.ts';
|
|
35
|
+
/**
|
|
36
|
+
* `crypto.randomUUID` polyfill for non-secure contexts. Kept byte-compatible
|
|
37
|
+
* with the script the server-mode gateway used to inject, so the two renderers
|
|
38
|
+
* cannot drift.
|
|
39
|
+
*/
|
|
40
|
+
export declare const UUID_POLYFILL_SCRIPT: string;
|
|
41
|
+
/**
|
|
42
|
+
* `navigator.clipboard` shim for non-secure contexts. Only installed when the
|
|
43
|
+
* platform exposes no clipboard at all, so a secure-context page keeps the real
|
|
44
|
+
* API. `readText` cannot be polyfilled from a page (the paste event is the only
|
|
45
|
+
* read path), so it rejects instead of throwing synchronously; callers that
|
|
46
|
+
* already fall back on rejection keep working.
|
|
47
|
+
*/
|
|
48
|
+
export declare const CLIPBOARD_SHIM_SCRIPT: string;
|
|
49
|
+
/**
|
|
50
|
+
* Boot script body served for one admission decision.
|
|
51
|
+
* @param admitted - whether the requesting Host passed the host access fence.
|
|
52
|
+
* @returns an inline script claiming Host ownership, or a no-op script.
|
|
53
|
+
*/
|
|
54
|
+
export declare function hostAccessBootScript(admitted: boolean): string;
|
|
55
|
+
//# sourceMappingURL=boot-scripts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-scripts.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/remote-access/boot-scripts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;GAIG;AACH,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,sCAAsC,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAkBvB,CAAA;AAEV;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAyBxB,CAAA;AAEV;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAW9D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Index boot scripts and wire constants of the remote-access domain.
|
|
3
|
+
*
|
|
4
|
+
* The deployment's canonical entry (browser -> reverse proxy -> loopback
|
|
5
|
+
* `dsh web`) is a plain-HTTP origin. Two browser facts follow, and both are
|
|
6
|
+
* fixed here for every entry, whether or not the optional server-mode gateway
|
|
7
|
+
* is mounted:
|
|
8
|
+
*
|
|
9
|
+
* 1. `crypto.randomUUID` does not exist outside a secure context. The DSH
|
|
10
|
+
* client mints RPC ids with it, so the polyfill is injected into every
|
|
11
|
+
* served index document (issue #1024).
|
|
12
|
+
* 2. `navigator.clipboard` does not exist either, because the Clipboard API is
|
|
13
|
+
* secure-context gated. Upstream DSH copy affordances call
|
|
14
|
+
* `navigator.clipboard.writeText` without a fallback, so a copy button
|
|
15
|
+
* throws on a remote page while working on the loopback page. The shim backs
|
|
16
|
+
* `writeText` with the legacy `document.execCommand('copy')` path and never
|
|
17
|
+
* replaces a real clipboard object.
|
|
18
|
+
*
|
|
19
|
+
* Host ownership is per request instead of a static row: the index document
|
|
20
|
+
* points at {@link HOST_ACCESS_BOOT_PATH} with a parser-blocking
|
|
21
|
+
* `<script src>`, whose handler decides from the request Host whether this page
|
|
22
|
+
* may claim the Host (`__DSH_TRANSPORT__.ownsHost`). Without the claim the DSH
|
|
23
|
+
* client keeps the whole settings plane in a process-local memory store and
|
|
24
|
+
* renders Settings -> Models as "settings are unavailable in this browser",
|
|
25
|
+
* while the provider directory, the account page and the config-file entry all
|
|
26
|
+
* stay empty.
|
|
27
|
+
* @module dsh-web-all/host/services/remote-access/boot-scripts
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Parser-blocking boot script path; the handler decides per request.
|
|
31
|
+
* Re-exported from `core/remote-access/paths.ts`, the single home the browser
|
|
32
|
+
* half reads too.
|
|
33
|
+
*/
|
|
34
|
+
export { HOST_ACCESS_BOOT_PATH, HOST_ACCESS_MARKER_COOKIE, HOST_ACCESS_MARKER_MAX_AGE_SECONDS, HOST_ACCESS_MARKER_VALUE, HOST_ACCESS_SESSION_PATH, } from "../../../core/remote-access/paths.js";
|
|
35
|
+
/**
|
|
36
|
+
* `crypto.randomUUID` polyfill for non-secure contexts. Kept byte-compatible
|
|
37
|
+
* with the script the server-mode gateway used to inject, so the two renderers
|
|
38
|
+
* cannot drift.
|
|
39
|
+
*/
|
|
40
|
+
export const UUID_POLYFILL_SCRIPT = [
|
|
41
|
+
'(function(){',
|
|
42
|
+
'var g=typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:self;',
|
|
43
|
+
'if(typeof g.crypto==="undefined"){g.crypto={};}',
|
|
44
|
+
'if(typeof g.crypto.randomUUID!=="function"){',
|
|
45
|
+
'g.crypto.randomUUID=function(){',
|
|
46
|
+
'var a=new Uint8Array(16);',
|
|
47
|
+
'if(g.crypto.getRandomValues){g.crypto.getRandomValues(a);}',
|
|
48
|
+
'else{for(var j=0;j<16;j++){a[j]=Math.random()*256|0;}}',
|
|
49
|
+
'a[6]=(a[6]&0x0f)|0x40;',
|
|
50
|
+
'a[8]=(a[8]&0x3f)|0x80;',
|
|
51
|
+
'var h="",x="0123456789abcdef";',
|
|
52
|
+
'for(var i=0;i<16;i++){h+=x[a[i]>>4]+x[a[i]&0x0f];',
|
|
53
|
+
'if(i===3||i===5||i===7||i===9)h+="-";}',
|
|
54
|
+
'return h;',
|
|
55
|
+
'};',
|
|
56
|
+
'}',
|
|
57
|
+
'})();',
|
|
58
|
+
].join('');
|
|
59
|
+
/**
|
|
60
|
+
* `navigator.clipboard` shim for non-secure contexts. Only installed when the
|
|
61
|
+
* platform exposes no clipboard at all, so a secure-context page keeps the real
|
|
62
|
+
* API. `readText` cannot be polyfilled from a page (the paste event is the only
|
|
63
|
+
* read path), so it rejects instead of throwing synchronously; callers that
|
|
64
|
+
* already fall back on rejection keep working.
|
|
65
|
+
*/
|
|
66
|
+
export const CLIPBOARD_SHIM_SCRIPT = [
|
|
67
|
+
'(function(){',
|
|
68
|
+
'try{',
|
|
69
|
+
'var n=typeof navigator!=="undefined"?navigator:undefined;',
|
|
70
|
+
'if(n===undefined||n.clipboard!==undefined)return;',
|
|
71
|
+
'var writeText=function(text){return new Promise(function(resolve,reject){',
|
|
72
|
+
'try{',
|
|
73
|
+
'var area=document.createElement("textarea");',
|
|
74
|
+
'area.value=String(text);',
|
|
75
|
+
'area.setAttribute("readonly","");',
|
|
76
|
+
'area.style.position="fixed";',
|
|
77
|
+
'area.style.top="-1000px";',
|
|
78
|
+
'document.body.appendChild(area);',
|
|
79
|
+
'area.select();',
|
|
80
|
+
'var ok=document.execCommand("copy");',
|
|
81
|
+
'document.body.removeChild(area);',
|
|
82
|
+
'if(ok){resolve();}else{reject(new Error("clipboard write is unavailable on this origin"));}',
|
|
83
|
+
'}catch(e){reject(e);}',
|
|
84
|
+
'});};',
|
|
85
|
+
'var readText=function(){return Promise.reject(new Error("clipboard read is unavailable on this origin"));};',
|
|
86
|
+
'var shim={writeText:writeText,readText:readText};',
|
|
87
|
+
'try{Object.defineProperty(Navigator.prototype,"clipboard",{get:function(){return shim;},configurable:true});}',
|
|
88
|
+
'catch(e){try{Object.defineProperty(n,"clipboard",{value:shim,configurable:true});}catch(e2){}}',
|
|
89
|
+
'}catch(e){}',
|
|
90
|
+
'})();',
|
|
91
|
+
].join('');
|
|
92
|
+
/**
|
|
93
|
+
* Boot script body served for one admission decision.
|
|
94
|
+
* @param admitted - whether the requesting Host passed the host access fence.
|
|
95
|
+
* @returns an inline script claiming Host ownership, or a no-op script.
|
|
96
|
+
*/
|
|
97
|
+
export function hostAccessBootScript(admitted) {
|
|
98
|
+
if (!admitted)
|
|
99
|
+
return '/* web-all: this host is not a declared browser entry; the page keeps the memory settings plane */\n';
|
|
100
|
+
return [
|
|
101
|
+
'(function(){',
|
|
102
|
+
'try{',
|
|
103
|
+
'var t=globalThis.__DSH_TRANSPORT__||{};',
|
|
104
|
+
't.ownsHost=true;',
|
|
105
|
+
'globalThis.__DSH_TRANSPORT__=t;',
|
|
106
|
+
'}catch(e){}',
|
|
107
|
+
'})();',
|
|
108
|
+
].join('');
|
|
109
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote-access service domain: the two pieces every reverse-proxied
|
|
3
|
+
* deployment needs regardless of whether the optional server-mode gateway is
|
|
4
|
+
* mounted.
|
|
5
|
+
*
|
|
6
|
+
* - the per-request Host-ownership boot script and the authority posture
|
|
7
|
+
* readout (`./routes.ts`);
|
|
8
|
+
* - the index boot rows every entry shares: the parser-blocking ownership
|
|
9
|
+
* script, the `crypto.randomUUID` polyfill and the `navigator.clipboard`
|
|
10
|
+
* shim (`./boot-scripts.ts`).
|
|
11
|
+
*
|
|
12
|
+
* The ownership decision is the shared host access fence, so this domain can
|
|
13
|
+
* never claim more than the privileged panels already allow. Fail-closed: when
|
|
14
|
+
* the fence service is missing, `accessTrustOf` falls back to the strict
|
|
15
|
+
* loopback rule and only a loopback page (which already owns the Host) is
|
|
16
|
+
* admitted.
|
|
17
|
+
* @module dsh-web-all/host/services/remote-access
|
|
18
|
+
*/
|
|
19
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
20
|
+
export { CLIPBOARD_SHIM_SCRIPT, HOST_ACCESS_BOOT_PATH, HOST_ACCESS_MARKER_COOKIE, HOST_ACCESS_MARKER_MAX_AGE_SECONDS, HOST_ACCESS_MARKER_VALUE, HOST_ACCESS_SESSION_PATH, UUID_POLYFILL_SCRIPT, hostAccessBootScript, } from './boot-scripts.ts';
|
|
21
|
+
export { makeRemoteAccessRoutes, type RemoteAccessDeps } from './routes.ts';
|
|
22
|
+
/**
|
|
23
|
+
* Mount the service domain.
|
|
24
|
+
* @param ctx - host plugin context.
|
|
25
|
+
* @returns the disposer releasing the routes and the injection rows.
|
|
26
|
+
*/
|
|
27
|
+
export declare function register(ctx: Context): () => void;
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/remote-access/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAQlD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,IAAI,CAiBjD"}
|