kingkont 0.7.12 → 0.7.14

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/index.html +4 -4
  2. package/package.json +4 -1
  3. package/server.js +31 -31
package/index.html CHANGED
@@ -1824,19 +1824,19 @@ async function plannedProvider(kind) {
1824
1824
  const hasChatium = !!(s.useChatium && s.chatium?.token && s.chatium?.base);
1825
1825
  switch (kind) {
1826
1826
  case 'text':
1827
- if (hasChatium) return 'chatium';
1827
+ if (hasChatium) return 'kingkont';
1828
1828
  if (s.useOpenrouter !== false) return 'openrouter';
1829
1829
  return 'none';
1830
1830
  case 'audio': case 'tts': case 'sfx': case 'music':
1831
- if (hasChatium) return 'chatium';
1831
+ if (hasChatium) return 'kingkont';
1832
1832
  if (s.useElevenlabs !== false) return 'elevenlabs';
1833
1833
  return 'none';
1834
1834
  case 'video':
1835
- if (hasChatium) return 'chatium';
1835
+ if (hasChatium) return 'kingkont';
1836
1836
  if (s.useKie !== false) return 'kie';
1837
1837
  return 'none';
1838
1838
  case 'image':
1839
- if (hasChatium) return 'chatium';
1839
+ if (hasChatium) return 'kingkont';
1840
1840
  if (s.useKie !== false) return 'kie';
1841
1841
  return 'none';
1842
1842
  default:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.7.12",
3
+ "version": "0.7.14",
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": {
@@ -46,6 +46,9 @@
46
46
  "devDependencies": {
47
47
  "electron-builder": "^25.1.8"
48
48
  },
49
+ "overrides": {
50
+ "global-agent": "npm:lodash.noop@3.0.1"
51
+ },
49
52
  "build": {
50
53
  "appId": "com.kingkont.editor",
51
54
  "productName": "KingKont",
package/server.js CHANGED
@@ -308,18 +308,18 @@ async function handleGenerate(req, res) {
308
308
  }
309
309
  }
310
310
  const taskId = await chatiumStart(s, chatiumKind, chatiumBody);
311
- return send(res, 200, { taskId: 'chatium:' + taskId }, { 'X-Provider': 'chatium' });
311
+ return send(res, 200, { taskId: 'chatium:' + taskId }, { 'X-Provider': 'kingkont' });
312
312
  } catch (e) {
313
313
  logProviderCall('ERR ', 'Chatium', `/api/${kind}`, e.message);
314
- return send(res, 502, { error: 'Chatium: ' + e.message }, { 'X-Provider': 'chatium' });
314
+ return send(res, 502, { error: 'KingKont: ' + e.message }, { 'X-Provider': 'kingkont' });
315
315
  }
316
316
  }
317
317
 
318
318
  // Прямой KIE (image и video).
319
319
  if (!s.useKie) {
320
320
  return send(res, 503, { error: kind === 'video'
321
- ? 'Видео-коннектор отключён. Включите Chatium или KIE.'
322
- : 'Картиночный коннектор отключён. Включите Chatium или KIE.' });
321
+ ? 'Войдите в KingKont или KIE для видео.'
322
+ : 'Войдите в KingKont или KIE для картинок.' });
323
323
  }
324
324
 
325
325
  const input = { prompt };
