@dsh-cove/dsh-web-all 0.0.0-stage → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.i18n.yaml +6 -0
- package/README.md +201 -2
- package/README.zh.md +202 -0
- package/cordis.patch.yml +59 -0
- package/lib/client.js +25413 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +20024 -0
- package/lib/invariant.js +6 -0
- package/lib/types/client/compat.d.ts +29 -0
- package/lib/types/client/compat.d.ts.map +1 -0
- package/lib/types/client/compat.js +69 -0
- package/lib/types/client/conversation/git-branch.d.ts +13 -0
- package/lib/types/client/conversation/git-branch.d.ts.map +1 -0
- package/lib/types/client/conversation/git-branch.js +121 -0
- package/lib/types/client/conversation/git-graph/api.d.ts +42 -0
- package/lib/types/client/conversation/git-graph/api.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/api.js +72 -0
- package/lib/types/client/conversation/git-graph/branch-chip.d.ts +47 -0
- package/lib/types/client/conversation/git-graph/branch-chip.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/branch-chip.js +268 -0
- package/lib/types/client/conversation/git-graph/branch-popover.d.ts +32 -0
- package/lib/types/client/conversation/git-graph/branch-popover.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/branch-popover.js +108 -0
- package/lib/types/client/conversation/git-graph/chip.d.ts +24 -0
- package/lib/types/client/conversation/git-graph/chip.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/chip.js +15 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts +30 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.js +52 -0
- package/lib/types/client/conversation/git-graph/error-copy.d.ts +17 -0
- package/lib/types/client/conversation/git-graph/error-copy.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/error-copy.js +44 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.d.ts +21 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.js +112 -0
- package/lib/types/client/conversation/git-graph/hero-seat.d.ts +53 -0
- package/lib/types/client/conversation/git-graph/hero-seat.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/hero-seat.js +54 -0
- package/lib/types/client/conversation/git-graph/locales.d.ts +88 -0
- package/lib/types/client/conversation/git-graph/locales.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/locales.js +85 -0
- package/lib/types/client/conversation/git-graph/sse-leader.d.ts +37 -0
- package/lib/types/client/conversation/git-graph/sse-leader.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/sse-leader.js +101 -0
- package/lib/types/client/conversation/index.d.ts +43 -0
- package/lib/types/client/conversation/index.d.ts.map +1 -0
- package/lib/types/client/conversation/index.js +39 -0
- package/lib/types/client/conversation/selector-context.d.ts +12 -0
- package/lib/types/client/conversation/selector-context.d.ts.map +1 -0
- package/lib/types/client/conversation/selector-context.js +11 -0
- package/lib/types/client/conversation/session-lane-chip.d.ts +72 -0
- package/lib/types/client/conversation/session-lane-chip.d.ts.map +1 -0
- package/lib/types/client/conversation/session-lane-chip.js +163 -0
- package/lib/types/client/conversation/session-lane-locales.d.ts +22 -0
- package/lib/types/client/conversation/session-lane-locales.d.ts.map +1 -0
- package/lib/types/client/conversation/session-lane-locales.js +29 -0
- package/lib/types/client/conversation/subagent-model-dom.d.ts +16 -0
- package/lib/types/client/conversation/subagent-model-dom.d.ts.map +1 -0
- package/lib/types/client/conversation/subagent-model-dom.js +138 -0
- package/lib/types/client/conversation/subagent-model.d.ts +17 -0
- package/lib/types/client/conversation/subagent-model.d.ts.map +1 -0
- package/lib/types/client/conversation/subagent-model.js +156 -0
- package/lib/types/client/conversation/worktree/api.d.ts +97 -0
- package/lib/types/client/conversation/worktree/api.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/api.js +239 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts +35 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.js +55 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts +27 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.js +49 -0
- package/lib/types/client/conversation/worktree/lane-binding.d.ts +46 -0
- package/lib/types/client/conversation/worktree/lane-binding.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-binding.js +60 -0
- package/lib/types/client/conversation/worktree/lane-menu.d.ts +51 -0
- package/lib/types/client/conversation/worktree/lane-menu.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-menu.js +140 -0
- package/lib/types/client/conversation/worktree/lane-open.d.ts +126 -0
- package/lib/types/client/conversation/worktree/lane-open.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-open.js +140 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts +79 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.js +116 -0
- package/lib/types/client/conversation/worktree/lifecycle.d.ts +29 -0
- package/lib/types/client/conversation/worktree/lifecycle.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lifecycle.js +67 -0
- package/lib/types/client/conversation/worktree/locales.d.ts +58 -0
- package/lib/types/client/conversation/worktree/locales.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/locales.js +86 -0
- package/lib/types/client/conversation/worktree/semantic.d.ts +11 -0
- package/lib/types/client/conversation/worktree/semantic.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/semantic.js +10 -0
- package/lib/types/client/index.d.ts +14 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +45 -0
- package/lib/types/client/lark-inbox/i18n.d.ts +63 -0
- package/lib/types/client/lark-inbox/i18n.d.ts.map +1 -0
- package/lib/types/client/lark-inbox/i18n.js +119 -0
- package/lib/types/client/lark-inbox/wizard.d.ts +19 -0
- package/lib/types/client/lark-inbox/wizard.d.ts.map +1 -0
- package/lib/types/client/lark-inbox/wizard.js +158 -0
- package/lib/types/client/notify/i18n.d.ts +47 -0
- package/lib/types/client/notify/i18n.d.ts.map +1 -0
- package/lib/types/client/notify/i18n.js +87 -0
- package/lib/types/client/settings/family-scope.d.ts +23 -0
- package/lib/types/client/settings/family-scope.d.ts.map +1 -0
- package/lib/types/client/settings/family-scope.js +30 -0
- package/lib/types/client/settings/lark-inbox.d.ts +73 -0
- package/lib/types/client/settings/lark-inbox.d.ts.map +1 -0
- package/lib/types/client/settings/lark-inbox.js +144 -0
- package/lib/types/client/settings/notify.d.ts +66 -0
- package/lib/types/client/settings/notify.d.ts.map +1 -0
- package/lib/types/client/settings/notify.js +139 -0
- package/lib/types/client/settings/primitives-0.2.d.ts +137 -0
- package/lib/types/client/settings/primitives-0.2.d.ts.map +1 -0
- package/lib/types/client/settings/primitives-0.2.js +8 -0
- package/lib/types/client/sidebar/RenderBoundary.d.ts +17 -0
- package/lib/types/client/sidebar/RenderBoundary.d.ts.map +1 -0
- package/lib/types/client/sidebar/RenderBoundary.js +18 -0
- package/lib/types/client/sidebar/agent-browser.d.ts +9 -0
- package/lib/types/client/sidebar/agent-browser.d.ts.map +1 -0
- package/lib/types/client/sidebar/agent-browser.js +102 -0
- package/lib/types/client/sidebar/diff-view.d.ts +58 -0
- package/lib/types/client/sidebar/diff-view.d.ts.map +1 -0
- package/lib/types/client/sidebar/diff-view.js +223 -0
- package/lib/types/client/sidebar/git-workbench.d.ts +41 -0
- package/lib/types/client/sidebar/git-workbench.d.ts.map +1 -0
- package/lib/types/client/sidebar/git-workbench.js +480 -0
- package/lib/types/client/sidebar/icons.d.ts +9 -0
- package/lib/types/client/sidebar/icons.d.ts.map +1 -0
- package/lib/types/client/sidebar/icons.js +6 -0
- package/lib/types/client/sidebar/index.d.ts +19 -0
- package/lib/types/client/sidebar/index.d.ts.map +1 -0
- package/lib/types/client/sidebar/index.js +12 -0
- package/lib/types/client/sidebar/native-panels.d.ts +19 -0
- package/lib/types/client/sidebar/native-panels.d.ts.map +1 -0
- package/lib/types/client/sidebar/native-panels.js +103 -0
- package/lib/types/client/sidebar/page-shell.d.ts +52 -0
- package/lib/types/client/sidebar/page-shell.d.ts.map +1 -0
- package/lib/types/client/sidebar/page-shell.js +18 -0
- package/lib/types/client/sidebar/panels/memoir/api.d.ts +258 -0
- package/lib/types/client/sidebar/panels/memoir/api.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/api.js +135 -0
- package/lib/types/client/sidebar/panels/memoir/controller.d.ts +22 -0
- package/lib/types/client/sidebar/panels/memoir/controller.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/controller.js +38 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.d.ts +80 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.js +96 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.d.ts +21 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.js +288 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts +11 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.js +37 -0
- package/lib/types/client/sidebar/panels/memoir/panel.d.ts +26 -0
- package/lib/types/client/sidebar/panels/memoir/panel.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/panel.js +423 -0
- package/lib/types/client/sidebar/panels/memoir/styles.d.ts +22 -0
- package/lib/types/client/sidebar/panels/memoir/styles.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/styles.js +774 -0
- package/lib/types/client/sidebar/panels/memoir/types.d.ts +7 -0
- package/lib/types/client/sidebar/panels/memoir/types.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/types.js +5 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts +8 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.js +53 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts +13 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.js +110 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts +26 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.js +175 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts +14 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.js +34 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts +18 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.js +207 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts +8 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.js +168 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts +18 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.js +161 -0
- package/lib/types/client/sidebar/panels/ssh/api.d.ts +80 -0
- package/lib/types/client/sidebar/panels/ssh/api.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/api.js +333 -0
- package/lib/types/client/sidebar/panels/ssh/controller.d.ts +23 -0
- package/lib/types/client/sidebar/panels/ssh/controller.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/controller.js +41 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.d.ts +44 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.js +53 -0
- package/lib/types/client/sidebar/panels/ssh/locales.d.ts +155 -0
- package/lib/types/client/sidebar/panels/ssh/locales.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/locales.js +312 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts +3 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.js +2 -0
- package/lib/types/client/sidebar/right-pane-i18n.d.ts +121 -0
- package/lib/types/client/sidebar/right-pane-i18n.d.ts.map +1 -0
- package/lib/types/client/sidebar/right-pane-i18n.js +239 -0
- package/lib/types/client/sidebar/right-pane.d.ts +27 -0
- package/lib/types/client/sidebar/right-pane.d.ts.map +1 -0
- package/lib/types/client/sidebar/right-pane.js +112 -0
- package/lib/types/client/sidebar/scope.d.ts +17 -0
- package/lib/types/client/sidebar/scope.d.ts.map +1 -0
- package/lib/types/client/sidebar/scope.js +41 -0
- package/lib/types/client/trust.d.ts +78 -0
- package/lib/types/client/trust.d.ts.map +1 -0
- package/lib/types/client/trust.js +130 -0
- package/lib/types/client/ui-icons.d.ts +19 -0
- package/lib/types/client/ui-icons.d.ts.map +1 -0
- package/lib/types/client/ui-icons.js +33 -0
- package/lib/types/core/git-graph/commands.d.ts +36 -0
- package/lib/types/core/git-graph/commands.d.ts.map +1 -0
- package/lib/types/core/git-graph/commands.js +122 -0
- package/lib/types/core/git-graph/protocol.d.ts +104 -0
- package/lib/types/core/git-graph/protocol.d.ts.map +1 -0
- package/lib/types/core/git-graph/protocol.js +142 -0
- package/lib/types/core/index.d.ts +3 -0
- package/lib/types/core/index.d.ts.map +1 -0
- package/lib/types/core/index.js +2 -0
- package/lib/types/core/lark-inbox/gating.d.ts +21 -0
- package/lib/types/core/lark-inbox/gating.d.ts.map +1 -0
- package/lib/types/core/lark-inbox/gating.js +17 -0
- package/lib/types/core/lark-inbox/queue.d.ts +27 -0
- package/lib/types/core/lark-inbox/queue.d.ts.map +1 -0
- package/lib/types/core/lark-inbox/queue.js +78 -0
- package/lib/types/core/memoir/protocol.d.ts +42 -0
- package/lib/types/core/memoir/protocol.d.ts.map +1 -0
- package/lib/types/core/memoir/protocol.js +8 -0
- package/lib/types/core/no-browser-auth/contract.d.ts +22 -0
- package/lib/types/core/no-browser-auth/contract.d.ts.map +1 -0
- package/lib/types/core/no-browser-auth/contract.js +9 -0
- package/lib/types/core/notify/contract.d.ts +133 -0
- package/lib/types/core/notify/contract.d.ts.map +1 -0
- package/lib/types/core/notify/contract.js +186 -0
- package/lib/types/core/notify/feed.d.ts +116 -0
- package/lib/types/core/notify/feed.d.ts.map +1 -0
- package/lib/types/core/notify/feed.js +214 -0
- package/lib/types/core/playwright-sessions/contracts.d.ts +98 -0
- package/lib/types/core/playwright-sessions/contracts.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/contracts.js +68 -0
- package/lib/types/core/playwright-sessions/control.d.ts +19 -0
- package/lib/types/core/playwright-sessions/control.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/control.js +9 -0
- package/lib/types/core/playwright-sessions/index.d.ts +4 -0
- package/lib/types/core/playwright-sessions/index.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/index.js +3 -0
- package/lib/types/core/playwright-sessions/names.d.ts +4 -0
- package/lib/types/core/playwright-sessions/names.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/names.js +84 -0
- package/lib/types/core/playwright-sessions/schema.d.ts +4 -0
- package/lib/types/core/playwright-sessions/schema.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/schema.js +90 -0
- package/lib/types/core/playwright-sessions/wire.d.ts +78 -0
- package/lib/types/core/playwright-sessions/wire.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/wire.js +103 -0
- package/lib/types/core/remote-access/paths.d.ts +19 -0
- package/lib/types/core/remote-access/paths.d.ts.map +1 -0
- package/lib/types/core/remote-access/paths.js +18 -0
- package/lib/types/core/remote-web-ui/security.d.ts +35 -0
- package/lib/types/core/remote-web-ui/security.d.ts.map +1 -0
- package/lib/types/core/remote-web-ui/security.js +146 -0
- package/lib/types/core/right-pane/protocol.d.ts +25 -0
- package/lib/types/core/right-pane/protocol.d.ts.map +1 -0
- package/lib/types/core/right-pane/protocol.js +91 -0
- package/lib/types/core/schedule-mode/index.d.ts +7 -0
- package/lib/types/core/schedule-mode/index.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/index.js +6 -0
- package/lib/types/core/schedule-mode/native.d.ts +35 -0
- package/lib/types/core/schedule-mode/native.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/native.js +82 -0
- package/lib/types/core/schedule-mode/types.d.ts +177 -0
- package/lib/types/core/schedule-mode/types.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/types.js +65 -0
- package/lib/types/core/schedule-mode/view.d.ts +62 -0
- package/lib/types/core/schedule-mode/view.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/view.js +4 -0
- package/lib/types/core/ssh/protocol.d.ts +215 -0
- package/lib/types/core/ssh/protocol.d.ts.map +1 -0
- package/lib/types/core/ssh/protocol.js +23 -0
- package/lib/types/core/subagent-model/badges.d.ts +73 -0
- package/lib/types/core/subagent-model/badges.d.ts.map +1 -0
- package/lib/types/core/subagent-model/badges.js +105 -0
- package/lib/types/core/subagent-model/model-resolver.d.ts +25 -0
- package/lib/types/core/subagent-model/model-resolver.d.ts.map +1 -0
- package/lib/types/core/subagent-model/model-resolver.js +60 -0
- package/lib/types/core/worktree/invariant.d.ts +62 -0
- package/lib/types/core/worktree/invariant.d.ts.map +1 -0
- package/lib/types/core/worktree/invariant.js +72 -0
- package/lib/types/core/worktree/manifest.d.ts +71 -0
- package/lib/types/core/worktree/manifest.d.ts.map +1 -0
- package/lib/types/core/worktree/manifest.js +98 -0
- package/lib/types/core/worktree/paths.d.ts +60 -0
- package/lib/types/core/worktree/paths.d.ts.map +1 -0
- package/lib/types/core/worktree/paths.js +118 -0
- package/lib/types/core/worktree/pr-create.d.ts +67 -0
- package/lib/types/core/worktree/pr-create.d.ts.map +1 -0
- package/lib/types/core/worktree/pr-create.js +118 -0
- package/lib/types/core/worktree/protocol.d.ts +7 -0
- package/lib/types/core/worktree/protocol.d.ts.map +1 -0
- package/lib/types/core/worktree/protocol.js +6 -0
- package/lib/types/core/worktree/types.d.ts +292 -0
- package/lib/types/core/worktree/types.d.ts.map +1 -0
- package/lib/types/core/worktree/types.js +14 -0
- package/lib/types/core/worktree/workspace-model.d.ts +56 -0
- package/lib/types/core/worktree/workspace-model.d.ts.map +1 -0
- package/lib/types/core/worktree/workspace-model.js +14 -0
- package/lib/types/host/services/access-trust/index.d.ts +54 -0
- package/lib/types/host/services/access-trust/index.d.ts.map +1 -0
- package/lib/types/host/services/access-trust/index.js +82 -0
- package/lib/types/host/services/access-trust/trust.d.ts +70 -0
- package/lib/types/host/services/access-trust/trust.d.ts.map +1 -0
- package/lib/types/host/services/access-trust/trust.js +187 -0
- package/lib/types/host/services/codex-bridge/bridge.d.ts +106 -0
- package/lib/types/host/services/codex-bridge/bridge.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/bridge.js +321 -0
- package/lib/types/host/services/codex-bridge/codex-auth.d.ts +108 -0
- package/lib/types/host/services/codex-bridge/codex-auth.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/codex-auth.js +241 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.d.ts +58 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.js +120 -0
- package/lib/types/host/services/codex-bridge/http.d.ts +43 -0
- package/lib/types/host/services/codex-bridge/http.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/http.js +92 -0
- package/lib/types/host/services/codex-bridge/index.d.ts +63 -0
- package/lib/types/host/services/codex-bridge/index.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/index.js +111 -0
- package/lib/types/host/services/codex-bridge/loopback.d.ts +25 -0
- package/lib/types/host/services/codex-bridge/loopback.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/loopback.js +68 -0
- package/lib/types/host/services/codex-bridge/routes.d.ts +31 -0
- package/lib/types/host/services/codex-bridge/routes.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/routes.js +126 -0
- package/lib/types/host/services/family-config.d.ts +71 -0
- package/lib/types/host/services/family-config.d.ts.map +1 -0
- package/lib/types/host/services/family-config.js +166 -0
- package/lib/types/host/services/family-namespaces.d.ts +24 -0
- package/lib/types/host/services/family-namespaces.d.ts.map +1 -0
- package/lib/types/host/services/family-namespaces.js +30 -0
- package/lib/types/host/services/git-graph/index.d.ts +6 -0
- package/lib/types/host/services/git-graph/index.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/index.js +7 -0
- package/lib/types/host/services/git-graph/routes.d.ts +4 -0
- package/lib/types/host/services/git-graph/routes.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/routes.js +241 -0
- package/lib/types/host/services/git-graph/service.d.ts +52 -0
- package/lib/types/host/services/git-graph/service.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/service.js +301 -0
- package/lib/types/host/services/index.d.ts +23 -0
- package/lib/types/host/services/index.d.ts.map +1 -0
- package/lib/types/host/services/index.js +80 -0
- package/lib/types/host/services/lark-inbox/config.d.ts +24 -0
- package/lib/types/host/services/lark-inbox/config.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/config.js +48 -0
- package/lib/types/host/services/lark-inbox/gateway.d.ts +53 -0
- package/lib/types/host/services/lark-inbox/gateway.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/gateway.js +171 -0
- package/lib/types/host/services/lark-inbox/host-routes.d.ts +22 -0
- package/lib/types/host/services/lark-inbox/host-routes.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/host-routes.js +146 -0
- package/lib/types/host/services/lark-inbox/inbox-store.d.ts +39 -0
- package/lib/types/host/services/lark-inbox/inbox-store.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/inbox-store.js +124 -0
- package/lib/types/host/services/lark-inbox/index.d.ts +26 -0
- package/lib/types/host/services/lark-inbox/index.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/index.js +135 -0
- package/lib/types/host/services/lark-inbox/tools.d.ts +7 -0
- package/lib/types/host/services/lark-inbox/tools.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/tools.js +119 -0
- package/lib/types/host/services/lark-inbox/wizard.d.ts +62 -0
- package/lib/types/host/services/lark-inbox/wizard.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/wizard.js +211 -0
- package/lib/types/host/services/lifecycle.d.ts +29 -0
- package/lib/types/host/services/lifecycle.d.ts.map +1 -0
- package/lib/types/host/services/lifecycle.js +93 -0
- package/lib/types/host/services/memoir/index.d.ts +40 -0
- package/lib/types/host/services/memoir/index.d.ts.map +1 -0
- package/lib/types/host/services/memoir/index.js +52 -0
- package/lib/types/host/services/memoir/routes.d.ts +30 -0
- package/lib/types/host/services/memoir/routes.d.ts.map +1 -0
- package/lib/types/host/services/memoir/routes.js +364 -0
- package/lib/types/host/services/memoir/settings.d.ts +27 -0
- package/lib/types/host/services/memoir/settings.d.ts.map +1 -0
- package/lib/types/host/services/memoir/settings.js +120 -0
- package/lib/types/host/services/memoir/store.d.ts +35 -0
- package/lib/types/host/services/memoir/store.d.ts.map +1 -0
- package/lib/types/host/services/memoir/store.js +124 -0
- package/lib/types/host/services/memoir/tools.d.ts +8 -0
- package/lib/types/host/services/memoir/tools.d.ts.map +1 -0
- package/lib/types/host/services/memoir/tools.js +154 -0
- package/lib/types/host/services/no-browser-auth/index.d.ts +25 -0
- package/lib/types/host/services/no-browser-auth/index.d.ts.map +1 -0
- package/lib/types/host/services/no-browser-auth/index.js +42 -0
- package/lib/types/host/services/notify/config.d.ts +105 -0
- package/lib/types/host/services/notify/config.d.ts.map +1 -0
- package/lib/types/host/services/notify/config.js +123 -0
- package/lib/types/host/services/notify/feishu-sender.d.ts +120 -0
- package/lib/types/host/services/notify/feishu-sender.d.ts.map +1 -0
- package/lib/types/host/services/notify/feishu-sender.js +186 -0
- package/lib/types/host/services/notify/host-routes.d.ts +69 -0
- package/lib/types/host/services/notify/host-routes.d.ts.map +1 -0
- package/lib/types/host/services/notify/host-routes.js +112 -0
- package/lib/types/host/services/notify/index.d.ts +80 -0
- package/lib/types/host/services/notify/index.d.ts.map +1 -0
- package/lib/types/host/services/notify/index.js +263 -0
- package/lib/types/host/services/playwright-sessions/child.d.ts +76 -0
- package/lib/types/host/services/playwright-sessions/child.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/child.js +197 -0
- package/lib/types/host/services/playwright-sessions/controller.d.ts +25 -0
- package/lib/types/host/services/playwright-sessions/controller.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/controller.js +104 -0
- package/lib/types/host/services/playwright-sessions/index.d.ts +6 -0
- package/lib/types/host/services/playwright-sessions/index.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/index.js +161 -0
- package/lib/types/host/services/playwright-sessions/live-view.d.ts +32 -0
- package/lib/types/host/services/playwright-sessions/live-view.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/live-view.js +188 -0
- package/lib/types/host/services/playwright-sessions/manager.d.ts +87 -0
- package/lib/types/host/services/playwright-sessions/manager.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/manager.js +203 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.d.ts +39 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.js +72 -0
- package/lib/types/host/services/playwright-sessions/routes.d.ts +18 -0
- package/lib/types/host/services/playwright-sessions/routes.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/routes.js +87 -0
- package/lib/types/host/services/remote-access/boot-scripts.d.ts +55 -0
- package/lib/types/host/services/remote-access/boot-scripts.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/boot-scripts.js +109 -0
- package/lib/types/host/services/remote-access/index.d.ts +28 -0
- package/lib/types/host/services/remote-access/index.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/index.js +47 -0
- package/lib/types/host/services/remote-access/routes.d.ts +42 -0
- package/lib/types/host/services/remote-access/routes.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/routes.js +119 -0
- package/lib/types/host/services/remote-web-ui/index.d.ts +21 -0
- package/lib/types/host/services/remote-web-ui/index.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/index.js +325 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts +115 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.js +396 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts +28 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.js +48 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts +17 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.js +40 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts +73 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.js +242 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts +23 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.js +24 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts +89 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.js +768 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts +99 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.js +679 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts +43 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.js +92 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts +42 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.js +73 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts +13 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.js +17 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts +25 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.js +68 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts +75 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.js +116 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts +44 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.js +47 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts +21 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.js +37 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts +111 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.js +298 -0
- package/lib/types/host/services/remote-web-ui/server.d.ts +82 -0
- package/lib/types/host/services/remote-web-ui/server.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server.js +492 -0
- package/lib/types/host/services/resources.d.ts +9 -0
- package/lib/types/host/services/resources.d.ts.map +1 -0
- package/lib/types/host/services/resources.js +98 -0
- package/lib/types/host/services/right-pane/browser.d.ts +42 -0
- package/lib/types/host/services/right-pane/browser.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/browser.js +106 -0
- package/lib/types/host/services/right-pane/index.d.ts +22 -0
- package/lib/types/host/services/right-pane/index.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/index.js +114 -0
- package/lib/types/host/services/right-pane/wire.d.ts +6 -0
- package/lib/types/host/services/right-pane/wire.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/wire.js +9 -0
- package/lib/types/host/services/schedule-mode/config.d.ts +11 -0
- package/lib/types/host/services/schedule-mode/config.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/config.js +15 -0
- package/lib/types/host/services/schedule-mode/engine.d.ts +150 -0
- package/lib/types/host/services/schedule-mode/engine.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/engine.js +672 -0
- package/lib/types/host/services/schedule-mode/index.d.ts +33 -0
- package/lib/types/host/services/schedule-mode/index.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/index.js +175 -0
- package/lib/types/host/services/schedule-mode/routes.d.ts +31 -0
- package/lib/types/host/services/schedule-mode/routes.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/routes.js +109 -0
- package/lib/types/host/services/schedule-mode/session-create.d.ts +27 -0
- package/lib/types/host/services/schedule-mode/session-create.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/session-create.js +21 -0
- package/lib/types/host/services/schedule-mode/store.d.ts +36 -0
- package/lib/types/host/services/schedule-mode/store.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/store.js +309 -0
- package/lib/types/host/services/schedule-mode/tools.d.ts +13 -0
- package/lib/types/host/services/schedule-mode/tools.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/tools.js +132 -0
- package/lib/types/host/services/ssh/engine.d.ts +162 -0
- package/lib/types/host/services/ssh/engine.d.ts.map +1 -0
- package/lib/types/host/services/ssh/engine.js +699 -0
- package/lib/types/host/services/ssh/host-keys.d.ts +10 -0
- package/lib/types/host/services/ssh/host-keys.d.ts.map +1 -0
- package/lib/types/host/services/ssh/host-keys.js +108 -0
- package/lib/types/host/services/ssh/index.d.ts +38 -0
- package/lib/types/host/services/ssh/index.d.ts.map +1 -0
- package/lib/types/host/services/ssh/index.js +47 -0
- package/lib/types/host/services/ssh/routes.d.ts +29 -0
- package/lib/types/host/services/ssh/routes.d.ts.map +1 -0
- package/lib/types/host/services/ssh/routes.js +465 -0
- package/lib/types/host/services/ssh/store.d.ts +40 -0
- package/lib/types/host/services/ssh/store.d.ts.map +1 -0
- package/lib/types/host/services/ssh/store.js +330 -0
- package/lib/types/host/services/ssh/terminal-ws.d.ts +9 -0
- package/lib/types/host/services/ssh/terminal-ws.d.ts.map +1 -0
- package/lib/types/host/services/ssh/terminal-ws.js +142 -0
- package/lib/types/host/services/ssh/tools.d.ts +11 -0
- package/lib/types/host/services/ssh/tools.d.ts.map +1 -0
- package/lib/types/host/services/ssh/tools.js +270 -0
- package/lib/types/host/services/web-render/contracts.d.ts +93 -0
- package/lib/types/host/services/web-render/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-render/contracts.js +60 -0
- package/lib/types/host/services/web-render/index.d.ts +58 -0
- package/lib/types/host/services/web-render/index.d.ts.map +1 -0
- package/lib/types/host/services/web-render/index.js +90 -0
- package/lib/types/host/services/web-render/provider.d.ts +37 -0
- package/lib/types/host/services/web-render/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-render/provider.js +274 -0
- package/lib/types/host/services/web-search-anthropic/contracts.d.ts +117 -0
- package/lib/types/host/services/web-search-anthropic/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/contracts.js +90 -0
- package/lib/types/host/services/web-search-anthropic/index.d.ts +53 -0
- package/lib/types/host/services/web-search-anthropic/index.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/index.js +123 -0
- package/lib/types/host/services/web-search-anthropic/provider.d.ts +101 -0
- package/lib/types/host/services/web-search-anthropic/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/provider.js +237 -0
- package/lib/types/host/services/web-search-kaon/contracts.d.ts +114 -0
- package/lib/types/host/services/web-search-kaon/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-search-kaon/contracts.js +73 -0
- package/lib/types/host/services/web-search-kaon/index.d.ts +50 -0
- package/lib/types/host/services/web-search-kaon/index.d.ts.map +1 -0
- package/lib/types/host/services/web-search-kaon/index.js +114 -0
- package/lib/types/host/services/web-search-kaon/provider.d.ts +111 -0
- package/lib/types/host/services/web-search-kaon/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-search-kaon/provider.js +244 -0
- package/lib/types/host/services/worktree/git-runner.d.ts +82 -0
- package/lib/types/host/services/worktree/git-runner.d.ts.map +1 -0
- package/lib/types/host/services/worktree/git-runner.js +81 -0
- package/lib/types/host/services/worktree/git.d.ts +94 -0
- package/lib/types/host/services/worktree/git.d.ts.map +1 -0
- package/lib/types/host/services/worktree/git.js +153 -0
- package/lib/types/host/services/worktree/http.d.ts +12 -0
- package/lib/types/host/services/worktree/http.d.ts.map +1 -0
- package/lib/types/host/services/worktree/http.js +34 -0
- package/lib/types/host/services/worktree/index.d.ts +38 -0
- package/lib/types/host/services/worktree/index.d.ts.map +1 -0
- package/lib/types/host/services/worktree/index.js +78 -0
- package/lib/types/host/services/worktree/lane-tool.d.ts +22 -0
- package/lib/types/host/services/worktree/lane-tool.d.ts.map +1 -0
- package/lib/types/host/services/worktree/lane-tool.js +92 -0
- package/lib/types/host/services/worktree/manager.d.ts +410 -0
- package/lib/types/host/services/worktree/manager.d.ts.map +1 -0
- package/lib/types/host/services/worktree/manager.js +1485 -0
- package/lib/types/host/services/worktree/model-override.d.ts +20 -0
- package/lib/types/host/services/worktree/model-override.d.ts.map +1 -0
- package/lib/types/host/services/worktree/model-override.js +35 -0
- package/lib/types/host/services/worktree/routes.d.ts +50 -0
- package/lib/types/host/services/worktree/routes.d.ts.map +1 -0
- package/lib/types/host/services/worktree/routes.js +695 -0
- package/lib/types/host/services/worktree/run-command.d.ts +26 -0
- package/lib/types/host/services/worktree/run-command.d.ts.map +1 -0
- package/lib/types/host/services/worktree/run-command.js +36 -0
- package/lib/types/host/services/worktree/session-lane/manager.d.ts +109 -0
- package/lib/types/host/services/worktree/session-lane/manager.d.ts.map +1 -0
- package/lib/types/host/services/worktree/session-lane/manager.js +172 -0
- package/lib/types/host/services/worktree/workspace-model-routes.d.ts +21 -0
- package/lib/types/host/services/worktree/workspace-model-routes.d.ts.map +1 -0
- package/lib/types/host/services/worktree/workspace-model-routes.js +198 -0
- package/lib/types/host/services/worktree/workspace-model.d.ts +48 -0
- package/lib/types/host/services/worktree/workspace-model.d.ts.map +1 -0
- package/lib/types/host/services/worktree/workspace-model.js +113 -0
- package/lib/types/index.d.ts +47 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +52 -0
- package/lib/types/invariant.d.ts +4 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/invariant.js +3 -0
- package/package.json +153 -3
- package/presets/code-vibe/THIRD_PARTY_NOTICES.md +55 -0
- package/presets/code-vibe/skills/UPSTREAM.md +104 -0
- package/presets/code-vibe/skills/agent-experience/SKILL.md +15 -0
- package/presets/code-vibe/skills/agent-operation/SKILL.md +43 -0
- package/presets/code-vibe/skills/code-review/SKILL.md +45 -0
- package/presets/code-vibe/skills/dsh-ci-test-reliability/SKILL.md +133 -0
- package/presets/code-vibe/skills/dsh-ci-test-reliability/references/ci-flake-diagnosis.md +60 -0
- package/presets/code-vibe/skills/dsh-find-simplifications/SKILL.md +69 -0
- package/presets/code-vibe/skills/dsh-find-simplifications/references/historical-patterns.md +45 -0
- package/presets/code-vibe/skills/dsh-merging-stacked-prs/SKILL.md +129 -0
- package/presets/code-vibe/skills/dsh-prose-standard/SKILL.md +83 -0
- package/presets/code-vibe/skills/dsh-prose-standard/references/examples.md +169 -0
- package/presets/code-vibe/skills/dsh-speed-up-perf/SKILL.md +94 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/SKILL.md +47 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/examples.md +275 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/recall-batteries.md +52 -0
- package/presets/code-vibe/skills/frontend-design/SKILL.md +60 -0
- package/presets/code-vibe/skills/frontend-design/references/critique-format.md +35 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/LOAD-MAP.md +81 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/README.md +53 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/anchor.md +51 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/ai-tells.md +59 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/web-interface.md +14 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/change-control.md +62 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/copy.md +65 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/craft-knobs.md +61 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/debug-playbook.md +37 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/exemplars/README.md +64 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/plan-architecture.checklist.json +13 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/product-judgment.md +113 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/system-architecture.md +108 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/README.md +26 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/color-roles.md +49 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/motion.md +51 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/scale.md +89 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-page-gate.md +61 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-surface.checklist.json +49 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ux.md +76 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/visual.md +52 -0
- package/presets/code-vibe/skills/frontend-design/references/perceptible-path.md +27 -0
- package/presets/code-vibe/skills/frontend-design/references/product-package.md +80 -0
- package/presets/code-vibe/skills/frontend-design/references/scheme-antipatterns.md +21 -0
- package/presets/code-vibe/skills/quality-review/SKILL.md +57 -0
- package/presets/code-vibe/skills/quality-review/references/bounded-verify.md +37 -0
- package/presets/code-vibe/skills/quality-review/references/browser-verify.md +81 -0
- package/presets/code-vibe/skills/quality-review/references/evidence-contract.md +194 -0
- package/presets/code-vibe/skills/quality-review/references/falsify-checklist.md +44 -0
- package/presets/code-vibe/skills/quality-review/references/human-acceptance-pack.md +68 -0
- package/presets/code-vibe/skills/quality-review/references/product-regression.md +51 -0
- package/presets/code-vibe/skills/quality-review/references/ux-standards.md +37 -0
- package/presets/code-vibe/skills/quality-review/references/ux-walkthrough.md +49 -0
- package/presets/code-vibe/skills/quality-review/references/validation-report.md +22 -0
- package/presets/code-vibe/skills/quality-review/references/verification-loop.md +95 -0
- package/presets/code-vibe/skills/quality-review/references/version-acceptance-matrix.md +131 -0
- package/presets/code-vibe/skills/record-browser-gif/SKILL.md +174 -0
- package/presets/code-vibe/skills/record-browser-gif/scripts/encode_gif.py +337 -0
- package/presets/code-vibe/skills/record-browser-gif/scripts/test_encode_gif.py +103 -0
- package/presets/code-vibe/skills/wish-programming/SKILL.md +150 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/arch-reviewer.md +26 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/design-reviewer.md +32 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/pm-reviewer.md +26 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/qa-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/security-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/sre-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/ux-adversary.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/arch.md.tpl +51 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/brief.md.tpl +36 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/confirmation-pack.md +54 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/design-spec.md.tpl +49 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/module-readme.md +37 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/product.md.tpl +74 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/requirements.md.tpl +31 -0
- package/presets/code-vibe/skills/wish-programming/references/workflow-template.md +122 -0
- package/presets/code-vibe/skills/wish-programming/scripts/MANIFEST.sha256 +11 -0
- package/presets/code-vibe/skills/wish-programming/scripts/check_spec.py +416 -0
- package/presets/code-vibe/skills/wish-programming/scripts/check_whitelist.py +193 -0
- package/presets/code-vibe/skills/wish-programming/scripts/coverage_check.py +199 -0
- package/presets/code-vibe/skills/wish-programming/scripts/gate-lock.sh +46 -0
- package/presets/code-vibe/skills/wish-programming/scripts/journey.sh +281 -0
- package/presets/code-vibe/skills/wish-programming/scripts/project.sh +152 -0
- package/presets/code-vibe/skills/wish-programming/scripts/replay.sh +65 -0
- package/presets/code-vibe/skills/wish-programming/scripts/scan_drift.py +79 -0
- package/presets/code-vibe/skills/wish-programming/scripts/verify.sh +169 -0
- package/presets/code-vibe/skills/wish-programming/scripts/verify_preset_budgets.py +218 -0
- package/presets/code-vibe/skills/wish-programming/scripts/wish.sh +150 -0
- package/presets/code-vibe.patch.yml +325 -0
- package/presets/hiopen.patch.yml +109 -0
- package/src/client/compat.ts +86 -0
- package/src/client/conversation/conversation.module.css +264 -0
- package/src/client/conversation/git-branch.tsx +152 -0
- package/src/client/conversation/git-graph/LICENSE.git-graph +202 -0
- package/src/client/conversation/git-graph/api.ts +85 -0
- package/src/client/conversation/git-graph/branch-chip.tsx +354 -0
- package/src/client/conversation/git-graph/branch-popover.tsx +185 -0
- package/src/client/conversation/git-graph/chip.tsx +47 -0
- package/src/client/conversation/git-graph/create-branch-dialog.tsx +108 -0
- package/src/client/conversation/git-graph/error-copy.ts +50 -0
- package/src/client/conversation/git-graph/git-graph.module.css +792 -0
- package/src/client/conversation/git-graph/graph-dialog.tsx +196 -0
- package/src/client/conversation/git-graph/hero-seat.ts +76 -0
- package/src/client/conversation/git-graph/locales.ts +90 -0
- package/src/client/conversation/git-graph/sse-leader.ts +124 -0
- package/src/client/conversation/index.ts +82 -0
- package/src/client/conversation/selector-context.tsx +24 -0
- package/src/client/conversation/session-lane-chip.tsx +262 -0
- package/src/client/conversation/session-lane-locales.ts +34 -0
- package/src/client/conversation/subagent-model-dom.ts +157 -0
- package/src/client/conversation/subagent-model.ts +198 -0
- package/src/client/conversation/worktree/api.ts +283 -0
- package/src/client/conversation/worktree/dialogs/DeleteWorktreeDialog.tsx +111 -0
- package/src/client/conversation/worktree/dialogs/PrCreateDialog.tsx +114 -0
- package/src/client/conversation/worktree/lane-binding.ts +77 -0
- package/src/client/conversation/worktree/lane-menu.tsx +247 -0
- package/src/client/conversation/worktree/lane-open.ts +204 -0
- package/src/client/conversation/worktree/lane-workspace-sweeper.ts +136 -0
- package/src/client/conversation/worktree/lifecycle.ts +75 -0
- package/src/client/conversation/worktree/locales.ts +97 -0
- package/src/client/conversation/worktree/semantic.ts +10 -0
- package/src/client/conversation/worktree/worktree.module.css +70 -0
- package/src/client/css-modules.d.ts +8 -0
- package/src/client/index.ts +58 -0
- package/src/client/lark-inbox/i18n.ts +125 -0
- package/src/client/lark-inbox/lark-wizard.module.css +88 -0
- package/src/client/lark-inbox/wizard.tsx +211 -0
- package/src/client/notify/i18n.ts +93 -0
- package/src/client/settings/family-scope.ts +45 -0
- package/src/client/settings/lark-inbox.tsx +319 -0
- package/src/client/settings/notify.tsx +288 -0
- package/src/client/settings/primitives-0.2.ts +148 -0
- package/src/client/settings/settings-shell.module.css +56 -0
- package/src/client/sidebar/RenderBoundary.tsx +17 -0
- package/src/client/sidebar/agent-browser.tsx +114 -0
- package/src/client/sidebar/diff-view.tsx +314 -0
- package/src/client/sidebar/git-workbench.tsx +700 -0
- package/src/client/sidebar/icons.tsx +23 -0
- package/src/client/sidebar/index.ts +28 -0
- package/src/client/sidebar/native-panels.tsx +149 -0
- package/src/client/sidebar/page-shell.module.css +96 -0
- package/src/client/sidebar/page-shell.tsx +86 -0
- package/src/client/sidebar/panels/memoir/api.ts +300 -0
- package/src/client/sidebar/panels/memoir/controller.ts +47 -0
- package/src/client/sidebar/panels/memoir/cwd.ts +140 -0
- package/src/client/sidebar/panels/memoir/i18n.ts +300 -0
- package/src/client/sidebar/panels/memoir/panel-activation.ts +42 -0
- package/src/client/sidebar/panels/memoir/panel.tsx +869 -0
- package/src/client/sidebar/panels/memoir/styles.ts +776 -0
- package/src/client/sidebar/panels/memoir/types.ts +7 -0
- package/src/client/sidebar/panels/ssh/ClusterTab.tsx +123 -0
- package/src/client/sidebar/panels/ssh/HostFormDialog.tsx +243 -0
- package/src/client/sidebar/panels/ssh/HostsTab.tsx +290 -0
- package/src/client/sidebar/panels/ssh/SshPanel.tsx +76 -0
- package/src/client/sidebar/panels/ssh/TerminalTab.tsx +290 -0
- package/src/client/sidebar/panels/ssh/TransferTab.tsx +232 -0
- package/src/client/sidebar/panels/ssh/TunnelsTab.tsx +204 -0
- package/src/client/sidebar/panels/ssh/api.ts +388 -0
- package/src/client/sidebar/panels/ssh/controller.ts +48 -0
- package/src/client/sidebar/panels/ssh/helpers.ts +70 -0
- package/src/client/sidebar/panels/ssh/locales.ts +318 -0
- package/src/client/sidebar/panels/ssh/panel.module.css +801 -0
- package/src/client/sidebar/panels/ssh/xterm.css.ts +2 -0
- package/src/client/sidebar/right-pane-i18n.ts +243 -0
- package/src/client/sidebar/right-pane.tsx +156 -0
- package/src/client/sidebar/scope.ts +54 -0
- package/src/client/sidebar/sidebar-header.module.css +72 -0
- package/src/client/sidebar/sidebar.module.css +619 -0
- package/src/client/trust.ts +187 -0
- package/src/client/ui-icons.ts +35 -0
- package/src/core/git-graph/commands.ts +107 -0
- package/src/core/git-graph/protocol.ts +238 -0
- package/src/core/index.ts +2 -0
- package/src/core/lark-inbox/gating.ts +35 -0
- package/src/core/lark-inbox/queue.ts +100 -0
- package/src/core/memoir/protocol.ts +46 -0
- package/src/core/no-browser-auth/contract.ts +25 -0
- package/src/core/notify/contract.ts +236 -0
- package/src/core/notify/feed.ts +235 -0
- package/src/core/playwright-sessions/contracts.ts +143 -0
- package/src/core/playwright-sessions/control.ts +33 -0
- package/src/core/playwright-sessions/index.ts +3 -0
- package/src/core/playwright-sessions/names.ts +83 -0
- package/src/core/playwright-sessions/schema.ts +102 -0
- package/src/core/playwright-sessions/wire.ts +142 -0
- package/src/core/remote-access/paths.ts +23 -0
- package/src/core/remote-web-ui/security.ts +171 -0
- package/src/core/right-pane/protocol.ts +94 -0
- package/src/core/schedule-mode/index.ts +6 -0
- package/src/core/schedule-mode/native.ts +105 -0
- package/src/core/schedule-mode/types.ts +182 -0
- package/src/core/schedule-mode/view.ts +66 -0
- package/src/core/ssh/protocol.ts +212 -0
- package/src/core/subagent-model/badges.ts +161 -0
- package/src/core/worktree/invariant.ts +101 -0
- package/src/core/worktree/manifest.ts +135 -0
- package/src/core/worktree/paths.ts +123 -0
- package/src/core/worktree/pr-create.ts +157 -0
- package/src/core/worktree/protocol.ts +7 -0
- package/src/core/worktree/types.ts +317 -0
- package/src/core/worktree/workspace-model.ts +61 -0
- package/src/host/services/access-trust/index.ts +127 -0
- package/src/host/services/access-trust/trust.ts +189 -0
- package/src/host/services/codex-bridge/bridge.ts +392 -0
- package/src/host/services/codex-bridge/codex-auth.ts +352 -0
- package/src/host/services/codex-bridge/dsh-integration.ts +169 -0
- package/src/host/services/codex-bridge/http.ts +105 -0
- package/src/host/services/codex-bridge/index.ts +154 -0
- package/src/host/services/codex-bridge/loopback.ts +63 -0
- package/src/host/services/codex-bridge/routes.ts +143 -0
- package/src/host/services/family-config.ts +224 -0
- package/src/host/services/family-namespaces.ts +39 -0
- package/src/host/services/git-graph/index.ts +11 -0
- package/src/host/services/git-graph/routes.ts +212 -0
- package/src/host/services/git-graph/service.ts +305 -0
- package/src/host/services/index.ts +94 -0
- package/src/host/services/lark-inbox/config.ts +66 -0
- package/src/host/services/lark-inbox/gateway.ts +184 -0
- package/src/host/services/lark-inbox/host-routes.ts +113 -0
- package/src/host/services/lark-inbox/inbox-store.ts +160 -0
- package/src/host/services/lark-inbox/index.ts +141 -0
- package/src/host/services/lark-inbox/tools.ts +124 -0
- package/src/host/services/lark-inbox/wizard.ts +206 -0
- package/src/host/services/lifecycle.ts +107 -0
- package/src/host/services/memoir/index.ts +80 -0
- package/src/host/services/memoir/routes.ts +346 -0
- package/src/host/services/memoir/settings.ts +122 -0
- package/src/host/services/memoir/store.ts +132 -0
- package/src/host/services/memoir/tools.ts +158 -0
- package/src/host/services/no-browser-auth/index.ts +70 -0
- package/src/host/services/notify/config.ts +178 -0
- package/src/host/services/notify/feishu-sender.ts +220 -0
- package/src/host/services/notify/host-routes.ts +133 -0
- package/src/host/services/notify/index.ts +305 -0
- package/src/host/services/playwright-sessions/child.ts +251 -0
- package/src/host/services/playwright-sessions/controller.ts +102 -0
- package/src/host/services/playwright-sessions/index.ts +146 -0
- package/src/host/services/playwright-sessions/live-view.ts +225 -0
- package/src/host/services/playwright-sessions/manager.ts +239 -0
- package/src/host/services/playwright-sessions/profile-gc.ts +97 -0
- package/src/host/services/playwright-sessions/routes.ts +90 -0
- package/src/host/services/remote-access/boot-scripts.ts +118 -0
- package/src/host/services/remote-access/index.ts +62 -0
- package/src/host/services/remote-access/routes.ts +137 -0
- package/src/host/services/remote-web-ui/index.ts +344 -0
- package/src/host/services/remote-web-ui/server-mode/accounts.ts +423 -0
- package/src/host/services/remote-web-ui/server-mode/cookie.ts +57 -0
- package/src/host/services/remote-web-ui/server-mode/dsh-home.ts +42 -0
- package/src/host/services/remote-web-ui/server-mode/external-auth.ts +296 -0
- package/src/host/services/remote-web-ui/server-mode/fence.ts +27 -0
- package/src/host/services/remote-web-ui/server-mode/gateway-routes.ts +797 -0
- package/src/host/services/remote-web-ui/server-mode/gateway.ts +684 -0
- package/src/host/services/remote-web-ui/server-mode/http.ts +105 -0
- package/src/host/services/remote-web-ui/server-mode/integrated-auth.ts +118 -0
- package/src/host/services/remote-web-ui/server-mode/lan.ts +19 -0
- package/src/host/services/remote-web-ui/server-mode/loopback.ts +63 -0
- package/src/host/services/remote-web-ui/server-mode/posture.ts +154 -0
- package/src/host/services/remote-web-ui/server-mode/roles.ts +51 -0
- package/src/host/services/remote-web-ui/server-mode/server-boot.ts +38 -0
- package/src/host/services/remote-web-ui/server-mode/sessions.ts +347 -0
- package/src/host/services/remote-web-ui/server.ts +591 -0
- package/src/host/services/resources.ts +78 -0
- package/src/host/services/right-pane/browser.ts +106 -0
- package/src/host/services/right-pane/index.ts +117 -0
- package/src/host/services/right-pane/wire.ts +10 -0
- package/src/host/services/schedule-mode/config.ts +26 -0
- package/src/host/services/schedule-mode/engine.ts +689 -0
- package/src/host/services/schedule-mode/index.ts +214 -0
- package/src/host/services/schedule-mode/routes.ts +130 -0
- package/src/host/services/schedule-mode/session-create.ts +36 -0
- package/src/host/services/schedule-mode/store.ts +304 -0
- package/src/host/services/schedule-mode/tools.ts +154 -0
- package/src/host/services/ssh/engine.ts +675 -0
- package/src/host/services/ssh/host-keys.ts +99 -0
- package/src/host/services/ssh/index.ts +84 -0
- package/src/host/services/ssh/routes.ts +442 -0
- package/src/host/services/ssh/store.ts +310 -0
- package/src/host/services/ssh/terminal-ws.ts +157 -0
- package/src/host/services/ssh/tools.ts +279 -0
- package/src/host/services/web-render/contracts.ts +138 -0
- package/src/host/services/web-render/index.ts +112 -0
- package/src/host/services/web-render/provider.ts +282 -0
- package/src/host/services/web-search-anthropic/contracts.ts +163 -0
- package/src/host/services/web-search-anthropic/index.ts +152 -0
- package/src/host/services/web-search-anthropic/provider.ts +325 -0
- package/src/host/services/worktree/git-runner.ts +124 -0
- package/src/host/services/worktree/git.ts +183 -0
- package/src/host/services/worktree/http.ts +36 -0
- package/src/host/services/worktree/index.ts +92 -0
- package/src/host/services/worktree/lane-tool.ts +100 -0
- package/src/host/services/worktree/manager.ts +1553 -0
- package/src/host/services/worktree/model-override.ts +43 -0
- package/src/host/services/worktree/routes.ts +570 -0
- package/src/host/services/worktree/run-command.ts +66 -0
- package/src/host/services/worktree/session-lane/manager.ts +228 -0
- package/src/host/services/worktree/workspace-model-routes.ts +156 -0
- package/src/host/services/worktree/workspace-model.ts +132 -0
- package/src/index.ts +84 -0
- package/src/invariant.ts +4 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outbound Feishu/Lark delivery for finished runs.
|
|
3
|
+
*
|
|
4
|
+
* This is the mirror of `lark-inbox/gateway.ts`: that file owns the inbound
|
|
5
|
+
* WebSocket connection and this one owns the outbound message call, and both
|
|
6
|
+
* hide the vendor SDK behind a narrow injected seam so the behaviour the
|
|
7
|
+
* capability actually promises can be tested without a network or a tenant.
|
|
8
|
+
*
|
|
9
|
+
* Two properties matter more than throughput here, because this runs from an
|
|
10
|
+
* event handler rather than from a request:
|
|
11
|
+
*
|
|
12
|
+
* 1. It never throws into the emitter. A notification that cannot be delivered
|
|
13
|
+
* is logged and dropped; it must not turn a finished run into a failed one.
|
|
14
|
+
* 2. It stays under the application's rate limit. Feishu caps one application at
|
|
15
|
+
* five calls per second, and one finished run addresses several recipients,
|
|
16
|
+
* so sends are serialized with a minimum gap instead of fired in parallel.
|
|
17
|
+
*
|
|
18
|
+
* Messages are plain text rather than interactive cards on purpose: a card's
|
|
19
|
+
* schema is versioned and a rejected card is a silently lost notification,
|
|
20
|
+
* while a text message delivers the same three facts with nothing to validate.
|
|
21
|
+
*/
|
|
22
|
+
import { type RunNotice } from '../../../core/notify/contract.ts';
|
|
23
|
+
import type { FeishuCredentials } from './config.ts';
|
|
24
|
+
/** The vendor surface this module uses, so tests can supply their own. */
|
|
25
|
+
export interface FeishuSenderSdk {
|
|
26
|
+
createClient(options: {
|
|
27
|
+
appId: string;
|
|
28
|
+
appSecret: string;
|
|
29
|
+
domain: unknown;
|
|
30
|
+
}): {
|
|
31
|
+
im: {
|
|
32
|
+
message: {
|
|
33
|
+
create(payload: unknown): Promise<unknown>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
domain: {
|
|
38
|
+
Feishu: unknown;
|
|
39
|
+
Lark: unknown;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** One delivery's outcome, reported rather than thrown. */
|
|
43
|
+
export interface DeliveryAttempt {
|
|
44
|
+
recipient: string;
|
|
45
|
+
ok: boolean;
|
|
46
|
+
/** Vendor error text when the call failed. */
|
|
47
|
+
error?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Options for one sender instance. */
|
|
50
|
+
export interface FeishuSenderOptions {
|
|
51
|
+
credentials: FeishuCredentials;
|
|
52
|
+
/** Open ids (`ou_…`), user ids, or chat ids to address as `open_id`. */
|
|
53
|
+
recipients: readonly string[];
|
|
54
|
+
/** Human name of the machine the run happened on. */
|
|
55
|
+
hostLabel: string;
|
|
56
|
+
log?: (message: string) => void;
|
|
57
|
+
sdk?: FeishuSenderSdk;
|
|
58
|
+
/** Minimum gap between two vendor calls, keeping the app under its rate limit. */
|
|
59
|
+
minGapMs?: number;
|
|
60
|
+
now?: () => number;
|
|
61
|
+
sleep?: (ms: number) => Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Compose the message body for one delivery.
|
|
65
|
+
*
|
|
66
|
+
* The text states three things and nothing else: how it ended, which
|
|
67
|
+
* conversation it was, and which machine it ran on. It deliberately carries no
|
|
68
|
+
* session ids, no turn numbers and no raw reason kinds — those are diagnosable
|
|
69
|
+
* in the workspace, and putting them in a phone notification makes the one line
|
|
70
|
+
* that matters harder to find.
|
|
71
|
+
*
|
|
72
|
+
* @param notices - the finished runs this delivery covers, oldest first.
|
|
73
|
+
* @param hostLabel - the machine's name.
|
|
74
|
+
* @returns the message text, with no trailing newline.
|
|
75
|
+
*/
|
|
76
|
+
export declare function composeFeishuText(notices: readonly RunNotice[], hostLabel: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* Delivers composed messages to every configured recipient.
|
|
79
|
+
*
|
|
80
|
+
* One instance is bound to one credential set and one recipient list; the
|
|
81
|
+
* owning service rebuilds it when the configuration changes, so a credential
|
|
82
|
+
* rotation cannot leave a stale token cache behind.
|
|
83
|
+
*/
|
|
84
|
+
export declare class FeishuSender {
|
|
85
|
+
private readonly options;
|
|
86
|
+
private readonly log;
|
|
87
|
+
private readonly sdk;
|
|
88
|
+
private readonly minGapMs;
|
|
89
|
+
private readonly sleep;
|
|
90
|
+
private readonly now;
|
|
91
|
+
private client;
|
|
92
|
+
/** Serializes sends and carries the last call time, so the rate limit holds across callers. */
|
|
93
|
+
private chain;
|
|
94
|
+
private lastCallAt;
|
|
95
|
+
constructor(options: FeishuSenderOptions);
|
|
96
|
+
/** Recipients this sender will address. */
|
|
97
|
+
get recipients(): readonly string[];
|
|
98
|
+
/** Domain the credentials address. */
|
|
99
|
+
get domain(): string;
|
|
100
|
+
private vendorClient;
|
|
101
|
+
/**
|
|
102
|
+
* Deliver one text message to every recipient, serially and rate limited.
|
|
103
|
+
* @param text - the message body.
|
|
104
|
+
* @returns one attempt per recipient; empty when no recipient is configured.
|
|
105
|
+
*/
|
|
106
|
+
send(text: string): Promise<DeliveryAttempt[]>;
|
|
107
|
+
private sendOne;
|
|
108
|
+
private respectGap;
|
|
109
|
+
/**
|
|
110
|
+
* Deliver and reduce the result to one log line.
|
|
111
|
+
*
|
|
112
|
+
* Event handlers cannot await a promise they do not own, and a rejected one
|
|
113
|
+
* would be an unhandled rejection, so the caller uses this instead of
|
|
114
|
+
* {@link send} whenever the notification is fire-and-forget.
|
|
115
|
+
*
|
|
116
|
+
* @param notices - the finished runs to report.
|
|
117
|
+
*/
|
|
118
|
+
notify(notices: readonly RunNotice[]): Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=feishu-sender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feishu-sender.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/notify/feishu-sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QAC5E,EAAE,EAAE;YAAE,OAAO,EAAE;gBAAE,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAChE,CAAA;IACD,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAC3C;AAQD,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,OAAO,CAAA;IACX,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,iBAAiB,CAAA;IAC9B,wEAAwE;IACxE,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,GAAG,CAAC,EAAE,eAAe,CAAA;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB1F;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,MAAM,CAAyD;IACvE,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,UAAU,CAAI;gBAEV,OAAO,EAAE,mBAAmB;IASxC,2CAA2C;IAC3C,IAAI,UAAU,IAAI,SAAS,MAAM,EAAE,CAElC;IAED,sCAAsC;IACtC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAUtC,OAAO;YA2BP,UAAU;IAMxB;;;;;;;;OAQG;IACG,MAAM,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAc3D"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outbound Feishu/Lark delivery for finished runs.
|
|
3
|
+
*
|
|
4
|
+
* This is the mirror of `lark-inbox/gateway.ts`: that file owns the inbound
|
|
5
|
+
* WebSocket connection and this one owns the outbound message call, and both
|
|
6
|
+
* hide the vendor SDK behind a narrow injected seam so the behaviour the
|
|
7
|
+
* capability actually promises can be tested without a network or a tenant.
|
|
8
|
+
*
|
|
9
|
+
* Two properties matter more than throughput here, because this runs from an
|
|
10
|
+
* event handler rather than from a request:
|
|
11
|
+
*
|
|
12
|
+
* 1. It never throws into the emitter. A notification that cannot be delivered
|
|
13
|
+
* is logged and dropped; it must not turn a finished run into a failed one.
|
|
14
|
+
* 2. It stays under the application's rate limit. Feishu caps one application at
|
|
15
|
+
* five calls per second, and one finished run addresses several recipients,
|
|
16
|
+
* so sends are serialized with a minimum gap instead of fired in parallel.
|
|
17
|
+
*
|
|
18
|
+
* Messages are plain text rather than interactive cards on purpose: a card's
|
|
19
|
+
* schema is versioned and a rejected card is a silently lost notification,
|
|
20
|
+
* while a text message delivers the same three facts with nothing to validate.
|
|
21
|
+
*/
|
|
22
|
+
import { Domain, Client } from '@larksuiteoapi/node-sdk';
|
|
23
|
+
import { OUTCOME_LABEL_ZH } from "../../../core/notify/contract.js";
|
|
24
|
+
/** The real SDK, narrowed to {@link FeishuSenderSdk}. */
|
|
25
|
+
const officialSdk = {
|
|
26
|
+
domain: { Feishu: Domain.Feishu, Lark: Domain.Lark },
|
|
27
|
+
createClient: options => new Client(options),
|
|
28
|
+
};
|
|
29
|
+
/** Default gap: five calls per second is the application ceiling, so 250 ms is the floor. */
|
|
30
|
+
const DEFAULT_MIN_GAP_MS = 250;
|
|
31
|
+
/**
|
|
32
|
+
* Compose the message body for one delivery.
|
|
33
|
+
*
|
|
34
|
+
* The text states three things and nothing else: how it ended, which
|
|
35
|
+
* conversation it was, and which machine it ran on. It deliberately carries no
|
|
36
|
+
* session ids, no turn numbers and no raw reason kinds — those are diagnosable
|
|
37
|
+
* in the workspace, and putting them in a phone notification makes the one line
|
|
38
|
+
* that matters harder to find.
|
|
39
|
+
*
|
|
40
|
+
* @param notices - the finished runs this delivery covers, oldest first.
|
|
41
|
+
* @param hostLabel - the machine's name.
|
|
42
|
+
* @returns the message text, with no trailing newline.
|
|
43
|
+
*/
|
|
44
|
+
export function composeFeishuText(notices, hostLabel) {
|
|
45
|
+
const machine = hostLabel.trim() === '' ? '' : `机器:${hostLabel.trim()}`;
|
|
46
|
+
if (notices.length === 0)
|
|
47
|
+
return machine;
|
|
48
|
+
const lines = [];
|
|
49
|
+
if (notices.length === 1) {
|
|
50
|
+
const notice = notices[0];
|
|
51
|
+
lines.push(`运行结束:${OUTCOME_LABEL_ZH[notice.outcome]}`);
|
|
52
|
+
if (notice.title !== '')
|
|
53
|
+
lines.push(`会话:${notice.title}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
lines.push(`${notices.length} 个会话运行结束`);
|
|
57
|
+
for (const notice of notices) {
|
|
58
|
+
const label = OUTCOME_LABEL_ZH[notice.outcome];
|
|
59
|
+
lines.push(notice.title === '' ? `- ${label}` : `- ${label} · ${notice.title}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (machine !== '')
|
|
63
|
+
lines.push(machine);
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Delivers composed messages to every configured recipient.
|
|
68
|
+
*
|
|
69
|
+
* One instance is bound to one credential set and one recipient list; the
|
|
70
|
+
* owning service rebuilds it when the configuration changes, so a credential
|
|
71
|
+
* rotation cannot leave a stale token cache behind.
|
|
72
|
+
*/
|
|
73
|
+
export class FeishuSender {
|
|
74
|
+
options;
|
|
75
|
+
log;
|
|
76
|
+
sdk;
|
|
77
|
+
minGapMs;
|
|
78
|
+
sleep;
|
|
79
|
+
now;
|
|
80
|
+
client;
|
|
81
|
+
/** Serializes sends and carries the last call time, so the rate limit holds across callers. */
|
|
82
|
+
chain = Promise.resolve();
|
|
83
|
+
lastCallAt = 0;
|
|
84
|
+
constructor(options) {
|
|
85
|
+
this.options = options;
|
|
86
|
+
this.log = options.log ?? (() => undefined);
|
|
87
|
+
this.sdk = options.sdk ?? officialSdk;
|
|
88
|
+
this.minGapMs = options.minGapMs ?? DEFAULT_MIN_GAP_MS;
|
|
89
|
+
this.now = options.now ?? Date.now;
|
|
90
|
+
this.sleep = options.sleep ?? (ms => new Promise(resolve => { setTimeout(resolve, ms); }));
|
|
91
|
+
}
|
|
92
|
+
/** Recipients this sender will address. */
|
|
93
|
+
get recipients() {
|
|
94
|
+
return this.options.recipients;
|
|
95
|
+
}
|
|
96
|
+
/** Domain the credentials address. */
|
|
97
|
+
get domain() {
|
|
98
|
+
return this.options.credentials.domain;
|
|
99
|
+
}
|
|
100
|
+
vendorClient() {
|
|
101
|
+
if (this.client !== undefined)
|
|
102
|
+
return this.client;
|
|
103
|
+
const domain = this.options.credentials.domain;
|
|
104
|
+
const mapped = domain === 'feishu' ? this.sdk.domain.Feishu : this.sdk.domain.Lark;
|
|
105
|
+
this.client = this.sdk.createClient({
|
|
106
|
+
appId: this.options.credentials.appId,
|
|
107
|
+
appSecret: this.options.credentials.appSecret,
|
|
108
|
+
domain: mapped,
|
|
109
|
+
});
|
|
110
|
+
return this.client;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Deliver one text message to every recipient, serially and rate limited.
|
|
114
|
+
* @param text - the message body.
|
|
115
|
+
* @returns one attempt per recipient; empty when no recipient is configured.
|
|
116
|
+
*/
|
|
117
|
+
async send(text) {
|
|
118
|
+
const body = text.trim();
|
|
119
|
+
if (body === '' || this.options.recipients.length === 0)
|
|
120
|
+
return [];
|
|
121
|
+
const attempts = [];
|
|
122
|
+
for (const recipient of this.options.recipients) {
|
|
123
|
+
attempts.push(await this.sendOne(recipient, body));
|
|
124
|
+
}
|
|
125
|
+
return attempts;
|
|
126
|
+
}
|
|
127
|
+
async sendOne(recipient, text) {
|
|
128
|
+
// Serialize every call through one chain: `notify()` is not concurrency safe
|
|
129
|
+
// and the vendor limit is per application, not per recipient.
|
|
130
|
+
const run = this.chain.then(async () => {
|
|
131
|
+
await this.respectGap();
|
|
132
|
+
try {
|
|
133
|
+
const response = await this.vendorClient().im.message.create({
|
|
134
|
+
params: { receive_id_type: 'open_id' },
|
|
135
|
+
data: { receive_id: recipient, msg_type: 'text', content: JSON.stringify({ text }) },
|
|
136
|
+
});
|
|
137
|
+
const code = response?.code;
|
|
138
|
+
// The SDK resolves even for a business error, so the envelope decides.
|
|
139
|
+
if (typeof code === 'number' && code !== 0) {
|
|
140
|
+
return { recipient, ok: false, error: `feishu code ${code}: ${String(response.msg ?? '')}` };
|
|
141
|
+
}
|
|
142
|
+
return { recipient, ok: true };
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return { recipient, ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
this.lastCallAt = this.now();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
// Keep the chain alive after a rejection so one failure cannot block later sends.
|
|
152
|
+
this.chain = run.then(() => undefined, () => undefined);
|
|
153
|
+
return run;
|
|
154
|
+
}
|
|
155
|
+
async respectGap() {
|
|
156
|
+
if (this.minGapMs <= 0)
|
|
157
|
+
return;
|
|
158
|
+
const elapsed = this.now() - this.lastCallAt;
|
|
159
|
+
if (this.lastCallAt !== 0 && elapsed < this.minGapMs)
|
|
160
|
+
await this.sleep(this.minGapMs - elapsed);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Deliver and reduce the result to one log line.
|
|
164
|
+
*
|
|
165
|
+
* Event handlers cannot await a promise they do not own, and a rejected one
|
|
166
|
+
* would be an unhandled rejection, so the caller uses this instead of
|
|
167
|
+
* {@link send} whenever the notification is fire-and-forget.
|
|
168
|
+
*
|
|
169
|
+
* @param notices - the finished runs to report.
|
|
170
|
+
*/
|
|
171
|
+
async notify(notices) {
|
|
172
|
+
if (notices.length === 0)
|
|
173
|
+
return;
|
|
174
|
+
const text = composeFeishuText(notices, this.options.hostLabel);
|
|
175
|
+
const attempts = await this.send(text);
|
|
176
|
+
const failed = attempts.filter(attempt => !attempt.ok);
|
|
177
|
+
const delivered = attempts.length - failed.length;
|
|
178
|
+
if (attempts.length > 0 && failed.length === 0) {
|
|
179
|
+
this.log(`dsh-notify: 已推送 ${delivered} 条飞书通知`);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
for (const attempt of failed) {
|
|
183
|
+
this.log(`dsh-notify: 推送给 ${attempt.recipient} 失败:${attempt.error ?? '未知错误'}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one host route the notification capability serves: a read-only feed of
|
|
3
|
+
* finished runs.
|
|
4
|
+
*
|
|
5
|
+
* It is a privileged read surface like every other web-all host route family
|
|
6
|
+
* and goes through the shared admission fence, because the feed names the
|
|
7
|
+
* conversations this machine has been running. A partially mounted plugin can
|
|
8
|
+
* never widen access: without the fence service the strict loopback rule
|
|
9
|
+
* applies.
|
|
10
|
+
*
|
|
11
|
+
* There is deliberately no write route. A client's read watermark lives on the
|
|
12
|
+
* client, so the host keeps no per-client state to acknowledge and exposes no
|
|
13
|
+
* mutation an attacker could aim at. The only effect a caller can have is
|
|
14
|
+
* reading, which is why this family needs no CSRF-shaped defence beyond the
|
|
15
|
+
* fence itself.
|
|
16
|
+
*/
|
|
17
|
+
import type { IncomingMessage } from 'node:http';
|
|
18
|
+
import type { WebRoute } from '@deepseek-ai/dsh-host-webserver';
|
|
19
|
+
import type { NoticeLog } from '../../../core/notify/feed.ts';
|
|
20
|
+
/** Query values one feed read is built from. */
|
|
21
|
+
export interface FeedQuery {
|
|
22
|
+
/** Notices strictly newer than this id. */
|
|
23
|
+
since: number;
|
|
24
|
+
/** Maximum notices to return. */
|
|
25
|
+
limit: number;
|
|
26
|
+
}
|
|
27
|
+
/** What the route handler needs from its owning service. */
|
|
28
|
+
export interface NotifyRouteDeps {
|
|
29
|
+
/** Retained notices, read fresh per request. */
|
|
30
|
+
log: () => NoticeLog;
|
|
31
|
+
/** Notices one read returns when the caller does not say. */
|
|
32
|
+
defaultLimit: () => number;
|
|
33
|
+
/** Host access fence; defaults to the strict loopback rule. */
|
|
34
|
+
isTrusted?: (request: IncomingMessage) => boolean;
|
|
35
|
+
/** Whether the capability is enabled right now, read per request. */
|
|
36
|
+
enabled?: () => boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Read `since` and `limit` out of a request URL.
|
|
40
|
+
*
|
|
41
|
+
* Both are clamped rather than rejected: a client sending nonsense is asking
|
|
42
|
+
* for an answer, not for a diagnostic, and the bounded log already limits what
|
|
43
|
+
* any of these values can do.
|
|
44
|
+
*
|
|
45
|
+
* @param request - the request whose query string is read.
|
|
46
|
+
* @param defaultLimit - the limit used when the caller does not supply one.
|
|
47
|
+
* @returns the effective query.
|
|
48
|
+
*/
|
|
49
|
+
export declare function readFeedQuery(request: IncomingMessage, defaultLimit: number): FeedQuery;
|
|
50
|
+
/**
|
|
51
|
+
* The authority to report as this feed's origin.
|
|
52
|
+
*
|
|
53
|
+
* It comes from the request's own `Host` header rather than from configuration,
|
|
54
|
+
* because the caller reached the machine under that name and a client listing
|
|
55
|
+
* several machines must be able to label each row with what it dialed. A header
|
|
56
|
+
* carrying separators or whitespace is not an authority and is reported empty
|
|
57
|
+
* instead of being echoed into a document.
|
|
58
|
+
*
|
|
59
|
+
* @param request - the request being answered.
|
|
60
|
+
* @returns the authority, or '' when the header is unusable.
|
|
61
|
+
*/
|
|
62
|
+
export declare function requestAuthority(request: IncomingMessage): string;
|
|
63
|
+
/**
|
|
64
|
+
* Build the feed route.
|
|
65
|
+
* @param deps - the owning service's read surface.
|
|
66
|
+
* @returns the routes to register on the web server.
|
|
67
|
+
*/
|
|
68
|
+
export declare function makeNotifyRoutes(deps: NotifyRouteDeps): WebRoute[];
|
|
69
|
+
//# sourceMappingURL=host-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-routes.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/notify/host-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAQ/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAE7D,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,GAAG,EAAE,MAAM,SAAS,CAAA;IACpB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAA;IACjD,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAA;CACxB;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAiBvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,EAAE,CAyBlE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one host route the notification capability serves: a read-only feed of
|
|
3
|
+
* finished runs.
|
|
4
|
+
*
|
|
5
|
+
* It is a privileged read surface like every other web-all host route family
|
|
6
|
+
* and goes through the shared admission fence, because the feed names the
|
|
7
|
+
* conversations this machine has been running. A partially mounted plugin can
|
|
8
|
+
* never widen access: without the fence service the strict loopback rule
|
|
9
|
+
* applies.
|
|
10
|
+
*
|
|
11
|
+
* There is deliberately no write route. A client's read watermark lives on the
|
|
12
|
+
* client, so the host keeps no per-client state to acknowledge and exposes no
|
|
13
|
+
* mutation an attacker could aim at. The only effect a caller can have is
|
|
14
|
+
* reading, which is why this family needs no CSRF-shaped defence beyond the
|
|
15
|
+
* fence itself.
|
|
16
|
+
*/
|
|
17
|
+
import { NOTIFY_FEED_PATH, clampLimit, clampWatermark, } from "../../../core/notify/contract.js";
|
|
18
|
+
import { isLoopbackRequest } from "../access-trust/trust.js";
|
|
19
|
+
function writeJson(response, status, body) {
|
|
20
|
+
response.writeHead(status, { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' });
|
|
21
|
+
response.end(JSON.stringify(body));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read `since` and `limit` out of a request URL.
|
|
25
|
+
*
|
|
26
|
+
* Both are clamped rather than rejected: a client sending nonsense is asking
|
|
27
|
+
* for an answer, not for a diagnostic, and the bounded log already limits what
|
|
28
|
+
* any of these values can do.
|
|
29
|
+
*
|
|
30
|
+
* @param request - the request whose query string is read.
|
|
31
|
+
* @param defaultLimit - the limit used when the caller does not supply one.
|
|
32
|
+
* @returns the effective query.
|
|
33
|
+
*/
|
|
34
|
+
export function readFeedQuery(request, defaultLimit) {
|
|
35
|
+
let search = '';
|
|
36
|
+
try {
|
|
37
|
+
search = new URL(request.url ?? '/', 'http://feed.invalid').search;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
search = '';
|
|
41
|
+
}
|
|
42
|
+
let params;
|
|
43
|
+
try {
|
|
44
|
+
params = new URLSearchParams(search);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
params = new URLSearchParams();
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
since: clampWatermark(params.get('since') ?? ''),
|
|
51
|
+
limit: clampLimit(params.get('limit') ?? '', defaultLimit),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The authority to report as this feed's origin.
|
|
56
|
+
*
|
|
57
|
+
* It comes from the request's own `Host` header rather than from configuration,
|
|
58
|
+
* because the caller reached the machine under that name and a client listing
|
|
59
|
+
* several machines must be able to label each row with what it dialed. A header
|
|
60
|
+
* carrying separators or whitespace is not an authority and is reported empty
|
|
61
|
+
* instead of being echoed into a document.
|
|
62
|
+
*
|
|
63
|
+
* @param request - the request being answered.
|
|
64
|
+
* @returns the authority, or '' when the header is unusable.
|
|
65
|
+
*/
|
|
66
|
+
export function requestAuthority(request) {
|
|
67
|
+
const raw = request.headers.host;
|
|
68
|
+
const value = typeof raw === 'string' ? raw.trim() : '';
|
|
69
|
+
if (value === '' || value.length > 255 || /[\s/\\@?#]/.test(value))
|
|
70
|
+
return '';
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build the feed route.
|
|
75
|
+
* @param deps - the owning service's read surface.
|
|
76
|
+
* @returns the routes to register on the web server.
|
|
77
|
+
*/
|
|
78
|
+
export function makeNotifyRoutes(deps) {
|
|
79
|
+
const isTrusted = deps.isTrusted ?? isLoopbackRequest;
|
|
80
|
+
const enabled = deps.enabled ?? (() => true);
|
|
81
|
+
return [
|
|
82
|
+
{
|
|
83
|
+
kind: 'exact',
|
|
84
|
+
path: NOTIFY_FEED_PATH,
|
|
85
|
+
handler: (request, response) => {
|
|
86
|
+
if (!isTrusted(request)) {
|
|
87
|
+
writeJson(response, 403, { error: 'forbidden' });
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// The capability's switch gates reads as well as writes. A disabled
|
|
91
|
+
// capability that still answers would publish the list of conversations
|
|
92
|
+
// this machine has been running, which is the whole reason it is off.
|
|
93
|
+
if (!enabled()) {
|
|
94
|
+
writeJson(response, 409, { error: 'notify-disabled' });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (request.method !== 'GET') {
|
|
98
|
+
writeJson(response, 405, { error: 'method-not-allowed' });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const query = readFeedQuery(request, deps.defaultLimit());
|
|
102
|
+
const log = deps.log();
|
|
103
|
+
const body = {
|
|
104
|
+
origin: requestAuthority(request),
|
|
105
|
+
latest: log.latest,
|
|
106
|
+
notices: log.since(query.since, query.limit),
|
|
107
|
+
};
|
|
108
|
+
writeJson(response, 200, body);
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification capability: records finished runs, serves them, and pushes them.
|
|
3
|
+
*
|
|
4
|
+
* Where it sits. `dsh-session` already owns the durable answer to "what
|
|
5
|
+
* happened" (the append-only log) and `dsh-agent` owns the live answer to "is
|
|
6
|
+
* anything still running" (`agent/status`). This domain adds the third thing
|
|
7
|
+
* neither provides: a small, recent, cross-surface answer to "did the work I
|
|
8
|
+
* left running finish, and how did it end" that a phone or a desktop fleet list
|
|
9
|
+
* can read without holding a session log.
|
|
10
|
+
*
|
|
11
|
+
* What it therefore does NOT do. It keeps no durable copy of anything the
|
|
12
|
+
* session log already holds — see `core/notify/feed.ts` for why the notice log
|
|
13
|
+
* is deliberately in-memory. It records nothing for subagent sessions, because
|
|
14
|
+
* a child's turns are internal to a parent's work and a dot that lights up for
|
|
15
|
+
* every delegation is a dot nobody trusts. It records nothing for a turn that
|
|
16
|
+
* never entered a step, because an empty turn is not finished work.
|
|
17
|
+
*
|
|
18
|
+
* Two delivery shapes, one setting. `each-turn` reports every finished turn;
|
|
19
|
+
* `idle` waits until the agent has no driver left and reports the batch, which
|
|
20
|
+
* is what a notification is for. The feed ignores the setting entirely and
|
|
21
|
+
* always records every eligible turn, so a client's badge stays accurate no
|
|
22
|
+
* matter which push shape the deployment chose.
|
|
23
|
+
*
|
|
24
|
+
* @module dsh-web-all/notify
|
|
25
|
+
*/
|
|
26
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
27
|
+
import { type RunNotice } from '../../../core/notify/contract.ts';
|
|
28
|
+
import { resolveFeishuCredentials, type NotifyConfig } from './config.ts';
|
|
29
|
+
export { Config, NOTIFY_SETTINGS_NAMESPACE, resolveFeishuCredentials } from './config.ts';
|
|
30
|
+
export { FeishuSender, composeFeishuText } from './feishu-sender.ts';
|
|
31
|
+
export { makeNotifyRoutes, readFeedQuery, requestAuthority } from './host-routes.ts';
|
|
32
|
+
export type { DeliveryAttempt } from './feishu-sender.ts';
|
|
33
|
+
/** The sender surface this domain needs, so tests can supply their own. */
|
|
34
|
+
export interface NotifySender {
|
|
35
|
+
notify(notices: readonly RunNotice[]): Promise<void>;
|
|
36
|
+
readonly recipients: readonly string[];
|
|
37
|
+
readonly domain: string;
|
|
38
|
+
}
|
|
39
|
+
/** Injectables that let tests run the domain without a tenant or a clock. */
|
|
40
|
+
export interface NotifyServiceDeps {
|
|
41
|
+
env?: NodeJS.ProcessEnv;
|
|
42
|
+
/** Name this machine reports in a pushed message. */
|
|
43
|
+
hostLabel?: string;
|
|
44
|
+
/** Builds the outbound sender; returns null when nothing can be sent. */
|
|
45
|
+
createSender?: (options: {
|
|
46
|
+
credentials: ReturnType<typeof resolveFeishuCredentials>;
|
|
47
|
+
recipients: readonly string[];
|
|
48
|
+
hostLabel: string;
|
|
49
|
+
}) => NotifySender | null;
|
|
50
|
+
}
|
|
51
|
+
/** Minimal shape of the session the domain reads. */
|
|
52
|
+
interface SessionLike {
|
|
53
|
+
id?: unknown;
|
|
54
|
+
header?: {
|
|
55
|
+
origin?: unknown;
|
|
56
|
+
delegationDepth?: unknown;
|
|
57
|
+
} | undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Whether a session belongs to a subagent.
|
|
61
|
+
*
|
|
62
|
+
* `delegationDepth` is the durable field (a resumed child keeps its depth);
|
|
63
|
+
* `origin` is the coarser presentation marker. Either one answering "child" is
|
|
64
|
+
* enough, because recording a child's finished turn would put internal
|
|
65
|
+
* delegation on the same list as the user's own work.
|
|
66
|
+
*
|
|
67
|
+
* @param session - the session the event belongs to.
|
|
68
|
+
* @returns true when the session is a subagent child.
|
|
69
|
+
*/
|
|
70
|
+
export declare function isSubagentSession(session: SessionLike | undefined): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Register the notification capability.
|
|
73
|
+
*
|
|
74
|
+
* @param ctx - host plugin context.
|
|
75
|
+
* @param base - namespace value used when the family settings document has none.
|
|
76
|
+
* @param deps - injectables for tests.
|
|
77
|
+
* @returns the disposer releasing the route, the subscriptions and the sender.
|
|
78
|
+
*/
|
|
79
|
+
export declare function register(ctx: Context, base?: NotifyConfig, deps?: NotifyServiceDeps): () => void;
|
|
80
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/host/services/notify/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAMnF,OAAO,EAIL,wBAAwB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACpF,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAKzD,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE;QACvB,WAAW,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;QACxD,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;QAC7B,SAAS,EAAE,MAAM,CAAA;KAClB,KAAK,YAAY,GAAG,IAAI,CAAA;CAC1B;AASD,qDAAqD;AACrD,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;CACrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAM3E;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,YAAiB,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,IAAI,CA6LxG"}
|