diff --git a/docs/telemetry-events.md b/docs/telemetry-events.md index 3692424e0d685..e893f136fe7dc 100644 --- a/docs/telemetry-events.md +++ b/docs/telemetry-events.md @@ -549,7 +549,7 @@ void 'attempts': number, 'autoInstall': boolean, 'error.message': string, - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -561,7 +561,7 @@ void { 'attempts': number, 'autoInstall': boolean, - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -573,7 +573,7 @@ void { 'attempts': number, 'autoInstall': boolean, - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'version': string } ``` @@ -995,7 +995,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1050,7 +1050,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1105,7 +1105,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1160,7 +1160,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1215,7 +1215,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1270,7 +1270,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1325,7 +1325,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1380,7 +1380,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1435,7 +1435,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1490,7 +1490,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1545,7 +1545,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1600,7 +1600,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1667,7 +1667,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1722,7 +1722,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1804,7 +1804,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -1859,7 +1859,7 @@ or 'context.operations.undo.count': number, 'context.session.duration': number, 'context.session.start': string, - 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees', + 'context.source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees', 'context.warnings.indexChanged': boolean, 'context.warnings.workingDirectoryChanged': boolean, 'context.webview.host': 'view' | 'editor', @@ -2791,7 +2791,7 @@ void 'cli.version': string, 'error.message': string, 'reason': string, - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -2803,7 +2803,7 @@ void { 'cli.version': string, 'requiresUserCompletion': boolean, - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -2816,7 +2816,7 @@ void 'cli.version': string, 'error.message': string, 'reason': string, - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -2826,7 +2826,7 @@ void ```typescript { - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -2863,7 +2863,7 @@ void 'repoPrivacy': 'private' | 'public' | 'local', 'repository.visibility': 'private' | 'public' | 'local', // Provided for compatibility with other GK surfaces - 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'whatsnew' | 'worktrees' + 'source': 'account' | 'subscription' | 'graph' | 'composer' | 'patchDetails' | 'settings' | 'timeline' | 'home' | 'rebaseEditor' | 'ai' | 'ai:markdown-preview' | 'ai:markdown-editor' | 'ai:picker' | 'associateIssueWithBranch' | 'cloud-patches' | 'code-suggest' | 'commandPalette' | 'deeplink' | 'editor:hover' | 'feature-badge' | 'feature-gate' | 'gk-cli-integration' | 'gk-mcp-provider' | 'inspect' | 'inspect-overview' | 'integrations' | 'launchpad' | 'launchpad-indicator' | 'launchpad-view' | 'mcp' | 'mcp-welcome-message' | 'merge-target' | 'notification' | 'prompt' | 'quick-wizard' | 'remoteProvider' | 'scm' | 'scm-input' | 'startWork' | 'statusbar:hover' | 'trial-indicator' | 'view' | 'view:hover' | 'walkthrough' | 'welcome' | 'whatsnew' | 'worktrees' } ``` @@ -3565,3 +3565,16 @@ or } ``` +### welcome/action + +> Sent when an action is taken in the welcome webview + +```typescript +{ + 'command': string, + 'name': 'plus/sign-up', + 'type': 'command', + 'viewedCarouselPages': number +} +``` + diff --git a/src/constants.telemetry.ts b/src/constants.telemetry.ts index f10289353012b..f69afda758259 100644 --- a/src/constants.telemetry.ts +++ b/src/constants.telemetry.ts @@ -363,6 +363,9 @@ export interface TelemetryEvents extends WebviewShowAbortedEvents, WebviewShownE /** Sent when the walkthrough is opened */ 'walkthrough/action': WalkthroughActionEvent; 'walkthrough/completion': WalkthroughCompletionEvent; + + /** Sent when an action is taken in the welcome webview */ + 'welcome/action': WelcomeActionEvent; } type WebviewShowAbortedEvents = { @@ -1215,6 +1218,14 @@ interface WalkthroughCompletionEvent { 'context.key': WalkthroughContextKeys; } +type WelcomeActionNames = 'plus/sign-up' | 'dismiss' | 'shown'; + +type WelcomeActionEvent = { + name: WelcomeActionNames; + viewedCarouselPages?: number; + proButtonClicked?: boolean; +}; + type WebviewContextEventData = { 'context.webview.id': string; 'context.webview.type': string; @@ -1297,6 +1308,7 @@ export type Sources = | 'view' | 'view:hover' | 'walkthrough' + | 'welcome' | 'whatsnew' | 'worktrees'; diff --git a/src/webviews/apps/home/components/welcome-overlay.ts b/src/webviews/apps/home/components/welcome-overlay.ts new file mode 100644 index 0000000000000..e711b1133b5d1 --- /dev/null +++ b/src/webviews/apps/home/components/welcome-overlay.ts @@ -0,0 +1,110 @@ +import { consume } from '@lit/context'; +import { css, html, LitElement, nothing } from 'lit'; +import { customElement, property, state } from 'lit/decorators.js'; +import type { State } from '../../../home/protocol'; +import { CollapseSectionCommand } from '../../../home/protocol'; +import { ipcContext } from '../../shared/contexts/ipc'; +import type { HostIpc } from '../../shared/ipc'; +import '../../shared/components/button'; +import { stateContext } from '../context'; +import './welcome-page'; + +declare global { + interface HTMLElementTagNameMap { + 'gl-welcome-overlay': GlWelcomeOverlay; + } +} + +@customElement('gl-welcome-overlay') +export class GlWelcomeOverlay extends LitElement { + static override shadowRootOptions: ShadowRootInit = { + ...LitElement.shadowRootOptions, + delegatesFocus: true, + }; + + static override styles = [ + css` + :host { + --background-color: var(--vscode-sideBar-background); + --shadow-color: var(--vscode-sideBar-foreground); + --dialog-margin: 1rem; + --scrollbar-width: 10px; + } + + .overlay { + display: block; + position: fixed; + inset: 0; + overflow: auto; + background-color: var(--background-color); + } + + .close-button { + position: fixed; + top: 12px; + right: 12px; + z-index: 2; + } + + gl-welcome-page { + --page-background-color: var(--background-color); + --page-margin-left: var(--dialog-margin); + --page-margin-right: var(--dialog-margin); + } + + gl-welcome-page::part(page) { + padding: var(--dialog-margin); + box-sizing: border-box; + } + `, + ]; + + @property({ type: String }) + webroot?: string; + + @property({ type: Boolean }) + private isLightTheme = false; + + @consume({ context: stateContext, subscribe: true }) + @state() + private _state!: State; + + @consume({ context: ipcContext, subscribe: true }) + @state() + private _ipc!: HostIpc; + + @state() + private closed = false; + + override render(): unknown { + const { welcomeOverlayCollapsed, walkthroughSupported, newInstall } = this._state; + if (this.closed || welcomeOverlayCollapsed || walkthroughSupported || !newInstall) { + return nothing; + } + + return html` +
+
+ this.onClose()} + > +
+ this.onClose()} + > +
+ `; + } + + private onClose() { + this.closed = true; + + this._ipc.sendCommand(CollapseSectionCommand, { + section: 'welcomeOverlay', + collapsed: true, + }); + } +} diff --git a/src/webviews/apps/home/components/welcome-page.css.ts b/src/webviews/apps/home/components/welcome-page.css.ts new file mode 100644 index 0000000000000..c057127ffaa01 --- /dev/null +++ b/src/webviews/apps/home/components/welcome-page.css.ts @@ -0,0 +1,256 @@ +import { css } from 'lit'; + +const colorScheme = css` + :host { + --accent-color: #cb64ff; + --text-color: var(--vscode-descriptionForeground); + --em-color: var(--vscode-sideBar-foreground); + --link-color: var(--vscode-textLink-foreground); + --card-background: var(--vscode-textBlockQuote-background); + + --hero-gradient: radial-gradient(76.32% 76.32% at 50% 7.24%, #7b00ff 29.72%, rgba(255, 0, 242, 0) 100%); + --trial-button-gradient: linear-gradient(90deg, #7900c9 0%, #196fff 100%); + --trial-button-border: none; + --trial-button-text-color: #fff; + } + + :host-context(.vscode-light) { + --hero-gradient: radial-gradient(62.4% 62.4% at 50% 7.24%, #7b00ff 29.72%, rgba(255, 0, 242, 0) 100%); + } + + :host-context(.vscode-dark) { + --hero-gradient: radial-gradient(76.32% 76.32% at 50% 7.24%, #7b00ff 29.72%, rgba(255, 0, 242, 0) 100%); + } + + :host-context(.vscode-high-contrast) { + --hero-gradient: transparent; + --trial-button-gradient: var(--color-button-background); + --trial-button-border: 1px solid var(--vscode-button-border); + --trial-button-text-color: var(--color-button-foreground); + } + + :host-context(.vscode-high-contrast-light) { + --accent-color: #500070; + } + :host-context(.vscode-high-contrast:not(.vscode-high-contrast-light)) { + --accent-color: #ffc0ff; + } +`; + +const typography = css` + :host { + font-size: var(--vscode-font-size); + + --h1-font-size: 1.7em; + --p-font-size: 1.23em; + --card-font-size: 1em; + } + + @media (max-width: 640px) { + :host { + font-size: var(--vscode-editor-font-size); + --h1-font-size: 1em; + --p-font-size: 1em; + --card-font-size: 1em; + } + } + + @media (max-width: 300px) { + :host { + font-size: calc(var(--vscode-editor-font-size) * 0.8); + } + } +`; + +const main = css` + :host { + --page-margin-left: 0px; + --page-margin-right: 0px; + display: block; + height: 100%; + } + + .welcome { + max-height: 100%; + overflow: auto; + position: relative; + } +`; + +const heroGradient = css` + .welcome::before { + content: ' '; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%) translateY(-40%); + z-index: -1; + + background: var(--hero-gradient); + border-radius: 100%; + opacity: 0.25; + filter: blur(53px); + + width: 620px; + height: 517px; + max-width: 100%; + } + + @media (max-width: 400px) { + .welcome::before { + height: 273px; + } + } +`; + +const section = css` + .section { + display: flex; + flex-flow: column; + justify-content: center; + align-items: center; + text-align: center; + } + .section h1 { + color: var(--em-color); + } + .section h2 { + color: var(--em-color); + font-weight: normal; + font-size: var(--p-font-size); + } + .section p { + color: var(--text-color); + } + .section .accent { + color: var(--accent-color); + } + .section a { + color: var(--link-color); + text-decoration: none; + } + + .section.plain p { + max-width: 30em; + font-size: var(--p-font-size); + } + + .section.start-trial { + display: flex; + gap: 0.5em; + margin: 2em 3.1em 1.5em; + } + .section.start-trial p { + width: 100%; + } + .section.start-trial gl-button.start-trial-button { + background: var(--trial-button-gradient); + border: var(--trial-button-border); + color: var(--trial-button-text-color); + } + .section.start-trial gl-button { + width: 100%; + } + + @media (min-width: 640px) { + .section.start-trial gl-button { + width: initial; + } + .section.start-trial gl-button.start-trial-button { + --button-padding: 0.4em 4em; + } + } + + @media (max-width: 400px) { + .section.start-trial { + margin: 2em 0 1.5em; + } + } + + .section.wide { + margin-left: calc(-1 * var(--page-margin-left)); + margin-right: calc(-1 * var(--page-margin-right)); + } +`; + +const header = css` + .logo { + transform: scale(0.7); + } + + .header { + margin-top: 3em; + max-width: 620px; + margin-left: auto; + margin-right: auto; + } + .header gitlens-logo { + transform: translateX(-0.75rem); + } + .header h1 { + margin-bottom: 0; + font-size: var(--h1-font-size); + } + + @media (max-width: 640px) { + .logo { + transform: scale(0.5); + } + .header { + margin-top: 1.5em; + } + } +`; + +const cards = css` + .card { + border-radius: 0.63em; + background-color: var(--card-background); + padding: 1.8em; + text-align: initial; + } + + @media (max-width: 640px) { + .card { + padding: 1em; + } + } + + @media (max-width: 300px) { + .card { + padding: 0.5em 0.5em 1em; + } + } + + .card h1 { + margin: 0; + font-size: var(--card-font-size); + } + + .card p { + margin: 0.5em 0 0; + font-size: var(--card-font-size); + } + + .card p:last-child { + margin: 1em 0 0; + } + + .card img { + max-width: 100%; + } +`; + +const scrollableFeatures = css` + gl-scrollable-features { + --side-shadow-padding: max(var(--page-margin-left), var(--page-margin-right)); + --side-shadow-color: var(--page-background-color); + } +`; + +export const welcomeStyles = css` + ${colorScheme} ${typography} ${main} + ${heroGradient} ${section} ${header} + ${scrollableFeatures} + ${cards} +`; diff --git a/src/webviews/apps/home/components/welcome-page.ts b/src/webviews/apps/home/components/welcome-page.ts new file mode 100644 index 0000000000000..608f92d28f7cc --- /dev/null +++ b/src/webviews/apps/home/components/welcome-page.ts @@ -0,0 +1,220 @@ +import { consume } from '@lit/context'; +import { html, LitElement, nothing } from 'lit'; +import { customElement, property, state } from 'lit/decorators.js'; +import type { GlCommands } from '../../../../constants.commands'; +import type { State } from '../../../home/protocol'; +import { ExecuteCommand } from '../../../protocol'; +import { scrollableBase } from '../../shared/components/styles/lit/base.css'; +import { ipcContext } from '../../shared/contexts/ipc'; +import type { TelemetryContext } from '../../shared/contexts/telemetry'; +import { telemetryContext } from '../../shared/contexts/telemetry'; +import { stateContext } from '../context'; +import { welcomeStyles } from './welcome-page.css'; +import '../../shared/components/gitlens-logo'; +import '../../shared/components/button'; +import '../../shared/components/code-icon'; +import './welcome-parts'; + +declare global { + interface HTMLElementTagNameMap { + 'gl-welcome-page': GlWelcomePage; + } +} + +const helpBlameUrl = + 'https://help.gitkraken.com/gitlens/gitlens-features/?utm_source=gitlens-extension&utm_medium=in-app-links#current-line-blame'; +const helpRevisionNavigationUrl = + 'https://help.gitkraken.com/gitlens/gitlens-features/?utm_source=gitlens-extension&utm_medium=in-app-links#revision-navigation'; + +type TelemetryData = { + viewedCarouselPages: number; + proButtonClicked: boolean; +}; + +@customElement('gl-welcome-page') +export class GlWelcomePage extends LitElement { + static override styles = [scrollableBase, welcomeStyles]; + + private telemetryData: TelemetryData = { + viewedCarouselPages: 0, + proButtonClicked: false, + }; + + @property({ type: Boolean }) + closeable = false; + + @property({ type: String }) + webroot?: string; + + @property({ type: Boolean }) + private isLightTheme = false; + + @consume({ context: stateContext, subscribe: true }) + @state() + private _state!: State; + + @consume({ context: ipcContext }) + _ipc!: typeof ipcContext.__context__; + + @consume({ context: telemetryContext as { __context__: TelemetryContext } }) + _telemetry!: TelemetryContext; + + override connectedCallback(): void { + super.connectedCallback?.(); + this._telemetry.sendEvent({ + name: 'welcome/action', + data: { + name: 'shown', + }, + source: { source: 'welcome' }, + }); + } + + private onStartTrial() { + this.telemetryData.proButtonClicked = true; + const command: GlCommands = 'gitlens.plus.signUp'; + this._telemetry.sendEvent({ + name: 'welcome/action', + data: { + name: 'plus/sign-up', + viewedCarouselPages: this.telemetryData.viewedCarouselPages, + }, + source: { source: 'welcome' }, + }); + this._ipc.sendCommand(ExecuteCommand, { command: command, args: [{ source: 'welcome' }] }); + } + + private onClose() { + this._telemetry.sendEvent({ + name: 'welcome/action', + data: { + name: 'dismiss', + viewedCarouselPages: this.telemetryData.viewedCarouselPages, + proButtonClicked: this.telemetryData.proButtonClicked, + }, + source: { source: 'welcome' }, + }); + this.dispatchEvent(new CustomEvent('close')); + } + + private onFeatureAppeared() { + this.telemetryData.viewedCarouselPages++; + } + + override render(): unknown { + const themeSuffix = this.isLightTheme ? 'light' : 'dark'; + return html` +
+
+ +

GitLens is now installed in ${this._state.hostAppName}

+

+ Understand every line of code — instantly. GitLens reveals authorship, activity, and history + inside the editor +

+
+
+

With PRO subscription you get more

+
+ +
+ + + Commit Graph +

Interact with Your Repository History

+

+ Use the Commit Graph to visualize branches, search for changes, and navigate complex + history. +

+

View your Commit Graph

+
+ + Commit Composer +

Commit Smarter, Not Harder

+

+ Focus on building, then let AI generate a sequence of commits with descriptive + summaries. +

+

Open Commit Composer

+
+ + Visual File History +

Visualize Your Code's Evolution

+

+ See how a file has changed over time when changes were made, the size of those changes, + and who made them. +

+

Open Visual File History

+
+ + Launchpad +

Streamline Pull Request Management

+

Launchpad integrates PR workflows directly into your editor.

+

View my PRs in Launchpad

+
+
+
+ +
+ this.onStartTrial()} + >Start GitLens Pro Trial + ${this.closeable + ? html` this.onClose()} + >Dissmiss Welcome Overlay` + : nothing} +
+ +
+

