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
package/lib/utils/git.js
ADDED
|
@@ -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"}
|