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.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/lib/api/copilot-adapter.d.ts +11 -0
  4. package/lib/api/copilot-adapter.d.ts.map +1 -0
  5. package/lib/api/copilot-adapter.js +41 -0
  6. package/lib/api/copilot-adapter.js.map +1 -0
  7. package/lib/api/copilot-sdk.d.ts +48 -0
  8. package/lib/api/copilot-sdk.d.ts.map +1 -0
  9. package/lib/api/copilot-sdk.js +451 -0
  10. package/lib/api/copilot-sdk.js.map +1 -0
  11. package/lib/api/copilot.d.ts +21 -0
  12. package/lib/api/copilot.d.ts.map +1 -0
  13. package/lib/api/copilot.js +87 -0
  14. package/lib/api/copilot.js.map +1 -0
  15. package/lib/api/gemini-sdk.d.ts +24 -0
  16. package/lib/api/gemini-sdk.d.ts.map +1 -0
  17. package/lib/api/gemini-sdk.js +245 -0
  18. package/lib/api/gemini-sdk.js.map +1 -0
  19. package/lib/api/gemini.d.ts +21 -0
  20. package/lib/api/gemini.d.ts.map +1 -0
  21. package/lib/api/gemini.js +87 -0
  22. package/lib/api/gemini.js.map +1 -0
  23. package/lib/api/openrouter-sdk.d.ts +58 -0
  24. package/lib/api/openrouter-sdk.d.ts.map +1 -0
  25. package/lib/api/openrouter-sdk.js +341 -0
  26. package/lib/api/openrouter-sdk.js.map +1 -0
  27. package/lib/api/openrouter.d.ts +17 -0
  28. package/lib/api/openrouter.d.ts.map +1 -0
  29. package/lib/api/openrouter.js +111 -0
  30. package/lib/api/openrouter.js.map +1 -0
  31. package/lib/api/trello.d.ts +17 -0
  32. package/lib/api/trello.d.ts.map +1 -0
  33. package/lib/api/trello.js +72 -0
  34. package/lib/api/trello.js.map +1 -0
  35. package/lib/cli/input.d.ts +39 -0
  36. package/lib/cli/input.d.ts.map +1 -0
  37. package/lib/cli/input.js +119 -0
  38. package/lib/cli/input.js.map +1 -0
  39. package/lib/cli/menu.d.ts +9 -0
  40. package/lib/cli/menu.d.ts.map +1 -0
  41. package/lib/cli/menu.js +201 -0
  42. package/lib/cli/menu.js.map +1 -0
  43. package/lib/core/constants.d.ts +22 -0
  44. package/lib/core/constants.d.ts.map +1 -0
  45. package/lib/core/constants.js +24 -0
  46. package/lib/core/constants.js.map +1 -0
  47. package/lib/core/copilot-setup.d.ts +13 -0
  48. package/lib/core/copilot-setup.d.ts.map +1 -0
  49. package/lib/core/copilot-setup.js +447 -0
  50. package/lib/core/copilot-setup.js.map +1 -0
  51. package/lib/core/gemini-setup.d.ts +8 -0
  52. package/lib/core/gemini-setup.d.ts.map +1 -0
  53. package/lib/core/gemini-setup.js +84 -0
  54. package/lib/core/gemini-setup.js.map +1 -0
  55. package/lib/core/menu-constants.d.ts +24 -0
  56. package/lib/core/menu-constants.d.ts.map +1 -0
  57. package/lib/core/menu-constants.js +22 -0
  58. package/lib/core/menu-constants.js.map +1 -0
  59. package/lib/core/openrouter-setup.d.ts +8 -0
  60. package/lib/core/openrouter-setup.d.ts.map +1 -0
  61. package/lib/core/openrouter-setup.js +73 -0
  62. package/lib/core/openrouter-setup.js.map +1 -0
  63. package/lib/core/setup.d.ts +21 -0
  64. package/lib/core/setup.d.ts.map +1 -0
  65. package/lib/core/setup.js +88 -0
  66. package/lib/core/setup.js.map +1 -0
  67. package/lib/core/trello-setup.d.ts +8 -0
  68. package/lib/core/trello-setup.d.ts.map +1 -0
  69. package/lib/core/trello-setup.js +107 -0
  70. package/lib/core/trello-setup.js.map +1 -0
  71. package/lib/index.d.ts +3 -0
  72. package/lib/index.d.ts.map +1 -0
  73. package/lib/index.js +250 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/types/index.d.ts +78 -0
  76. package/lib/types/index.d.ts.map +1 -0
  77. package/lib/types/index.js +2 -0
  78. package/lib/types/index.js.map +1 -0
  79. package/lib/utils/branch-naming.d.ts +11 -0
  80. package/lib/utils/branch-naming.d.ts.map +1 -0
  81. package/lib/utils/branch-naming.js +396 -0
  82. package/lib/utils/branch-naming.js.map +1 -0
  83. package/lib/utils/colors.d.ts +14 -0
  84. package/lib/utils/colors.d.ts.map +1 -0
  85. package/lib/utils/colors.js +14 -0
  86. package/lib/utils/colors.js.map +1 -0
  87. package/lib/utils/commit-helpers.d.ts +53 -0
  88. package/lib/utils/commit-helpers.d.ts.map +1 -0
  89. package/lib/utils/commit-helpers.js +177 -0
  90. package/lib/utils/commit-helpers.js.map +1 -0
  91. package/lib/utils/config.d.ts +87 -0
  92. package/lib/utils/config.d.ts.map +1 -0
  93. package/lib/utils/config.js +326 -0
  94. package/lib/utils/config.js.map +1 -0
  95. package/lib/utils/display.d.ts +27 -0
  96. package/lib/utils/display.d.ts.map +1 -0
  97. package/lib/utils/display.js +116 -0
  98. package/lib/utils/display.js.map +1 -0
  99. package/lib/utils/error-helpers.d.ts +27 -0
  100. package/lib/utils/error-helpers.d.ts.map +1 -0
  101. package/lib/utils/error-helpers.js +102 -0
  102. package/lib/utils/error-helpers.js.map +1 -0
  103. package/lib/utils/exec.d.ts +18 -0
  104. package/lib/utils/exec.d.ts.map +1 -0
  105. package/lib/utils/exec.js +96 -0
  106. package/lib/utils/exec.js.map +1 -0
  107. package/lib/utils/git-ai-errors.d.ts +10 -0
  108. package/lib/utils/git-ai-errors.d.ts.map +1 -0
  109. package/lib/utils/git-ai-errors.js +71 -0
  110. package/lib/utils/git-ai-errors.js.map +1 -0
  111. package/lib/utils/git-ai.d.ts +26 -0
  112. package/lib/utils/git-ai.d.ts.map +1 -0
  113. package/lib/utils/git-ai.js +603 -0
  114. package/lib/utils/git-ai.js.map +1 -0
  115. package/lib/utils/git-commands.d.ts +21 -0
  116. package/lib/utils/git-commands.d.ts.map +1 -0
  117. package/lib/utils/git-commands.js +58 -0
  118. package/lib/utils/git-commands.js.map +1 -0
  119. package/lib/utils/git-errors.d.ts +76 -0
  120. package/lib/utils/git-errors.d.ts.map +1 -0
  121. package/lib/utils/git-errors.js +565 -0
  122. package/lib/utils/git-errors.js.map +1 -0
  123. package/lib/utils/git.d.ts +61 -0
  124. package/lib/utils/git.d.ts.map +1 -0
  125. package/lib/utils/git.js +245 -0
  126. package/lib/utils/git.js.map +1 -0
  127. package/lib/utils/logging.d.ts +25 -0
  128. package/lib/utils/logging.d.ts.map +1 -0
  129. package/lib/utils/logging.js +71 -0
  130. package/lib/utils/logging.js.map +1 -0
  131. package/lib/utils/menu-builders.d.ts +47 -0
  132. package/lib/utils/menu-builders.d.ts.map +1 -0
  133. package/lib/utils/menu-builders.js +34 -0
  134. package/lib/utils/menu-builders.js.map +1 -0
  135. package/lib/utils/platform.d.ts +13 -0
  136. package/lib/utils/platform.d.ts.map +1 -0
  137. package/lib/utils/platform.js +32 -0
  138. package/lib/utils/platform.js.map +1 -0
  139. package/lib/utils/spinner-wrapper.d.ts +16 -0
  140. package/lib/utils/spinner-wrapper.d.ts.map +1 -0
  141. package/lib/utils/spinner-wrapper.js +56 -0
  142. package/lib/utils/spinner-wrapper.js.map +1 -0
  143. package/lib/utils/state.d.ts +22 -0
  144. package/lib/utils/state.d.ts.map +1 -0
  145. package/lib/utils/state.js +75 -0
  146. package/lib/utils/state.js.map +1 -0
  147. package/lib/utils/time.d.ts +4 -0
  148. package/lib/utils/time.d.ts.map +1 -0
  149. package/lib/utils/time.js +29 -0
  150. package/lib/utils/time.js.map +1 -0
  151. package/lib/utils/type-guards.d.ts +10 -0
  152. package/lib/utils/type-guards.d.ts.map +1 -0
  153. package/lib/utils/type-guards.js +29 -0
  154. package/lib/utils/type-guards.js.map +1 -0
  155. package/lib/workflows/ai-provider.d.ts +13 -0
  156. package/lib/workflows/ai-provider.d.ts.map +1 -0
  157. package/lib/workflows/ai-provider.js +55 -0
  158. package/lib/workflows/ai-provider.js.map +1 -0
  159. package/lib/workflows/author.d.ts +4 -0
  160. package/lib/workflows/author.d.ts.map +1 -0
  161. package/lib/workflows/author.js +80 -0
  162. package/lib/workflows/author.js.map +1 -0
  163. package/lib/workflows/branch-helpers.d.ts +9 -0
  164. package/lib/workflows/branch-helpers.d.ts.map +1 -0
  165. package/lib/workflows/branch-helpers.js +406 -0
  166. package/lib/workflows/branch-helpers.js.map +1 -0
  167. package/lib/workflows/branch-utils.d.ts +9 -0
  168. package/lib/workflows/branch-utils.d.ts.map +1 -0
  169. package/lib/workflows/branch-utils.js +61 -0
  170. package/lib/workflows/branch-utils.js.map +1 -0
  171. package/lib/workflows/branch.d.ts +12 -0
  172. package/lib/workflows/branch.d.ts.map +1 -0
  173. package/lib/workflows/branch.js +555 -0
  174. package/lib/workflows/branch.js.map +1 -0
  175. package/lib/workflows/cleanup.d.ts +10 -0
  176. package/lib/workflows/cleanup.d.ts.map +1 -0
  177. package/lib/workflows/cleanup.js +287 -0
  178. package/lib/workflows/cleanup.js.map +1 -0
  179. package/lib/workflows/commit.d.ts +10 -0
  180. package/lib/workflows/commit.d.ts.map +1 -0
  181. package/lib/workflows/commit.js +771 -0
  182. package/lib/workflows/commit.js.map +1 -0
  183. package/lib/workflows/main-steps.d.ts +12 -0
  184. package/lib/workflows/main-steps.d.ts.map +1 -0
  185. package/lib/workflows/main-steps.js +407 -0
  186. package/lib/workflows/main-steps.js.map +1 -0
  187. package/lib/workflows/main.d.ts +8 -0
  188. package/lib/workflows/main.d.ts.map +1 -0
  189. package/lib/workflows/main.js +720 -0
  190. package/lib/workflows/main.js.map +1 -0
  191. package/lib/workflows/security-gate.d.ts +8 -0
  192. package/lib/workflows/security-gate.d.ts.map +1 -0
  193. package/lib/workflows/security-gate.js +447 -0
  194. package/lib/workflows/security-gate.js.map +1 -0
  195. package/lib/workflows/settings.d.ts +15 -0
  196. package/lib/workflows/settings.d.ts.map +1 -0
  197. package/lib/workflows/settings.js +438 -0
  198. package/lib/workflows/settings.js.map +1 -0
  199. package/lib/workflows/trello-menu.d.ts +16 -0
  200. package/lib/workflows/trello-menu.d.ts.map +1 -0
  201. package/lib/workflows/trello-menu.js +361 -0
  202. package/lib/workflows/trello-menu.js.map +1 -0
  203. 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":"AAAA;;GAEG;AAOH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAC/C,KAAiB,EACjB,IAA4D,EACT,EAAE;IACrD,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IAE1D,IAAI,eAAwB,CAAA;IAC5B,IAAI,IAAI,EAAE,eAAe,EAAE,CAAC;QAC1B,eAAe,GAAG,IAAI,CAAA;IACxB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACjD,CAAC;IAED,0EAA0E;IAC1E,IAAI,YAAY,GAAG,uBAAuB,EAAE,CAAA;IAC5C,IAAI,SAAS,GAAc,YAAY,EAAE,SAAS,IAAI,GAAG,CAAA;IACzD,IAAI,sBAAsB,GAAgD,IAAI,CAAA;IAC9E,MAAM,kBAAkB,GAAG,EAAE,CAAA;IAC7B,IAAI,aAAa,GAAG,EAAE,CAAA;IACtB,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,IAAI,eAAe,EAAE,CAAC;QACpB,kEAAkE;QAClE,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;YAEjE,wEAAwE;YACxE,IAAI,oBAA2C,CAAA;YAC/C,IAAI,CAAC;gBACH,gCAAgC;gBAChC,MAAM,cAAc,GAAG,IAAI,CACzB,sEAAsE,EACtE,IAAI,CACL,CAAA;gBACD,MAAM,MAAM,GAAG,IAAI,CACjB,oFAAoF,EACpF,IAAI,CACL,CAAA;gBACD,MAAM,QAAQ,GAAG,GAAG,cAAc,KAAK,MAAM,EAAE,CAAA;gBAC/C,MAAM,QAAQ,GAAG;oBACf,GAAG,IAAI,GAAG,CACR,QAAQ;yBACL,KAAK,CAAC,OAAO,CAAC;yBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;yBACpB,MAAM,CAAC,OAAO,CAAC,CACnB;iBACF,CAAA;gBACD,qDAAqD;gBACrD,IAAI,WAAW,GAAG,CAAC,CAAA;gBACnB,IAAI,eAAe,GAAG,CAAC,CAAA;gBACvB,IAAI,iBAAiB,GAAG,CAAC,CAAA;gBACzB,IAAI,qBAAqB,GAAG,CAAC,CAAA;gBAC7B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;oBACrC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBACjC,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBACrC,IAAI,SAAS,EAAE,CAAC;wBACd,iBAAiB,EAAE,CAAA;oBACrB,CAAC;oBACD,IAAI,aAAa,EAAE,CAAC;wBAClB,qBAAqB,EAAE,CAAA;oBACzB,CAAC;oBACD,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;oBAC/C,eAAe,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;gBACrD,CAAC;gBAED,IAAI,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;oBAC9C,oBAAoB,GAAG,GAAG,CAAA;gBAC5B,CAAC;qBAAM,IAAI,qBAAqB,GAAG,iBAAiB,EAAE,CAAC;oBACrD,oBAAoB,GAAG,GAAG,CAAA;gBAC5B,CAAC;qBAAM,IAAI,WAAW,GAAG,eAAe,EAAE,CAAC;oBACzC,oBAAoB,GAAG,GAAG,CAAA;gBAC5B,CAAC;qBAAM,IAAI,eAAe,GAAG,WAAW,EAAE,CAAC;oBACzC,oBAAoB,GAAG,GAAG,CAAA;gBAC5B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;YAED,MAAM,WAAW,GAAG;gBAClB,EAAE,KAAK,EAAE,qCAAqC,EAAE,KAAK,EAAE,OAAO,EAAE;gBAChE,EAAE,KAAK,EAAE,yCAAyC,EAAE,KAAK,EAAE,OAAO,EAAE;aACrE,CAAA;YAED,2CAA2C;YAC3C,IAAI,UAAU,GAA4C,EAAE,CAAA;YAE5D,IAAI,oBAAoB,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,oBAAoB,KAAK,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAA;gBAChF,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;YACzE,CAAC;YAED,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,CAAC,CAAA;YAE5C,oEAAoE;YACpE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,+BAA+B,EAAE,UAAU,CAAC,CAAA;YACjF,IAAI,eAAe,KAAK,UAAU,IAAI,oBAAoB,EAAE,CAAC;gBAC3D,SAAS,GAAG,oBAAoB,CAAA;YAClC,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YACrD,CAAC;YAED,4BAA4B;YAC5B,wBAAwB,CAAC;gBACvB,SAAS;aACV,CAAC,CAAA;YAEF,GAAG,CAAC,OAAO,CACT,4BAA4B,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CACtF,CAAA;QACH,CAAC;QAED,qCAAqC;QACrC,YAAY,GAAG,uBAAuB,EAAE,CAAA;QAExC,+EAA+E;QAC/E,IAAI,kBAAkB,GAAG,KAAK,CAAA;QAC9B,IAAI,eAAe,GAAG,KAAK,CAAA,CAAC,6CAA6C;QAEzE,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC3B,wDAAwD;YACxD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,eAAe,EAAE,CAAC;oBACxB,uCAAuC;oBACvC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE;wBAClD,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACjD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;wBAC1C,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC/C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;qBACrC,CAAC,CAAA;oBAEF,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;wBAC9B,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;wBACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACjB,CAAC;oBAED,eAAe,GAAG,IAAI,CAAA;oBAEtB,QAAQ,YAAY,EAAE,CAAC;wBACrB,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACd,MAAM,YAAY,GAAG,MAAM,gBAAgB,CACzC,KAAK,EACL,YAAY,EACZ,SAAS,EACT,aAAa,CACd,CAAA;4BACD,IAAI,YAAY,CAAC,kBAAkB,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;gCAClE,sBAAsB;oCACpB,YAAY,CAAC,sBAAsB,IAAI,sBAAsB,CAAA;gCAC/D,aAAa,GAAG,YAAY,CAAC,aAAa,CAAA;gCAC1C,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;gCACnC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;gCACnC,UAAU,GAAG,IAAI,CAAA;gCACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;gCAChC,SAAS,CAAC,KAAK,CAAC,CAAA;gCAChB,kBAAkB,GAAG,IAAI,CAAA;4BAC3B,CAAC;iCAAM,CAAC;gCACN,eAAe,GAAG,YAAY,CAAC,eAAe,CAAA;gCAC9C,SAAQ;4BACV,CAAC;4BAED,MAAK;wBACP,CAAC;wBACD,KAAK,IAAI,CAAC,CAAC,CAAC;4BACV,uBAAuB;4BACvB,IAAI,aAAuE,CAAA;4BAC3E,IAAI,aAAkD,CAAA;4BACtD,oEAAoE;4BACpE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gCACvD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,2CAA2C,EAAE;oCACrE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;oCACpC,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAS,EAAE;oCAC3D,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;oCAC5C,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,aAAa,EAAE;iCACtE,CAAC,CAAA;gCAEF,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;oCAC3B,eAAe,GAAG,KAAK,CAAA;oCACvB,SAAQ;gCACV,CAAC;gCAED,aAAa,GAAG,IAA2C,CAAA;gCAE3D,mFAAmF;gCACnF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;gCAC7D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAA;gCACnD,IAAI,CAAC,KAAK,EAAE,CAAC;oCACX,eAAe,GAAG,KAAK,CAAA;oCACvB,SAAQ;gCACV,CAAC;gCAED,KAAK,CAAC,UAAU,GAAG,aAAa,CAAA;gCAChC,SAAS,CAAC,KAAK,CAAC,CAAA;4BAClB,CAAC;iCAAM,CAAC;gCACN,aAAa,GAAG,KAAK,CAAC,UAAiD,CAAA;4BACzE,CAAC;4BACD,8DAA8D;4BAC9D,KAAK,CAAC,UAAU,GAAG,aAAa,CAAA;4BAChC,SAAS,CAAC,KAAK,CAAC,CAAA;4BAChB,QAAQ,aAAa,EAAE,CAAC;gCACtB,KAAK,SAAS,CAAC,CAAC,CAAC;oCACf,aAAa,GAAG,KAAK,CAAC,YAAY,CAAA;oCAClC,MAAK;gCACP,CAAC;gCACD,KAAK,YAAY,CAAC,CAAC,CAAC;oCAClB,aAAa,GAAG,KAAK,CAAC,eAAe,CAAA;oCACrC,MAAK;gCACP,CAAC;gCACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oCACd,aAAa,GAAG,KAAK,CAAC,WAAW,CAAA;oCACjC,MAAK;gCACP,CAAC;gCACD,aAAa;4BACf,CAAC;4BAED,IAAI,UAAU,GAAG,EAAE,CAAA;4BAEnB,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAC3C,aAAa,EACb,SAAS,EACT,EAAE,EAAE,eAAe;4BACnB,KAAK,CAAC,aAAa,EACnB,aAAa,EACb,aAAa,EACb,CAAC,QAA6C,EAAE,KAAc,EAAE,EAAE;gCAChE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAA;gCAC3B,QAAQ,QAAQ,EAAE,CAAC;oCACjB,KAAK,SAAS,CAAC,CAAC,CAAC;wCACf,KAAK,CAAC,YAAY,GAAG,KAAqB,CAAA;wCAC1C,MAAK;oCACP,CAAC;oCACD,KAAK,YAAY,CAAC,CAAC,CAAC;wCAClB,KAAK,CAAC,eAAe,GAAG,KAAwB,CAAA;wCAChD,MAAK;oCACP,CAAC;oCACD,KAAK,QAAQ,CAAC,CAAC,CAAC;wCACd,KAAK,CAAC,WAAW,GAAG,KAAoB,CAAA;wCACxC,MAAK;oCACP,CAAC;oCACD,aAAa;gCACf,CAAC;gCACD,SAAS,CAAC,KAAK,CAAC,CAAA;4BAClB,CAAC,CACF,CAAA;4BAED,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gCAC3B,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;gCACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;4BACjB,CAAC;4BAED,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;gCAC/B,eAAe,GAAG,KAAK,CAAA;gCACvB,SAAQ;4BACV,CAAC;iCAAM,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;gCACtC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAA;gCAC1C,sBAAsB,GAAG,IAAI,CAAA;gCAC7B,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;gCACnC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;gCACnC,UAAU,GAAG,IAAI,CAAA;gCACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;gCAChC,SAAS,CAAC,KAAK,CAAC,CAAA;gCAChB,kBAAkB,GAAG,IAAI,CAAA;4BAC3B,CAAC;iCAAM,CAAC;gCACN,0DAA0D;gCAC1D,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;gCAEhE,IAAI,IAAI,GAAG,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;gCAC7C,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;oCAClB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;oCACtC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wCAC9B,GAAG,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;wCACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oCACjB,CAAC;oCAED,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,EAAE;wCAClD,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE;wCAC5C,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;wCAC1C,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE;wCACvD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;qCACrC,CAAC,CAA0C,CAAA;oCAE5C,QAAQ,WAAW,EAAE,CAAC;wCACpB,KAAK,KAAK,CAAC,CAAC,CAAC;4CACX,IAAI,CAAC,YAAY,CAAC,CAAA;4CAClB,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;4CACjC,IAAI,GAAG,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;4CACzC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gDAClB,GAAG,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;gDAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;4CACjB,CAAC;4CACD,MAAK;wCACP,CAAC;wCACD,KAAK,SAAS,CAAC;wCACf,KAAK,QAAQ,CAAC,CAAC,CAAC;4CACd,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;4CACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wCACjB,CAAC;wCACD,KAAK,MAAM,CAAC,CAAC,CAAC;4CACZ,IAAI,GAAG,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;4CACzC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gDAClB,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;gDAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;4CACjB,CAAC;4CACD,MAAK;wCACP,CAAC;oCACH,CAAC;gCACH,CAAC;gCAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC1C,IAAI,EACJ,aAAa,EACb,aAAa,IAAI,KAAK,CAAC,WAAW,IAAI,oBAAoB,EAC1D,IAAI,EACJ,UAAU,EACV,KAAK,CAAC,aAAa,EACnB,CAAC,QAA6C,EAAE,KAAc,EAAE,EAAE;oCAChE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAA;oCAC3B,QAAQ,QAAQ,EAAE,CAAC;wCACjB,KAAK,SAAS,CAAC,CAAC,CAAC;4CACf,KAAK,CAAC,YAAY,GAAG,KAAqB,CAAA;4CAC1C,MAAK;wCACP,CAAC;wCACD,KAAK,YAAY,CAAC,CAAC,CAAC;4CAClB,KAAK,CAAC,eAAe,GAAG,KAAwB,CAAA;4CAChD,MAAK;wCACP,CAAC;wCACD,KAAK,QAAQ,CAAC,CAAC,CAAC;4CACd,KAAK,CAAC,WAAW,GAAG,KAAoB,CAAA;4CACxC,MAAK;wCACP,CAAC;wCACD,aAAa;oCACf,CAAC;oCACD,SAAS,CAAC,KAAK,CAAC,CAAA;gCAClB,CAAC,CACF,CAAA;gCAED,IAAI,QAAQ,EAAE,CAAC;oCACb,2FAA2F;oCAC3F,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;wCACpC,GAAG,CAAC,KAAK,CACP,mHAAmH,CACpH,CAAA;wCACD,yEAAyE;wCACzE,eAAe,GAAG,KAAK,CAAA;wCACvB,SAAQ;oCACV,CAAC;oCACD,MAAM,GAAG,GAAG,QAAQ;yCACjB,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC;yCACvC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;yCAC/B,WAAW,EAAE,CAAA;oCAEhB,IAAI,WAAW,GAAG,GAAG,CAAA;oCACrB,OAAO,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wCACzC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;oCACnD,CAAC;oCACD,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wCACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;oCACvD,CAAC;oCAED,aAAa,GAAG,GAAG,aAAa,GAAG,WAAW,EAAE,CAAA;oCAEhD,oBAAoB;oCACpB,IAAI,MAAM,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;wCAC3D,sBAAsB,GAAG,IAAI,CAAA;wCAC7B,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;wCACnC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;wCACnC,UAAU,GAAG,IAAI,CAAA;wCACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;wCAChC,SAAS,CAAC,KAAK,CAAC,CAAA;wCAChB,kBAAkB,GAAG,IAAI,CAAA;oCAC3B,CAAC;yCAAM,CAAC;wCACN,mEAAmE;wCACnE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;wCAChE,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,WAAW,aAAa,8CAA8C,EACtE;4CACE,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE;4CACxD,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;4CAChD,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,iBAAiB,EAAE;4CACzD,EAAE,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,MAAM,EAAE;4CACrD,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE;yCAChD,CACF,CAAA;wCAED,QAAQ,MAAM,EAAE,CAAC;4CACf,KAAK,YAAY,CAAC,CAAC,CAAC;gDAClB,UAAU,GAAG,EAAE,CAAA;gDACf,eAAe,GAAG,KAAK,CAAA;gDACvB,SAAQ;4CACV,CAAC;4CACD,KAAK,cAAc,CAAC,CAAC,CAAC;gDACpB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAA;gDAChD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oDAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;oDAC7C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAA;oDAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;wDACvD,CAAC,CAAC,MAAM;wDACR,CAAC,CAAC;4DACE,GAAG,MAAM;4DACT,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE;yDAC/D,CAAA;oDACL,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAA;oDAChE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wDACtB,SAAQ;oDACV,CAAC;oDACD,KAAK,CAAC,YAAY,GAAG,MAAiC,CAAA;gDACxD,CAAC;qDAAM,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;oDACxC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;oDAC/C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,mBAAmB,EAAE,CAAA;oDAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;wDACtD,CAAC,CAAC,MAAM;wDACR,CAAC,CAAC;4DACE,GAAG,MAAM;4DACT,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE;yDAC/D,CAAA;oDACL,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAA;oDAClE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wDACtB,SAAQ;oDACV,CAAC;oDACD,KAAK,CAAC,eAAe,GAAG,MAAoC,CAAA;gDAC9D,CAAC;qDAAM,CAAC;oDACN,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;oDAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,EAAE,CAAA;oDACzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;wDACtD,CAAC,CAAC,MAAM;wDACR,CAAC,CAAC;4DACE,GAAG,MAAM;4DACT,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE;yDAC/D,CAAA;oDACL,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAA;oDAC9D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wDACtB,SAAQ;oDACV,CAAC;oDACD,KAAK,CAAC,WAAW,GAAG,MAAgC,CAAA;gDACtD,CAAC;gDACD,SAAS,CAAC,KAAK,CAAC,CAAA;gDAChB,eAAe,GAAG,KAAK,CAAA;gDACvB,SAAQ;4CACV,CAAC;4CACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gDACvB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE;oDAC/C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;oDACpC,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAS,EAAE;oDAC3D,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;oDAC5C,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,aAAa,EAAE;iDACtE,CAAC,CAAA;gDACF,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;oDAC3B,qDAAqD;oDACrD,eAAe,GAAG,KAAK,CAAA;oDACvB,SAAQ;gDACV,CAAC;gDAED,0DAA0D;gDAC1D,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;gDACrE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,IAA2C,EAC3C,eAAe,EACf,oCAAoC,CACrC,CAAA;gDAED,IAAI,CAAC,MAAM,EAAE,CAAC;oDACZ,4BAA4B;oDAC5B,SAAQ;gDACV,CAAC;gDACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oDACtB,SAAQ;gDACV,CAAC;gDAED,KAAK,CAAC,UAAU,GAAG,IAA2C,CAAA;gDAC9D,QAAQ,IAAI,EAAE,CAAC;oDACb,KAAK,SAAS,CAAC,CAAC,CAAC;wDACf,KAAK,CAAC,YAAY,GAAG,MAAiC,CAAA;wDACtD,KAAK,CAAC,eAAe,GAAG,SAAS,CAAA;wDACjC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAA;wDAC7B,MAAK;oDACP,CAAC;oDACD,KAAK,YAAY,CAAC,CAAC,CAAC;wDAClB,KAAK,CAAC,eAAe,GAAG,MAAoC,CAAA;wDAC5D,KAAK,CAAC,YAAY,GAAG,SAAS,CAAA;wDAC9B,KAAK,CAAC,WAAW,GAAG,SAAS,CAAA;wDAC7B,MAAK;oDACP,CAAC;oDACD,KAAK,QAAQ,CAAC,CAAC,CAAC;wDACd,KAAK,CAAC,WAAW,GAAG,MAAgC,CAAA;wDACpD,KAAK,CAAC,YAAY,GAAG,SAAS,CAAA;wDAC9B,KAAK,CAAC,eAAe,GAAG,SAAS,CAAA;wDACjC,MAAK;oDACP,CAAC;oDACD,OAAO,CAAC,CAAC,CAAC;wDACR,KAAK,CAAC,WAAW,GAAG,MAAgC,CAAA;wDACpD,KAAK,CAAC,YAAY,GAAG,SAAS,CAAA;wDAC9B,KAAK,CAAC,eAAe,GAAG,SAAS,CAAA;wDACjC,MAAK;oDACP,CAAC;gDACH,CAAC;gDAED,SAAS,CAAC,KAAK,CAAC,CAAA;gDAChB,eAAe,GAAG,KAAK,CAAA;gDACvB,SAAQ;4CACV,CAAC;4CACD,KAAK,MAAM,CAAC,CAAC,CAAC;gDACZ,MAAM,MAAM,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAA;gDACpD,IAAI,CAAC,MAAM,EAAE,CAAC;oDACZ,MAAK;gDACP,CAAC;gDACD,aAAa,GAAG,MAAM,CAAA;gDACtB,IAAI,MAAM,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;oDAC3D,sBAAsB,GAAG,QAAQ,CAAA;oDACjC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;oDACnC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;oDACnC,UAAU,GAAG,IAAI,CAAA;oDACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;oDAChC,SAAS,CAAC,KAAK,CAAC,CAAA;oDAChB,kBAAkB,GAAG,IAAI,CAAA;gDAC3B,CAAC;gDACD,MAAK;4CACP,CAAC;4CACD,KAAK,MAAM,CAAC,CAAC,CAAC;gDACZ,eAAe,GAAG,KAAK,CAAA;gDACvB,SAAQ;4CACV,CAAC;wCACH,CAAC;oCACH,CAAC;gCACH,CAAC;qCAAM,CAAC;oCACN,2BAA2B;oCAC3B,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;oCACvD,IAAI,MAAM,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;wCAC3D,sBAAsB,GAAG,QAAQ,CAAA;wCACjC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;wCACnC,UAAU,GAAG,IAAI,CAAA;wCACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;wCAChC,SAAS,CAAC,KAAK,CAAC,CAAA;wCAChB,kBAAkB,GAAG,IAAI,CAAA;oCAC3B,CAAC;gCACH,CAAC;4BACH,CAAC;4BACD,MAAK;wBACP,CAAC;wBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACd,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;4BAEvD,IAAI,MAAM,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gCAC3D,sBAAsB,GAAG,QAAQ,CAAA;gCACjC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;gCACnC,UAAU,GAAG,IAAI,CAAA;gCACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;gCAChC,SAAS,CAAC,KAAK,CAAC,CAAA;gCAChB,kBAAkB,GAAG,IAAI,CAAA;4BAC3B,CAAC;iCAAM,CAAC;gCACN,4DAA4D;gCAC5D,eAAe,GAAG,KAAK,CAAA;gCACvB,SAAQ;4BACV,CAAC;4BAED,MAAK;wBACP,CAAC;oBACH,CAAC;oBAED,MAAK,CAAC,sBAAsB;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,kEAAkE,EAClE;YACE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC5C,EAAE,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;SACrC,CACF,CAAA;QAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,wDAAwD;YACxD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;YACxB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;YAC1B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAA;YACxB,SAAS,CAAC,KAAK,CAAC,CAAA;YAChB,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;QACtE,CAAC;aAAM,CAAC;YACN,uFAAuF;YACvF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;YAChC,+CAA+C;YAC/C,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAA;YACzC,SAAS,CAAC,KAAK,CAAC,CAAA;YAChB,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;QACpD,CAAC;QAED,aAAa,GAAG,KAAK,CAAC,aAAa,CAAA;QACnC,GAAG,CAAC,IAAI,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,2EAA2E;IAC3E,IAAI,aAAa,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAA;QAChC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;IACrC,CAAC;IAED,SAAS,CAAC,KAAK,CAAC,CAAA;IAEhB,8BAA8B;IAC9B,wBAAwB,CAAC;QACvB,SAAS,EAAE,SAAS,IAAI,YAAY,EAAE,SAAS,IAAI,GAAG;QACtD,kBAAkB,EAAE,sBAAsB;QAC1C,cAAc,EAAE,kBAAkB,IAAI,YAAY,EAAE,cAAc;KACnE,CAAC,CAAA;IAEF,OAAO,EAAE,UAAU,EAAE,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,CAAA;AACpF,CAAC,CAAA"}
@@ -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"}