@geminilight/mindos 0.1.5 → 0.1.7

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/cli.js CHANGED
@@ -811,9 +811,9 @@ ${dim('Shortcut: mindos start --daemon → install + start in one step')}
811
811
  })();
812
812
  console.log(`\n${bold('⬆ Updating MindOS...')} ${dim(`(current: ${currentVersion})`)}\n`);
813
813
  try {
814
- execSync('npm install -g mindos@latest', { stdio: 'inherit' });
814
+ execSync('npm install -g @geminilight/mindos@latest', { stdio: 'inherit' });
815
815
  } catch {
816
- console.error(red('Update failed. Try: npm install -g mindos@latest'));
816
+ console.error(red('Update failed. Try: npm install -g @geminilight/mindos@latest'));
817
817
  process.exit(1);
818
818
  }
819
819
  // Clear build stamp so next `mindos start` rebuilds if version changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",
package/scripts/setup.js CHANGED
@@ -490,6 +490,42 @@ async function applyTemplate(tpl, mindDir) {
490
490
  async function main() {
491
491
  console.log(`\n${c.bold(t('title'))}\n\n${c.dim(t('langHint'))}\n`);
492
492
 
493
+ // ── Early overwrite check ─────────────────────────────────────────────────
494
+ if (existsSync(CONFIG_PATH)) {
495
+ let existing = {};
496
+ try { existing = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); } catch {}
497
+
498
+ const mask = (s) => s ? s.slice(0, 4) + '••••••••' + s.slice(-2) : c.dim('(not set)');
499
+ const row = (label, val) => ` ${c.dim(label.padEnd(18))} ${val}`;
500
+ const providers = existing.ai?.providers;
501
+ const anthropicKey = providers?.anthropic?.apiKey || existing.ai?.anthropicApiKey || '';
502
+ const openaiKey = providers?.openai?.apiKey || existing.ai?.openaiApiKey || '';
503
+
504
+ console.log(c.bold('\nExisting config:'));
505
+ console.log(row('Knowledge base:', c.cyan(existing.mindRoot || '(not set)')));
506
+ console.log(row('Web port:', c.cyan(String(existing.port || '3000'))));
507
+ console.log(row('MCP port:', c.cyan(String(existing.mcpPort || '8787'))));
508
+ console.log(row('Auth token:', existing.authToken ? mask(existing.authToken) : c.dim('(not set)')));
509
+ console.log(row('Web password:', existing.webPassword ? '••••••••' : c.dim('(none)')));
510
+ console.log(row('AI provider:', c.cyan(existing.ai?.provider || '(not set)')));
511
+ if (anthropicKey) console.log(row('Anthropic key:', mask(anthropicKey)));
512
+ if (openaiKey) console.log(row('OpenAI key:', mask(openaiKey)));
513
+ write('\n');
514
+
515
+ const overwrite = await askYesNo('cfgExists', CONFIG_PATH);
516
+ if (!overwrite) {
517
+ const existingMode = existing.startMode || 'start';
518
+ const existingMcpPort = existing.mcpPort || 8787;
519
+ const existingAuth = existing.authToken || '';
520
+ const existingMindRoot = existing.mindRoot || resolve(MINDOS_DIR, 'my-mind');
521
+ console.log(`\n${c.green(t('cfgKept'))} ${c.dim(CONFIG_PATH)}`);
522
+ write(c.dim(t('cfgKeptNote') + '\n'));
523
+ const installDaemon = process.argv.includes('--install-daemon');
524
+ finish(existingMindRoot, existingMode, existingMcpPort, existingAuth, installDaemon);
525
+ return;
526
+ }
527
+ }
528
+
493
529
  // ── Step 1: Knowledge base path ───────────────────────────────────────────
494
530
  stepHeader(1);
495
531
 
@@ -559,28 +595,6 @@ async function main() {
559
595
  write('\n');
560
596
  stepHeader(6);
561
597
 
562
- // if config exists, ask about overwrite first
563
- if (existsSync(CONFIG_PATH)) {
564
- const overwrite = await askYesNo('cfgExists', CONFIG_PATH);
565
- if (!overwrite) {
566
- let existingMode = 'start';
567
- let existingMcpPort = 8787;
568
- let existingAuth = '';
569
- let existingMindRoot = mindDir;
570
- try {
571
- const existing = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
572
- existingMode = existing.startMode || 'start';
573
- existingMcpPort = existing.mcpPort || 8787;
574
- existingAuth = existing.authToken || '';
575
- existingMindRoot = existing.mindRoot || mindDir;
576
- } catch { /* ignore */ }
577
- console.log(`\n${c.green(t('cfgKept'))} ${c.dim(CONFIG_PATH)}`);
578
- write(c.dim(t('cfgKeptNote') + '\n'));
579
- finish(existingMindRoot, existingMode, existingMcpPort, existingAuth);
580
- return;
581
- }
582
- }
583
-
584
598
  const provider = await select('providerPrompt', 'providerOpts', 'providerVals');
585
599
  const isSkip = provider === 'skip';
586
600
  const isAnthropic = provider === 'anthropic';