@@ -382,14 +382,14 @@ async function handlePoll(res, url) {
382
382
  const realId = taskId.slice('chatium:'.length);
383
383
  const s = getSettings();
384
384
  if (!s.chatium?.token || !s.chatium?.base) {
385
- return send(res, 401, { status: 'error', error: 'Нет Chatium-сессии' }, { 'X-Provider': 'chatium' });
385
+ return send(res, 401, { status: 'error', error: 'Нет Chatium-сессии' }, { 'X-Provider': 'kingkont' });
386
386
  }
387
387
  try {
388
388
  let d = await chatiumPoll(s, realId);
389
- const provider = { 'X-Provider': 'chatium' };
389
+ const provider = { 'X-Provider': 'kingkont' };
390
390
  if (d.status === 'completed') {
391
391
  const url2 = d.result?.urls?.[0];
392
- if (!url2) return send(res, 200, { status: 'error', error: 'Chatium вернул без URL' }, provider);
392
+ if (!url2) return send(res, 200, { status: 'error', error: 'KingKont вернул без URL' }, provider);
393
393
  // Билинг приходит ОТДЕЛЬНЫМ callback'ом. Если creditsCharged ещё
394
394
  // null, ждём до 5 сек — обычно billed подоспеет за секунду-две.
395
395
  if (typeof d.creditsCharged !== 'number') {
@@ -411,7 +411,7 @@ async function handlePoll(res, url) {
411
411
  }
412
412
  return send(res, 200, { status: 'pending', state: d.status }, provider);
413
413
  } catch (e) {
414
- return send(res, 502, { status: 'error', error: 'Chatium: ' + e.message }, { 'X-Provider': 'chatium' });
414
+ return send(res, 502, { status: 'error', error: 'KingKont: ' + e.message }, { 'X-Provider': 'kingkont' });
415
415
  }
416
416
  }
417
417
 
@@ -459,11 +459,11 @@ async function handleUpload(req, res) {
459
459
  });
460
460
  if (!ru.ok) {
461
461
  const t = await ru.text();
462
- return send(res, ru.status, { error: 'Chatium upload-url: ' + t.slice(0, 200) }, { 'X-Provider': 'chatium' });
462
+ return send(res, ru.status, { error: 'KingKont upload-url: ' + t.slice(0, 200) }, { 'X-Provider': 'kingkont' });
463
463
  }
464
464
  const { uploadUrl } = await ru.json();
465
465
  if (!uploadUrl) {
466
- return send(res, 502, { error: 'Chatium не вернул uploadUrl' }, { 'X-Provider': 'chatium' });
466
+ return send(res, 502, { error: 'KingKont не вернул uploadUrl' }, { 'X-Provider': 'kingkont' });
467
467
  }
468
468
  // 2) Multipart-POST с полем "Filedata" — формат Chatium-fileservice.
469
469
  logProviderCall('POST', 'Chatium', uploadUrl, `file=${filename} size=${buf.length}`);
@@ -474,7 +474,7 @@ async function handleUpload(req, res) {
474
474
  if (!ru2.ok || !hashOrErr) {
475
475
  return send(res, ru2.status || 502, {
476
476
  error: `Chatium upload HTTP ${ru2.status}: ${hashOrErr.slice(0, 200)}`,
477
- }, { 'X-Provider': 'chatium' });
477
+ }, { 'X-Provider': 'kingkont' });
478
478
  }
479
479
  // Response = plain text hash.
480
480
  return send(res, 200, {
@@ -482,16 +482,16 @@ async function handleUpload(req, res) {
482
482
  fileName: filename,
483
483
  size: buf.length,
484
484
  hash: hashOrErr,
485
- }, { 'X-Provider': 'chatium' });
485
+ }, { 'X-Provider': 'kingkont' });
486
486
  } catch (e) {
487
487
  logProviderCall('ERR ', 'Chatium', '/api/upload', e.message);
488
- return send(res, 502, { error: 'Chatium upload: ' + e.message }, { 'X-Provider': 'chatium' });
488
+ return send(res, 502, { error: 'KingKont upload: ' + e.message }, { 'X-Provider': 'kingkont' });
489
489
  }
490
490
  }
491
491
 
492
492
  // Прямой KIE (fallback).
493
493
  if (!s.useKie) {
494
- return send(res, 503, { error: 'Upload-коннектор отключён. Включите Chatium или KIE.' });
494
+ return send(res, 503, { error: 'Войдите в KingKont или KIE для загрузки файлов.' });
495
495
  }
