geeto 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/lib/api/copilot-adapter.d.ts +11 -0
- package/lib/api/copilot-adapter.d.ts.map +1 -0
- package/lib/api/copilot-adapter.js +41 -0
- package/lib/api/copilot-adapter.js.map +1 -0
- package/lib/api/copilot-sdk.d.ts +48 -0
- package/lib/api/copilot-sdk.d.ts.map +1 -0
- package/lib/api/copilot-sdk.js +451 -0
- package/lib/api/copilot-sdk.js.map +1 -0
- package/lib/api/copilot.d.ts +21 -0
- package/lib/api/copilot.d.ts.map +1 -0
- package/lib/api/copilot.js +87 -0
- package/lib/api/copilot.js.map +1 -0
- package/lib/api/gemini-sdk.d.ts +24 -0
- package/lib/api/gemini-sdk.d.ts.map +1 -0
- package/lib/api/gemini-sdk.js +245 -0
- package/lib/api/gemini-sdk.js.map +1 -0
- package/lib/api/gemini.d.ts +21 -0
- package/lib/api/gemini.d.ts.map +1 -0
- package/lib/api/gemini.js +87 -0
- package/lib/api/gemini.js.map +1 -0
- package/lib/api/openrouter-sdk.d.ts +58 -0
- package/lib/api/openrouter-sdk.d.ts.map +1 -0
- package/lib/api/openrouter-sdk.js +341 -0
- package/lib/api/openrouter-sdk.js.map +1 -0
- package/lib/api/openrouter.d.ts +17 -0
- package/lib/api/openrouter.d.ts.map +1 -0
- package/lib/api/openrouter.js +111 -0
- package/lib/api/openrouter.js.map +1 -0
- package/lib/api/trello.d.ts +17 -0
- package/lib/api/trello.d.ts.map +1 -0
- package/lib/api/trello.js +72 -0
- package/lib/api/trello.js.map +1 -0
- package/lib/cli/input.d.ts +39 -0
- package/lib/cli/input.d.ts.map +1 -0
- package/lib/cli/input.js +119 -0
- package/lib/cli/input.js.map +1 -0
- package/lib/cli/menu.d.ts +9 -0
- package/lib/cli/menu.d.ts.map +1 -0
- package/lib/cli/menu.js +201 -0
- package/lib/cli/menu.js.map +1 -0
- package/lib/core/constants.d.ts +22 -0
- package/lib/core/constants.d.ts.map +1 -0
- package/lib/core/constants.js +24 -0
- package/lib/core/constants.js.map +1 -0
- package/lib/core/copilot-setup.d.ts +13 -0
- package/lib/core/copilot-setup.d.ts.map +1 -0
- package/lib/core/copilot-setup.js +447 -0
- package/lib/core/copilot-setup.js.map +1 -0
- package/lib/core/gemini-setup.d.ts +8 -0
- package/lib/core/gemini-setup.d.ts.map +1 -0
- package/lib/core/gemini-setup.js +84 -0
- package/lib/core/gemini-setup.js.map +1 -0
- package/lib/core/menu-constants.d.ts +24 -0
- package/lib/core/menu-constants.d.ts.map +1 -0
- package/lib/core/menu-constants.js +22 -0
- package/lib/core/menu-constants.js.map +1 -0
- package/lib/core/openrouter-setup.d.ts +8 -0
- package/lib/core/openrouter-setup.d.ts.map +1 -0
- package/lib/core/openrouter-setup.js +73 -0
- package/lib/core/openrouter-setup.js.map +1 -0
- package/lib/core/setup.d.ts +21 -0
- package/lib/core/setup.d.ts.map +1 -0
- package/lib/core/setup.js +88 -0
- package/lib/core/setup.js.map +1 -0
- package/lib/core/trello-setup.d.ts +8 -0
- package/lib/core/trello-setup.d.ts.map +1 -0
- package/lib/core/trello-setup.js +107 -0
- package/lib/core/trello-setup.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +250 -0
- package/lib/index.js.map +1 -0
- package/lib/types/index.d.ts +78 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +2 -0
- package/lib/types/index.js.map +1 -0
- package/lib/utils/branch-naming.d.ts +11 -0
- package/lib/utils/branch-naming.d.ts.map +1 -0
- package/lib/utils/branch-naming.js +396 -0
- package/lib/utils/branch-naming.js.map +1 -0
- package/lib/utils/colors.d.ts +14 -0
- package/lib/utils/colors.d.ts.map +1 -0
- package/lib/utils/colors.js +14 -0
- package/lib/utils/colors.js.map +1 -0
- package/lib/utils/commit-helpers.d.ts +53 -0
- package/lib/utils/commit-helpers.d.ts.map +1 -0
- package/lib/utils/commit-helpers.js +177 -0
- package/lib/utils/commit-helpers.js.map +1 -0
- package/lib/utils/config.d.ts +87 -0
- package/lib/utils/config.d.ts.map +1 -0
- package/lib/utils/config.js +326 -0
- package/lib/utils/config.js.map +1 -0
- package/lib/utils/display.d.ts +27 -0
- package/lib/utils/display.d.ts.map +1 -0
- package/lib/utils/display.js +116 -0
- package/lib/utils/display.js.map +1 -0
- package/lib/utils/error-helpers.d.ts +27 -0
- package/lib/utils/error-helpers.d.ts.map +1 -0
- package/lib/utils/error-helpers.js +102 -0
- package/lib/utils/error-helpers.js.map +1 -0
- package/lib/utils/exec.d.ts +18 -0
- package/lib/utils/exec.d.ts.map +1 -0
- package/lib/utils/exec.js +96 -0
- package/lib/utils/exec.js.map +1 -0
- package/lib/utils/git-ai-errors.d.ts +10 -0
- package/lib/utils/git-ai-errors.d.ts.map +1 -0
- package/lib/utils/git-ai-errors.js +71 -0
- package/lib/utils/git-ai-errors.js.map +1 -0
- package/lib/utils/git-ai.d.ts +26 -0
- package/lib/utils/git-ai.d.ts.map +1 -0
- package/lib/utils/git-ai.js +603 -0
- package/lib/utils/git-ai.js.map +1 -0
- package/lib/utils/git-commands.d.ts +21 -0
- package/lib/utils/git-commands.d.ts.map +1 -0
- package/lib/utils/git-commands.js +58 -0
- package/lib/utils/git-commands.js.map +1 -0
- package/lib/utils/git-errors.d.ts +76 -0
- package/lib/utils/git-errors.d.ts.map +1 -0
- package/lib/utils/git-errors.js +565 -0
- package/lib/utils/git-errors.js.map +1 -0
- package/lib/utils/git.d.ts +61 -0
- package/lib/utils/git.d.ts.map +1 -0
- package/lib/utils/git.js +245 -0
- package/lib/utils/git.js.map +1 -0
- package/lib/utils/logging.d.ts +25 -0
- package/lib/utils/logging.d.ts.map +1 -0
- package/lib/utils/logging.js +71 -0
- package/lib/utils/logging.js.map +1 -0
- package/lib/utils/menu-builders.d.ts +47 -0
- package/lib/utils/menu-builders.d.ts.map +1 -0
- package/lib/utils/menu-builders.js +34 -0
- package/lib/utils/menu-builders.js.map +1 -0
- package/lib/utils/platform.d.ts +13 -0
- package/lib/utils/platform.d.ts.map +1 -0
- package/lib/utils/platform.js +32 -0
- package/lib/utils/platform.js.map +1 -0
- package/lib/utils/spinner-wrapper.d.ts +16 -0
- package/lib/utils/spinner-wrapper.d.ts.map +1 -0
- package/lib/utils/spinner-wrapper.js +56 -0
- package/lib/utils/spinner-wrapper.js.map +1 -0
- package/lib/utils/state.d.ts +22 -0
- package/lib/utils/state.d.ts.map +1 -0
- package/lib/utils/state.js +75 -0
- package/lib/utils/state.js.map +1 -0
- package/lib/utils/time.d.ts +4 -0
- package/lib/utils/time.d.ts.map +1 -0
- package/lib/utils/time.js +29 -0
- package/lib/utils/time.js.map +1 -0
- package/lib/utils/type-guards.d.ts +10 -0
- package/lib/utils/type-guards.d.ts.map +1 -0
- package/lib/utils/type-guards.js +29 -0
- package/lib/utils/type-guards.js.map +1 -0
- package/lib/workflows/ai-provider.d.ts +13 -0
- package/lib/workflows/ai-provider.d.ts.map +1 -0
- package/lib/workflows/ai-provider.js +55 -0
- package/lib/workflows/ai-provider.js.map +1 -0
- package/lib/workflows/author.d.ts +4 -0
- package/lib/workflows/author.d.ts.map +1 -0
- package/lib/workflows/author.js +80 -0
- package/lib/workflows/author.js.map +1 -0
- package/lib/workflows/branch-helpers.d.ts +9 -0
- package/lib/workflows/branch-helpers.d.ts.map +1 -0
- package/lib/workflows/branch-helpers.js +406 -0
- package/lib/workflows/branch-helpers.js.map +1 -0
- package/lib/workflows/branch-utils.d.ts +9 -0
- package/lib/workflows/branch-utils.d.ts.map +1 -0
- package/lib/workflows/branch-utils.js +61 -0
- package/lib/workflows/branch-utils.js.map +1 -0
- package/lib/workflows/branch.d.ts +12 -0
- package/lib/workflows/branch.d.ts.map +1 -0
- package/lib/workflows/branch.js +555 -0
- package/lib/workflows/branch.js.map +1 -0
- package/lib/workflows/cleanup.d.ts +10 -0
- package/lib/workflows/cleanup.d.ts.map +1 -0
- package/lib/workflows/cleanup.js +287 -0
- package/lib/workflows/cleanup.js.map +1 -0
- package/lib/workflows/commit.d.ts +10 -0
- package/lib/workflows/commit.d.ts.map +1 -0
- package/lib/workflows/commit.js +771 -0
- package/lib/workflows/commit.js.map +1 -0
- package/lib/workflows/main-steps.d.ts +12 -0
- package/lib/workflows/main-steps.d.ts.map +1 -0
- package/lib/workflows/main-steps.js +407 -0
- package/lib/workflows/main-steps.js.map +1 -0
- package/lib/workflows/main.d.ts +8 -0
- package/lib/workflows/main.d.ts.map +1 -0
- package/lib/workflows/main.js +720 -0
- package/lib/workflows/main.js.map +1 -0
- package/lib/workflows/security-gate.d.ts +8 -0
- package/lib/workflows/security-gate.d.ts.map +1 -0
- package/lib/workflows/security-gate.js +447 -0
- package/lib/workflows/security-gate.js.map +1 -0
- package/lib/workflows/settings.d.ts +15 -0
- package/lib/workflows/settings.d.ts.map +1 -0
- package/lib/workflows/settings.js +438 -0
- package/lib/workflows/settings.js.map +1 -0
- package/lib/workflows/trello-menu.d.ts +16 -0
- package/lib/workflows/trello-menu.d.ts.map +1 -0
- package/lib/workflows/trello-menu.js +361 -0
- package/lib/workflows/trello-menu.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branch creation workflow - handles AI-powered branch naming
|
|
3
|
+
*/
|
|
4
|
+
import { handleTrelloCase } from './branch-helpers.js';
|
|
5
|
+
import { createBranch, promptManualBranch } from './branch-utils.js';
|
|
6
|
+
import { askQuestion, confirm } from '../cli/input.js';
|
|
7
|
+
import { select } from '../cli/menu.js';
|
|
8
|
+
import { STEP } from '../core/constants.js';
|
|
9
|
+
import { DEFAULT_GEMINI_MODEL, getBranchStrategyConfig, saveBranchStrategyConfig, } from '../utils/config.js';
|
|
10
|
+
import { exec, execGit } from '../utils/exec.js';
|
|
11
|
+
import { getBranchPrefix, getChangedFiles, handleBranchNaming, interactiveAIFallback, isContextLimitFailure, } from '../utils/git.js';
|
|
12
|
+
import { log } from '../utils/logging.js';
|
|
13
|
+
import { saveState } from '../utils/state.js';
|
|
14
|
+
export const handleBranchCreationWorkflow = async (state, opts) => {
|
|
15
|
+
if (!opts?.suppressStep) {
|
|
16
|
+
log.step('Step 2: Create Branch');
|
|
17
|
+
}
|
|
18
|
+
const defaultPrefix = getBranchPrefix(state.currentBranch);
|
|
19
|
+
let createNewBranch;
|
|
20
|
+
if (opts?.suppressConfirm) {
|
|
21
|
+
createNewBranch = true;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log('');
|
|
25
|
+
createNewBranch = confirm('Create new branch?');
|
|
26
|
+
}
|
|
27
|
+
// Initialize variables that need to be accessible throughout the function
|
|
28
|
+
let branchConfig = getBranchStrategyConfig();
|
|
29
|
+
let separator = branchConfig?.separator ?? '-';
|
|
30
|
+
let selectedNamingStrategy = 'ai';
|
|
31
|
+
const selectedTrelloList = '';
|
|
32
|
+
let workingBranch = '';
|
|
33
|
+
let wasCreated = false;
|
|
34
|
+
if (createNewBranch) {
|
|
35
|
+
// Check if separator is configured, if not, prompt user to choose
|
|
36
|
+
if (!branchConfig?.separator) {
|
|
37
|
+
log.info('Please choose your preferred branch name separator:\n');
|
|
38
|
+
// Offer an automatic detection option based on existing branch history.
|
|
39
|
+
let preDetectedSeparator;
|
|
40
|
+
try {
|
|
41
|
+
// Gather branch names from refs
|
|
42
|
+
const localAndRemote = exec('git for-each-ref --format="%(refname:short)" refs/heads refs/remotes', true);
|
|
43
|
+
const merged = exec('git for-each-ref --format="%(refname:short)" --merged HEAD refs/heads refs/remotes', true);
|
|
44
|
+
const combined = `${localAndRemote}\n${merged}`;
|
|
45
|
+
const branches = [
|
|
46
|
+
...new Set(combined
|
|
47
|
+
.split(/\r?\n/)
|
|
48
|
+
.map((b) => b.trim())
|
|
49
|
+
.filter(Boolean)),
|
|
50
|
+
];
|
|
51
|
+
// Detect separator by scanning existing branch names
|
|
52
|
+
let hyphenCount = 0;
|
|
53
|
+
let underscoreCount = 0;
|
|
54
|
+
let hyphenBranchCount = 0;
|
|
55
|
+
let underscoreBranchCount = 0;
|
|
56
|
+
for (const b of branches) {
|
|
57
|
+
const short = b.split('/').pop() ?? b;
|
|
58
|
+
const hasHyphen = /-/.test(short);
|
|
59
|
+
const hasUnderscore = /_/.test(short);
|
|
60
|
+
if (hasHyphen) {
|
|
61
|
+
hyphenBranchCount++;
|
|
62
|
+
}
|
|
63
|
+
if (hasUnderscore) {
|
|
64
|
+
underscoreBranchCount++;
|
|
65
|
+
}
|
|
66
|
+
hyphenCount += (short.match(/-/g) ?? []).length;
|
|
67
|
+
underscoreCount += (short.match(/_/g) ?? []).length;
|
|
68
|
+
}
|
|
69
|
+
if (hyphenBranchCount > underscoreBranchCount) {
|
|
70
|
+
preDetectedSeparator = '-';
|
|
71
|
+
}
|
|
72
|
+
else if (underscoreBranchCount > hyphenBranchCount) {
|
|
73
|
+
preDetectedSeparator = '_';
|
|
74
|
+
}
|
|
75
|
+
else if (hyphenCount > underscoreCount) {
|
|
76
|
+
preDetectedSeparator = '-';
|
|
77
|
+
}
|
|
78
|
+
else if (underscoreCount > hyphenCount) {
|
|
79
|
+
preDetectedSeparator = '_';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// ignore detection errors and fall back to prompt
|
|
84
|
+
}
|
|
85
|
+
const baseOptions = [
|
|
86
|
+
{ label: 'Kebab-case (hyphen): my-branch-name', value: 'kebab' },
|
|
87
|
+
{ label: 'Snake_case (underscore): my_branch_name', value: 'snake' },
|
|
88
|
+
];
|
|
89
|
+
// Build separator options (detected first)
|
|
90
|
+
let sepOptions = [];
|
|
91
|
+
if (preDetectedSeparator) {
|
|
92
|
+
const label = preDetectedSeparator === '-' ? 'Kebab-case (-)' : 'Snake_case (_)';
|
|
93
|
+
sepOptions.push({ label: `Use detected: ${label}`, value: 'detected' });
|
|
94
|
+
}
|
|
95
|
+
sepOptions = [...sepOptions, ...baseOptions];
|
|
96
|
+
// Ask user to choose: use detected (if available) or manual options
|
|
97
|
+
const separatorChoice = await select('Choose branch name separator:', sepOptions);
|
|
98
|
+
if (separatorChoice === 'detected' && preDetectedSeparator) {
|
|
99
|
+
separator = preDetectedSeparator;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
separator = separatorChoice === 'kebab' ? '-' : '_';
|
|
103
|
+
}
|
|
104
|
+
// Save the separator choice
|
|
105
|
+
saveBranchStrategyConfig({
|
|
106
|
+
separator,
|
|
107
|
+
});
|
|
108
|
+
log.success(`Branch separator set to: ${separator === '-' ? 'kebab-case (-)' : 'snake_case (_)'}`);
|
|
109
|
+
}
|
|
110
|
+
// Reload config after potential save
|
|
111
|
+
branchConfig = getBranchStrategyConfig();
|
|
112
|
+
// Outer loop for entire branch creation flow (allows going back from any step)
|
|
113
|
+
let branchFlowComplete = false;
|
|
114
|
+
let branchMenuShown = false; // Track if branch naming menu has been shown
|
|
115
|
+
while (!branchFlowComplete) {
|
|
116
|
+
// Branch naming menu (separator already selected above)
|
|
117
|
+
if (!branchMenuShown) {
|
|
118
|
+
while (!branchMenuShown) {
|
|
119
|
+
// Now show branch naming strategy menu
|
|
120
|
+
const branchChoice = await select('Branch naming:', [
|
|
121
|
+
{ label: 'Link to Trello Card', value: 'trello' },
|
|
122
|
+
{ label: 'Generate with AI', value: 'ai' },
|
|
123
|
+
{ label: 'Enter custom name', value: 'custom' },
|
|
124
|
+
{ label: 'Cancel', value: 'cancel' },
|
|
125
|
+
]);
|
|
126
|
+
if (branchChoice === 'cancel') {
|
|
127
|
+
log.warn('Branch creation cancelled.');
|
|
128
|
+
process.exit(0);
|
|
129
|
+
}
|
|
130
|
+
branchMenuShown = true;
|
|
131
|
+
switch (branchChoice) {
|
|
132
|
+
case 'trello': {
|
|
133
|
+
const trelloResult = await handleTrelloCase(state, branchConfig, separator, defaultPrefix);
|
|
134
|
+
if (trelloResult.branchFlowComplete && trelloResult.workingBranch) {
|
|
135
|
+
selectedNamingStrategy =
|
|
136
|
+
trelloResult.selectedNamingStrategy ?? selectedNamingStrategy;
|
|
137
|
+
workingBranch = trelloResult.workingBranch;
|
|
138
|
+
state.workingBranch = workingBranch;
|
|
139
|
+
state.currentBranch = workingBranch;
|
|
140
|
+
wasCreated = true;
|
|
141
|
+
state.step = STEP.BRANCH_CREATED;
|
|
142
|
+
saveState(state);
|
|
143
|
+
branchFlowComplete = true;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
branchMenuShown = trelloResult.branchMenuShown;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case 'ai': {
|
|
152
|
+
// Use AI branch naming
|
|
153
|
+
let selectedModel;
|
|
154
|
+
let providerToUse;
|
|
155
|
+
// If user previously chose manual, ask which AI provider to use now
|
|
156
|
+
if (!state.aiProvider || state.aiProvider === 'manual') {
|
|
157
|
+
const prov = await select('Choose AI provider for branch generation:', [
|
|
158
|
+
{ label: 'Gemini', value: 'gemini' },
|
|
159
|
+
{ label: 'GitHub Copilot (Recommended)', value: 'copilot' },
|
|
160
|
+
{ label: 'OpenRouter', value: 'openrouter' },
|
|
161
|
+
{ label: 'Back to suggested branch selection', value: 'cancel-prov' },
|
|
162
|
+
]);
|
|
163
|
+
if (prov === 'cancel-prov') {
|
|
164
|
+
branchMenuShown = false;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
providerToUse = prov;
|
|
168
|
+
// Ensure provider is ready (skip check for manual since user chose an AI provider)
|
|
169
|
+
const { ensureAIProvider } = await import('../core/setup.js');
|
|
170
|
+
const ready = await ensureAIProvider(providerToUse);
|
|
171
|
+
if (!ready) {
|
|
172
|
+
branchMenuShown = false;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
state.aiProvider = providerToUse;
|
|
176
|
+
saveState(state);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
providerToUse = state.aiProvider;
|
|
180
|
+
}
|
|
181
|
+
// Ensure state reflects the provider we'll use for generation
|
|
182
|
+
state.aiProvider = providerToUse;
|
|
183
|
+
saveState(state);
|
|
184
|
+
switch (providerToUse) {
|
|
185
|
+
case 'copilot': {
|
|
186
|
+
selectedModel = state.copilotModel;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'openrouter': {
|
|
190
|
+
selectedModel = state.openrouterModel;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case 'gemini': {
|
|
194
|
+
selectedModel = state.geminiModel;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
// No default
|
|
198
|
+
}
|
|
199
|
+
let correction = '';
|
|
200
|
+
const namingResult = await handleBranchNaming(defaultPrefix, separator, '', // trelloCardId
|
|
201
|
+
state.currentBranch, providerToUse, selectedModel, (provider, model) => {
|
|
202
|
+
state.aiProvider = provider;
|
|
203
|
+
switch (provider) {
|
|
204
|
+
case 'copilot': {
|
|
205
|
+
state.copilotModel = model;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case 'openrouter': {
|
|
209
|
+
state.openrouterModel = model;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
case 'gemini': {
|
|
213
|
+
state.geminiModel = model;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
// No default
|
|
217
|
+
}
|
|
218
|
+
saveState(state);
|
|
219
|
+
});
|
|
220
|
+
if (namingResult.cancelled) {
|
|
221
|
+
log.warn('Branch creation cancelled.');
|
|
222
|
+
process.exit(0);
|
|
223
|
+
}
|
|
224
|
+
if (namingResult.shouldRestart) {
|
|
225
|
+
branchMenuShown = false;
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
else if (namingResult.workingBranch) {
|
|
229
|
+
workingBranch = namingResult.workingBranch;
|
|
230
|
+
selectedNamingStrategy = 'ai';
|
|
231
|
+
state.workingBranch = workingBranch;
|
|
232
|
+
state.currentBranch = workingBranch;
|
|
233
|
+
wasCreated = true;
|
|
234
|
+
state.step = STEP.BRANCH_CREATED;
|
|
235
|
+
saveState(state);
|
|
236
|
+
branchFlowComplete = true;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// AI failed — try interactive fallback first, then manual
|
|
240
|
+
log.warn('AI generation failed. Trying interactive fallback...');
|
|
241
|
+
let diff = execGit('git diff --cached', true);
|
|
242
|
+
if (!diff?.trim()) {
|
|
243
|
+
const changedFiles = getChangedFiles();
|
|
244
|
+
if (changedFiles.length === 0) {
|
|
245
|
+
log.warn('No changes found. Cannot generate a branch name. Aborting.');
|
|
246
|
+
process.exit(0);
|
|
247
|
+
}
|
|
248
|
+
const stageChoice = (await select('What to stage?', [
|
|
249
|
+
{ label: 'Stage all changes', value: 'all' },
|
|
250
|
+
{ label: 'Already staged', value: 'skip' },
|
|
251
|
+
{ label: 'Continue without staging', value: 'without' },
|
|
252
|
+
{ label: 'Cancel', value: 'cancel' },
|
|
253
|
+
]));
|
|
254
|
+
switch (stageChoice) {
|
|
255
|
+
case 'all': {
|
|
256
|
+
exec('git add -A');
|
|
257
|
+
log.success('All changes staged');
|
|
258
|
+
diff = execGit('git diff --cached', true);
|
|
259
|
+
if (!diff?.trim()) {
|
|
260
|
+
log.error('Still no staged changes after staging. Aborting.');
|
|
261
|
+
process.exit(0);
|
|
262
|
+
}
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
case 'without':
|
|
266
|
+
case 'cancel': {
|
|
267
|
+
log.warn('Cancelled.');
|
|
268
|
+
process.exit(0);
|
|
269
|
+
}
|
|
270
|
+
case 'skip': {
|
|
271
|
+
diff = execGit('git diff --cached', true);
|
|
272
|
+
if (!diff?.trim()) {
|
|
273
|
+
log.error('No staged changes found. Aborting.');
|
|
274
|
+
process.exit(0);
|
|
275
|
+
}
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
const aiSuffix = await interactiveAIFallback(null, providerToUse, selectedModel ?? state.geminiModel ?? DEFAULT_GEMINI_MODEL, diff, correction, state.currentBranch, (provider, model) => {
|
|
281
|
+
state.aiProvider = provider;
|
|
282
|
+
switch (provider) {
|
|
283
|
+
case 'copilot': {
|
|
284
|
+
state.copilotModel = model;
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case 'openrouter': {
|
|
288
|
+
state.openrouterModel = model;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
case 'gemini': {
|
|
292
|
+
state.geminiModel = model;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
// No default
|
|
296
|
+
}
|
|
297
|
+
saveState(state);
|
|
298
|
+
});
|
|
299
|
+
if (aiSuffix) {
|
|
300
|
+
// If the AI returned a context/token-limit failure message, don't use it as a branch name.
|
|
301
|
+
if (isContextLimitFailure(aiSuffix)) {
|
|
302
|
+
log.error('Selected model cannot handle this input due to token/context limits. Please choose a different model or provider.');
|
|
303
|
+
// Reset menu so user can pick a different provider/model or manual input
|
|
304
|
+
branchMenuShown = false;
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
const tmp = aiSuffix
|
|
308
|
+
.replaceAll(/[^A-Za-z0-9]+/g, separator)
|
|
309
|
+
.replaceAll(/[-_]+/g, separator)
|
|
310
|
+
.toLowerCase();
|
|
311
|
+
let cleanSuffix = tmp;
|
|
312
|
+
while (cleanSuffix.startsWith(separator)) {
|
|
313
|
+
cleanSuffix = cleanSuffix.slice(separator.length);
|
|
314
|
+
}
|
|
315
|
+
while (cleanSuffix.endsWith(separator)) {
|
|
316
|
+
cleanSuffix = cleanSuffix.slice(0, -separator.length);
|
|
317
|
+
}
|
|
318
|
+
workingBranch = `${defaultPrefix}${cleanSuffix}`;
|
|
319
|
+
// Create the branch
|
|
320
|
+
if (await createBranch(workingBranch, state.currentBranch)) {
|
|
321
|
+
selectedNamingStrategy = 'ai';
|
|
322
|
+
state.workingBranch = workingBranch;
|
|
323
|
+
state.currentBranch = workingBranch;
|
|
324
|
+
wasCreated = true;
|
|
325
|
+
state.step = STEP.BRANCH_CREATED;
|
|
326
|
+
saveState(state);
|
|
327
|
+
branchFlowComplete = true;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// If creation failed because branch exists, offer explicit actions
|
|
331
|
+
const { select: dynamicSelect } = await import('../cli/menu.js');
|
|
332
|
+
const choice = await dynamicSelect(`Branch '${workingBranch}' already exists. What would you like to do?`, [
|
|
333
|
+
{ label: 'Regenerate branch name', value: 'regenerate' },
|
|
334
|
+
{ label: 'Change model', value: 'change-model' },
|
|
335
|
+
{ label: 'Change AI provider', value: 'change-provider' },
|
|
336
|
+
{ label: 'Edit branch name manually', value: 'edit' },
|
|
337
|
+
{ label: 'Back to branch menu', value: 'back' },
|
|
338
|
+
]);
|
|
339
|
+
switch (choice) {
|
|
340
|
+
case 'regenerate': {
|
|
341
|
+
correction = '';
|
|
342
|
+
branchMenuShown = false;
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
case 'change-model': {
|
|
346
|
+
const currentProv = state.aiProvider ?? 'gemini';
|
|
347
|
+
if (currentProv === 'copilot') {
|
|
348
|
+
const cop = await import('../api/copilot.js');
|
|
349
|
+
const models = await cop.getCopilotModels();
|
|
350
|
+
const copOptions = models.some((m) => m.value === 'back')
|
|
351
|
+
? models
|
|
352
|
+
: [
|
|
353
|
+
...models,
|
|
354
|
+
{ label: 'Back to suggested branch selection', value: 'back' },
|
|
355
|
+
];
|
|
356
|
+
const chosen = await select('Choose Copilot model:', copOptions);
|
|
357
|
+
if (chosen === 'back') {
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
state.copilotModel = chosen;
|
|
361
|
+
}
|
|
362
|
+
else if (currentProv === 'openrouter') {
|
|
363
|
+
const or = await import('../api/openrouter.js');
|
|
364
|
+
const models = await or.getOpenRouterModels();
|
|
365
|
+
const orOptions = models.some((m) => m.value === 'back')
|
|
366
|
+
? models
|
|
367
|
+
: [
|
|
368
|
+
...models,
|
|
369
|
+
{ label: 'Back to suggested branch selection', value: 'back' },
|
|
370
|
+
];
|
|
371
|
+
const chosen = await select('Choose OpenRouter model:', orOptions);
|
|
372
|
+
if (chosen === 'back') {
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
state.openrouterModel = chosen;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
const gm = await import('../api/gemini.js');
|
|
379
|
+
const models = await gm.getGeminiModels();
|
|
380
|
+
const gmOptions = models.some((m) => m.value === 'back')
|
|
381
|
+
? models
|
|
382
|
+
: [
|
|
383
|
+
...models,
|
|
384
|
+
{ label: 'Back to suggested branch selection', value: 'back' },
|
|
385
|
+
];
|
|
386
|
+
const chosen = await select('Choose Gemini model:', gmOptions);
|
|
387
|
+
if (chosen === 'back') {
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
state.geminiModel = chosen;
|
|
391
|
+
}
|
|
392
|
+
saveState(state);
|
|
393
|
+
branchMenuShown = false;
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
case 'change-provider': {
|
|
397
|
+
const prov = await select('Choose AI provider:', [
|
|
398
|
+
{ label: 'Gemini', value: 'gemini' },
|
|
399
|
+
{ label: 'GitHub Copilot (Recommended)', value: 'copilot' },
|
|
400
|
+
{ label: 'OpenRouter', value: 'openrouter' },
|
|
401
|
+
{ label: 'Back to suggested branch selection', value: 'cancel-prov' },
|
|
402
|
+
]);
|
|
403
|
+
if (prov === 'cancel-prov') {
|
|
404
|
+
// Return to branch menu without forcing regeneration
|
|
405
|
+
branchMenuShown = false;
|
|
406
|
+
continue;
|
|
407
|
+
}
|
|
408
|
+
// Use centralized helper to choose model for the provider
|
|
409
|
+
const { chooseModelForProvider } = await import('../utils/git-ai.js');
|
|
410
|
+
const chosen = await chooseModelForProvider(prov, 'Choose model:', 'Back to suggested branch selection');
|
|
411
|
+
if (!chosen) {
|
|
412
|
+
// setup failed or cancelled
|
|
413
|
+
continue;
|
|
414
|
+
}
|
|
415
|
+
if (chosen === 'back') {
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
state.aiProvider = prov;
|
|
419
|
+
switch (prov) {
|
|
420
|
+
case 'copilot': {
|
|
421
|
+
state.copilotModel = chosen;
|
|
422
|
+
state.openrouterModel = undefined;
|
|
423
|
+
state.geminiModel = undefined;
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
426
|
+
case 'openrouter': {
|
|
427
|
+
state.openrouterModel = chosen;
|
|
428
|
+
state.copilotModel = undefined;
|
|
429
|
+
state.geminiModel = undefined;
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
case 'gemini': {
|
|
433
|
+
state.geminiModel = chosen;
|
|
434
|
+
state.copilotModel = undefined;
|
|
435
|
+
state.openrouterModel = undefined;
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
default: {
|
|
439
|
+
state.geminiModel = chosen;
|
|
440
|
+
state.copilotModel = undefined;
|
|
441
|
+
state.openrouterModel = undefined;
|
|
442
|
+
break;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
saveState(state);
|
|
446
|
+
branchMenuShown = false;
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
case 'edit': {
|
|
450
|
+
const edited = askQuestion('Enter new branch name:');
|
|
451
|
+
if (!edited) {
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
workingBranch = edited;
|
|
455
|
+
if (await createBranch(workingBranch, state.currentBranch)) {
|
|
456
|
+
selectedNamingStrategy = 'manual';
|
|
457
|
+
state.workingBranch = workingBranch;
|
|
458
|
+
state.currentBranch = workingBranch;
|
|
459
|
+
wasCreated = true;
|
|
460
|
+
state.step = STEP.BRANCH_CREATED;
|
|
461
|
+
saveState(state);
|
|
462
|
+
branchFlowComplete = true;
|
|
463
|
+
}
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
case 'back': {
|
|
467
|
+
branchMenuShown = false;
|
|
468
|
+
continue;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
// Fallback to manual input
|
|
475
|
+
workingBranch = promptManualBranch(state.currentBranch);
|
|
476
|
+
if (await createBranch(workingBranch, state.currentBranch)) {
|
|
477
|
+
selectedNamingStrategy = 'manual';
|
|
478
|
+
state.workingBranch = workingBranch;
|
|
479
|
+
wasCreated = true;
|
|
480
|
+
state.step = STEP.BRANCH_CREATED;
|
|
481
|
+
saveState(state);
|
|
482
|
+
branchFlowComplete = true;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
case 'custom': {
|
|
489
|
+
workingBranch = promptManualBranch(state.currentBranch);
|
|
490
|
+
if (await createBranch(workingBranch, state.currentBranch)) {
|
|
491
|
+
selectedNamingStrategy = 'manual';
|
|
492
|
+
state.workingBranch = workingBranch;
|
|
493
|
+
wasCreated = true;
|
|
494
|
+
state.step = STEP.BRANCH_CREATED;
|
|
495
|
+
saveState(state);
|
|
496
|
+
branchFlowComplete = true;
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
// If creation failed for some reason, return to branch menu
|
|
500
|
+
branchMenuShown = false;
|
|
501
|
+
continue;
|
|
502
|
+
}
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
break; // Exit separator loop
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
else {
|
|
512
|
+
// User chose not to create a new branch — ask what to do next
|
|
513
|
+
const choice = await select('You chose not to create a new branch. What would you like to do?', [
|
|
514
|
+
{ label: 'Step 3: Commit', value: 'commit' },
|
|
515
|
+
{ label: 'Step 5: Merge to Target Branch', value: 'merge' },
|
|
516
|
+
{ label: 'Cancel', value: 'cancel' },
|
|
517
|
+
]);
|
|
518
|
+
if (choice === 'cancel') {
|
|
519
|
+
log.warn('Cancelled.');
|
|
520
|
+
process.exit(0);
|
|
521
|
+
}
|
|
522
|
+
if (choice === 'merge') {
|
|
523
|
+
// Skip commit and push steps; proceed straight to merge
|
|
524
|
+
state.step = STEP.PUSHED;
|
|
525
|
+
state.skippedCommit = true;
|
|
526
|
+
state.skippedPush = true;
|
|
527
|
+
saveState(state);
|
|
528
|
+
log.info('Skipping commit and push; will proceed directly to merge');
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
// User chose to proceed to commit on the current branch — mark branch step as complete
|
|
532
|
+
state.step = STEP.BRANCH_CREATED;
|
|
533
|
+
// Ensure workingBranch reflects current branch
|
|
534
|
+
state.workingBranch = state.currentBranch;
|
|
535
|
+
saveState(state);
|
|
536
|
+
log.info('Proceeding to commit on current branch');
|
|
537
|
+
}
|
|
538
|
+
workingBranch = state.currentBranch;
|
|
539
|
+
log.info(`Using current branch: ${workingBranch}`);
|
|
540
|
+
}
|
|
541
|
+
// Only mark branch creation step complete if a branch was actually created
|
|
542
|
+
if (workingBranch && wasCreated && state.step < STEP.BRANCH_CREATED) {
|
|
543
|
+
state.step = STEP.BRANCH_CREATED;
|
|
544
|
+
state.currentBranch = workingBranch;
|
|
545
|
+
}
|
|
546
|
+
saveState(state);
|
|
547
|
+
// Save branch strategy config
|
|
548
|
+
saveBranchStrategyConfig({
|
|
549
|
+
separator: separator ?? branchConfig?.separator ?? '-',
|
|
550
|
+
lastNamingStrategy: selectedNamingStrategy,
|
|
551
|
+
lastTrelloList: selectedTrelloList ?? branchConfig?.lastTrelloList,
|
|
552
|
+
});
|
|
553
|
+
return { branchName: workingBranch ?? state.currentBranch, created: !!wasCreated };
|
|
554
|
+
};
|
|
555
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/workflows/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive branch cleanup workflow
|
|
3
|
+
* Allows users to select and delete local and remote branches
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Interactive branch cleanup
|
|
7
|
+
* Allows users to select and delete local and remote branches
|
|
8
|
+
*/
|
|
9
|
+
export declare const handleInteractiveCleanup: () => void;
|
|
10
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/workflows/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmGH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAO,IA6N3C,CAAA"}
|