Skip to content

Commit d548f26

Browse files
d13eamodioaxosoft-ramint
committed
Adds experimental commit and rebase generation
Co-authored-by: Eric Amodio <[email protected]> Co-authored-by: Ramin Tadayon <[email protected]>
1 parent 1e2c0f5 commit d548f26

23 files changed

+1133
-4
lines changed

contributions.json

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,77 @@
232232
]
233233
}
234234
},
235+
"gitlens.ai.generateCommits": {
236+
"label": "Generate Commits with AI (Experimental)...",
237+
"icon": "$(sparkle)",
238+
"commandPalette": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateCommits.enabled"
239+
},
240+
"gitlens.ai.generateCommits:graph": {
241+
"label": "Generate Commits with AI (Experimental)",
242+
"icon": "$(sparkle)",
243+
"menus": {
244+
"webview/context": [
245+
{
246+
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateCommits.enabled",
247+
"group": "1_gitlens",
248+
"order": 2
249+
}
250+
]
251+
}
252+
},
253+
"gitlens.ai.generateCommits:views": {
254+
"label": "Generate Commits with AI (Experimental)",
255+
"icon": "$(sparkle)",
256+
"menus": {
257+
"view/item/context": [
258+
{
259+
"when": "viewItem =~ /gitlens:(worktree\\b(?=.*?\\b\\+working\\b)|uncommitted)\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateCommits.enabled",
260+
"group": "3_gitlens_ai",
261+
"order": 1
262+
}
263+
]
264+
}
265+
},
266+
"gitlens.ai.generateRebase": {
267+
"label": "Rebase with AI (Experimental)...",
268+
"icon": "$(sparkle)",
269+
"commandPalette": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled"
270+
},
271+
"gitlens.ai.rebaseOntoCommit:graph": {
272+
"label": "AI Rebase Current Branch onto Commit...",
273+
"icon": "$(sparkle)",
274+
"enablement": "!operationInProgress",
275+
"menus": {
276+
"webview/context": [
277+
{
278+
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled",
279+
"group": "1_gitlens_actions",
280+
"order": 6
281+
}
282+
]
283+
}
284+
},
285+
"gitlens.ai.rebaseOntoCommit:views": {
286+
"label": "AI Rebase Current Branch onto Commit...",
287+
"icon": "$(sparkle)",
288+
"enablement": "!operationInProgress",
289+
"menus": {
290+
"gitlens/commit/file/commit": [
291+
{
292+
"when": "viewItem =~ /gitlens:file\\b(?=.*?\\b\\+committed\\b)(?=.*?\\b\\+current\\b)/ && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled",
293+
"group": "1_gitlens_actions",
294+
"order": 6
295+
}
296+
],
297+
"view/item/context": [
298+
{
299+
"when": "viewItem =~ /gitlens:commit\\b(?!.*?\\b\\+rebase\\b)/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled",
300+
"group": "1_gitlens_actions",
301+
"order": 6
302+
}
303+
]
304+
}
305+
},
235306
"gitlens.ai.switchProvider": {
236307
"label": "Switch AI Provider/Model",
237308
"commandPalette": "gitlens:enabled && gitlens:gk:organization:ai:enabled"

docs/telemetry-events.md

Lines changed: 31 additions & 1 deletion
Large diffs are not rendered by default.

package.json

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4246,6 +4246,26 @@
42464246
"preview"
42474247
]
42484248
},
4249+
"gitlens.ai.experimental.generateCommits.enabled": {
4250+
"type": "boolean",
4251+
"default": false,
4252+
"markdownDescription": "Specifies whether to enable GitLens' experimental AI Commit Generation features",
4253+
"scope": "window",
4254+
"order": 1,
4255+
"tags": [
4256+
"experimental"
4257+
]
4258+
},
4259+
"gitlens.ai.experimental.generateRebase.enabled": {
4260+
"type": "boolean",
4261+
"default": false,
4262+
"markdownDescription": "Specifies whether to enable GitLens' experimental AI Rebase features",
4263+
"scope": "window",
4264+
"order": 1,
4265+
"tags": [
4266+
"experimental"
4267+
]
4268+
},
42494269
"gitlens.ai.generateStashMessage.customInstructions": {
42504270
"type": "string",
42514271
"default": null,
@@ -6210,6 +6230,40 @@
62106230
"title": "Generate Commit Message with GitLens",
62116231
"icon": "$(sparkle)"
62126232
},
6233+
{
6234+
"command": "gitlens.ai.generateCommits",
6235+
"title": "Generate Commits with AI (Experimental)...",
6236+
"category": "GitLens",
6237+
"icon": "$(sparkle)"
6238+
},
6239+
{
6240+
"command": "gitlens.ai.generateCommits:graph",
6241+
"title": "Generate Commits with AI (Experimental)",
6242+
"icon": "$(sparkle)"
6243+
},
6244+
{
6245+
"command": "gitlens.ai.generateCommits:views",
6246+
"title": "Generate Commits with AI (Experimental)",
6247+
"icon": "$(sparkle)"
6248+
},
6249+
{
6250+
"command": "gitlens.ai.generateRebase",
6251+
"title": "Rebase with AI (Experimental)...",
6252+
"category": "GitLens",
6253+
"icon": "$(sparkle)"
6254+
},
6255+
{
6256+
"command": "gitlens.ai.rebaseOntoCommit:graph",
6257+
"title": "AI Rebase Current Branch onto Commit...",
6258+
"icon": "$(sparkle)",
6259+
"enablement": "!operationInProgress"
6260+
},
6261+
{
6262+
"command": "gitlens.ai.rebaseOntoCommit:views",
6263+
"title": "AI Rebase Current Branch onto Commit...",
6264+
"icon": "$(sparkle)",
6265+
"enablement": "!operationInProgress"
6266+
},
62136267
{
62146268
"command": "gitlens.ai.switchProvider",
62156269
"title": "Switch AI Provider/Model",
@@ -10579,6 +10633,30 @@
1057910633
"command": "gitlens.ai.generateCommitMessage:scm",
1058010634
"when": "false"
1058110635
},
10636+
{
10637+
"command": "gitlens.ai.generateCommits",
10638+
"when": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateCommits.enabled"
10639+
},
10640+
{
10641+
"command": "gitlens.ai.generateCommits:graph",
10642+
"when": "false"
10643+
},
10644+
{
10645+
"command": "gitlens.ai.generateCommits:views",
10646+
"when": "false"
10647+
},
10648+
{
10649+
"command": "gitlens.ai.generateRebase",
10650+
"when": "gitlens:enabled && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled"
10651+
},
10652+
{
10653+
"command": "gitlens.ai.rebaseOntoCommit:graph",
10654+
"when": "false"
10655+
},
10656+
{
10657+
"command": "gitlens.ai.rebaseOntoCommit:views",
10658+
"when": "false"
10659+
},
1058210660
{
1058310661
"command": "gitlens.ai.switchProvider",
1058410662
"when": "gitlens:enabled && gitlens:gk:organization:ai:enabled"
@@ -14134,6 +14212,11 @@
1413414212
"when": "viewItem =~ /gitlens:file\\b(?=.*?\\b\\+committed\\b)/ && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",
1413514213
"group": "1_gitlens_actions@5"
1413614214
},
14215+
{
14216+
"command": "gitlens.ai.rebaseOntoCommit:views",
14217+
"when": "viewItem =~ /gitlens:file\\b(?=.*?\\b\\+committed\\b)(?=.*?\\b\\+current\\b)/ && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled",
14218+
"group": "1_gitlens_actions@6"
14219+
},
1413714220
{
1413814221
"command": "gitlens.views.rebaseOntoCommit",
1413914222
"when": "viewItem =~ /gitlens:file\\b(?=.*?\\b\\+committed\\b)(?=.*?\\b\\+current\\b)/ && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",
@@ -16753,6 +16836,11 @@
1675316836
"when": "viewItem =~ /gitlens:commit\\b(?!.*?\\b\\+rebase\\b)/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",
1675416837
"group": "1_gitlens_actions@5"
1675516838
},
16839+
{
16840+
"command": "gitlens.ai.rebaseOntoCommit:views",
16841+
"when": "viewItem =~ /gitlens:commit\\b(?!.*?\\b\\+rebase\\b)/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled",
16842+
"group": "1_gitlens_actions@6"
16843+
},
1675616844
{
1675716845
"command": "gitlens.views.rebaseOntoCommit",
1675816846
"when": "viewItem =~ /gitlens:commit\\b(?!.*?\\b\\+rebase\\b)/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",
@@ -18016,6 +18104,11 @@
1801618104
"when": "viewItem =~ /gitlens:(worktree\\b(?=.*?\\b\\+working\\b)|uncommitted)\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
1801718105
"group": "3_gitlens_ai@1"
1801818106
},
18107+
{
18108+
"command": "gitlens.ai.generateCommits:views",
18109+
"when": "viewItem =~ /gitlens:(worktree\\b(?=.*?\\b\\+working\\b)|uncommitted)\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateCommits.enabled",
18110+
"group": "3_gitlens_ai@1"
18111+
},
1801918112
{
1802018113
"command": "gitlens.views.workspaces.addRepos",
1802118114
"when": "viewItem =~ /gitlens:workspace\\b(?=.*?\\b\\+cloud\\b)/",
@@ -20304,6 +20397,11 @@
2030420397
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",
2030520398
"group": "1_gitlens_actions@5"
2030620399
},
20400+
{
20401+
"command": "gitlens.ai.rebaseOntoCommit:graph",
20402+
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateRebase.enabled",
20403+
"group": "1_gitlens_actions@6"
20404+
},
2030720405
{
2030820406
"command": "gitlens.graph.rebaseOntoCommit",
2030920407
"when": "webviewItem =~ /gitlens:commit\\b/ && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",
@@ -20559,6 +20657,11 @@
2055920657
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled",
2056020658
"group": "1_gitlens@2"
2056120659
},
20660+
{
20661+
"command": "gitlens.ai.generateCommits:graph",
20662+
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && gitlens:gk:organization:ai:enabled && config.gitlens.ai.experimental.generateCommits.enabled",
20663+
"group": "1_gitlens@2"
20664+
},
2056220665
{
2056320666
"command": "gitlens.graph.stash.save",
2056420667
"when": "webviewItem == gitlens:wip && !listMultiSelection && !gitlens:readonly && !gitlens:untrusted && !gitlens:hasVirtualFolders",

src/commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import './commands/explainStash';
2727
import './commands/explainWip';
2828
import './commands/generateChangelog';
2929
import './commands/generateCommitMessage';
30+
import './commands/generateRebase';
3031
import './commands/ghpr/openOrCreateWorktree';
3132
import './commands/gitWizard';
3233
import './commands/inviteToLiveShare';

0 commit comments

Comments
 (0)