496
496
  if (buf.length > 10 * 1024 * 1024) {
497
497
  return send(res, 413, { error: `файл слишком большой для KIE (${(buf.length/1024/1024).toFixed(1)} MB), лимит 10MB` });
@@ -588,16 +588,16 @@ async function handleText(req, res) {
588
588
  text: result.result?.text || '',
589
589
  model,
590
590
  cost: typeof result.creditsCharged === 'number' ? result.creditsCharged : null,
591
- }, { 'X-Provider': 'chatium' });
591
+ }, { 'X-Provider': 'kingkont' });
592
592
  } catch (e) {
593
593
  logProviderCall('ERR ', 'Chatium', '/api/text', e.message);
594
- return send(res, 502, { error: 'Chatium: ' + e.message }, { 'X-Provider': 'chatium' });
594
+ return send(res, 502, { error: 'KingKont: ' + e.message }, { 'X-Provider': 'kingkont' });
595
595
  }
596
596
  }
597
597
 
598
598
  // Прямой OpenRouter (если useOpenrouter включён).
599
599
  if (!s.useOpenrouter) {
600
- return send(res, 503, { error: 'Текстовый коннектор отключён в настройках. Включите Chatium или OpenRouter.' });
600
+ return send(res, 503, { error: 'Войдите в KingKont или OpenRouter для генерации текста.' });
601
601
  }
602
602
  const key = process.env.OPENROUTER_API_KEY;
603
603
  if (!key) return send(res, 500, { error: 'OPENROUTER_API_KEY не задан' });
@@ -638,7 +638,7 @@ async function handleText(req, res) {
638
638
  async function handleTransactions(req, res) {
639
639
  const s = getSettings();
640
640
  if (!s.useChatium || !s.chatium?.token || !s.chatium?.base) {
641
- return send(res, 503, { error: 'Chatium не подключён' });
641
+ return send(res, 503, { error: 'KingKont не подключён' });
642
642
  }
643
643
  const url = s.chatium.base.replace(/\/$/, '') + CHATIUM_PATHS.transactions;
644
644
  logProviderCall('GET ', 'Chatium', url);
@@ -649,11 +649,11 @@ async function handleTransactions(req, res) {
649
649
  if (!r.ok) {
650
650
  return send(res, r.status, {
651
651
  error: data?.reason || data?.error || `HTTP ${r.status}`,
652
- }, { 'X-Provider': 'chatium' });
652
+ }, { 'X-Provider': 'kingkont' });
653
653
  }
654
- send(res, 200, data, { 'X-Provider': 'chatium' });
654
+ send(res, 200, data, { 'X-Provider': 'kingkont' });
655
655
  } catch (e) {
656
- send(res, 502, { error: 'Chatium: ' + e.message }, { 'X-Provider': 'chatium' });
656
+ send(res, 502, { error: 'KingKont: ' + e.message }, { 'X-Provider': 'kingkont' });
657
657
  }
658
658
  }
659
659
 
@@ -661,7 +661,7 @@ async function handleTransactions(req, res) {
661
661
  async function handleBalance(req, res) {
662
662
  const s = getSettings();
663
663
  if (!s.useChatium || !s.chatium?.token || !s.chatium?.base) {
664
- return send(res, 503, { error: 'Chatium не подключён' });
664
+ return send(res, 503, { error: 'KingKont не подключён' });
665
665
  }
666
666
  const url = s.chatium.base.replace(/\/$/, '') + CHATIUM_PATHS.balance;
667
667
  logProviderCall('GET ', 'Chatium', url);
@@ -674,11 +674,11 @@ async function handleBalance(req, res) {
674
674
  if (!r.ok) {
675
675
  return send(res, r.status, {
676
676
  error: data?.reason || data?.error || `HTTP ${r.status}`,
677
- }, { 'X-Provider': 'chatium' });
677
+ }, { 'X-Provider': 'kingkont' });
678
678
  }
679
- send(res, 200, data, { 'X-Provider': 'chatium' });
679
+ send(res, 200, data, { 'X-Provider': 'kingkont' });
680
680
  } catch (e) {
681
- send(res, 502, { error: 'Chatium: ' + e.message }, { 'X-Provider': 'chatium' });
681
+ send(res, 502, { error: 'KingKont: ' + e.message }, { 'X-Provider': 'kingkont' });
682
682
  }
