@ekkos/cli 1.0.1 → 1.0.3
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/dist/commands/run.js +25 -6
- package/package.json +1 -1
package/dist/commands/run.js
CHANGED
|
@@ -525,7 +525,7 @@ function getEkkosEnv() {
|
|
|
525
525
|
}
|
|
526
526
|
// ekkOS-managed Claude installation path
|
|
527
527
|
const EKKOS_CLAUDE_DIR = path.join(os.homedir(), '.ekkos', 'claude-code');
|
|
528
|
-
const EKKOS_CLAUDE_BIN = path.join(EKKOS_CLAUDE_DIR, 'node_modules', '.bin', 'claude');
|
|
528
|
+
const EKKOS_CLAUDE_BIN = path.join(EKKOS_CLAUDE_DIR, 'node_modules', '.bin', isWindows ? 'claude.cmd' : 'claude');
|
|
529
529
|
/**
|
|
530
530
|
* Check if a Claude installation exists and get its version
|
|
531
531
|
* Returns version string if found, null otherwise
|
|
@@ -701,7 +701,8 @@ function resolveGlobalClaudePath() {
|
|
|
701
701
|
}
|
|
702
702
|
}
|
|
703
703
|
try {
|
|
704
|
-
const
|
|
704
|
+
const whichCmd = isWindows ? 'where' : 'which';
|
|
705
|
+
const result = (0, child_process_1.execSync)(`${whichCmd} claude`, { encoding: 'utf-8' }).trim().split('\n')[0];
|
|
705
706
|
if (result && fs.existsSync(result)) {
|
|
706
707
|
return result;
|
|
707
708
|
}
|
|
@@ -709,7 +710,7 @@ function resolveGlobalClaudePath() {
|
|
|
709
710
|
catch {
|
|
710
711
|
// Ignore errors
|
|
711
712
|
}
|
|
712
|
-
return 'claude';
|
|
713
|
+
return isWindows ? 'claude.cmd' : 'claude';
|
|
713
714
|
}
|
|
714
715
|
/**
|
|
715
716
|
* Sleep helper
|
|
@@ -887,6 +888,17 @@ function launchWithDashboard(options) {
|
|
|
887
888
|
}
|
|
888
889
|
}
|
|
889
890
|
async function run(options) {
|
|
891
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
892
|
+
// AUTO-SETUP: Run setup inline if this is a fresh install
|
|
893
|
+
// New users can just type `ekkos run` and get the full onboarding flow
|
|
894
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
895
|
+
const configFile = path.join(os.homedir(), '.ekkos', 'config.json');
|
|
896
|
+
if (!fs.existsSync(configFile)) {
|
|
897
|
+
console.log(chalk_1.default.cyan('\n👋 Welcome to ekkOS! Setting up your environment...\n'));
|
|
898
|
+
const { setup } = await Promise.resolve().then(() => __importStar(require('./setup.js')));
|
|
899
|
+
await setup({ ide: 'all' });
|
|
900
|
+
console.log('');
|
|
901
|
+
}
|
|
890
902
|
const verbose = options.verbose || false;
|
|
891
903
|
const bypass = options.bypass || false;
|
|
892
904
|
const noInject = options.noInject || false;
|
|
@@ -903,6 +915,8 @@ async function run(options) {
|
|
|
903
915
|
// ══════════════════════════════════════════════════════════════════════════
|
|
904
916
|
if (options.dashboard) {
|
|
905
917
|
try {
|
|
918
|
+
if (isWindows)
|
|
919
|
+
throw new Error('tmux not supported on Windows');
|
|
906
920
|
const tmuxPath = (0, child_process_1.execSync)('which tmux', { encoding: 'utf-8' }).trim();
|
|
907
921
|
if (tmuxPath) {
|
|
908
922
|
launchWithDashboard(options);
|
|
@@ -910,7 +924,10 @@ async function run(options) {
|
|
|
910
924
|
}
|
|
911
925
|
}
|
|
912
926
|
catch {
|
|
913
|
-
|
|
927
|
+
const installHint = isWindows
|
|
928
|
+
? 'Dashboard mode requires tmux (not supported on Windows)'
|
|
929
|
+
: 'tmux not found. Install: brew install tmux';
|
|
930
|
+
console.log(chalk_1.default.yellow(` ${installHint}`));
|
|
914
931
|
console.log(chalk_1.default.gray(' Alternative: run "ekkos dashboard --latest" in a separate terminal'));
|
|
915
932
|
console.log(chalk_1.default.gray(' Continuing without dashboard...\n'));
|
|
916
933
|
}
|
|
@@ -1752,7 +1769,8 @@ async function run(options) {
|
|
|
1752
1769
|
const spawnedProcess = (0, child_process_1.spawn)(claudePath, args, {
|
|
1753
1770
|
stdio: 'inherit',
|
|
1754
1771
|
cwd: process.cwd(),
|
|
1755
|
-
env: getEkkosEnv()
|
|
1772
|
+
env: getEkkosEnv(),
|
|
1773
|
+
shell: isWindows // Required on Windows to execute .cmd files
|
|
1756
1774
|
});
|
|
1757
1775
|
spawnedProcess.on('exit', (code) => process.exit(code ?? 0));
|
|
1758
1776
|
spawnedProcess.on('error', (e) => {
|
|
@@ -1776,7 +1794,8 @@ async function run(options) {
|
|
|
1776
1794
|
const spawnedProcess = (0, child_process_1.spawn)(claudePath, args, {
|
|
1777
1795
|
stdio: 'inherit',
|
|
1778
1796
|
cwd: process.cwd(),
|
|
1779
|
-
env: getEkkosEnv()
|
|
1797
|
+
env: getEkkosEnv(),
|
|
1798
|
+
shell: isWindows // Required on Windows to execute .cmd files
|
|
1780
1799
|
});
|
|
1781
1800
|
spawnedProcess.on('exit', (code) => {
|
|
1782
1801
|
process.exit(code ?? 0);
|