kingkont 0.7.41 → 0.7.42

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.
Files changed (3) hide show
  1. package/bin/kingkont.js +6 -1
  2. package/main.js +32 -10
  3. package/package.json +1 -1
package/bin/kingkont.js CHANGED
@@ -106,7 +106,12 @@ if (cmd && NODE_COMMANDS[cmd]) {
106
106
  process.env.PORT = String(port);
107
107
  const targetPath = args[1] && !args[1].startsWith('--') ? path.resolve(args[1]) : null;
108
108
  const { start } = require(path.join(root, 'server.js'));
109
- start(port).then(actualPort => {
109
+ // Live-чтение settings.json на каждый запрос — так же как в Electron-режиме
110
+ // (main.js). Без этого use*-флаги и chatium.token не доходят до server.js,
111
+ // и провайдеры (chatium / openrouter / kie / elevenlabs) висят выключенными,
112
+ // даже если юзер залогинен через UI приложения.
113
+ const startOpts = { getSettings: () => settingsLib.loadSettings() };
114
+ start(port, startOpts).then(actualPort => {
110
115
  const url = `http://localhost:${actualPort}/`;
111
116
  console.log(`\n▶ KingKont готов: ${url}`);
112
117
  if (targetPath) console.log(` подразумеваемый проект: ${targetPath}`);
package/main.js CHANGED
@@ -764,19 +764,41 @@ app.whenReady().then(async () => {
764
764
 
765
765
  // Фиксированный порт нужен потому что Chromium хранит IndexedDB и FSAH-handle
766
766
  // per-origin (http://localhost:PORT). Со случайным портом каждый запуск
767
- // получал бы новую пустую IDB. Если порт занят fallback на случайный, но
768
- // тогда recents-handle потеряется (это меньшая беда, чем падение запуска).
769
- // server.js на каждый запрос читает live-настройки через getSettings — это
770
- // позволяет переключать use*-флаги через UI без перезапуска. settings.json
771
- // на диске единственный источник правды; readSettings() делает свежий read.
767
+ // получал бы новую пустую IDB и юзер должен заново указывать папки в recents.
768
+ //
769
+ // RETRY на 17893: при relaunch'е старый instance отпускает singleton-lock
770
+ // быстрее, чем macOS освобождает TCP-сокет (TIME_WAIT). Без retry сразу
771
+ // падаем на random и теряем handle. 8×500мс = 4 сек обычно хватает.
772
+ // server.js на каждый запрос читает live-настройки через getSettings —
773
+ // settings.json на диске единственный источник правды.
772
774
  const startOpts = { getSettings: () => readSettings() };
773
- try {
774
- port = await start(17893, startOpts);
775
- } catch {
776
- console.warn('port 17893 busy, falling back to random');
775
+ const PRIMARY_PORT = 17893;
776
+ const RETRIES = 8;
777
+ let lastErr;
778
+ for (let i = 0; i < RETRIES; i++) {
779
+ try { port = await start(PRIMARY_PORT, startOpts); break; }
780
+ catch (e) {
781
+ lastErr = e;
782
+ if (e.code !== 'EADDRINUSE') break; // не race — нет смысла ретраить
783
+ console.warn(`port ${PRIMARY_PORT} busy (attempt ${i + 1}/${RETRIES}), waiting…`);
784
+ await new Promise(r => setTimeout(r, 500));
785
+ }
786
+ }
787
+ if (!port) {
788
+ // Сначала попробуем фиксированные fallback'и (17894/17895/...) —
789
+ // это сохранит хотя бы часть recents (origin будет стабильным от
790
+ // запуска к запуску при условии что 17893 хронически занят).
791
+ for (const p of [17894, 17895, 17896, 17897, 17898, 17899]) {
792
+ try { port = await start(p, startOpts); console.warn(`fell back to port ${p}`); break; }
793
+ catch { /* try next */ }
794
+ }
795
+ }
796
+ if (!port) {
797
+ // Последний резерв — случайный порт (потеряем handle).
798
+ console.warn('all stable ports busy, falling back to random (recents-handle will be lost)');
777
799
  try { port = await start(0, startOpts); }
778
800
  catch (e) {
779
- console.error('Server failed to start:', e);
801
+ console.error('Server failed to start:', e || lastErr);
780
802
  app.quit();
781
803
  return;
782
804
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.7.41",
3
+ "version": "0.7.42",
4
4
  "description": "KingKont \u00b7 Chatium \u2014 \u043d\u043e\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0446\u0435\u043d \u0441 AI-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438/\u0432\u0438\u0434\u0435\u043e/\u0433\u043e\u043b\u043e\u0441/SFX/\u043c\u0443\u0437\u044b\u043a\u0430/\u0442\u0435\u043a\u0441\u0442)",
5
5
  "main": "main.js",
6
6
  "bin": {