vibecodingmachine-cli 2025.11.2-9.855 → 2025.12.6-1702
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/bin/vibecodingmachine.js +92 -4
- package/package.json +5 -2
- package/repro_open.js +13 -0
- package/scripts/postinstall.js +80 -0
- package/src/commands/auto-direct.js +401 -97
- package/src/commands/auto.js +343 -115
- package/src/commands/computers.js +306 -0
- package/src/commands/requirements-remote.js +304 -0
- package/src/commands/requirements.js +204 -13
- package/src/commands/sync.js +280 -0
- package/src/utils/asset-cleanup.js +61 -0
- package/src/utils/auth.js +84 -7
- package/src/utils/auto-mode-simple-ui.js +2 -22
- package/src/utils/first-run.js +293 -0
- package/src/utils/interactive.js +1027 -217
- package/src/utils/kiro-installer.js +146 -0
- package/src/utils/provider-registry.js +8 -0
- package/src/utils/status-card.js +2 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const os = require('os');
|
|
4
|
+
const { spawn } = require('child_process');
|
|
5
|
+
const ora = require('ora');
|
|
6
|
+
const chalk = require('chalk');
|
|
7
|
+
|
|
8
|
+
// Placeholder check - this should ideally check for the actual application path
|
|
9
|
+
// On macOS, typically /Applications/AWS Kiro.app or similar
|
|
10
|
+
// For now, we'll check a simulated path or just return false to test the flow
|
|
11
|
+
function isKiroInstalled() {
|
|
12
|
+
const platform = os.platform();
|
|
13
|
+
if (platform === 'darwin') {
|
|
14
|
+
return fs.existsSync('/Applications/AWS Kiro.app') || fs.existsSync('/Applications/Kiro.app');
|
|
15
|
+
}
|
|
16
|
+
// Add Windows/Linux checks if needed
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function installKiro() {
|
|
21
|
+
console.log(chalk.cyan('\n🚀 Initiating AWS Kiro AI IDE Installation...'));
|
|
22
|
+
|
|
23
|
+
const spinner = ora('Checking system requirements...').start();
|
|
24
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
25
|
+
|
|
26
|
+
// Detect architecture
|
|
27
|
+
const arch = process.arch;
|
|
28
|
+
const isArm = arch === 'arm64';
|
|
29
|
+
|
|
30
|
+
// Verified working URL for ARM64 (v202507161958)
|
|
31
|
+
// For x64, we don't have the exact timestamp/hash, so recent failures suggest we might need to fallback to manual
|
|
32
|
+
const downloadUrl = isArm
|
|
33
|
+
? 'https://prod.download.desktop.kiro.dev/releases/202507161958-Kiro-dmg-darwin-arm64.dmg'
|
|
34
|
+
: 'https://kiro.dev/downloads/'; // Fallback to downloads page for x64 until we find the direct link
|
|
35
|
+
|
|
36
|
+
spinner.succeed(`System requirements met (${isArm ? 'Apple Silicon' : 'Intel'}).`);
|
|
37
|
+
|
|
38
|
+
// for x64, we can't automate yet
|
|
39
|
+
if (!isArm) {
|
|
40
|
+
console.log(chalk.yellow('\n⚠️ Automated installation is currently only available for Apple Silicon (M1/M2/M3).'));
|
|
41
|
+
console.log(chalk.cyan('Opening download page...'));
|
|
42
|
+
// open v11+ is ESM only
|
|
43
|
+
const open = (await import('open')).default;
|
|
44
|
+
await open(downloadUrl);
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
const fetch = require('node-fetch');
|
|
50
|
+
const fs = require('fs-extra');
|
|
51
|
+
const path = require('path');
|
|
52
|
+
const os = require('os');
|
|
53
|
+
const { execSync } = require('child_process');
|
|
54
|
+
|
|
55
|
+
console.log(chalk.cyan(`\n⬇️ Downloading AWS Kiro for macOS (${arch})...`));
|
|
56
|
+
const downloadSpinner = ora('Downloading... (this may take a moment)').start();
|
|
57
|
+
|
|
58
|
+
const response = await fetch(downloadUrl);
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
downloadSpinner.fail(`Failed to download: ${response.statusText}`);
|
|
61
|
+
console.log(chalk.red(`\nURL: ${downloadUrl}`));
|
|
62
|
+
throw new Error(`Download failed with status ${response.status}`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'kiro-install-'));
|
|
66
|
+
const dmgPath = path.join(tempDir, 'Kiro.dmg');
|
|
67
|
+
const fileStream = fs.createWriteStream(dmgPath);
|
|
68
|
+
|
|
69
|
+
await new Promise((resolve, reject) => {
|
|
70
|
+
response.body.pipe(fileStream);
|
|
71
|
+
response.body.on('error', (err) => {
|
|
72
|
+
downloadSpinner.fail('Download error');
|
|
73
|
+
reject(err);
|
|
74
|
+
});
|
|
75
|
+
fileStream.on('finish', resolve);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
downloadSpinner.succeed('Download complete.');
|
|
79
|
+
|
|
80
|
+
const installSpinner = ora('Installing AWS Kiro...').start();
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
// Mount DMG
|
|
84
|
+
installSpinner.text = 'Mounting disk image...';
|
|
85
|
+
// -nobrowse to prevent opening Finder window, -noverify to speed up
|
|
86
|
+
execSync(`hdiutil attach "${dmgPath}" -nobrowse -noverify -mountpoint "${tempDir}/mount"`);
|
|
87
|
+
|
|
88
|
+
// Copy App
|
|
89
|
+
installSpinner.text = 'Copying to Applications...';
|
|
90
|
+
|
|
91
|
+
// Look for .app file
|
|
92
|
+
const files = await fs.readdir(path.join(tempDir, 'mount'));
|
|
93
|
+
const appName = files.find(f => f.endsWith('.app'));
|
|
94
|
+
|
|
95
|
+
if (!appName) {
|
|
96
|
+
throw new Error('Could not find .app file in the downloaded DMG.');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const fullSourcePath = path.join(tempDir, 'mount', appName);
|
|
100
|
+
const destinationPath = path.join('/Applications', appName);
|
|
101
|
+
|
|
102
|
+
// Remove existing if any
|
|
103
|
+
if (await fs.pathExists(destinationPath)) {
|
|
104
|
+
installSpinner.text = 'Replacing existing installation...';
|
|
105
|
+
await fs.remove(destinationPath);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
await fs.copy(fullSourcePath, destinationPath);
|
|
109
|
+
|
|
110
|
+
// Unmount
|
|
111
|
+
installSpinner.text = 'Cleaning up...';
|
|
112
|
+
execSync(`hdiutil detach "${tempDir}/mount" -force`);
|
|
113
|
+
await fs.remove(tempDir);
|
|
114
|
+
|
|
115
|
+
installSpinner.succeed('AWS Kiro successfully installed!');
|
|
116
|
+
console.log(chalk.green(`\n✅ Installed to ${destinationPath}`));
|
|
117
|
+
|
|
118
|
+
return true;
|
|
119
|
+
} catch (installError) {
|
|
120
|
+
installSpinner.fail('Installation failed during file operations');
|
|
121
|
+
// Try to cleanup even if install failed
|
|
122
|
+
try {
|
|
123
|
+
if (fs.existsSync(path.join(tempDir, 'mount'))) {
|
|
124
|
+
execSync(`hdiutil detach "${tempDir}/mount" -force`);
|
|
125
|
+
}
|
|
126
|
+
await fs.remove(tempDir);
|
|
127
|
+
} catch (cleanupError) {
|
|
128
|
+
// Ignore cleanup errors
|
|
129
|
+
}
|
|
130
|
+
throw installError;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
} catch (error) {
|
|
134
|
+
// If error was thrown, spinners should have been handled, but just in case
|
|
135
|
+
// The main catch block for installKiro should not call ora().fail()
|
|
136
|
+
// as specific spinners (downloadSpinner, installSpinner) would have already failed.
|
|
137
|
+
// We log the manual download link
|
|
138
|
+
console.log(chalk.red('\nYou may need to download manually from: https://kiro.dev'));
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
module.exports = {
|
|
144
|
+
isKiroInstalled,
|
|
145
|
+
installKiro
|
|
146
|
+
};
|
|
@@ -62,6 +62,14 @@ const PROVIDER_DEFINITIONS = [
|
|
|
62
62
|
ide: 'antigravity',
|
|
63
63
|
estimatedSpeed: 90000
|
|
64
64
|
},
|
|
65
|
+
{
|
|
66
|
+
id: 'kiro',
|
|
67
|
+
name: 'AWS Kiro AI IDE',
|
|
68
|
+
type: 'ide',
|
|
69
|
+
category: 'ide',
|
|
70
|
+
ide: 'kiro',
|
|
71
|
+
estimatedSpeed: 90000
|
|
72
|
+
},
|
|
65
73
|
{
|
|
66
74
|
id: 'ollama',
|
|
67
75
|
name: 'Ollama (Local)',
|