gitarsenal-cli 1.5.9 → 1.5.10

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.
@@ -15,10 +15,100 @@ const pythonScriptPath = path.join(pythonScriptDir, 'test_modalSandboxScript.py'
15
15
  // Path to the original Python script
16
16
  const originalScriptPath = path.join(__dirname, '..', '..', '..', 'mcp-server', 'src', 'utils', 'test_modalSandboxScript.py');
17
17
 
18
+ // Function to install Python packages
19
+ async function installPythonPackages() {
20
+ const packages = ['modal', 'gitingest', 'requests'];
21
+
22
+ console.log(chalk.yellow(`📦 Installing Python packages: ${packages.join(', ')}`));
23
+
24
+ // Try different pip commands
25
+ const pipCommands = [
26
+ 'pip3 install',
27
+ 'pip install',
28
+ 'python -m pip install',
29
+ 'py -m pip install'
30
+ ];
31
+
32
+ for (const pipCommand of pipCommands) {
33
+ try {
34
+ // Check if pip command exists
35
+ const [pipCmd] = pipCommand.split(' ');
36
+ await execAsync(`${pipCmd} --version`);
37
+
38
+ console.log(chalk.gray(`🔄 Using: ${pipCommand}`));
39
+
40
+ await execAsync(`${pipCommand} ${packages.join(' ')}`, {
41
+ env: { ...process.env, PYTHONIOENCODING: 'utf-8' }
42
+ });
43
+
44
+ console.log(chalk.green('✅ Python packages installed successfully!'));
45
+ return true;
46
+ } catch (error) {
47
+ console.log(chalk.gray(`⚠️ ${pipCommand} failed, trying next...`));
48
+ }
49
+ }
50
+
51
+ console.log(chalk.red('❌ Failed to install Python packages'));
52
+ console.log(chalk.yellow('💡 Please run manually:'));
53
+ console.log(chalk.yellow(' pip install modal gitingest requests'));
54
+ console.log(chalk.yellow(' or: pip3 install modal gitingest requests'));
55
+ return false;
56
+ }
57
+
58
+ // Function to check Python
59
+ async function checkPython() {
60
+ const pythonCommands = ['python3', 'python', 'py'];
61
+
62
+ for (const cmd of pythonCommands) {
63
+ try {
64
+ const { stdout } = await execAsync(`${cmd} --version`);
65
+ console.log(chalk.green(`✅ Python found: ${stdout.trim()}`));
66
+ return true;
67
+ } catch (error) {
68
+ // Continue to next command
69
+ }
70
+ }
71
+
72
+ console.log(chalk.red('❌ Python not found. Please install Python 3.7+'));
73
+ console.log(chalk.yellow('💡 Download from: https://www.python.org/downloads/'));
74
+ return false;
75
+ }
76
+
77
+ // Function to check Git
78
+ async function checkGit() {
79
+ try {
80
+ const { stdout } = await execAsync('git --version');
81
+ console.log(chalk.green(`✅ Git found: ${stdout.trim()}`));
82
+ return true;
83
+ } catch (error) {
84
+ console.log(chalk.yellow('⚠️ Git not found. Please install Git:'));
85
+ console.log(chalk.yellow(' macOS: brew install git'));
86
+ console.log(chalk.yellow(' Ubuntu: sudo apt-get install git'));
87
+ console.log(chalk.yellow(' Windows: https://git-scm.com/download/win'));
88
+ return false;
89
+ }
90
+ }
91
+
18
92
  async function postinstall() {
19
93
  try {
20
94
  console.log(chalk.blue('📦 Running GitArsenal CLI postinstall script...'));
21
95
 
96
+ // Check Python first
97
+ console.log(chalk.blue('🔍 Checking Python installation...'));
98
+ const pythonOk = await checkPython();
99
+ if (!pythonOk) {
100
+ console.log(chalk.red('❌ Python is required for GitArsenal CLI'));
101
+ return;
102
+ }
103
+
104
+ // Check Git
105
+ console.log(chalk.blue('🔍 Checking Git installation...'));
106
+ await checkGit();
107
+
108
+ // Install Python packages
109
+ console.log(chalk.blue('🔍 Installing Python dependencies...'));
110
+ await installPythonPackages();
111
+
22
112
  // Create the Python directory if it doesn't exist
23
113
  await fs.ensureDir(pythonScriptDir);
24
114
 
@@ -30,10 +120,6 @@ async function postinstall() {
30
120
  if (stats.size > 5000) {
31
121
  console.log(chalk.green('✅ Found existing full Python script. Keeping it.'));
32
122
  scriptFound = true;
33
- // Skip the rest of the script to avoid overwriting the existing file
34
- console.log(chalk.blue('📦 GitArsenal CLI installation complete!'));
35
- console.log(chalk.blue('🚀 Run "gitarsenal" to start using the CLI.'));
36
- return;
37
123
  } else {
38
124
  console.log(chalk.yellow('⚠️ Existing Python script appears to be minimal. Looking for full version...'));
39
125
  }
@@ -129,28 +215,24 @@ if __name__ == "__main__":
129
215
  console.log(chalk.yellow(`⚠️ Could not make script executable: ${error.message}`));
130
216
  }
131
217
 
132
- // Check Python and Modal installation
133
- try {
134
- await execAsync('python --version');
135
- console.log(chalk.green('✅ Python is installed'));
136
- } catch (error) {
137
- try {
138
- await execAsync('python3 --version');
139
- console.log(chalk.green('✅ Python3 is installed'));
140
- } catch (error) {
141
- console.log(chalk.yellow('⚠️ Python not found. Please install Python 3.8 or newer.'));
142
- }
143
- }
144
-
145
- try {
146
- await execAsync('modal --version');
147
- console.log(chalk.green('✅ Modal CLI is installed'));
148
- } catch (error) {
149
- console.log(chalk.yellow('⚠️ Modal CLI not found. Please install it with: pip install modal'));
150
- }
151
-
152
- console.log(chalk.blue('📦 GitArsenal CLI installation complete!'));
153
- console.log(chalk.blue('🚀 Run "gitarsenal" to start using the CLI.'));
218
+ // Final success message
219
+ console.log(chalk.green(`
220
+ GitArsenal CLI Installation Complete!
221
+ ========================================
222
+
223
+ What was installed:
224
+ GitArsenal CLI (npm package)
225
+ Modal (Python package)
226
+ GitIngest (Python package)
227
+ Requests (Python package)
228
+
229
+ 💡 Next steps:
230
+ • Run: gitarsenal --help
231
+ Run: gitarsenal setup
232
+ Visit: https://gitarsenal.dev
233
+
234
+ Having issues? Run: gitarsenal --debug
235
+ `));
154
236
 
155
237
  } catch (error) {
156
238
  console.error(chalk.red(`❌ Error during postinstall: ${error.message}`));