@dsh-cove/dsh-web-all 0.0.0-stage → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.i18n.yaml +6 -0
- package/README.md +205 -2
- package/README.zh.md +205 -0
- package/cordis.patch.yml +59 -0
- package/lib/client.js +25413 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +20024 -0
- package/lib/invariant.js +6 -0
- package/lib/types/client/compat.d.ts +29 -0
- package/lib/types/client/compat.d.ts.map +1 -0
- package/lib/types/client/compat.js +69 -0
- package/lib/types/client/conversation/git-branch.d.ts +13 -0
- package/lib/types/client/conversation/git-branch.d.ts.map +1 -0
- package/lib/types/client/conversation/git-branch.js +121 -0
- package/lib/types/client/conversation/git-graph/api.d.ts +42 -0
- package/lib/types/client/conversation/git-graph/api.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/api.js +72 -0
- package/lib/types/client/conversation/git-graph/branch-chip.d.ts +47 -0
- package/lib/types/client/conversation/git-graph/branch-chip.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/branch-chip.js +268 -0
- package/lib/types/client/conversation/git-graph/branch-popover.d.ts +32 -0
- package/lib/types/client/conversation/git-graph/branch-popover.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/branch-popover.js +108 -0
- package/lib/types/client/conversation/git-graph/chip.d.ts +24 -0
- package/lib/types/client/conversation/git-graph/chip.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/chip.js +15 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts +30 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/create-branch-dialog.js +52 -0
- package/lib/types/client/conversation/git-graph/error-copy.d.ts +17 -0
- package/lib/types/client/conversation/git-graph/error-copy.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/error-copy.js +44 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.d.ts +21 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/graph-dialog.js +112 -0
- package/lib/types/client/conversation/git-graph/hero-seat.d.ts +53 -0
- package/lib/types/client/conversation/git-graph/hero-seat.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/hero-seat.js +54 -0
- package/lib/types/client/conversation/git-graph/locales.d.ts +88 -0
- package/lib/types/client/conversation/git-graph/locales.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/locales.js +85 -0
- package/lib/types/client/conversation/git-graph/sse-leader.d.ts +37 -0
- package/lib/types/client/conversation/git-graph/sse-leader.d.ts.map +1 -0
- package/lib/types/client/conversation/git-graph/sse-leader.js +101 -0
- package/lib/types/client/conversation/index.d.ts +43 -0
- package/lib/types/client/conversation/index.d.ts.map +1 -0
- package/lib/types/client/conversation/index.js +39 -0
- package/lib/types/client/conversation/selector-context.d.ts +12 -0
- package/lib/types/client/conversation/selector-context.d.ts.map +1 -0
- package/lib/types/client/conversation/selector-context.js +11 -0
- package/lib/types/client/conversation/session-lane-chip.d.ts +72 -0
- package/lib/types/client/conversation/session-lane-chip.d.ts.map +1 -0
- package/lib/types/client/conversation/session-lane-chip.js +163 -0
- package/lib/types/client/conversation/session-lane-locales.d.ts +22 -0
- package/lib/types/client/conversation/session-lane-locales.d.ts.map +1 -0
- package/lib/types/client/conversation/session-lane-locales.js +29 -0
- package/lib/types/client/conversation/subagent-model-dom.d.ts +16 -0
- package/lib/types/client/conversation/subagent-model-dom.d.ts.map +1 -0
- package/lib/types/client/conversation/subagent-model-dom.js +138 -0
- package/lib/types/client/conversation/subagent-model.d.ts +17 -0
- package/lib/types/client/conversation/subagent-model.d.ts.map +1 -0
- package/lib/types/client/conversation/subagent-model.js +156 -0
- package/lib/types/client/conversation/worktree/api.d.ts +97 -0
- package/lib/types/client/conversation/worktree/api.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/api.js +239 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts +35 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/dialogs/DeleteWorktreeDialog.js +55 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts +27 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/dialogs/PrCreateDialog.js +49 -0
- package/lib/types/client/conversation/worktree/lane-binding.d.ts +46 -0
- package/lib/types/client/conversation/worktree/lane-binding.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-binding.js +60 -0
- package/lib/types/client/conversation/worktree/lane-menu.d.ts +51 -0
- package/lib/types/client/conversation/worktree/lane-menu.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-menu.js +140 -0
- package/lib/types/client/conversation/worktree/lane-open.d.ts +126 -0
- package/lib/types/client/conversation/worktree/lane-open.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-open.js +140 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts +79 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lane-workspace-sweeper.js +116 -0
- package/lib/types/client/conversation/worktree/lifecycle.d.ts +29 -0
- package/lib/types/client/conversation/worktree/lifecycle.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/lifecycle.js +67 -0
- package/lib/types/client/conversation/worktree/locales.d.ts +58 -0
- package/lib/types/client/conversation/worktree/locales.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/locales.js +86 -0
- package/lib/types/client/conversation/worktree/semantic.d.ts +11 -0
- package/lib/types/client/conversation/worktree/semantic.d.ts.map +1 -0
- package/lib/types/client/conversation/worktree/semantic.js +10 -0
- package/lib/types/client/index.d.ts +14 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +45 -0
- package/lib/types/client/lark-inbox/i18n.d.ts +63 -0
- package/lib/types/client/lark-inbox/i18n.d.ts.map +1 -0
- package/lib/types/client/lark-inbox/i18n.js +119 -0
- package/lib/types/client/lark-inbox/wizard.d.ts +19 -0
- package/lib/types/client/lark-inbox/wizard.d.ts.map +1 -0
- package/lib/types/client/lark-inbox/wizard.js +158 -0
- package/lib/types/client/notify/i18n.d.ts +47 -0
- package/lib/types/client/notify/i18n.d.ts.map +1 -0
- package/lib/types/client/notify/i18n.js +87 -0
- package/lib/types/client/settings/family-scope.d.ts +23 -0
- package/lib/types/client/settings/family-scope.d.ts.map +1 -0
- package/lib/types/client/settings/family-scope.js +30 -0
- package/lib/types/client/settings/lark-inbox.d.ts +73 -0
- package/lib/types/client/settings/lark-inbox.d.ts.map +1 -0
- package/lib/types/client/settings/lark-inbox.js +144 -0
- package/lib/types/client/settings/notify.d.ts +66 -0
- package/lib/types/client/settings/notify.d.ts.map +1 -0
- package/lib/types/client/settings/notify.js +139 -0
- package/lib/types/client/settings/primitives-0.2.d.ts +137 -0
- package/lib/types/client/settings/primitives-0.2.d.ts.map +1 -0
- package/lib/types/client/settings/primitives-0.2.js +8 -0
- package/lib/types/client/sidebar/RenderBoundary.d.ts +17 -0
- package/lib/types/client/sidebar/RenderBoundary.d.ts.map +1 -0
- package/lib/types/client/sidebar/RenderBoundary.js +18 -0
- package/lib/types/client/sidebar/agent-browser.d.ts +9 -0
- package/lib/types/client/sidebar/agent-browser.d.ts.map +1 -0
- package/lib/types/client/sidebar/agent-browser.js +102 -0
- package/lib/types/client/sidebar/diff-view.d.ts +58 -0
- package/lib/types/client/sidebar/diff-view.d.ts.map +1 -0
- package/lib/types/client/sidebar/diff-view.js +223 -0
- package/lib/types/client/sidebar/git-workbench.d.ts +41 -0
- package/lib/types/client/sidebar/git-workbench.d.ts.map +1 -0
- package/lib/types/client/sidebar/git-workbench.js +480 -0
- package/lib/types/client/sidebar/icons.d.ts +9 -0
- package/lib/types/client/sidebar/icons.d.ts.map +1 -0
- package/lib/types/client/sidebar/icons.js +6 -0
- package/lib/types/client/sidebar/index.d.ts +19 -0
- package/lib/types/client/sidebar/index.d.ts.map +1 -0
- package/lib/types/client/sidebar/index.js +12 -0
- package/lib/types/client/sidebar/native-panels.d.ts +19 -0
- package/lib/types/client/sidebar/native-panels.d.ts.map +1 -0
- package/lib/types/client/sidebar/native-panels.js +103 -0
- package/lib/types/client/sidebar/page-shell.d.ts +52 -0
- package/lib/types/client/sidebar/page-shell.d.ts.map +1 -0
- package/lib/types/client/sidebar/page-shell.js +18 -0
- package/lib/types/client/sidebar/panels/memoir/api.d.ts +258 -0
- package/lib/types/client/sidebar/panels/memoir/api.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/api.js +135 -0
- package/lib/types/client/sidebar/panels/memoir/controller.d.ts +22 -0
- package/lib/types/client/sidebar/panels/memoir/controller.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/controller.js +38 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.d.ts +80 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/cwd.js +96 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.d.ts +21 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/i18n.js +288 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts +11 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/panel-activation.js +37 -0
- package/lib/types/client/sidebar/panels/memoir/panel.d.ts +26 -0
- package/lib/types/client/sidebar/panels/memoir/panel.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/panel.js +423 -0
- package/lib/types/client/sidebar/panels/memoir/styles.d.ts +22 -0
- package/lib/types/client/sidebar/panels/memoir/styles.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/styles.js +774 -0
- package/lib/types/client/sidebar/panels/memoir/types.d.ts +7 -0
- package/lib/types/client/sidebar/panels/memoir/types.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/memoir/types.js +5 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts +8 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/ClusterTab.js +53 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts +13 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/HostFormDialog.js +110 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts +26 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/HostsTab.js +175 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts +14 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/SshPanel.js +34 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts +18 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TerminalTab.js +207 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts +8 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TransferTab.js +168 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts +18 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/TunnelsTab.js +161 -0
- package/lib/types/client/sidebar/panels/ssh/api.d.ts +80 -0
- package/lib/types/client/sidebar/panels/ssh/api.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/api.js +333 -0
- package/lib/types/client/sidebar/panels/ssh/controller.d.ts +23 -0
- package/lib/types/client/sidebar/panels/ssh/controller.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/controller.js +41 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.d.ts +44 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/helpers.js +53 -0
- package/lib/types/client/sidebar/panels/ssh/locales.d.ts +155 -0
- package/lib/types/client/sidebar/panels/ssh/locales.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/locales.js +312 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts +3 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.d.ts.map +1 -0
- package/lib/types/client/sidebar/panels/ssh/xterm.css.js +2 -0
- package/lib/types/client/sidebar/right-pane-i18n.d.ts +121 -0
- package/lib/types/client/sidebar/right-pane-i18n.d.ts.map +1 -0
- package/lib/types/client/sidebar/right-pane-i18n.js +239 -0
- package/lib/types/client/sidebar/right-pane.d.ts +27 -0
- package/lib/types/client/sidebar/right-pane.d.ts.map +1 -0
- package/lib/types/client/sidebar/right-pane.js +112 -0
- package/lib/types/client/sidebar/scope.d.ts +17 -0
- package/lib/types/client/sidebar/scope.d.ts.map +1 -0
- package/lib/types/client/sidebar/scope.js +41 -0
- package/lib/types/client/trust.d.ts +78 -0
- package/lib/types/client/trust.d.ts.map +1 -0
- package/lib/types/client/trust.js +130 -0
- package/lib/types/client/ui-icons.d.ts +19 -0
- package/lib/types/client/ui-icons.d.ts.map +1 -0
- package/lib/types/client/ui-icons.js +33 -0
- package/lib/types/core/git-graph/commands.d.ts +36 -0
- package/lib/types/core/git-graph/commands.d.ts.map +1 -0
- package/lib/types/core/git-graph/commands.js +122 -0
- package/lib/types/core/git-graph/protocol.d.ts +104 -0
- package/lib/types/core/git-graph/protocol.d.ts.map +1 -0
- package/lib/types/core/git-graph/protocol.js +142 -0
- package/lib/types/core/index.d.ts +3 -0
- package/lib/types/core/index.d.ts.map +1 -0
- package/lib/types/core/index.js +2 -0
- package/lib/types/core/lark-inbox/gating.d.ts +21 -0
- package/lib/types/core/lark-inbox/gating.d.ts.map +1 -0
- package/lib/types/core/lark-inbox/gating.js +17 -0
- package/lib/types/core/lark-inbox/queue.d.ts +27 -0
- package/lib/types/core/lark-inbox/queue.d.ts.map +1 -0
- package/lib/types/core/lark-inbox/queue.js +78 -0
- package/lib/types/core/memoir/protocol.d.ts +42 -0
- package/lib/types/core/memoir/protocol.d.ts.map +1 -0
- package/lib/types/core/memoir/protocol.js +8 -0
- package/lib/types/core/no-browser-auth/contract.d.ts +22 -0
- package/lib/types/core/no-browser-auth/contract.d.ts.map +1 -0
- package/lib/types/core/no-browser-auth/contract.js +9 -0
- package/lib/types/core/notify/contract.d.ts +133 -0
- package/lib/types/core/notify/contract.d.ts.map +1 -0
- package/lib/types/core/notify/contract.js +186 -0
- package/lib/types/core/notify/feed.d.ts +116 -0
- package/lib/types/core/notify/feed.d.ts.map +1 -0
- package/lib/types/core/notify/feed.js +214 -0
- package/lib/types/core/playwright-sessions/contracts.d.ts +98 -0
- package/lib/types/core/playwright-sessions/contracts.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/contracts.js +68 -0
- package/lib/types/core/playwright-sessions/control.d.ts +19 -0
- package/lib/types/core/playwright-sessions/control.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/control.js +9 -0
- package/lib/types/core/playwright-sessions/index.d.ts +4 -0
- package/lib/types/core/playwright-sessions/index.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/index.js +3 -0
- package/lib/types/core/playwright-sessions/names.d.ts +4 -0
- package/lib/types/core/playwright-sessions/names.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/names.js +84 -0
- package/lib/types/core/playwright-sessions/schema.d.ts +4 -0
- package/lib/types/core/playwright-sessions/schema.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/schema.js +90 -0
- package/lib/types/core/playwright-sessions/wire.d.ts +78 -0
- package/lib/types/core/playwright-sessions/wire.d.ts.map +1 -0
- package/lib/types/core/playwright-sessions/wire.js +103 -0
- package/lib/types/core/remote-access/paths.d.ts +19 -0
- package/lib/types/core/remote-access/paths.d.ts.map +1 -0
- package/lib/types/core/remote-access/paths.js +18 -0
- package/lib/types/core/remote-web-ui/security.d.ts +35 -0
- package/lib/types/core/remote-web-ui/security.d.ts.map +1 -0
- package/lib/types/core/remote-web-ui/security.js +146 -0
- package/lib/types/core/right-pane/protocol.d.ts +25 -0
- package/lib/types/core/right-pane/protocol.d.ts.map +1 -0
- package/lib/types/core/right-pane/protocol.js +91 -0
- package/lib/types/core/schedule-mode/index.d.ts +7 -0
- package/lib/types/core/schedule-mode/index.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/index.js +6 -0
- package/lib/types/core/schedule-mode/native.d.ts +35 -0
- package/lib/types/core/schedule-mode/native.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/native.js +82 -0
- package/lib/types/core/schedule-mode/types.d.ts +177 -0
- package/lib/types/core/schedule-mode/types.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/types.js +65 -0
- package/lib/types/core/schedule-mode/view.d.ts +62 -0
- package/lib/types/core/schedule-mode/view.d.ts.map +1 -0
- package/lib/types/core/schedule-mode/view.js +4 -0
- package/lib/types/core/ssh/protocol.d.ts +215 -0
- package/lib/types/core/ssh/protocol.d.ts.map +1 -0
- package/lib/types/core/ssh/protocol.js +23 -0
- package/lib/types/core/subagent-model/badges.d.ts +73 -0
- package/lib/types/core/subagent-model/badges.d.ts.map +1 -0
- package/lib/types/core/subagent-model/badges.js +105 -0
- package/lib/types/core/worktree/invariant.d.ts +62 -0
- package/lib/types/core/worktree/invariant.d.ts.map +1 -0
- package/lib/types/core/worktree/invariant.js +72 -0
- package/lib/types/core/worktree/manifest.d.ts +71 -0
- package/lib/types/core/worktree/manifest.d.ts.map +1 -0
- package/lib/types/core/worktree/manifest.js +98 -0
- package/lib/types/core/worktree/paths.d.ts +60 -0
- package/lib/types/core/worktree/paths.d.ts.map +1 -0
- package/lib/types/core/worktree/paths.js +118 -0
- package/lib/types/core/worktree/pr-create.d.ts +67 -0
- package/lib/types/core/worktree/pr-create.d.ts.map +1 -0
- package/lib/types/core/worktree/pr-create.js +118 -0
- package/lib/types/core/worktree/protocol.d.ts +7 -0
- package/lib/types/core/worktree/protocol.d.ts.map +1 -0
- package/lib/types/core/worktree/protocol.js +6 -0
- package/lib/types/core/worktree/types.d.ts +292 -0
- package/lib/types/core/worktree/types.d.ts.map +1 -0
- package/lib/types/core/worktree/types.js +14 -0
- package/lib/types/core/worktree/workspace-model.d.ts +56 -0
- package/lib/types/core/worktree/workspace-model.d.ts.map +1 -0
- package/lib/types/core/worktree/workspace-model.js +14 -0
- package/lib/types/host/services/access-trust/index.d.ts +54 -0
- package/lib/types/host/services/access-trust/index.d.ts.map +1 -0
- package/lib/types/host/services/access-trust/index.js +82 -0
- package/lib/types/host/services/access-trust/trust.d.ts +70 -0
- package/lib/types/host/services/access-trust/trust.d.ts.map +1 -0
- package/lib/types/host/services/access-trust/trust.js +187 -0
- package/lib/types/host/services/codex-bridge/bridge.d.ts +106 -0
- package/lib/types/host/services/codex-bridge/bridge.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/bridge.js +321 -0
- package/lib/types/host/services/codex-bridge/codex-auth.d.ts +108 -0
- package/lib/types/host/services/codex-bridge/codex-auth.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/codex-auth.js +241 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.d.ts +58 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/dsh-integration.js +120 -0
- package/lib/types/host/services/codex-bridge/http.d.ts +43 -0
- package/lib/types/host/services/codex-bridge/http.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/http.js +92 -0
- package/lib/types/host/services/codex-bridge/index.d.ts +63 -0
- package/lib/types/host/services/codex-bridge/index.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/index.js +111 -0
- package/lib/types/host/services/codex-bridge/loopback.d.ts +25 -0
- package/lib/types/host/services/codex-bridge/loopback.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/loopback.js +68 -0
- package/lib/types/host/services/codex-bridge/routes.d.ts +31 -0
- package/lib/types/host/services/codex-bridge/routes.d.ts.map +1 -0
- package/lib/types/host/services/codex-bridge/routes.js +126 -0
- package/lib/types/host/services/family-config.d.ts +71 -0
- package/lib/types/host/services/family-config.d.ts.map +1 -0
- package/lib/types/host/services/family-config.js +166 -0
- package/lib/types/host/services/family-namespaces.d.ts +24 -0
- package/lib/types/host/services/family-namespaces.d.ts.map +1 -0
- package/lib/types/host/services/family-namespaces.js +30 -0
- package/lib/types/host/services/git-graph/index.d.ts +6 -0
- package/lib/types/host/services/git-graph/index.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/index.js +7 -0
- package/lib/types/host/services/git-graph/routes.d.ts +4 -0
- package/lib/types/host/services/git-graph/routes.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/routes.js +241 -0
- package/lib/types/host/services/git-graph/service.d.ts +52 -0
- package/lib/types/host/services/git-graph/service.d.ts.map +1 -0
- package/lib/types/host/services/git-graph/service.js +301 -0
- package/lib/types/host/services/index.d.ts +23 -0
- package/lib/types/host/services/index.d.ts.map +1 -0
- package/lib/types/host/services/index.js +80 -0
- package/lib/types/host/services/lark-inbox/config.d.ts +24 -0
- package/lib/types/host/services/lark-inbox/config.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/config.js +48 -0
- package/lib/types/host/services/lark-inbox/gateway.d.ts +53 -0
- package/lib/types/host/services/lark-inbox/gateway.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/gateway.js +171 -0
- package/lib/types/host/services/lark-inbox/host-routes.d.ts +22 -0
- package/lib/types/host/services/lark-inbox/host-routes.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/host-routes.js +146 -0
- package/lib/types/host/services/lark-inbox/inbox-store.d.ts +39 -0
- package/lib/types/host/services/lark-inbox/inbox-store.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/inbox-store.js +124 -0
- package/lib/types/host/services/lark-inbox/index.d.ts +26 -0
- package/lib/types/host/services/lark-inbox/index.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/index.js +135 -0
- package/lib/types/host/services/lark-inbox/tools.d.ts +7 -0
- package/lib/types/host/services/lark-inbox/tools.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/tools.js +119 -0
- package/lib/types/host/services/lark-inbox/wizard.d.ts +62 -0
- package/lib/types/host/services/lark-inbox/wizard.d.ts.map +1 -0
- package/lib/types/host/services/lark-inbox/wizard.js +211 -0
- package/lib/types/host/services/lifecycle.d.ts +29 -0
- package/lib/types/host/services/lifecycle.d.ts.map +1 -0
- package/lib/types/host/services/lifecycle.js +93 -0
- package/lib/types/host/services/memoir/index.d.ts +40 -0
- package/lib/types/host/services/memoir/index.d.ts.map +1 -0
- package/lib/types/host/services/memoir/index.js +52 -0
- package/lib/types/host/services/memoir/routes.d.ts +30 -0
- package/lib/types/host/services/memoir/routes.d.ts.map +1 -0
- package/lib/types/host/services/memoir/routes.js +364 -0
- package/lib/types/host/services/memoir/settings.d.ts +27 -0
- package/lib/types/host/services/memoir/settings.d.ts.map +1 -0
- package/lib/types/host/services/memoir/settings.js +120 -0
- package/lib/types/host/services/memoir/store.d.ts +35 -0
- package/lib/types/host/services/memoir/store.d.ts.map +1 -0
- package/lib/types/host/services/memoir/store.js +124 -0
- package/lib/types/host/services/memoir/tools.d.ts +8 -0
- package/lib/types/host/services/memoir/tools.d.ts.map +1 -0
- package/lib/types/host/services/memoir/tools.js +154 -0
- package/lib/types/host/services/no-browser-auth/index.d.ts +25 -0
- package/lib/types/host/services/no-browser-auth/index.d.ts.map +1 -0
- package/lib/types/host/services/no-browser-auth/index.js +42 -0
- package/lib/types/host/services/notify/config.d.ts +105 -0
- package/lib/types/host/services/notify/config.d.ts.map +1 -0
- package/lib/types/host/services/notify/config.js +123 -0
- package/lib/types/host/services/notify/feishu-sender.d.ts +120 -0
- package/lib/types/host/services/notify/feishu-sender.d.ts.map +1 -0
- package/lib/types/host/services/notify/feishu-sender.js +186 -0
- package/lib/types/host/services/notify/host-routes.d.ts +69 -0
- package/lib/types/host/services/notify/host-routes.d.ts.map +1 -0
- package/lib/types/host/services/notify/host-routes.js +112 -0
- package/lib/types/host/services/notify/index.d.ts +80 -0
- package/lib/types/host/services/notify/index.d.ts.map +1 -0
- package/lib/types/host/services/notify/index.js +263 -0
- package/lib/types/host/services/playwright-sessions/child.d.ts +76 -0
- package/lib/types/host/services/playwright-sessions/child.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/child.js +197 -0
- package/lib/types/host/services/playwright-sessions/controller.d.ts +25 -0
- package/lib/types/host/services/playwright-sessions/controller.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/controller.js +104 -0
- package/lib/types/host/services/playwright-sessions/index.d.ts +6 -0
- package/lib/types/host/services/playwright-sessions/index.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/index.js +161 -0
- package/lib/types/host/services/playwright-sessions/live-view.d.ts +32 -0
- package/lib/types/host/services/playwright-sessions/live-view.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/live-view.js +188 -0
- package/lib/types/host/services/playwright-sessions/manager.d.ts +87 -0
- package/lib/types/host/services/playwright-sessions/manager.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/manager.js +203 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.d.ts +39 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/profile-gc.js +72 -0
- package/lib/types/host/services/playwright-sessions/routes.d.ts +18 -0
- package/lib/types/host/services/playwright-sessions/routes.d.ts.map +1 -0
- package/lib/types/host/services/playwright-sessions/routes.js +87 -0
- package/lib/types/host/services/remote-access/boot-scripts.d.ts +55 -0
- package/lib/types/host/services/remote-access/boot-scripts.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/boot-scripts.js +109 -0
- package/lib/types/host/services/remote-access/index.d.ts +28 -0
- package/lib/types/host/services/remote-access/index.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/index.js +47 -0
- package/lib/types/host/services/remote-access/routes.d.ts +42 -0
- package/lib/types/host/services/remote-access/routes.d.ts.map +1 -0
- package/lib/types/host/services/remote-access/routes.js +119 -0
- package/lib/types/host/services/remote-web-ui/index.d.ts +21 -0
- package/lib/types/host/services/remote-web-ui/index.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/index.js +325 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts +115 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/accounts.js +396 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts +28 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/cookie.js +48 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts +17 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/dsh-home.js +40 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts +73 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/external-auth.js +242 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts +23 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/fence.js +24 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts +89 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway-routes.js +768 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts +99 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/gateway.js +679 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts +43 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/http.js +92 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts +42 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/integrated-auth.js +73 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts +13 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/lan.js +17 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts +25 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/loopback.js +68 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts +75 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/posture.js +116 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts +44 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/roles.js +47 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts +21 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/server-boot.js +37 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts +111 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server-mode/sessions.js +298 -0
- package/lib/types/host/services/remote-web-ui/server.d.ts +82 -0
- package/lib/types/host/services/remote-web-ui/server.d.ts.map +1 -0
- package/lib/types/host/services/remote-web-ui/server.js +492 -0
- package/lib/types/host/services/resources.d.ts +9 -0
- package/lib/types/host/services/resources.d.ts.map +1 -0
- package/lib/types/host/services/resources.js +98 -0
- package/lib/types/host/services/right-pane/browser.d.ts +42 -0
- package/lib/types/host/services/right-pane/browser.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/browser.js +106 -0
- package/lib/types/host/services/right-pane/index.d.ts +22 -0
- package/lib/types/host/services/right-pane/index.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/index.js +114 -0
- package/lib/types/host/services/right-pane/wire.d.ts +6 -0
- package/lib/types/host/services/right-pane/wire.d.ts.map +1 -0
- package/lib/types/host/services/right-pane/wire.js +9 -0
- package/lib/types/host/services/schedule-mode/config.d.ts +11 -0
- package/lib/types/host/services/schedule-mode/config.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/config.js +15 -0
- package/lib/types/host/services/schedule-mode/engine.d.ts +150 -0
- package/lib/types/host/services/schedule-mode/engine.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/engine.js +672 -0
- package/lib/types/host/services/schedule-mode/index.d.ts +33 -0
- package/lib/types/host/services/schedule-mode/index.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/index.js +175 -0
- package/lib/types/host/services/schedule-mode/routes.d.ts +31 -0
- package/lib/types/host/services/schedule-mode/routes.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/routes.js +109 -0
- package/lib/types/host/services/schedule-mode/session-create.d.ts +27 -0
- package/lib/types/host/services/schedule-mode/session-create.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/session-create.js +21 -0
- package/lib/types/host/services/schedule-mode/store.d.ts +36 -0
- package/lib/types/host/services/schedule-mode/store.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/store.js +309 -0
- package/lib/types/host/services/schedule-mode/tools.d.ts +13 -0
- package/lib/types/host/services/schedule-mode/tools.d.ts.map +1 -0
- package/lib/types/host/services/schedule-mode/tools.js +132 -0
- package/lib/types/host/services/ssh/engine.d.ts +162 -0
- package/lib/types/host/services/ssh/engine.d.ts.map +1 -0
- package/lib/types/host/services/ssh/engine.js +699 -0
- package/lib/types/host/services/ssh/host-keys.d.ts +10 -0
- package/lib/types/host/services/ssh/host-keys.d.ts.map +1 -0
- package/lib/types/host/services/ssh/host-keys.js +108 -0
- package/lib/types/host/services/ssh/index.d.ts +38 -0
- package/lib/types/host/services/ssh/index.d.ts.map +1 -0
- package/lib/types/host/services/ssh/index.js +47 -0
- package/lib/types/host/services/ssh/routes.d.ts +29 -0
- package/lib/types/host/services/ssh/routes.d.ts.map +1 -0
- package/lib/types/host/services/ssh/routes.js +465 -0
- package/lib/types/host/services/ssh/store.d.ts +40 -0
- package/lib/types/host/services/ssh/store.d.ts.map +1 -0
- package/lib/types/host/services/ssh/store.js +330 -0
- package/lib/types/host/services/ssh/terminal-ws.d.ts +9 -0
- package/lib/types/host/services/ssh/terminal-ws.d.ts.map +1 -0
- package/lib/types/host/services/ssh/terminal-ws.js +142 -0
- package/lib/types/host/services/ssh/tools.d.ts +11 -0
- package/lib/types/host/services/ssh/tools.d.ts.map +1 -0
- package/lib/types/host/services/ssh/tools.js +270 -0
- package/lib/types/host/services/web-render/contracts.d.ts +93 -0
- package/lib/types/host/services/web-render/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-render/contracts.js +60 -0
- package/lib/types/host/services/web-render/index.d.ts +58 -0
- package/lib/types/host/services/web-render/index.d.ts.map +1 -0
- package/lib/types/host/services/web-render/index.js +90 -0
- package/lib/types/host/services/web-render/provider.d.ts +37 -0
- package/lib/types/host/services/web-render/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-render/provider.js +274 -0
- package/lib/types/host/services/web-search-anthropic/contracts.d.ts +117 -0
- package/lib/types/host/services/web-search-anthropic/contracts.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/contracts.js +90 -0
- package/lib/types/host/services/web-search-anthropic/index.d.ts +53 -0
- package/lib/types/host/services/web-search-anthropic/index.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/index.js +123 -0
- package/lib/types/host/services/web-search-anthropic/provider.d.ts +101 -0
- package/lib/types/host/services/web-search-anthropic/provider.d.ts.map +1 -0
- package/lib/types/host/services/web-search-anthropic/provider.js +237 -0
- package/lib/types/host/services/worktree/git-runner.d.ts +82 -0
- package/lib/types/host/services/worktree/git-runner.d.ts.map +1 -0
- package/lib/types/host/services/worktree/git-runner.js +81 -0
- package/lib/types/host/services/worktree/git.d.ts +94 -0
- package/lib/types/host/services/worktree/git.d.ts.map +1 -0
- package/lib/types/host/services/worktree/git.js +153 -0
- package/lib/types/host/services/worktree/http.d.ts +12 -0
- package/lib/types/host/services/worktree/http.d.ts.map +1 -0
- package/lib/types/host/services/worktree/http.js +34 -0
- package/lib/types/host/services/worktree/index.d.ts +38 -0
- package/lib/types/host/services/worktree/index.d.ts.map +1 -0
- package/lib/types/host/services/worktree/index.js +78 -0
- package/lib/types/host/services/worktree/lane-tool.d.ts +22 -0
- package/lib/types/host/services/worktree/lane-tool.d.ts.map +1 -0
- package/lib/types/host/services/worktree/lane-tool.js +92 -0
- package/lib/types/host/services/worktree/manager.d.ts +410 -0
- package/lib/types/host/services/worktree/manager.d.ts.map +1 -0
- package/lib/types/host/services/worktree/manager.js +1485 -0
- package/lib/types/host/services/worktree/model-override.d.ts +20 -0
- package/lib/types/host/services/worktree/model-override.d.ts.map +1 -0
- package/lib/types/host/services/worktree/model-override.js +35 -0
- package/lib/types/host/services/worktree/routes.d.ts +50 -0
- package/lib/types/host/services/worktree/routes.d.ts.map +1 -0
- package/lib/types/host/services/worktree/routes.js +695 -0
- package/lib/types/host/services/worktree/run-command.d.ts +26 -0
- package/lib/types/host/services/worktree/run-command.d.ts.map +1 -0
- package/lib/types/host/services/worktree/run-command.js +36 -0
- package/lib/types/host/services/worktree/session-lane/manager.d.ts +109 -0
- package/lib/types/host/services/worktree/session-lane/manager.d.ts.map +1 -0
- package/lib/types/host/services/worktree/session-lane/manager.js +172 -0
- package/lib/types/host/services/worktree/workspace-model-routes.d.ts +21 -0
- package/lib/types/host/services/worktree/workspace-model-routes.d.ts.map +1 -0
- package/lib/types/host/services/worktree/workspace-model-routes.js +198 -0
- package/lib/types/host/services/worktree/workspace-model.d.ts +48 -0
- package/lib/types/host/services/worktree/workspace-model.d.ts.map +1 -0
- package/lib/types/host/services/worktree/workspace-model.js +113 -0
- package/lib/types/index.d.ts +47 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +52 -0
- package/lib/types/invariant.d.ts +4 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/invariant.js +3 -0
- package/package.json +153 -3
- package/presets/code-vibe/THIRD_PARTY_NOTICES.md +55 -0
- package/presets/code-vibe/skills/UPSTREAM.md +104 -0
- package/presets/code-vibe/skills/agent-experience/SKILL.md +15 -0
- package/presets/code-vibe/skills/agent-operation/SKILL.md +43 -0
- package/presets/code-vibe/skills/code-review/SKILL.md +45 -0
- package/presets/code-vibe/skills/dsh-ci-test-reliability/SKILL.md +133 -0
- package/presets/code-vibe/skills/dsh-ci-test-reliability/references/ci-flake-diagnosis.md +60 -0
- package/presets/code-vibe/skills/dsh-find-simplifications/SKILL.md +69 -0
- package/presets/code-vibe/skills/dsh-find-simplifications/references/historical-patterns.md +45 -0
- package/presets/code-vibe/skills/dsh-merging-stacked-prs/SKILL.md +129 -0
- package/presets/code-vibe/skills/dsh-prose-standard/SKILL.md +83 -0
- package/presets/code-vibe/skills/dsh-prose-standard/references/examples.md +169 -0
- package/presets/code-vibe/skills/dsh-speed-up-perf/SKILL.md +94 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/SKILL.md +47 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/examples.md +275 -0
- package/presets/code-vibe/skills/dsh-trim-cot-leakage/references/recall-batteries.md +52 -0
- package/presets/code-vibe/skills/frontend-design/SKILL.md +60 -0
- package/presets/code-vibe/skills/frontend-design/references/critique-format.md +35 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/LOAD-MAP.md +81 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/README.md +53 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/anchor.md +51 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/ai-tells.md +59 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/audit/web-interface.md +14 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/change-control.md +62 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/copy.md +65 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/craft-knobs.md +61 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/debug-playbook.md +37 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/exemplars/README.md +64 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/plan-architecture.checklist.json +13 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/product-judgment.md +113 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/system-architecture.md +108 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/README.md +26 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/color-roles.md +49 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/motion.md +51 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/tokens/scale.md +89 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-page-gate.md +61 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ui-surface.checklist.json +49 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/ux.md +76 -0
- package/presets/code-vibe/skills/frontend-design/references/design-standards/visual.md +52 -0
- package/presets/code-vibe/skills/frontend-design/references/perceptible-path.md +27 -0
- package/presets/code-vibe/skills/frontend-design/references/product-package.md +80 -0
- package/presets/code-vibe/skills/frontend-design/references/scheme-antipatterns.md +21 -0
- package/presets/code-vibe/skills/quality-review/SKILL.md +57 -0
- package/presets/code-vibe/skills/quality-review/references/bounded-verify.md +37 -0
- package/presets/code-vibe/skills/quality-review/references/browser-verify.md +81 -0
- package/presets/code-vibe/skills/quality-review/references/evidence-contract.md +194 -0
- package/presets/code-vibe/skills/quality-review/references/falsify-checklist.md +44 -0
- package/presets/code-vibe/skills/quality-review/references/human-acceptance-pack.md +68 -0
- package/presets/code-vibe/skills/quality-review/references/product-regression.md +51 -0
- package/presets/code-vibe/skills/quality-review/references/ux-standards.md +37 -0
- package/presets/code-vibe/skills/quality-review/references/ux-walkthrough.md +49 -0
- package/presets/code-vibe/skills/quality-review/references/validation-report.md +22 -0
- package/presets/code-vibe/skills/quality-review/references/verification-loop.md +95 -0
- package/presets/code-vibe/skills/quality-review/references/version-acceptance-matrix.md +131 -0
- package/presets/code-vibe/skills/record-browser-gif/SKILL.md +174 -0
- package/presets/code-vibe/skills/record-browser-gif/scripts/encode_gif.py +337 -0
- package/presets/code-vibe/skills/record-browser-gif/scripts/test_encode_gif.py +103 -0
- package/presets/code-vibe/skills/wish-programming/SKILL.md +150 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/arch-reviewer.md +26 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/design-reviewer.md +32 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/pm-reviewer.md +26 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/qa-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/security-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/sre-reviewer.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/roles/ux-adversary.md +16 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/arch.md.tpl +51 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/brief.md.tpl +36 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/confirmation-pack.md +54 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/design-spec.md.tpl +49 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/module-readme.md +37 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/product.md.tpl +74 -0
- package/presets/code-vibe/skills/wish-programming/references/templates/requirements.md.tpl +31 -0
- package/presets/code-vibe/skills/wish-programming/references/workflow-template.md +122 -0
- package/presets/code-vibe/skills/wish-programming/scripts/MANIFEST.sha256 +11 -0
- package/presets/code-vibe/skills/wish-programming/scripts/check_spec.py +416 -0
- package/presets/code-vibe/skills/wish-programming/scripts/check_whitelist.py +193 -0
- package/presets/code-vibe/skills/wish-programming/scripts/coverage_check.py +199 -0
- package/presets/code-vibe/skills/wish-programming/scripts/gate-lock.sh +46 -0
- package/presets/code-vibe/skills/wish-programming/scripts/journey.sh +281 -0
- package/presets/code-vibe/skills/wish-programming/scripts/project.sh +152 -0
- package/presets/code-vibe/skills/wish-programming/scripts/replay.sh +65 -0
- package/presets/code-vibe/skills/wish-programming/scripts/scan_drift.py +79 -0
- package/presets/code-vibe/skills/wish-programming/scripts/verify.sh +169 -0
- package/presets/code-vibe/skills/wish-programming/scripts/verify_preset_budgets.py +218 -0
- package/presets/code-vibe/skills/wish-programming/scripts/wish.sh +150 -0
- package/presets/code-vibe.patch.yml +325 -0
- package/presets/hiopen.patch.yml +109 -0
- package/src/client/compat.ts +86 -0
- package/src/client/conversation/conversation.module.css +264 -0
- package/src/client/conversation/git-branch.tsx +152 -0
- package/src/client/conversation/git-graph/LICENSE.git-graph +202 -0
- package/src/client/conversation/git-graph/api.ts +85 -0
- package/src/client/conversation/git-graph/branch-chip.tsx +354 -0
- package/src/client/conversation/git-graph/branch-popover.tsx +185 -0
- package/src/client/conversation/git-graph/chip.tsx +47 -0
- package/src/client/conversation/git-graph/create-branch-dialog.tsx +108 -0
- package/src/client/conversation/git-graph/error-copy.ts +50 -0
- package/src/client/conversation/git-graph/git-graph.module.css +792 -0
- package/src/client/conversation/git-graph/graph-dialog.tsx +196 -0
- package/src/client/conversation/git-graph/hero-seat.ts +76 -0
- package/src/client/conversation/git-graph/locales.ts +90 -0
- package/src/client/conversation/git-graph/sse-leader.ts +124 -0
- package/src/client/conversation/index.ts +82 -0
- package/src/client/conversation/selector-context.tsx +24 -0
- package/src/client/conversation/session-lane-chip.tsx +262 -0
- package/src/client/conversation/session-lane-locales.ts +34 -0
- package/src/client/conversation/subagent-model-dom.ts +157 -0
- package/src/client/conversation/subagent-model.ts +198 -0
- package/src/client/conversation/worktree/api.ts +283 -0
- package/src/client/conversation/worktree/dialogs/DeleteWorktreeDialog.tsx +111 -0
- package/src/client/conversation/worktree/dialogs/PrCreateDialog.tsx +114 -0
- package/src/client/conversation/worktree/lane-binding.ts +77 -0
- package/src/client/conversation/worktree/lane-menu.tsx +247 -0
- package/src/client/conversation/worktree/lane-open.ts +204 -0
- package/src/client/conversation/worktree/lane-workspace-sweeper.ts +136 -0
- package/src/client/conversation/worktree/lifecycle.ts +75 -0
- package/src/client/conversation/worktree/locales.ts +97 -0
- package/src/client/conversation/worktree/semantic.ts +10 -0
- package/src/client/conversation/worktree/worktree.module.css +70 -0
- package/src/client/css-modules.d.ts +8 -0
- package/src/client/index.ts +58 -0
- package/src/client/lark-inbox/i18n.ts +125 -0
- package/src/client/lark-inbox/lark-wizard.module.css +88 -0
- package/src/client/lark-inbox/wizard.tsx +211 -0
- package/src/client/notify/i18n.ts +93 -0
- package/src/client/settings/family-scope.ts +45 -0
- package/src/client/settings/lark-inbox.tsx +319 -0
- package/src/client/settings/notify.tsx +288 -0
- package/src/client/settings/primitives-0.2.ts +148 -0
- package/src/client/settings/settings-shell.module.css +56 -0
- package/src/client/sidebar/RenderBoundary.tsx +17 -0
- package/src/client/sidebar/agent-browser.tsx +114 -0
- package/src/client/sidebar/diff-view.tsx +314 -0
- package/src/client/sidebar/git-workbench.tsx +700 -0
- package/src/client/sidebar/icons.tsx +23 -0
- package/src/client/sidebar/index.ts +28 -0
- package/src/client/sidebar/native-panels.tsx +149 -0
- package/src/client/sidebar/page-shell.module.css +96 -0
- package/src/client/sidebar/page-shell.tsx +86 -0
- package/src/client/sidebar/panels/memoir/api.ts +300 -0
- package/src/client/sidebar/panels/memoir/controller.ts +47 -0
- package/src/client/sidebar/panels/memoir/cwd.ts +140 -0
- package/src/client/sidebar/panels/memoir/i18n.ts +300 -0
- package/src/client/sidebar/panels/memoir/panel-activation.ts +42 -0
- package/src/client/sidebar/panels/memoir/panel.tsx +869 -0
- package/src/client/sidebar/panels/memoir/styles.ts +776 -0
- package/src/client/sidebar/panels/memoir/types.ts +7 -0
- package/src/client/sidebar/panels/ssh/ClusterTab.tsx +123 -0
- package/src/client/sidebar/panels/ssh/HostFormDialog.tsx +243 -0
- package/src/client/sidebar/panels/ssh/HostsTab.tsx +290 -0
- package/src/client/sidebar/panels/ssh/SshPanel.tsx +76 -0
- package/src/client/sidebar/panels/ssh/TerminalTab.tsx +290 -0
- package/src/client/sidebar/panels/ssh/TransferTab.tsx +232 -0
- package/src/client/sidebar/panels/ssh/TunnelsTab.tsx +204 -0
- package/src/client/sidebar/panels/ssh/api.ts +388 -0
- package/src/client/sidebar/panels/ssh/controller.ts +48 -0
- package/src/client/sidebar/panels/ssh/helpers.ts +70 -0
- package/src/client/sidebar/panels/ssh/locales.ts +318 -0
- package/src/client/sidebar/panels/ssh/panel.module.css +801 -0
- package/src/client/sidebar/panels/ssh/xterm.css.ts +2 -0
- package/src/client/sidebar/right-pane-i18n.ts +243 -0
- package/src/client/sidebar/right-pane.tsx +156 -0
- package/src/client/sidebar/scope.ts +54 -0
- package/src/client/sidebar/sidebar-header.module.css +72 -0
- package/src/client/sidebar/sidebar.module.css +619 -0
- package/src/client/trust.ts +187 -0
- package/src/client/ui-icons.ts +35 -0
- package/src/core/git-graph/commands.ts +107 -0
- package/src/core/git-graph/protocol.ts +238 -0
- package/src/core/index.ts +2 -0
- package/src/core/lark-inbox/gating.ts +35 -0
- package/src/core/lark-inbox/queue.ts +100 -0
- package/src/core/memoir/protocol.ts +46 -0
- package/src/core/no-browser-auth/contract.ts +25 -0
- package/src/core/notify/contract.ts +236 -0
- package/src/core/notify/feed.ts +235 -0
- package/src/core/playwright-sessions/contracts.ts +143 -0
- package/src/core/playwright-sessions/control.ts +33 -0
- package/src/core/playwright-sessions/index.ts +3 -0
- package/src/core/playwright-sessions/names.ts +83 -0
- package/src/core/playwright-sessions/schema.ts +102 -0
- package/src/core/playwright-sessions/wire.ts +142 -0
- package/src/core/remote-access/paths.ts +23 -0
- package/src/core/remote-web-ui/security.ts +171 -0
- package/src/core/right-pane/protocol.ts +94 -0
- package/src/core/schedule-mode/index.ts +6 -0
- package/src/core/schedule-mode/native.ts +105 -0
- package/src/core/schedule-mode/types.ts +182 -0
- package/src/core/schedule-mode/view.ts +66 -0
- package/src/core/ssh/protocol.ts +212 -0
- package/src/core/subagent-model/badges.ts +161 -0
- package/src/core/worktree/invariant.ts +101 -0
- package/src/core/worktree/manifest.ts +135 -0
- package/src/core/worktree/paths.ts +123 -0
- package/src/core/worktree/pr-create.ts +157 -0
- package/src/core/worktree/protocol.ts +7 -0
- package/src/core/worktree/types.ts +317 -0
- package/src/core/worktree/workspace-model.ts +61 -0
- package/src/host/services/access-trust/index.ts +127 -0
- package/src/host/services/access-trust/trust.ts +189 -0
- package/src/host/services/codex-bridge/bridge.ts +392 -0
- package/src/host/services/codex-bridge/codex-auth.ts +352 -0
- package/src/host/services/codex-bridge/dsh-integration.ts +169 -0
- package/src/host/services/codex-bridge/http.ts +105 -0
- package/src/host/services/codex-bridge/index.ts +154 -0
- package/src/host/services/codex-bridge/loopback.ts +63 -0
- package/src/host/services/codex-bridge/routes.ts +143 -0
- package/src/host/services/family-config.ts +224 -0
- package/src/host/services/family-namespaces.ts +39 -0
- package/src/host/services/git-graph/index.ts +11 -0
- package/src/host/services/git-graph/routes.ts +212 -0
- package/src/host/services/git-graph/service.ts +305 -0
- package/src/host/services/index.ts +94 -0
- package/src/host/services/lark-inbox/config.ts +66 -0
- package/src/host/services/lark-inbox/gateway.ts +184 -0
- package/src/host/services/lark-inbox/host-routes.ts +113 -0
- package/src/host/services/lark-inbox/inbox-store.ts +160 -0
- package/src/host/services/lark-inbox/index.ts +141 -0
- package/src/host/services/lark-inbox/tools.ts +124 -0
- package/src/host/services/lark-inbox/wizard.ts +206 -0
- package/src/host/services/lifecycle.ts +107 -0
- package/src/host/services/memoir/index.ts +80 -0
- package/src/host/services/memoir/routes.ts +346 -0
- package/src/host/services/memoir/settings.ts +122 -0
- package/src/host/services/memoir/store.ts +132 -0
- package/src/host/services/memoir/tools.ts +158 -0
- package/src/host/services/no-browser-auth/index.ts +70 -0
- package/src/host/services/notify/config.ts +178 -0
- package/src/host/services/notify/feishu-sender.ts +220 -0
- package/src/host/services/notify/host-routes.ts +133 -0
- package/src/host/services/notify/index.ts +305 -0
- package/src/host/services/playwright-sessions/child.ts +251 -0
- package/src/host/services/playwright-sessions/controller.ts +102 -0
- package/src/host/services/playwright-sessions/index.ts +146 -0
- package/src/host/services/playwright-sessions/live-view.ts +225 -0
- package/src/host/services/playwright-sessions/manager.ts +239 -0
- package/src/host/services/playwright-sessions/profile-gc.ts +97 -0
- package/src/host/services/playwright-sessions/routes.ts +90 -0
- package/src/host/services/remote-access/boot-scripts.ts +118 -0
- package/src/host/services/remote-access/index.ts +62 -0
- package/src/host/services/remote-access/routes.ts +137 -0
- package/src/host/services/remote-web-ui/index.ts +344 -0
- package/src/host/services/remote-web-ui/server-mode/accounts.ts +423 -0
- package/src/host/services/remote-web-ui/server-mode/cookie.ts +57 -0
- package/src/host/services/remote-web-ui/server-mode/dsh-home.ts +42 -0
- package/src/host/services/remote-web-ui/server-mode/external-auth.ts +296 -0
- package/src/host/services/remote-web-ui/server-mode/fence.ts +27 -0
- package/src/host/services/remote-web-ui/server-mode/gateway-routes.ts +797 -0
- package/src/host/services/remote-web-ui/server-mode/gateway.ts +684 -0
- package/src/host/services/remote-web-ui/server-mode/http.ts +105 -0
- package/src/host/services/remote-web-ui/server-mode/integrated-auth.ts +118 -0
- package/src/host/services/remote-web-ui/server-mode/lan.ts +19 -0
- package/src/host/services/remote-web-ui/server-mode/loopback.ts +63 -0
- package/src/host/services/remote-web-ui/server-mode/posture.ts +154 -0
- package/src/host/services/remote-web-ui/server-mode/roles.ts +51 -0
- package/src/host/services/remote-web-ui/server-mode/server-boot.ts +38 -0
- package/src/host/services/remote-web-ui/server-mode/sessions.ts +347 -0
- package/src/host/services/remote-web-ui/server.ts +591 -0
- package/src/host/services/resources.ts +78 -0
- package/src/host/services/right-pane/browser.ts +106 -0
- package/src/host/services/right-pane/index.ts +117 -0
- package/src/host/services/right-pane/wire.ts +10 -0
- package/src/host/services/schedule-mode/config.ts +26 -0
- package/src/host/services/schedule-mode/engine.ts +689 -0
- package/src/host/services/schedule-mode/index.ts +214 -0
- package/src/host/services/schedule-mode/routes.ts +130 -0
- package/src/host/services/schedule-mode/session-create.ts +36 -0
- package/src/host/services/schedule-mode/store.ts +304 -0
- package/src/host/services/schedule-mode/tools.ts +154 -0
- package/src/host/services/ssh/engine.ts +675 -0
- package/src/host/services/ssh/host-keys.ts +99 -0
- package/src/host/services/ssh/index.ts +84 -0
- package/src/host/services/ssh/routes.ts +442 -0
- package/src/host/services/ssh/store.ts +310 -0
- package/src/host/services/ssh/terminal-ws.ts +157 -0
- package/src/host/services/ssh/tools.ts +279 -0
- package/src/host/services/web-render/contracts.ts +138 -0
- package/src/host/services/web-render/index.ts +112 -0
- package/src/host/services/web-render/provider.ts +282 -0
- package/src/host/services/web-search-anthropic/contracts.ts +163 -0
- package/src/host/services/web-search-anthropic/index.ts +152 -0
- package/src/host/services/web-search-anthropic/provider.ts +325 -0
- package/src/host/services/worktree/git-runner.ts +124 -0
- package/src/host/services/worktree/git.ts +183 -0
- package/src/host/services/worktree/http.ts +36 -0
- package/src/host/services/worktree/index.ts +92 -0
- package/src/host/services/worktree/lane-tool.ts +100 -0
- package/src/host/services/worktree/manager.ts +1553 -0
- package/src/host/services/worktree/model-override.ts +43 -0
- package/src/host/services/worktree/routes.ts +570 -0
- package/src/host/services/worktree/run-command.ts +66 -0
- package/src/host/services/worktree/session-lane/manager.ts +228 -0
- package/src/host/services/worktree/workspace-model-routes.ts +156 -0
- package/src/host/services/worktree/workspace-model.ts +132 -0
- package/src/index.ts +84 -0
- package/src/invariant.ts +4 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** Pure queue-envelope logic shared by host and browser TypeScript programs. */
|
|
2
|
+
|
|
3
|
+
export const ENVELOPE_VERSION = 1 as const
|
|
4
|
+
export const INBOX_EVENT_TYPE = 'im.message.receive_v1' as const
|
|
5
|
+
|
|
6
|
+
export interface LarkInboxEnvelope {
|
|
7
|
+
envelopeVersion: 1
|
|
8
|
+
eventId: string
|
|
9
|
+
receivedAt: string
|
|
10
|
+
eventType: string
|
|
11
|
+
chatType?: 'p2p' | 'group'
|
|
12
|
+
chatId?: string
|
|
13
|
+
senderOpenId?: string
|
|
14
|
+
messageId?: string
|
|
15
|
+
messageType?: string
|
|
16
|
+
content: string
|
|
17
|
+
mentionBot?: boolean
|
|
18
|
+
raw?: unknown
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
22
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function asString(value: unknown): string | undefined {
|
|
26
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function resolveSenderOpenId(sender: unknown, inner: unknown): string | undefined {
|
|
30
|
+
if (!isRecord(sender)) return isRecord(inner) ? asString(inner.sender_id) : undefined
|
|
31
|
+
const senderId = sender.sender_id
|
|
32
|
+
if (typeof senderId === 'string' && senderId.length > 0) return senderId
|
|
33
|
+
if (isRecord(senderId)) {
|
|
34
|
+
const openId = asString(senderId.open_id)
|
|
35
|
+
if (openId) return openId
|
|
36
|
+
}
|
|
37
|
+
return isRecord(inner) ? asString(inner.sender_id) : undefined
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Normalize either SDK event shape into the stable queue envelope. */
|
|
41
|
+
export function toEnvelope(
|
|
42
|
+
event: unknown,
|
|
43
|
+
opts: { mentionBot?: boolean; receivedAt?: string } = {},
|
|
44
|
+
): LarkInboxEnvelope {
|
|
45
|
+
const source = isRecord(event) ? event : {}
|
|
46
|
+
const header = isRecord(source.header) ? source.header : {}
|
|
47
|
+
const inner = isRecord(source.event) ? source.event : source
|
|
48
|
+
const message = isRecord(inner.message) ? inner.message : {}
|
|
49
|
+
const messageId = asString(message.message_id) ?? asString(inner.message_id)
|
|
50
|
+
const eventId = asString(header.event_id) ?? messageId ?? ''
|
|
51
|
+
const senderOpenId = resolveSenderOpenId(isRecord(inner.sender) ? inner.sender : undefined, inner)
|
|
52
|
+
const chatTypeRaw = asString(message.chat_type) ?? asString(inner.chat_type)
|
|
53
|
+
const chatType = chatTypeRaw === 'p2p' || chatTypeRaw === 'group' ? chatTypeRaw : undefined
|
|
54
|
+
const contentRaw = message.content
|
|
55
|
+
let content = ''
|
|
56
|
+
if (typeof contentRaw === 'string') content = contentRaw
|
|
57
|
+
else if (isRecord(contentRaw)) content = JSON.stringify(contentRaw)
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
envelopeVersion: ENVELOPE_VERSION,
|
|
61
|
+
eventId,
|
|
62
|
+
receivedAt: opts.receivedAt ?? new Date().toISOString(),
|
|
63
|
+
eventType: INBOX_EVENT_TYPE,
|
|
64
|
+
chatType,
|
|
65
|
+
chatId: asString(message.chat_id) ?? asString(inner.chat_id),
|
|
66
|
+
senderOpenId,
|
|
67
|
+
messageId,
|
|
68
|
+
messageType: asString(message.message_type) ?? asString(inner.message_type),
|
|
69
|
+
content,
|
|
70
|
+
mentionBot: opts.mentionBot,
|
|
71
|
+
raw: source,
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function envelopeToLine(envelope: LarkInboxEnvelope): string {
|
|
76
|
+
return JSON.stringify(envelope) + '\n'
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function parseEnvelopeLine(line: string): LarkInboxEnvelope | null {
|
|
80
|
+
try {
|
|
81
|
+
const parsed: unknown = JSON.parse(line)
|
|
82
|
+
if (!isRecord(parsed) || parsed.envelopeVersion !== ENVELOPE_VERSION || typeof parsed.eventId !== 'string') return null
|
|
83
|
+
return parsed as unknown as LarkInboxEnvelope
|
|
84
|
+
} catch {
|
|
85
|
+
return null
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function dayPart(ts: number): string {
|
|
90
|
+
const date = new Date(ts)
|
|
91
|
+
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function sanitizeSegment(segment: string): string {
|
|
95
|
+
return segment.replace(/[^a-zA-Z0-9._-]/g, '_')
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function inboxFilePath(rootDir: string, eventType: string, ts: number): string {
|
|
99
|
+
return `${rootDir}/${sanitizeSegment(eventType)}/${dayPart(ts)}.jsonl`
|
|
100
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* memoir 跨半区 wire 契约(host 与 client 双 program 编译)。
|
|
3
|
+
*
|
|
4
|
+
* 常量 + 纯类型:/api/dsh-memoir 前缀、section 枚举、条目/设置 shape。
|
|
5
|
+
* 不携带运行时身份。
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const MEMOIR_API_PREFIX = '/api/dsh-memoir'
|
|
9
|
+
|
|
10
|
+
/** 记忆分区。 */
|
|
11
|
+
export type SectionKey = 'work' | 'lessons' | 'actions' | 'note'
|
|
12
|
+
export const SECTION_KEYS: readonly SectionKey[] = ['work', 'lessons', 'actions', 'note']
|
|
13
|
+
|
|
14
|
+
/** 条目状态。 */
|
|
15
|
+
export type MemoirStatus = 'active' | 'superseded' | 'archived'
|
|
16
|
+
|
|
17
|
+
/** 一个记忆条目(与路由/README 渲染契约一致)。 */
|
|
18
|
+
export interface MemoirEntry {
|
|
19
|
+
id: string
|
|
20
|
+
title: string
|
|
21
|
+
content: string
|
|
22
|
+
section: SectionKey
|
|
23
|
+
status: MemoirStatus
|
|
24
|
+
createdAt: number
|
|
25
|
+
updatedAt: number
|
|
26
|
+
pinned: boolean
|
|
27
|
+
importance: number
|
|
28
|
+
tags?: string[]
|
|
29
|
+
supersedes?: string[]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** 用户可调设置。 */
|
|
33
|
+
export interface MemoirSettings {
|
|
34
|
+
enabled: boolean
|
|
35
|
+
announceToAgent: boolean
|
|
36
|
+
autoDistill: boolean
|
|
37
|
+
autoDistillEvery: number
|
|
38
|
+
autoDistillCooldownMin: number
|
|
39
|
+
autoDistillMinTools: number
|
|
40
|
+
hotMemoryTokens: number
|
|
41
|
+
hotMemoryMaxTokens: number
|
|
42
|
+
readDefaultLimit: number
|
|
43
|
+
readMaxLimit: number
|
|
44
|
+
sessionSnapshotMax: number
|
|
45
|
+
queryCacheSize: number
|
|
46
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-runtime contract for the optional BrowserAuth bypass.
|
|
3
|
+
*
|
|
4
|
+
* The bypass only changes the browser-token authentication decision. The
|
|
5
|
+
* connection service's Host/Origin request fence remains the authority for
|
|
6
|
+
* deciding whether a browser request can reach DSH at all.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Stable settings/config namespace retained from the standalone capability. */
|
|
10
|
+
export const NO_BROWSER_AUTH_NAMESPACE = 'dsh-no-browser-auth'
|
|
11
|
+
|
|
12
|
+
/** The private BrowserAuth surface used by the host adapter. */
|
|
13
|
+
export interface BrowserAuthLike {
|
|
14
|
+
isAuthenticated(request: unknown): boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Structural subset of the host connection service used by this capability. */
|
|
18
|
+
export interface BrowserConnectionLike {
|
|
19
|
+
browserAuth?: BrowserAuthLike
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Explicit opt-in configuration. Disabled by default inside web-all. */
|
|
23
|
+
export interface NoBrowserAuthConfig {
|
|
24
|
+
enabled?: boolean
|
|
25
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one description of a finished-run notice, shared by the host that records
|
|
3
|
+
* it and every surface that reads it.
|
|
4
|
+
*
|
|
5
|
+
* A notice answers one question — "did the work I left running finish, and how
|
|
6
|
+
* did it end?" — so the wire shape stays small enough to render as a phone
|
|
7
|
+
* notification title. Two of the three consumers (the desktop client and the
|
|
8
|
+
* mobile client) parse this JSON without this package's types, so the shape is
|
|
9
|
+
* documented here once and every reader narrows defensively.
|
|
10
|
+
*
|
|
11
|
+
* @module dsh-web-all/notify-contract
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** Host route family prefix for the notification feed. */
|
|
15
|
+
export const NOTIFY_API_PREFIX = '/api/dsh-notify'
|
|
16
|
+
|
|
17
|
+
/** The read route every client polls. */
|
|
18
|
+
export const NOTIFY_FEED_PATH = `${NOTIFY_API_PREFIX}/feed`
|
|
19
|
+
|
|
20
|
+
/** Notices the host keeps and returns by default. */
|
|
21
|
+
export const NOTIFY_DEFAULT_LIMIT = 20
|
|
22
|
+
|
|
23
|
+
/** Upper bound for one request's `limit`, so a client cannot ask for everything. */
|
|
24
|
+
export const NOTIFY_MAX_LIMIT = 100
|
|
25
|
+
|
|
26
|
+
/** Sessions whose titles the host remembers, so a long-lived host cannot grow unbounded. */
|
|
27
|
+
export const NOTIFY_TITLE_MEMORY = 200
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* How a finished turn ended, collapsed from the extensible `TurnEndReason` map
|
|
31
|
+
* into the three answers a person acts on.
|
|
32
|
+
*/
|
|
33
|
+
export type NotifyOutcome = 'completed' | 'failed' | 'stopped'
|
|
34
|
+
|
|
35
|
+
/** One finished turn, as the feed reports it. */
|
|
36
|
+
export interface RunNotice {
|
|
37
|
+
/** Strictly increasing across the host's lifetime; a client's read watermark. */
|
|
38
|
+
readonly id: number
|
|
39
|
+
/** Epoch milliseconds when the turn ended. */
|
|
40
|
+
readonly at: number
|
|
41
|
+
/** Session the turn belonged to. */
|
|
42
|
+
readonly sessionId: string
|
|
43
|
+
/** Session title, else a short excerpt of the first human prompt, else ''. */
|
|
44
|
+
readonly title: string
|
|
45
|
+
/** Turn number inside the session. */
|
|
46
|
+
readonly turn: number
|
|
47
|
+
/** Raw `TurnEndReason` kind, kept verbatim because plugins extend that map. */
|
|
48
|
+
readonly reason: string
|
|
49
|
+
/** The collapse of `reason` a client can act on without knowing the map. */
|
|
50
|
+
readonly outcome: NotifyOutcome
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** What one finished turn is built from, before the host assigns its id. */
|
|
54
|
+
export type RunNoticeInput = Omit<RunNotice, 'id' | 'outcome'> & { readonly outcome?: NotifyOutcome }
|
|
55
|
+
|
|
56
|
+
/** The feed document. */
|
|
57
|
+
export interface NotifyFeed {
|
|
58
|
+
/**
|
|
59
|
+
* Authority serving this feed, taken from the request's `Host` header.
|
|
60
|
+
*
|
|
61
|
+
* It is the origin the caller actually reached, not a configured name, so a
|
|
62
|
+
* client aggregating several machines can label each row with what it dialed.
|
|
63
|
+
*/
|
|
64
|
+
readonly origin: string
|
|
65
|
+
/** Newest notice id, or 0 when none. A client stores it as its watermark. */
|
|
66
|
+
readonly latest: number
|
|
67
|
+
/** Notices newer than the request's `since`, oldest first, capped by `limit`. */
|
|
68
|
+
readonly notices: readonly RunNotice[]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Reasons that mean the model finished the work it was given. */
|
|
72
|
+
const COMPLETED_REASONS = new Set(['completed', 'max-tokens'])
|
|
73
|
+
|
|
74
|
+
/** Reasons that mean the turn ended because something went wrong. */
|
|
75
|
+
const FAILED_REASONS = new Set(['error', 'blocked'])
|
|
76
|
+
|
|
77
|
+
/** Reasons that mean the turn ended without either succeeding or failing. */
|
|
78
|
+
const STOPPED_REASONS = new Set(['aborted', 'interrupted', 'forked'])
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Collapse one `TurnEndReason` kind into the outcome a client acts on.
|
|
82
|
+
*
|
|
83
|
+
* An unrecognized reason comes from a plugin that merged a new variant into the
|
|
84
|
+
* reason map. Reporting it as `completed` would put a success claim on something
|
|
85
|
+
* no one has inspected, so an unknown closure takes the neutral outcome and the
|
|
86
|
+
* caller still has {@link RunNotice.reason} to render verbatim.
|
|
87
|
+
*
|
|
88
|
+
* @param reason - the raw reason kind, or '' when the event carried none.
|
|
89
|
+
* @returns the outcome to record.
|
|
90
|
+
*/
|
|
91
|
+
export function outcomeOf(reason: string): NotifyOutcome {
|
|
92
|
+
if (COMPLETED_REASONS.has(reason)) return 'completed'
|
|
93
|
+
if (FAILED_REASONS.has(reason)) return 'failed'
|
|
94
|
+
if (STOPPED_REASONS.has(reason)) return 'stopped'
|
|
95
|
+
return 'stopped'
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Chinese label for one outcome, shared so the three surfaces cannot drift. */
|
|
99
|
+
export const OUTCOME_LABEL_ZH: Readonly<Record<NotifyOutcome, string>> = {
|
|
100
|
+
completed: '已完成',
|
|
101
|
+
failed: '出错',
|
|
102
|
+
stopped: '已结束',
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Whether an outcome is worth interrupting a person for. */
|
|
106
|
+
export function isNotifiable(outcome: NotifyOutcome): boolean {
|
|
107
|
+
return outcome === 'completed' || outcome === 'failed'
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Clamp a request's `limit` into the range the host is willing to answer.
|
|
112
|
+
* @param value - the parsed query value, of unknown quality.
|
|
113
|
+
* @param fallback - the value used when `value` is not a usable number.
|
|
114
|
+
* @returns a whole number within 1..{@link NOTIFY_MAX_LIMIT}.
|
|
115
|
+
*/
|
|
116
|
+
export function clampLimit(value: unknown, fallback: number = NOTIFY_DEFAULT_LIMIT): number {
|
|
117
|
+
const parsed = parseWhole(value)
|
|
118
|
+
if (parsed === null) return fallback
|
|
119
|
+
if (parsed < 1) return 1
|
|
120
|
+
return parsed > NOTIFY_MAX_LIMIT ? NOTIFY_MAX_LIMIT : parsed
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Read a whole number out of a query value.
|
|
125
|
+
*
|
|
126
|
+
* An absent or blank value is `null` rather than zero: `Number('')` is 0, which
|
|
127
|
+
* would silently turn "the caller said nothing" into "the caller asked for the
|
|
128
|
+
* smallest possible answer".
|
|
129
|
+
*
|
|
130
|
+
* @param value - the raw value, of unknown quality.
|
|
131
|
+
* @returns the truncated number, or null when there is no number there.
|
|
132
|
+
*/
|
|
133
|
+
function parseWhole(value: unknown): number | null {
|
|
134
|
+
if (typeof value === 'number') return Number.isFinite(value) ? Math.trunc(value) : null
|
|
135
|
+
if (typeof value !== 'string') return value === null || value === undefined ? null : parseWhole(Number(value))
|
|
136
|
+
const text = value.trim()
|
|
137
|
+
if (text === '') return null
|
|
138
|
+
const parsed = Number(text)
|
|
139
|
+
return Number.isFinite(parsed) ? Math.trunc(parsed) : null
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Clamp a client's read watermark. A malformed watermark means "nothing seen
|
|
144
|
+
* yet" (0) rather than a throw, because a client that cannot parse its stored
|
|
145
|
+
* value should be told everything again instead of nothing.
|
|
146
|
+
* @param value - the parsed watermark, of unknown quality.
|
|
147
|
+
* @returns a non-negative whole number.
|
|
148
|
+
*/
|
|
149
|
+
export function clampWatermark(value: unknown): number {
|
|
150
|
+
const parsed = parseWhole(value)
|
|
151
|
+
if (parsed === null || parsed < 0) return 0
|
|
152
|
+
return parsed
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Reconcile a client's stored watermark with the feed it just read.
|
|
157
|
+
*
|
|
158
|
+
* Notice ids count from one host process, so a restarted host serves ids that
|
|
159
|
+
* start over. A watermark stored against the previous process would then be
|
|
160
|
+
* higher than every new id and would hide each new notice forever, which is the
|
|
161
|
+
* one failure mode a red dot must not have. A regression therefore means "the
|
|
162
|
+
* host is a different process now; start over", and the caller stores 0 and
|
|
163
|
+
* treats the whole held log as new.
|
|
164
|
+
*
|
|
165
|
+
* @param previous - the watermark the client stored.
|
|
166
|
+
* @param latest - the feed's newest id.
|
|
167
|
+
* @returns the watermark the client should keep and compare against.
|
|
168
|
+
*/
|
|
169
|
+
export function reconcileWatermark(previous: number, latest: number): number {
|
|
170
|
+
if (!Number.isFinite(latest) || latest < 0) return previous
|
|
171
|
+
return latest < previous ? 0 : previous
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The notices a client has not seen, under the reconciliation rule above.
|
|
176
|
+
* @param feed - the decoded feed document.
|
|
177
|
+
* @param watermark - the client's stored watermark.
|
|
178
|
+
* @returns notices newer than the effective watermark, oldest first.
|
|
179
|
+
*/
|
|
180
|
+
export function newNotices(feed: NotifyFeed, watermark: number): RunNotice[] {
|
|
181
|
+
const effective = reconcileWatermark(clampWatermark(watermark), feed.latest)
|
|
182
|
+
return feed.notices.filter(notice => notice.id > effective)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function asString(value: unknown): string {
|
|
186
|
+
return typeof value === 'string' ? value : ''
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function asWhole(value: unknown, fallback = 0): number {
|
|
190
|
+
const parsed = typeof value === 'number' ? value : Number(value)
|
|
191
|
+
return Number.isFinite(parsed) ? Math.trunc(parsed) : fallback
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Narrow one decoded notice from the wire.
|
|
196
|
+
*
|
|
197
|
+
* Every field is re-derived rather than cast, so an unknown or truncated
|
|
198
|
+
* payload degrades into a notice with blank strings instead of an `undefined`
|
|
199
|
+
* reaching a renderer.
|
|
200
|
+
*
|
|
201
|
+
* @param value - one decoded element of `notices`.
|
|
202
|
+
* @returns the notice, or null when the element is not an object at all.
|
|
203
|
+
*/
|
|
204
|
+
export function parseRunNotice(value: unknown): RunNotice | null {
|
|
205
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) return null
|
|
206
|
+
const record = value as Record<string, unknown>
|
|
207
|
+
const reason = asString(record.reason)
|
|
208
|
+
const rawOutcome = asString(record.outcome)
|
|
209
|
+
const outcome: NotifyOutcome = rawOutcome === 'completed' || rawOutcome === 'failed' || rawOutcome === 'stopped'
|
|
210
|
+
? rawOutcome
|
|
211
|
+
: outcomeOf(reason)
|
|
212
|
+
return {
|
|
213
|
+
id: asWhole(record.id),
|
|
214
|
+
at: asWhole(record.at),
|
|
215
|
+
sessionId: asString(record.sessionId),
|
|
216
|
+
title: asString(record.title),
|
|
217
|
+
turn: asWhole(record.turn),
|
|
218
|
+
reason,
|
|
219
|
+
outcome,
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Narrow a whole feed document from the wire.
|
|
225
|
+
* @param value - the decoded JSON body.
|
|
226
|
+
* @returns the feed, or null when the body is not a feed object.
|
|
227
|
+
*/
|
|
228
|
+
export function parseFeed(value: unknown): NotifyFeed | null {
|
|
229
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) return null
|
|
230
|
+
const record = value as Record<string, unknown>
|
|
231
|
+
const notices = Array.isArray(record.notices)
|
|
232
|
+
? record.notices.map(parseRunNotice).filter((notice): notice is RunNotice => notice !== null)
|
|
233
|
+
: []
|
|
234
|
+
const latest = asWhole(record.latest, notices.reduce((max, notice) => Math.max(max, notice.id), 0))
|
|
235
|
+
return { origin: asString(record.origin), latest, notices }
|
|
236
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two bounded pieces of state the notification host keeps: the recent
|
|
3
|
+
* notice log a client polls, and the session titles a notice quotes.
|
|
4
|
+
*
|
|
5
|
+
* Both are deliberately in memory only. A notice answers "did my work finish"
|
|
6
|
+
* for a window of a few minutes; persisting it would create a second durable
|
|
7
|
+
* record of the session log that DSH already owns, and would have to answer
|
|
8
|
+
* questions about retention, migration and conflicting truth. A restart
|
|
9
|
+
* therefore forgets the feed, and a client's watermark simply replays from a
|
|
10
|
+
* fresh, empty log.
|
|
11
|
+
*
|
|
12
|
+
* @module dsh-web-all/notify-feed
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
NOTIFY_DEFAULT_LIMIT,
|
|
17
|
+
NOTIFY_TITLE_MEMORY,
|
|
18
|
+
outcomeOf,
|
|
19
|
+
type RunNotice,
|
|
20
|
+
type RunNoticeInput,
|
|
21
|
+
} from './contract.ts'
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A bounded log of finished turns, oldest first.
|
|
25
|
+
*
|
|
26
|
+
* Ids are assigned from a counter that never resets while the host lives, so a
|
|
27
|
+
* client watermark stays meaningful even after older entries have been evicted:
|
|
28
|
+
* "newer than 40" keeps working when the log has already dropped everything
|
|
29
|
+
* below 35.
|
|
30
|
+
*/
|
|
31
|
+
export class NoticeLog {
|
|
32
|
+
private readonly limit: number
|
|
33
|
+
private seq = 0
|
|
34
|
+
private entries: RunNotice[] = []
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @param limit - how many notices to retain; clamped to at least one so a
|
|
38
|
+
* misconfigured host still answers with something.
|
|
39
|
+
*/
|
|
40
|
+
constructor(limit: number = NOTIFY_DEFAULT_LIMIT) {
|
|
41
|
+
this.limit = Number.isFinite(limit) && limit >= 1 ? Math.trunc(limit) : NOTIFY_DEFAULT_LIMIT
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Newest assigned id, or 0 when nothing has been recorded. */
|
|
45
|
+
get latest(): number {
|
|
46
|
+
return this.seq
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** How many notices are currently retained. */
|
|
50
|
+
get size(): number {
|
|
51
|
+
return this.entries.length
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Record one finished turn.
|
|
56
|
+
* @param input - the turn facts; an absent outcome is derived from the reason.
|
|
57
|
+
* @returns the stored notice, including its assigned id.
|
|
58
|
+
*/
|
|
59
|
+
append(input: RunNoticeInput): RunNotice {
|
|
60
|
+
this.seq += 1
|
|
61
|
+
const notice: RunNotice = {
|
|
62
|
+
id: this.seq,
|
|
63
|
+
at: input.at,
|
|
64
|
+
sessionId: input.sessionId,
|
|
65
|
+
title: input.title,
|
|
66
|
+
turn: input.turn,
|
|
67
|
+
reason: input.reason,
|
|
68
|
+
outcome: input.outcome ?? outcomeOf(input.reason),
|
|
69
|
+
}
|
|
70
|
+
this.entries.push(notice)
|
|
71
|
+
if (this.entries.length > this.limit) this.entries.splice(0, this.entries.length - this.limit)
|
|
72
|
+
return notice
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Notices newer than a client's watermark, oldest first.
|
|
77
|
+
* @param watermark - the client's last seen id; 0 (or anything unparsable) replays what is held.
|
|
78
|
+
* @param limit - maximum notices to return; at least one.
|
|
79
|
+
* @returns a fresh array of notices.
|
|
80
|
+
*/
|
|
81
|
+
since(watermark: number, limit: number): RunNotice[] {
|
|
82
|
+
const floor = Number.isFinite(watermark) && watermark > 0 ? Math.trunc(watermark) : 0
|
|
83
|
+
const cap = Number.isFinite(limit) && limit >= 1 ? Math.trunc(limit) : 1
|
|
84
|
+
const out: RunNotice[] = []
|
|
85
|
+
for (const notice of this.entries) {
|
|
86
|
+
if (notice.id <= floor) continue
|
|
87
|
+
out.push(notice)
|
|
88
|
+
if (out.length >= cap) break
|
|
89
|
+
}
|
|
90
|
+
return out
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Everything currently retained, oldest first. */
|
|
94
|
+
snapshot(): readonly RunNotice[] {
|
|
95
|
+
return [...this.entries]
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Drop every retained notice. Ids keep counting, so a stale watermark still orders correctly. */
|
|
99
|
+
clear(): void {
|
|
100
|
+
this.entries = []
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** One session's remembered naming material. */
|
|
105
|
+
interface TitleEntry {
|
|
106
|
+
/** An explicit or generated title, which always outranks a prompt excerpt. */
|
|
107
|
+
title: string
|
|
108
|
+
/** The first human prompt's excerpt, used until a real title exists. */
|
|
109
|
+
prompt: string
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Remembers how each session is named, so a notice can say which conversation
|
|
114
|
+
* finished instead of quoting an opaque `session-7`.
|
|
115
|
+
*
|
|
116
|
+
* A session's own title event is preferred, because `dsh-session-title` already
|
|
117
|
+
* decided which messages are eligible input and normalized the result. Until
|
|
118
|
+
* one exists, the first human prompt stands in. Both maps are bounded by last
|
|
119
|
+
* write, so a host that runs for weeks does not accumulate one entry per
|
|
120
|
+
* conversation it has ever seen.
|
|
121
|
+
*/
|
|
122
|
+
export class TitleBook {
|
|
123
|
+
private readonly capacity: number
|
|
124
|
+
private readonly entries = new Map<string, TitleEntry>()
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @param capacity - sessions to remember; clamped to at least one.
|
|
128
|
+
*/
|
|
129
|
+
constructor(capacity: number = NOTIFY_TITLE_MEMORY) {
|
|
130
|
+
this.capacity = Number.isFinite(capacity) && capacity >= 1 ? Math.trunc(capacity) : NOTIFY_TITLE_MEMORY
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** How many sessions are remembered. */
|
|
134
|
+
get size(): number {
|
|
135
|
+
return this.entries.size
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
private entry(sessionId: string): TitleEntry {
|
|
139
|
+
const existing = this.entries.get(sessionId)
|
|
140
|
+
if (existing !== undefined) {
|
|
141
|
+
// Re-insert so the most recently written session is the last evicted.
|
|
142
|
+
this.entries.delete(sessionId)
|
|
143
|
+
this.entries.set(sessionId, existing)
|
|
144
|
+
return existing
|
|
145
|
+
}
|
|
146
|
+
const created: TitleEntry = { title: '', prompt: '' }
|
|
147
|
+
this.entries.set(sessionId, created)
|
|
148
|
+
while (this.entries.size > this.capacity) {
|
|
149
|
+
const oldest = this.entries.keys().next()
|
|
150
|
+
if (oldest.done === true) break
|
|
151
|
+
this.entries.delete(oldest.value)
|
|
152
|
+
}
|
|
153
|
+
return created
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Record a session title, which outranks any prompt excerpt.
|
|
158
|
+
* @param sessionId - the titled session.
|
|
159
|
+
* @param title - the title text; blank is ignored so a nameless update cannot erase a name.
|
|
160
|
+
*/
|
|
161
|
+
setTitle(sessionId: string, title: string): void {
|
|
162
|
+
const text = title.trim()
|
|
163
|
+
if (sessionId === '' || text === '') return
|
|
164
|
+
this.entry(sessionId).title = excerpt(text, 60)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Record a candidate prompt excerpt. The first one wins, because a session is
|
|
169
|
+
* recognized by what it was opened to do, not by its most recent follow-up.
|
|
170
|
+
* @param sessionId - the session the prompt belongs to.
|
|
171
|
+
* @param text - the human prompt text.
|
|
172
|
+
*/
|
|
173
|
+
rememberPrompt(sessionId: string, text: string): void {
|
|
174
|
+
const text2 = text.trim()
|
|
175
|
+
if (sessionId === '' || text2 === '') return
|
|
176
|
+
const entry = this.entry(sessionId)
|
|
177
|
+
if (entry.prompt === '') entry.prompt = excerpt(text2, 60)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* How to name one session in a notice.
|
|
182
|
+
* @param sessionId - the session to name.
|
|
183
|
+
* @returns the title, else the prompt excerpt, else '' when nothing is known.
|
|
184
|
+
*/
|
|
185
|
+
titleOf(sessionId: string): string {
|
|
186
|
+
const entry = this.entries.get(sessionId)
|
|
187
|
+
if (entry === undefined) return ''
|
|
188
|
+
return entry.title !== '' ? entry.title : entry.prompt
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** Forget one disposed session. */
|
|
192
|
+
forget(sessionId: string): void {
|
|
193
|
+
this.entries.delete(sessionId)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** Forget every session. */
|
|
197
|
+
clear(): void {
|
|
198
|
+
this.entries.clear()
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* One-line excerpt safe to put in a notification.
|
|
204
|
+
* @param text - any text, possibly multi-line.
|
|
205
|
+
* @param max - maximum code points to keep.
|
|
206
|
+
* @returns whitespace-collapsed text, truncated with an ellipsis when it was longer.
|
|
207
|
+
*/
|
|
208
|
+
export function excerpt(text: string, max: number): string {
|
|
209
|
+
const collapsed = text.replace(/\s+/g, ' ').trim()
|
|
210
|
+
const points = [...collapsed]
|
|
211
|
+
if (points.length <= max) return collapsed
|
|
212
|
+
return `${points.slice(0, Math.max(1, max - 1)).join('')}…`
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Pull the plain text out of one message's content blocks.
|
|
217
|
+
*
|
|
218
|
+
* Only text blocks carry quotable prose; every other block kind (an image, a
|
|
219
|
+
* file reference) is skipped rather than stringified, because a title made of a
|
|
220
|
+
* serialized block would be worse than no title.
|
|
221
|
+
*
|
|
222
|
+
* @param content - the message's `content` field, of unknown quality.
|
|
223
|
+
* @returns the concatenated text, space separated.
|
|
224
|
+
*/
|
|
225
|
+
export function textOfContent(content: unknown): string {
|
|
226
|
+
if (!Array.isArray(content)) return ''
|
|
227
|
+
const parts: string[] = []
|
|
228
|
+
for (const block of content) {
|
|
229
|
+
if (typeof block !== 'object' || block === null) continue
|
|
230
|
+
const record = block as Record<string, unknown>
|
|
231
|
+
if (record.type !== 'text') continue
|
|
232
|
+
if (typeof record.text === 'string' && record.text.trim() !== '') parts.push(record.text)
|
|
233
|
+
}
|
|
234
|
+
return parts.join(' ')
|
|
235
|
+
}
|