@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.
@@ -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 result = (0, child_process_1.execSync)('which claude', { encoding: 'utf-8' }).trim();
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
- console.log(chalk_1.default.yellow(' tmux not found. Install: brew install tmux'));
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ekkos/cli",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Setup ekkOS memory for AI coding assistants (Claude Code, Cursor, Windsurf)",
5
5
  "main": "dist/index.js",
6
6
  "bin": {