Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions contributions.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@
},
"gitlens.ai.explainCommit": {
"label": "Explain Commit...",
"commandPalette": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"commandPalette": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"menus": {
"view/item/context": [
{
"when": "viewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "3_gitlens_ai",
"order": 1
}
Expand All @@ -38,11 +38,11 @@
},
"gitlens.ai.explainStash": {
"label": "Explain Stash (Preview)...",
"commandPalette": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"commandPalette": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"menus": {
"view/item/context": [
{
"when": "viewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "3_gitlens_ai",
"order": 1
}
Expand All @@ -51,11 +51,11 @@
},
"gitlens.ai.generateChangelog": {
"label": "Generate Changelog (Preview)...",
"commandPalette": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled"
"commandPalette": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
"gitlens.ai.generateCommitMessage": {
"label": "Generate Commit Message",
"commandPalette": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled"
"commandPalette": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
"gitlens.annotations.nextChange": {
"label": "Next Change",
Expand Down Expand Up @@ -1367,7 +1367,7 @@
"menus": {
"webview/context": [
{
"when": "webviewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "webviewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3",
"order": 100
}
Expand All @@ -1379,7 +1379,7 @@
"menus": {
"webview/context": [
{
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled",
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens",
"order": 2
}
Expand Down Expand Up @@ -1993,7 +1993,7 @@
"menus": {
"webview/context": [
{
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3",
"order": 1
}
Expand All @@ -2005,7 +2005,7 @@
"menus": {
"webview/context": [
{
"when": "webviewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "webviewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3",
"order": 1
}
Expand Down Expand Up @@ -3459,7 +3459,7 @@
},
"gitlens.resetAIKey": {
"label": "Reset Stored AI Keys...",
"commandPalette": "gitlens:enabled && gitlens:gk:organization:ai:enabled"
"commandPalette": "gitlens:enabled && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
"gitlens.resetViewsLayout": {
"label": "Reset Views Layout",
Expand Down Expand Up @@ -3491,19 +3491,19 @@
"menus": {
"git.commit": [
{
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"group": "4_gitlens",
"order": 2
}
],
"scm/title": [
{
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled && config.gitlens.menus.scmRepositoryInline.generateCommitMessage",
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled && config.gitlens.menus.scmRepositoryInline.generateCommitMessage",
"group": "navigation",
"order": -3
},
{
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"group": "2_gitlens",
"order": 2
}
Expand Down Expand Up @@ -4463,7 +4463,7 @@
},
"gitlens.switchAIModel": {
"label": "Switch AI Provider/Model",
"commandPalette": "gitlens:enabled && gitlens:gk:organization:ai:enabled"
"commandPalette": "gitlens:enabled && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
"gitlens.switchMode": {
"label": "Switch Mode",
Expand Down Expand Up @@ -4777,12 +4777,12 @@
"menus": {
"view/item/context": [
{
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "inline",
"order": 98
},
{
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !listMultiSelection && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !listMultiSelection && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "4_gitlens_actions",
"order": 2
}
Expand All @@ -4795,7 +4795,7 @@
"menus": {
"view/item/context": [
{
"when": "viewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3",
"order": 100
}
Expand Down
42 changes: 21 additions & 21 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4194,12 +4194,12 @@
"preview"
]
},
"gitlens.ai.generateCommitMessage.enabled": {
"gitlens.ai.enabled": {
"type": "boolean",
"default": true,
"markdownDescription": "Specifies whether to enable GitLens' AI-powered, on-demand commit message generation",
"markdownDescription": "Specifies whether to enable GitLens' AI-powered features",
"scope": "window",
"order": 210,
"order": 2,
"tags": [
"preview"
]
Expand Down Expand Up @@ -10402,19 +10402,19 @@
},
{
"command": "gitlens.ai.explainCommit",
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled"
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
{
"command": "gitlens.ai.explainStash",
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled"
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
{
"command": "gitlens.ai.generateChangelog",
"when": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled"
"when": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
{
"command": "gitlens.ai.generateCommitMessage",
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled"
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
{
"command": "gitlens.annotations.nextChange",
Expand Down Expand Up @@ -11434,7 +11434,7 @@
},
{
"command": "gitlens.resetAIKey",
"when": "gitlens:enabled && gitlens:gk:organization:ai:enabled"
"when": "gitlens:enabled && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
{
"command": "gitlens.revealCommitInView",
Expand Down Expand Up @@ -11682,7 +11682,7 @@
},
{
"command": "gitlens.switchAIModel",
"when": "gitlens:enabled && gitlens:gk:organization:ai:enabled"
"when": "gitlens:enabled && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled"
},
{
"command": "gitlens.switchMode",
Expand Down Expand Up @@ -13810,7 +13810,7 @@
},
{
"command": "gitlens.scm.ai.generateCommitMessage",
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"when": "gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"group": "4_gitlens@2"
},
{
Expand Down Expand Up @@ -16068,7 +16068,7 @@
"scm/title": [
{
"command": "gitlens.scm.ai.generateCommitMessage",
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled && config.gitlens.menus.scmRepositoryInline.generateCommitMessage",
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled && config.gitlens.menus.scmRepositoryInline.generateCommitMessage",
"group": "navigation@-3"
},
{
Expand All @@ -16088,7 +16088,7 @@
},
{
"command": "gitlens.scm.ai.generateCommitMessage",
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"when": "scmProvider == git && gitlens:enabled && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled && config.gitlens.menus.scmRepository.generateCommitMessage",
"group": "2_gitlens@2"
},
{
Expand Down Expand Up @@ -16358,7 +16358,7 @@
},
{
"command": "gitlens.views.ai.generateChangelogFrom",
"when": "viewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3@100"
},
{
Expand Down Expand Up @@ -16634,7 +16634,7 @@
},
{
"command": "gitlens.ai.explainCommit",
"when": "viewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "3_gitlens_ai@1"
},
{
Expand Down Expand Up @@ -16824,7 +16824,7 @@
},
{
"command": "gitlens.views.ai.generateChangelog",
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "inline@98"
},
{
Expand All @@ -16840,7 +16840,7 @@
},
{
"command": "gitlens.views.ai.generateChangelog",
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !listMultiSelection && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:compare:results:commits\\b/ && !listMultiSelection && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "4_gitlens_actions@2"
},
{
Expand Down Expand Up @@ -17695,7 +17695,7 @@
},
{
"command": "gitlens.ai.explainStash",
"when": "viewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "viewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "3_gitlens_ai@1"
},
{
Expand Down Expand Up @@ -20035,7 +20035,7 @@
},
{
"command": "gitlens.graph.ai.generateChangelogFrom",
"when": "webviewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "webviewItem =~ /gitlens:(branch|tag)\\b/ && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3@100"
},
{
Expand Down Expand Up @@ -20165,7 +20165,7 @@
},
{
"command": "gitlens.graph.explainCommit",
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3@1"
},
{
Expand Down Expand Up @@ -20330,7 +20330,7 @@
},
{
"command": "gitlens.graph.explainStash",
"when": "webviewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
"when": "webviewItem =~ /gitlens:stash\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens_actions_3@1"
},
{
Expand Down Expand Up @@ -20380,7 +20380,7 @@
},
{
"command": "gitlens.graph.ai.generateCommitMessage",
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.generateCommitMessage.enabled",
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.enabled",
"group": "1_gitlens@2"
},
{
Expand Down
1 change: 1 addition & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ export interface AdvancedConfig {
}

interface AIConfig {
readonly enabled: boolean;
readonly azure: {
readonly url: string | null;
};
Expand Down
10 changes: 8 additions & 2 deletions src/plus/ai/aiProviderService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,13 @@ export class AIProviderService implements Disposable {
return model;
}

private async ensureOrgAccess(): Promise<boolean> {
private async ensureAccess(): Promise<boolean> {
const aiEnabled = configuration.get('ai.enabled');
if (aiEnabled === false) {
await window.showErrorMessage(`AI features have been disabled via GitLens settings.`);
return false;
}

const orgEnabled = getContext('gitlens:gk:organization:ai:enabled');
if (orgEnabled === false) {
await window.showErrorMessage(`AI features have been disabled for your organization.`);
Expand All @@ -479,7 +485,7 @@ export class AIProviderService implements Disposable {
}

private async ensureFeatureAccess(feature: AIFeatures, source: Source): Promise<boolean> {
if (!(await this.ensureOrgAccess())) return false;
if (!(await this.ensureAccess())) return false;

if (feature === 'generate-commitMessage') return true;
if (
Expand Down
21 changes: 21 additions & 0 deletions src/quickpicks/aiModelPicker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type { AIProviders } from '../constants.ai';
import type { Container } from '../container';
import type { AIModel, AIModelDescriptor, AIProviderDescriptorWithConfiguration } from '../plus/ai/models/model';
import { isSubscriptionPaidPlan } from '../plus/gk/utils/subscription.utils';
import { configuration } from '../system/-webview/configuration';
import { getContext } from '../system/-webview/context';
import { getQuickPickIgnoreFocusOut } from '../system/-webview/vscode';
import { getSettledValue } from '../system/promise';
Expand Down Expand Up @@ -33,6 +34,16 @@ export async function showAIProviderPicker(
container: Container,
current: AIModelDescriptor | undefined,
): Promise<ProviderQuickPickItem | undefined> {
if (!configuration.get('ai.enabled')) {
await window.showQuickPick([{ label: 'OK' }], {
title: 'AI is Disabled',
placeHolder: 'GitLens AI features have been disabled via settings',
canPickMany: false,
});

return undefined;
}

if (!getContext('gitlens:gk:organization:ai:enabled', true)) {
await window.showQuickPick([{ label: 'OK' }], {
title: 'AI is Disabled',
Expand Down Expand Up @@ -139,6 +150,16 @@ export async function showAIModelPicker(
provider: AIProviders,
current?: AIModelDescriptor,
): Promise<ModelQuickPickItem | Directive | undefined> {
if (!configuration.get('ai.enabled')) {
await window.showQuickPick([{ label: 'OK' }], {
title: 'AI is Disabled',
placeHolder: 'GitLens AI features have been disabled via settings',
canPickMany: false,
});

return undefined;
}

if (!getContext('gitlens:gk:organization:ai:enabled', true)) {
await window.showQuickPick([{ label: 'OK' }], {
title: 'AI is Disabled',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ export class GlCommitDetails extends GlDetailsBase {
)}
</div>
${when(
this.state?.orgSettings.ai !== false,
this.state?.orgSettings.ai !== false && this.state?.preferences.aiEnabled !== false,
() => html`
<div class="message-block-actions">
<gl-action-chip
Expand Down
1 change: 1 addition & 0 deletions src/webviews/apps/home/stateProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ export class HomeStateProvider implements StateProvider<State> {
case DidChangePreviewEnabled.is(msg):
this._state.previewEnabled = msg.params.previewEnabled;
this._state.previewCollapsed = msg.params.previewCollapsed;
this._state.aiEnabled = msg.params.aiEnabled;
this._state.timestamp = Date.now();

this.provider.setValue(this._state, true);
Expand Down
Loading