kingkont 0.20.42 → 0.20.43

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.20.42",
3
+ "version": "0.20.43",
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": {
@@ -17,8 +17,12 @@
17
17
  // автоматически вставляется из state и window.appVersion/cloudFs.
18
18
 
19
19
  (function () {
20
- const FLUSH_INTERVAL_MS = 3000; // обычный таймер
21
- const MAX_BUFFER = 200; // защита от пика flush'нем форсом
20
+ // Юзер: «если происходят проблемы при загрузке референса — я тоже хочу
21
+ // знать из логов, причём ещё до того как генерация закончена». Снизили
22
+ // 3s → 1s, чтобы любая info-строка через секунду максимум была на сервере.
23
+ // event/error и сейчас flush'ятся немедленно (см. ниже).
24
+ const FLUSH_INTERVAL_MS = 1000;
25
+ const MAX_BUFFER = 50; // если буфер набил — flush сразу
22
26
  const MAX_PER_REQUEST = 100; // server ограничивает до 100/batch
23
27
 
24
28
  const PLATFORM = window.cloudFs ? 'electron' : 'web';
package/renderer/state.js CHANGED
@@ -690,10 +690,19 @@ function logJob(nodeId, msg) {
690
690
  // Юзер: «все логи генераций должны писаться на сервер с указанием что
691
691
  // делалось, в какой сцене — чтобы я мог считать когда говорю
692
692
  // 'у пользователя email проблема с последней генерацией'».
693
+ //
694
+ // Уровень определяется по содержимому строки — error/event flush'атся
695
+ // немедленно, info ждёт обычный 1s-батч.
696
+ // Юзер: «если проблемы при загрузке референса — хочу знать ещё до того
697
+ // как генерация закончена; на любом этапе если не случилась генерация
698
+ // или случилась не та что ожидали — нужно знать». Поэтому ключевые
699
+ // milestones (upload start/done, request body, taskId, poll done) идут
700
+ // как event → flush сразу.
693
701
  try {
694
- const lvl = /error|failed|fail|ошиб/i.test(msg) ? 'error'
695
- : /✓|done|success|gen start|generate|готов/i.test(msg) ? 'event'
696
- : 'info';
702
+ const lvl =
703
+ /error|failed|✗\s|ошиб|reject|invalid/i.test(msg) ? 'error' :
704
+ /gen start|gen ERROR|✓|done\s|✓ ok|→ POST|POST \/api\/|via\s+\w+\s+HTTP|taskId=|done →|↳ ok|↳ FAILED|upload (ref|summary)|списано|cost=|i2v=|frame_images|imageInputs|provider error|video params|gen params/i.test(msg) ? 'event' :
705
+ 'info';
697
706
  window.kkGenLogger?.append?.({ nodeId, msg, level: lvl });
698
707
  } catch {}
699
708
  }
@@ -743,12 +752,27 @@ async function plannedProvider(kind) {
743
752
  return '?';
744
753
  }
745
754
  }
746
- // Безопасная сериализация для логов: обрезает длинные строки и убирает blob/handle
755
+ // Безопасная сериализация для логов: обрезает длинные строки и убирает blob/handle.
756
+ // Юзер: «не понимаю, использует ли openai-image-2 референсы; нужно из логов
757
+ // оценить» — поэтому imageInputs/videoInputs/refs/url НЕ обрезаем (URL'ы
758
+ // иначе превращались в '...' и нельзя было сверить hash файла). Остальные
759
+ // длинные строки (prompt > 500ch) урезаем как раньше.
747
760
  function logSafe(obj) {
748
761
  try {
762
+ const URL_FIELDS = new Set(['url', 'image_url', 'image_input', 'imageInputs', 'videoInputs',
763
+ 'firstFrame', 'lastFrame', 'frame_images', 'refs',
764
+ 'reference_image_urls', 'reference_video_urls', 'taskId']);
749
765
  return JSON.stringify(obj, (k, v) => {
750
766
  if (k === 'boardHandle') return v ? `<DirectoryHandle ${v.name || ''}>` : null;
751
- if (typeof v === 'string' && v.length > 200) return v.slice(0, 200) + `…(+${v.length - 200} chars)`;
767
+ // URL-поля сохраняем целиком это часто диагностический материал.
768
+ if (URL_FIELDS.has(k)) return v;
769
+ // Внутри array URL_FIELDS (imageInputs[0], imageInputs[1]) ключи — индексы,
770
+ // там logSafe приходит как k='0','1',... → URL_FIELDS не сработает.
771
+ // Поэтому ниже специально не режем URL-подобные строки.
772
+ if (typeof v === 'string') {
773
+ if (/^https?:\/\//.test(v)) return v; // URL целиком
774
+ if (v.length > 500) return v.slice(0, 500) + `…(+${v.length - 500} chars)`;
775
+ }
752
776
  return v;
753
777
  });
754
778
  } catch (e) { return String(obj); }