683
683
  }
684
684
 
@@ -692,7 +692,7 @@ async function handleSfx(req, res) {
692
692
  return handleAudioViaChatium(res, s, { kind: 'sfx', text, durationSeconds });
693
693
  }
694
694
  if (!s.useElevenlabs) {
695
- return send(res, 503, { error: 'Аудио-коннектор отключён. Включите Chatium или ElevenLabs.' });
695
+ return send(res, 503, { error: 'Войдите в KingKont или ElevenLabs для аудио.' });
696
696
  }
697
697
  const key = process.env.ELEVENLABS_API_KEY;
698
698
  if (!key) return send(res, 500, { error: 'ELEVENLABS_API_KEY не задан' });
@@ -722,7 +722,7 @@ async function handleMusic(req, res) {
722
722
  return handleAudioViaChatium(res, s, { kind: 'music', prompt, durationMs });
723
723
  }
724
724
  if (!s.useElevenlabs) {
725
- return send(res, 503, { error: 'Аудио-коннектор отключён. Включите Chatium или ElevenLabs.' });
725
+ return send(res, 503, { error: 'Войдите в KingKont или ElevenLabs для аудио.' });
726
726
  }
727
727
  const key = process.env.ELEVENLABS_API_KEY;
728
728
  if (!key) return send(res, 500, { error: 'ELEVENLABS_API_KEY не задан' });
@@ -793,7 +793,7 @@ async function handleTts(req, res) {
793
793
 
794
794
  // Прямой ElevenLabs (только eleven_v3, остальные модели только через Chatium).
795
795
  if (!s.useElevenlabs) {
796
- return send(res, 503, { error: 'Аудио-коннектор отключён. Включите Chatium или ElevenLabs.' });
796
+ return send(res, 503, { error: 'Войдите в KingKont или ElevenLabs для аудио.' });
797
797
  }
798
798
  const key = process.env.ELEVENLABS_API_KEY;
799
799
  if (!key) return send(res, 500, { error: 'ELEVENLABS_API_KEY не задан' });
@@ -821,10 +821,10 @@ async function handleAudioViaChatium(res, s, body) {
821
821
  const result = await chatiumWait(s, taskId, 180000);
822
822
  const url = result.result?.urls?.[0];
823
823
  if (!url) {
824
- return send(res, 502, { error: 'Chatium завершил аудио-задачу без URL результата' }, { 'X-Provider': 'chatium' });
824
+ return send(res, 502, { error: 'Chatium завершил аудио-задачу без URL результата' }, { 'X-Provider': 'kingkont' });
825
825
  }
826
826
  logProviderCall('GET ', 'Chatium', url, '(downloading audio)');
827
- const headers = { 'X-Provider': 'chatium' };
827
+ const headers = { 'X-Provider': 'kingkont' };
828
828
  if (typeof result.creditsCharged === 'number') {
829
829
  headers['X-Cost-Credits'] = String(result.creditsCharged);
830
830
  }
@@ -832,7 +832,7 @@ async function handleAudioViaChatium(res, s, body) {
832
832
  } catch (e) {
833
833
  logProviderCall('ERR ', 'Chatium', '/api/audio', e.message);
834
834
  if (!res.headersSent) {
835
- send(res, 502, { error: 'Chatium: ' + e.message }, { 'X-Provider': 'chatium' });
835
+ send(res, 502, { error: 'KingKont: ' + e.message }, { 'X-Provider': 'kingkont' });
836
836
  } else {
837
837
  res.end();
838
838
  }