You also get these free features

+
+ +
+ + +

Blame Annotations & Hovers

+

See who changed what and why with inline blame, hovers, and CodeLens.

+

+ Learn more about inline blame +

+
+ +

Autolinks

+

Get links to pull requests and issues right from a commit message

+

+ Configure autolinks +

+
+ +

GitLens Inspect

+

Dive deep into the revision history of files, folders, or specific lines.

+

Open GitLens Inspect

+
+ +

Revision Navigation

+

Step through the history of a file to trace its evolution over time.

+

Learn about Revision Navigation

+
+
+
+
+ `; + } +} diff --git a/src/webviews/apps/home/components/welcome-parts.ts b/src/webviews/apps/home/components/welcome-parts.ts new file mode 100644 index 0000000000000..5b93843df85cf --- /dev/null +++ b/src/webviews/apps/home/components/welcome-parts.ts @@ -0,0 +1,430 @@ +import { css, html, LitElement } from 'lit'; +import { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'; +import '../../shared/components/button'; +import '../../shared/components/code-icon'; + +declare global { + interface HTMLElementTagNameMap { + 'gl-feature-card': GlFeatureCard; + 'gl-feature-carousel': GlFeatureCarousel; + 'gl-feature-narrow-card': GlFeatureNarrowCard; + 'gl-scrollable-features': GlScrollableFeatures; + } +} + +@customElement('gl-feature-carousel') +export class GlFeatureCarousel extends LitElement { + static override styles = [ + css` + :host { + --active-dot-color: var(--text-color); + --inactive-dot-color: var(--card-background); + display: block; + width: 100%; + } + + .carousel { + display: grid; + grid-template-columns: 0fr auto 0fr; + grid-template-rows: auto 0fr; + gap: 1em; + justify-content: center; + } + + .button { + display: flex; + align-items: center; + } + .button.previous { + grid-column: 1; + grid-row: 1; + } + .button.next { + grid-column: 3; + grid-row: 1; + } + + .content { + max-width: 520px; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + grid-column: 2; + grid-row: 1; + } + + .dots { + display: flex; + align-items: center; + gap: 0; + justify-content: center; + grid-column: 2; + grid-row: 2; + } + + .dot { + padding: 0.5em; + cursor: pointer; + position: relative; + } + + .dot::before { + content: ''; + display: block; + width: 8px; + height: 8px; + border-radius: 50%; + background-color: var(--inactive-dot-color); + transition: background-color 0.2s ease; + } + + .dot:hover::before { + background-color: var(--active-dot-color); + } + + .dot[data-active]::before { + background-color: var(--active-dot-color); + } + + ::slotted(*) { + display: none; + } + + ::slotted([data-active]) { + display: flex; + width: 100%; + } + + @media (max-width: 400px) { + .carousel { + display: grid; + grid-template-columns: 1fr auto 1fr; + grid-template-rows: auto 0fr; + gap: 0.5em; + } + .content { + grid-column: 1 / span 3; + grid-row: 1; + } + .button { + display: block; + } + .button.previous { + grid-column: 1; + grid-row: 2; + } + .button.next { + grid-column: 3; + grid-row: 2; + } + } + `, + ]; + + @queryAssignedElements({ flatten: true }) + private cards!: HTMLElement[]; + + @state() + private currentIndex = 0; + + override firstUpdated(): void { + this.updateActiveCard(); + this.requestUpdate(); + } + + private updateActiveCard(): void { + this.cards.forEach((card, index) => { + if (index === this.currentIndex) { + card.setAttribute('data-active', ''); + } else { + card.removeAttribute('data-active'); + } + }); + } + + private handlePrevious(): void { + if (this.cards.length === 0) return; + this.currentIndex = (this.currentIndex - 1 + this.cards.length) % this.cards.length; + this.updateActiveCard(); + } + + private handleNext(): void { + if (this.cards.length === 0) return; + this.currentIndex = (this.currentIndex + 1) % this.cards.length; + this.updateActiveCard(); + } + + private handleSlotChange(): void { + this.currentIndex = 0; + this.updateActiveCard(); + } + + private handleDotClick(index: number): void { + this.currentIndex = index; + this.updateActiveCard(); + } + + override render(): unknown { + return html` + + `; + } +} + +@customElement('gl-feature-card') +export class GlFeatureCard extends LitElement { + static override styles = [ + css` + :host { + display: flex; + gap: 1em; + } + + .image { + flex: 1 1 50%; + width: 50%; + } + + .content { + margin-top: 0.5em; + flex: 1 0 50%; + display: block; + } + + @media (max-width: 400px) { + :host { + flex-direction: column; + } + + .image { + width: 100%; + } + + .content { + margin-top: 0; + margin-left: 0.3em; + margin-right: 0.3em; + } + + ::slotted(*) { + width: 100%; + } + } + `, + ]; + + private hasBeenVisible: boolean = false; + + override updated(changedProperties: Map): void { + super.updated(changedProperties); + + const isVisible = isElementVisible(this); + if (!isVisible || this.hasBeenVisible) return; + + const isInViewport = isElementInViewport(this); + const isPartiallyInViewport = isElementPartiallyInViewport(this); + const visible = isVisible && (isInViewport || isPartiallyInViewport); + if (visible && !this.hasBeenVisible) { + this.hasBeenVisible = true; + + // Dispatch a custom event when any property changes + this.dispatchEvent( + new CustomEvent('gl-feature-appeared', { + detail: { + changedProperties: Array.from(changedProperties.keys()), + visibility: { + isVisible: isVisible, + isInViewport: isInViewport, + isPartiallyInViewport: isPartiallyInViewport, + }, + }, + bubbles: true, + composed: true, + }), + ); + } + } + + /** is used to make the component reactive to 'data-active' attribute changes */ + @property({ type: Boolean, reflect: true, attribute: 'data-active' }) + private _dataActive: boolean = false; + + override render(): unknown { + return html` +
+ +
+
+ +
+ `; + } +} + +@customElement('gl-feature-narrow-card') +export class GlFeatureNarrowCard extends LitElement { + static override styles = [ + css` + :host { + display: block; + width: 12em; + min-width: 12em; + text-align: initial; + } + + ::slotted(p:last-child) { + margin-top: 0.5em; + } + + @media (max-width: 400px) { + :host { + width: 100%; + box-sizing: border-box; + min-width: initial; + padding-left: 0.3em; + padding-right: 0.3em; + } + } + `, + ]; + + override render(): unknown { + return html``; + } +} + +@customElement('gl-scrollable-features') +export class GlScrollableFeatures extends LitElement { + static override styles = [ + css` + :host { + --side-shadow-padding: 1em; + --side-shadow-color: transparent; + + --final-side-shadow-padding: max(var(--side-shadow-padding), 1em); + position: relative; + max-width: 100%; + } + + :host::before, + :host::after { + content: ' '; + position: absolute; + display: block; + top: 0; + width: var(--final-side-shadow-padding); + height: 100%; + } + + :host::before { + left: 0; + background: linear-gradient(to left, transparent 0%, var(--side-shadow-color) 83%); + } + :host::after { + right: 0; + background: linear-gradient(to right, transparent 0%, var(--side-shadow-color) 83%); + } + + .content { + box-sizing: border-box; + padding: 0 var(--final-side-shadow-padding); + display: flex; + gap: 1em; + overflow-x: auto; + overflow-y: hidden; + scrollbar-width: none; + scroll-snap-type: x proximity; + } + + ::slotted(*) { + scroll-snap-align: center; + } + + @media (max-width: 400px) { + :host::before, + :host::after { + content: none; + } + .content { + flex-direction: column; + gap: 0.5em; + } + } + `, + ]; + + override render(): unknown { + return html`
`; + } +} + +function isElementVisible(element: HTMLElement): boolean { + // Check if element is hidden by display: none or visibility: hidden + const style = window.getComputedStyle(element); + if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') { + return false; + } + + // Check if element has zero dimensions + const rect = element.getBoundingClientRect(); + if (rect.width === 0 || rect.height === 0) { + return false; + } + + return true; +} + +function isElementInViewport(element: HTMLElement): boolean { + const rect = element.getBoundingClientRect(); + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && + rect.right <= (window.innerWidth || document.documentElement.clientWidth) + ); +} + +function isElementPartiallyInViewport(element: HTMLElement): boolean { + const rect = element.getBoundingClientRect(); + const windowHeight = window.innerHeight || document.documentElement.clientHeight; + const windowWidth = window.innerWidth || document.documentElement.clientWidth; + + return rect.bottom > 0 && rect.right > 0 && rect.top < windowHeight && rect.left < windowWidth; +} diff --git a/src/webviews/apps/home/home.css.ts b/src/webviews/apps/home/home.css.ts index ff1d83a54cb3a..6523377aa20fa 100644 --- a/src/webviews/apps/home/home.css.ts +++ b/src/webviews/apps/home/home.css.ts @@ -95,6 +95,10 @@ export const homeStyles = css` gl-repo-alerts:not([has-alerts]) { display: none; } + + gl-welcome-overlay { + z-index: 5; /* to owerlay the Launchpad progress animation */ + } `; export const buttonStyles = css` diff --git a/src/webviews/apps/home/home.html b/src/webviews/apps/home/home.html index ae2ca4cb107f4..a4b1a167f1e6e 100644 --- a/src/webviews/apps/home/home.html +++ b/src/webviews/apps/home/home.html @@ -21,6 +21,6 @@ data-placement="#{placement}" data-vscode-context='{ "webview": "#{webviewId}", "webviewInstance": "#{webviewInstanceId}" }' > - + diff --git a/src/webviews/apps/home/home.ts b/src/webviews/apps/home/home.ts index 24060a3f93fc8..505dc409b236b 100644 --- a/src/webviews/apps/home/home.ts +++ b/src/webviews/apps/home/home.ts @@ -2,7 +2,7 @@ import './home.scss'; import { provide } from '@lit/context'; import { html } from 'lit'; -import { customElement, query } from 'lit/decorators.js'; +import { customElement, property, query, state } from 'lit/decorators.js'; import { when } from 'lit/directives/when.js'; import type { State } from '../../home/protocol'; import { DidChangeSubscription, DidFocusAccount } from '../../home/protocol'; @@ -17,6 +17,7 @@ import { GlAppHost } from '../shared/appHost'; import { scrollableBase } from '../shared/components/styles/lit/base.css'; import type { LoggerContext } from '../shared/contexts/logger'; import type { HostIpc } from '../shared/ipc'; +import type { ThemeChangeEvent } from '../shared/theme'; import type { GlAiAllAccessBanner } from './components/ai-all-access-banner'; import { homeBaseStyles, homeStyles } from './home.css'; import { HomeStateProvider } from './stateProvider'; @@ -29,6 +30,7 @@ import './components/ai-all-access-banner'; import './components/ama-banner'; import './components/integration-banner'; import './components/preview-banner'; +import './components/welcome-overlay'; import '../shared/components/mcp-banner'; import './components/repo-alerts'; import '../shared/components/banner/banner'; @@ -76,6 +78,16 @@ export class GlHomeApp extends GlAppHost { ); } + @property({ type: String }) + webroot?: string; + + @state() + private isLightTheme = false; + + protected override onThemeUpdated(e: ThemeChangeEvent): void { + this.isLightTheme = e.isLightTheme; + } + override render(): unknown { return html`
@@ -111,6 +123,7 @@ export class GlHomeApp extends GlAppHost { `, )} +
`; } diff --git a/src/webviews/apps/media/feature-commit-composer-dark.svg b/src/webviews/apps/media/feature-commit-composer-dark.svg new file mode 100644 index 0000000000000..4efde8f886bc2 --- /dev/null +++ b/src/webviews/apps/media/feature-commit-composer-dark.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-commit-composer-light.svg b/src/webviews/apps/media/feature-commit-composer-light.svg new file mode 100644 index 0000000000000..ea74b25056928 --- /dev/null +++ b/src/webviews/apps/media/feature-commit-composer-light.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-graph-dark.svg b/src/webviews/apps/media/feature-graph-dark.svg new file mode 100644 index 0000000000000..c6adf986bafd8 --- /dev/null +++ b/src/webviews/apps/media/feature-graph-dark.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-graph-light.svg b/src/webviews/apps/media/feature-graph-light.svg new file mode 100644 index 0000000000000..61127b91486b1 --- /dev/null +++ b/src/webviews/apps/media/feature-graph-light.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-launchpad-dark.svg b/src/webviews/apps/media/feature-launchpad-dark.svg new file mode 100644 index 0000000000000..fe1782a802af7 --- /dev/null +++ b/src/webviews/apps/media/feature-launchpad-dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-launchpad-light.svg b/src/webviews/apps/media/feature-launchpad-light.svg new file mode 100644 index 0000000000000..afa7031dc5c75 --- /dev/null +++ b/src/webviews/apps/media/feature-launchpad-light.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-timeline-dark.svg b/src/webviews/apps/media/feature-timeline-dark.svg new file mode 100644 index 0000000000000..eca1dfba8500b --- /dev/null +++ b/src/webviews/apps/media/feature-timeline-dark.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/apps/media/feature-timeline-light.svg b/src/webviews/apps/media/feature-timeline-light.svg new file mode 100644 index 0000000000000..f6dea6f39e788 --- /dev/null +++ b/src/webviews/apps/media/feature-timeline-light.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/webviews/home/homeWebview.ts b/src/webviews/home/homeWebview.ts index 74b79cb06a2c1..655117017ccd2 100644 --- a/src/webviews/home/homeWebview.ts +++ b/src/webviews/home/homeWebview.ts @@ -803,6 +803,10 @@ export class HomeWebviewProvider implements WebviewProvider { previewEnabled: boolean; newInstall: boolean; amaBannerCollapsed: boolean; + welcomeOverlayCollapsed: boolean; + hostAppName: string; } export interface IntegrationState extends IntegrationDescriptor {