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,245 @@
1
+ /** Git helpers */
2
+ import { exec, execSilent } from './exec.js';
3
+ import { generateBranchNameWithProvider, getAIProviderDisplayName, getAIProviderShortName, getModelDisplayName, interactiveAIFallback, isContextLimitFailure, isTransientAIFailure, } from './git-ai.js';
4
+ import { log } from './logging.js';
5
+ import { askQuestion, confirm } from '../cli/input.js';
6
+ export { generateBranchNameWithProvider, getAIProviderDisplayName, getAIProviderShortName, getModelDisplayName, interactiveAIFallback, isTransientAIFailure, isContextLimitFailure, };
7
+ export { handleBranchNaming } from './branch-naming.js';
8
+ /**
9
+ * Check if branch exists locally
10
+ */
11
+ export const branchExists = (branchName) => {
12
+ try {
13
+ execSilent(`git show-ref --verify --quiet refs/heads/${branchName}`);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ };
20
+ /**
21
+ * Check if remote branch exists
22
+ */
23
+ export const remoteBranchExists = (branchName) => {
24
+ try {
25
+ execSilent(`git ls-remote --exit-code --heads origin ${branchName}`);
26
+ return true;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ };
32
+ /**
33
+ * Validate branch name format
34
+ */
35
+ export const validateBranchName = (branchName) => {
36
+ if (!branchName || branchName.trim() === '') {
37
+ return { valid: false, reason: 'Branch name cannot be empty' };
38
+ }
39
+ if (branchName.length > 255) {
40
+ return { valid: false, reason: 'Branch name too long (max 255 characters)' };
41
+ }
42
+ // Check for invalid characters
43
+ const invalidChars = /[ *:?[\\^~]/;
44
+ if (invalidChars.test(branchName)) {
45
+ return { valid: false, reason: 'Branch name contains invalid characters' };
46
+ }
47
+ // Check for reserved names
48
+ const reservedNames = ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'MERGE_HEAD', 'CHERRY_PICK_HEAD'];
49
+ if (reservedNames.includes(branchName.toUpperCase())) {
50
+ return { valid: false, reason: 'Branch name is reserved by Git' };
51
+ }
52
+ // Check for names that start or end with certain patterns
53
+ if (branchName.startsWith('.') ||
54
+ branchName.endsWith('.') ||
55
+ branchName.startsWith('/') ||
56
+ branchName.endsWith('/') ||
57
+ branchName.includes('..') ||
58
+ branchName.includes('@{')) {
59
+ return { valid: false, reason: 'Branch name has invalid format' };
60
+ }
61
+ return { valid: true };
62
+ };
63
+ /**
64
+ * Get the current branch name
65
+ */
66
+ export const getCurrentBranch = () => {
67
+ return execSilent('git branch --show-current');
68
+ };
69
+ /**
70
+ * Get all local branches
71
+ */
72
+ export const getLocalBranches = () => {
73
+ const branches = execSilent('git branch --format="%(refname:short)"');
74
+ return branches.split('\n').filter(Boolean);
75
+ };
76
+ /**
77
+ * Get changed files (unstaged + untracked)
78
+ */
79
+ export const getChangedFiles = () => {
80
+ const status = execSilent('git status --porcelain');
81
+ return status
82
+ .split('\n')
83
+ .filter(Boolean)
84
+ .map((line) => line.slice(3));
85
+ };
86
+ /**
87
+ * Get staged files
88
+ */
89
+ export const getStagedFiles = () => {
90
+ const status = execSilent('git diff --name-only --cached');
91
+ return status.split('\n').filter(Boolean);
92
+ };
93
+ /**
94
+ * Get recommended prefix separator based on existing branches
95
+ */
96
+ export const getRecommendedPrefixSeparator = () => {
97
+ try {
98
+ const branches = getLocalBranches();
99
+ let slashCount = 0;
100
+ let hashCount = 0;
101
+ for (const branch of branches) {
102
+ if (branch.includes('/')) {
103
+ slashCount++;
104
+ }
105
+ if (branch.includes('#')) {
106
+ hashCount++;
107
+ }
108
+ }
109
+ return hashCount >= slashCount ? '#' : '/';
110
+ }
111
+ catch {
112
+ return '#';
113
+ }
114
+ };
115
+ /**
116
+ * Generate branch name suggestions based on staged files
117
+ */
118
+ export const generateBranchSuggestions = (stagedFiles, prefix) => {
119
+ const suggestions = [];
120
+ const recommendedSeparator = getRecommendedPrefixSeparator();
121
+ if (stagedFiles.length === 0) {
122
+ suggestions.push(`${prefix}${recommendedSeparator}update`, `${prefix}${recommendedSeparator}fix`, `${prefix}${recommendedSeparator}feature`);
123
+ return suggestions;
124
+ }
125
+ // Analyze file extensions and paths for suggestions
126
+ const fileTypes = stagedFiles.map((file) => {
127
+ const ext = file.split('.').pop()?.toLowerCase();
128
+ const pathParts = file.split('/');
129
+ const mainDir = pathParts.length > 1 ? pathParts[0] : '';
130
+ return { ext, mainDir, filename: pathParts.at(-1) };
131
+ });
132
+ // Common patterns
133
+ const hasTests = fileTypes.some((f) => f.filename && (f.filename.includes('test') || f.filename.includes('spec')));
134
+ const hasConfig = fileTypes.some((f) => f.filename && (f.filename.includes('config') || f.filename.includes('package')));
135
+ const hasDocs = fileTypes.some((f) => f.ext === 'md' ||
136
+ (f.filename && (f.filename.includes('readme') || f.filename.includes('doc'))));
137
+ const hasStyles = fileTypes.some((f) => ['css', 'scss', 'less', 'styl'].includes(f.ext ?? ''));
138
+ const hasScripts = fileTypes.some((f) => ['js', 'ts', 'py', 'rb', 'php', 'java', 'go'].includes(f.ext ?? ''));
139
+ // Generate suggestions based on file types with recommended separator
140
+ if (hasTests) {
141
+ suggestions.push(`${prefix}${recommendedSeparator}test-update`, `${prefix}${recommendedSeparator}test-fix`);
142
+ }
143
+ if (hasConfig) {
144
+ suggestions.push(`${prefix}${recommendedSeparator}config-update`, `${prefix}${recommendedSeparator}deps-update`);
145
+ }
146
+ if (hasDocs) {
147
+ suggestions.push(`${prefix}${recommendedSeparator}docs-update`, `${prefix}${recommendedSeparator}readme-update`);
148
+ }
149
+ if (hasStyles) {
150
+ suggestions.push(`${prefix}${recommendedSeparator}style-update`, `${prefix}${recommendedSeparator}ui-fix`);
151
+ }
152
+ if (hasScripts) {
153
+ suggestions.push(`${prefix}${recommendedSeparator}feature`, `${prefix}${recommendedSeparator}bug-fix`);
154
+ }
155
+ // Fallback suggestions
156
+ if (suggestions.length === 0) {
157
+ suggestions.push(`${prefix}${recommendedSeparator}update`, `${prefix}${recommendedSeparator}fix`, `${prefix}${recommendedSeparator}feature`);
158
+ }
159
+ // Add some generic suggestions
160
+ suggestions.push(`${prefix}${recommendedSeparator}refactor`, `${prefix}${recommendedSeparator}chore`);
161
+ return [...new Set(suggestions)]; // Remove duplicates
162
+ };
163
+ /**
164
+ * Get branch prefix based on current branch (smart auto-detection)
165
+ */
166
+ export const getBranchPrefix = (currentBranch) => {
167
+ // First, try to extract prefix from current branch name
168
+ const slashIndex = currentBranch.indexOf('/');
169
+ const hashIndex = currentBranch.indexOf('#');
170
+ if (slashIndex > 0) {
171
+ // Extract prefix before first slash (e.g., "dev/login" → "dev/")
172
+ const prefix = currentBranch.slice(0, Math.max(0, slashIndex + 1));
173
+ return prefix;
174
+ }
175
+ if (hashIndex > 0) {
176
+ // Extract prefix before first hash (e.g., "dev#auth" → "dev#")
177
+ const prefix = currentBranch.slice(0, Math.max(0, hashIndex + 1));
178
+ return prefix;
179
+ }
180
+ // Fallback to mapping for common branch names
181
+ const recommendedSeparator = getRecommendedPrefixSeparator();
182
+ const branchMappings = {
183
+ development: `dev${recommendedSeparator}`,
184
+ develop: `dev${recommendedSeparator}`,
185
+ dev: `dev${recommendedSeparator}`,
186
+ main: `release${recommendedSeparator}`,
187
+ master: `release${recommendedSeparator}`,
188
+ staging: `stage${recommendedSeparator}`,
189
+ production: `hotfix${recommendedSeparator}`,
190
+ prod: `hotfix${recommendedSeparator}`,
191
+ testing: `test${recommendedSeparator}`,
192
+ test: `test${recommendedSeparator}`,
193
+ qa: `qa${recommendedSeparator}`,
194
+ feature: `feat${recommendedSeparator}`,
195
+ features: `feat${recommendedSeparator}`,
196
+ bugfix: `fix${recommendedSeparator}`,
197
+ hotfix: `hotfix${recommendedSeparator}`,
198
+ release: `release${recommendedSeparator}`,
199
+ };
200
+ return branchMappings[currentBranch.toLowerCase()] ?? `dev${recommendedSeparator}`;
201
+ };
202
+ /**
203
+ * Push wrapper with authentication retry loop.
204
+ * Keeps prompting the user to retry if authentication fails so the user can update credentials externally.
205
+ */
206
+ export const pushWithRetry = (cmd, silent = true) => {
207
+ for (let attempt = 0;; attempt++) {
208
+ try {
209
+ exec(cmd, silent);
210
+ return;
211
+ }
212
+ catch (error) {
213
+ const msg = String(error);
214
+ const lower = msg.toLowerCase();
215
+ const isAuth = lower.includes('authentication failed') ||
216
+ lower.includes('http basic: access denied') ||
217
+ lower.includes('fatal: authentication failed') ||
218
+ lower.includes('remote:');
219
+ if (isAuth) {
220
+ // Inform user and allow retry
221
+ log.error('Push failed due to authentication. Check your credentials (use SSH or a Personal Access Token).');
222
+ log.info('If you updated credentials (SSH key, credential helper, or PAT), select Retry to try again.');
223
+ const retry = confirm('Retry push?');
224
+ if (!retry) {
225
+ throw error;
226
+ }
227
+ // Optionally allow the user to enter a token to set for this session
228
+ const setToken = confirm('Would you like to enter a personal access token to try with?');
229
+ if (setToken) {
230
+ const token = askQuestion('Enter token (will be used only for this run): ').trim();
231
+ if (token) {
232
+ // Store into env for this process; users should prefer credential helpers for persistence
233
+ process.env.GITHUB_TOKEN = token;
234
+ process.env.COPILOT_TOKEN = token;
235
+ }
236
+ }
237
+ // Loop to retry after user action
238
+ continue;
239
+ }
240
+ // Non-auth error: rethrow
241
+ throw error;
242
+ }
243
+ }
244
+ };
245
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Logging utilities with colored output
3
+ */
4
+ declare class Spinner {
5
+ private interval;
6
+ private currentFrame;
7
+ private message;
8
+ private startTime;
9
+ start(message: string): void;
10
+ stop(finalMessage?: string): void;
11
+ succeed(message: string): void;
12
+ fail(message: string): void;
13
+ }
14
+ export declare const log: {
15
+ readonly info: (msg: string) => void;
16
+ readonly success: (msg: string) => void;
17
+ readonly warn: (msg: string) => void;
18
+ readonly error: (msg: string) => void;
19
+ readonly step: (msg: string) => void;
20
+ readonly ai: (msg: string) => void;
21
+ readonly spinner: () => Spinner;
22
+ readonly banner: () => void;
23
+ };
24
+ export {};
25
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,cAAM,OAAO;IACX,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAI;IAErB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAc5B,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAcjC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG5B;AAED,eAAO,MAAM,GAAG;yBACF,MAAM;4BAGH,MAAM;yBAGT,MAAM;0BAGL,MAAM;yBAGP,MAAM;uBAGR,MAAM;;;CASR,CAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Logging utilities with colored output
3
+ */
4
+ import { colors } from './colors.js';
5
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
6
+ class Spinner {
7
+ constructor() {
8
+ this.interval = null;
9
+ this.currentFrame = 0;
10
+ this.message = '';
11
+ this.startTime = 0;
12
+ }
13
+ start(message) {
14
+ this.message = message;
15
+ this.currentFrame = 0;
16
+ this.startTime = Date.now();
17
+ process.stdout.write('\u001B[?25l'); // Hide cursor
18
+ this.interval = setInterval(() => {
19
+ const frame = SPINNER_FRAMES[this.currentFrame];
20
+ const elapsed = Math.floor((Date.now() - this.startTime) / 1000);
21
+ const timeDisplay = elapsed > 0 ? ` ${colors.gray}(${elapsed}s)${colors.reset}` : '';
22
+ process.stdout.write(`\r${colors.cyan}${frame}${colors.reset} ${this.message}${timeDisplay}`);
23
+ this.currentFrame = (this.currentFrame + 1) % SPINNER_FRAMES.length;
24
+ }, 80);
25
+ }
26
+ stop(finalMessage) {
27
+ if (this.interval) {
28
+ clearInterval(this.interval);
29
+ this.interval = null;
30
+ }
31
+ process.stdout.write('\r\u001B[K'); // Clear line
32
+ process.stdout.write('\u001B[?25h'); // Show cursor
33
+ if (finalMessage) {
34
+ console.log(finalMessage);
35
+ }
36
+ else {
37
+ process.stdout.write('\n'); // Move to next line when no final message
38
+ }
39
+ }
40
+ succeed(message) {
41
+ this.stop(`${colors.green}✓${colors.reset} ${message}`);
42
+ }
43
+ fail(message) {
44
+ this.stop(`${colors.red}✗${colors.reset} ${message}`);
45
+ }
46
+ }
47
+ export const log = {
48
+ info: (msg) => {
49
+ console.log(`${colors.blue}ℹ${colors.reset} ${msg}`);
50
+ },
51
+ success: (msg) => {
52
+ console.log(`${colors.green}✓${colors.reset} ${msg}`);
53
+ },
54
+ warn: (msg) => {
55
+ console.log(`${colors.yellow}⚠${colors.reset} ${msg}`);
56
+ },
57
+ error: (msg) => {
58
+ console.log(`${colors.red}✗${colors.reset} ${msg}`);
59
+ },
60
+ step: (msg) => {
61
+ console.log(`\n${colors.cyan}${colors.bright}▶ ${msg}${colors.reset}`);
62
+ },
63
+ ai: (msg) => {
64
+ console.log(`${colors.cyan}[AI]${colors.reset} ${msg}`);
65
+ },
66
+ spinner: () => new Spinner(),
67
+ banner: () => {
68
+ console.log(`${colors.cyan}${colors.bright}Geeto v1.1.0${colors.reset} ${colors.gray}— AI-Powered Git Workflow Automation${colors.reset}`);
69
+ },
70
+ };
71
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Menu option builders for consistent UI
3
+ */
4
+ /** Build standard menu with cancel option */
5
+ export declare function withCancel<T extends string>(options: Array<{
6
+ label: string;
7
+ value: T;
8
+ }>): Array<{
9
+ label: string;
10
+ value: T | 'cancel';
11
+ }>;
12
+ /** Build standard menu with back option */
13
+ export declare function withBack<T extends string>(options: Array<{
14
+ label: string;
15
+ value: T;
16
+ }>, backLabel?: string): Array<{
17
+ label: string;
18
+ value: T | 'back';
19
+ }>;
20
+ /** Build AI provider menu */
21
+ export declare function buildAIProviderMenu(): ({
22
+ label: string;
23
+ value: "gemini";
24
+ } | {
25
+ label: string;
26
+ value: "copilot";
27
+ } | {
28
+ label: string;
29
+ value: "openrouter";
30
+ })[];
31
+ /** Build yes/no menu */
32
+ export declare function buildYesNoMenu(): ({
33
+ label: string;
34
+ value: "yes";
35
+ } | {
36
+ label: string;
37
+ value: "no";
38
+ })[];
39
+ /** Build retry/cancel menu */
40
+ export declare function buildRetryCancelMenu(): ({
41
+ label: string;
42
+ value: "retry";
43
+ } | {
44
+ label: string;
45
+ value: "cancel";
46
+ })[];
47
+ //# sourceMappingURL=menu-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-builders.d.ts","sourceRoot":"","sources":["../../src/utils/menu-builders.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GAC1C,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAA;CAAE,CAAC,CAE/C;AAED,2CAA2C;AAC3C,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvC,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,EAC3C,SAAS,SAAS,GACjB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAA;CAAE,CAAC,CAE7C;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB;;;;;;;;;KAMlC;AAED,wBAAwB;AACxB,wBAAgB,cAAc;;;;;;KAK7B;AAED,8BAA8B;AAC9B,wBAAgB,oBAAoB;;;;;;KAKnC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Menu option builders for consistent UI
3
+ */
4
+ /** Build standard menu with cancel option */
5
+ export function withCancel(options) {
6
+ return [...options, { label: 'Cancel', value: 'cancel' }];
7
+ }
8
+ /** Build standard menu with back option */
9
+ export function withBack(options, backLabel = 'Back') {
10
+ return [...options, { label: backLabel, value: 'back' }];
11
+ }
12
+ /** Build AI provider menu */
13
+ export function buildAIProviderMenu() {
14
+ return [
15
+ { label: 'Gemini', value: 'gemini' },
16
+ { label: 'GitHub Copilot (Recommended)', value: 'copilot' },
17
+ { label: 'OpenRouter', value: 'openrouter' },
18
+ ];
19
+ }
20
+ /** Build yes/no menu */
21
+ export function buildYesNoMenu() {
22
+ return [
23
+ { label: 'Yes', value: 'yes' },
24
+ { label: 'No', value: 'no' },
25
+ ];
26
+ }
27
+ /** Build retry/cancel menu */
28
+ export function buildRetryCancelMenu() {
29
+ return [
30
+ { label: 'Retry', value: 'retry' },
31
+ { label: 'Cancel', value: 'cancel' },
32
+ ];
33
+ }
34
+ //# sourceMappingURL=menu-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-builders.js","sourceRoot":"","sources":["../../src/utils/menu-builders.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6CAA6C;AAC7C,MAAM,UAAU,UAAU,CACxB,OAA2C;IAE3C,OAAO,CAAC,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAiB,EAAE,CAAC,CAAA;AACpE,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,QAAQ,CACtB,OAA2C,EAC3C,SAAS,GAAG,MAAM;IAElB,OAAO,CAAC,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAe,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAiB,EAAE;QAC7C,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAkB,EAAE;QACpE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAqB,EAAE;KACtD,CAAA;AACH,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE;QACvC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAa,EAAE;KACtC,CAAA;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAgB,EAAE;QAC3C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAiB,EAAE;KAC9C,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Platform detection utilities
3
+ */
4
+ export type Platform = 'darwin' | 'win32' | 'linux' | 'other';
5
+ export declare function getPlatform(): Platform;
6
+ export declare function isWindows(): boolean;
7
+ export declare function isMac(): boolean;
8
+ export declare function isLinux(): boolean;
9
+ /** Get default editor for platform */
10
+ export declare function getDefaultEditor(): string;
11
+ /** Get shell config file for platform */
12
+ export declare function getShellConfigFile(): string;
13
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAE7D,wBAAgB,WAAW,IAAI,QAAQ,CAMtC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Platform detection utilities
3
+ */
4
+ import os from 'node:os';
5
+ export function getPlatform() {
6
+ const platform = os.platform();
7
+ if (platform === 'darwin' || platform === 'win32' || platform === 'linux') {
8
+ return platform;
9
+ }
10
+ return 'other';
11
+ }
12
+ export function isWindows() {
13
+ return os.platform() === 'win32';
14
+ }
15
+ export function isMac() {
16
+ return os.platform() === 'darwin';
17
+ }
18
+ export function isLinux() {
19
+ return os.platform() === 'linux';
20
+ }
21
+ /** Get default editor for platform */
22
+ export function getDefaultEditor() {
23
+ return process.env.EDITOR ?? (isWindows() ? 'notepad' : 'vi');
24
+ }
25
+ /** Get shell config file for platform */
26
+ export function getShellConfigFile() {
27
+ if (isMac() || isLinux()) {
28
+ return process.env.SHELL?.includes('zsh') ? '~/.zshrc' : '~/.bashrc';
29
+ }
30
+ return '';
31
+ }
32
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAA;AAIxB,MAAM,UAAU,WAAW;IACzB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC9B,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1E,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAA;AAClC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,kBAAkB;IAChC,IAAI,KAAK,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAA;IACtE,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Spinner wrapper utilities for progress indication
3
+ */
4
+ /**
5
+ * Execute async function with spinner
6
+ */
7
+ export declare function withSpinner<T>(message: string, fn: () => Promise<T>): Promise<T>;
8
+ /**
9
+ * Execute async function with spinner and error handling
10
+ */
11
+ export declare function withSpinnerSafe<T>(message: string, fn: () => Promise<T>, onError?: (error: unknown) => T): Promise<T | null>;
12
+ /**
13
+ * Execute sync function with spinner
14
+ */
15
+ export declare function withSpinnerSync<T>(message: string, fn: () => T): T;
16
+ //# sourceMappingURL=spinner-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-wrapper.d.ts","sourceRoot":"","sources":["../../src/utils/spinner-wrapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWtF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,GAC9B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAcnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAWlE"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Spinner wrapper utilities for progress indication
3
+ */
4
+ import { log } from './logging.js';
5
+ /**
6
+ * Execute async function with spinner
7
+ */
8
+ export async function withSpinner(message, fn) {
9
+ const spinner = log.spinner();
10
+ spinner.start(message);
11
+ try {
12
+ const result = await fn();
13
+ spinner.stop();
14
+ return result;
15
+ }
16
+ catch (error) {
17
+ spinner.stop();
18
+ throw error;
19
+ }
20
+ }
21
+ /**
22
+ * Execute async function with spinner and error handling
23
+ */
24
+ export async function withSpinnerSafe(message, fn, onError) {
25
+ const spinner = log.spinner();
26
+ spinner.start(message);
27
+ try {
28
+ const result = await fn();
29
+ spinner.stop();
30
+ return result;
31
+ }
32
+ catch (error) {
33
+ spinner.stop();
34
+ if (onError) {
35
+ return onError(error);
36
+ }
37
+ return null;
38
+ }
39
+ }
40
+ /**
41
+ * Execute sync function with spinner
42
+ */
43
+ export function withSpinnerSync(message, fn) {
44
+ const spinner = log.spinner();
45
+ spinner.start(message);
46
+ try {
47
+ const result = fn();
48
+ spinner.stop();
49
+ return result;
50
+ }
51
+ catch (error) {
52
+ spinner.stop();
53
+ throw error;
54
+ }
55
+ }
56
+ //# sourceMappingURL=spinner-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-wrapper.js","sourceRoot":"","sources":["../../src/utils/spinner-wrapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAI,OAAe,EAAE,EAAoB;IACxE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;IAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;QACzB,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,EAAoB,EACpB,OAA+B;IAE/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;IAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;QACzB,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAI,OAAe,EAAE,EAAW;IAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;IAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAA;QACnB,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * State management for checkpoint recovery
3
+ */
4
+ import type { GeetoState } from '../types/index.js';
5
+ /**
6
+ * Save state to checkpoint file
7
+ */
8
+ export declare const saveState: (state: GeetoState) => void;
9
+ /**
10
+ * Load state from checkpoint file
11
+ */
12
+ export declare const loadState: () => GeetoState | null;
13
+ /**
14
+ * Reset checkpoint but preserve configured AI provider and models.
15
+ * Useful for "Start fresh" while keeping AI settings.
16
+ */
17
+ export declare const preserveProviderState: (state: GeetoState) => void;
18
+ /**
19
+ * Get human-readable step name
20
+ */
21
+ export declare const getStepName: (step: number) => string;
22
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAOnD;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,UAAU,KAAG,IAW7C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,QAAO,UAAU,GAAG,IASzC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,OAAO,UAAU,KAAG,IAmBzD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAY1C,CAAA"}