kingkont 0.18.14 → 0.18.15

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.18.14",
3
+ "version": "0.18.15",
4
4
  "description": "KingKont · Chatium — нод-редактор сцен с AI-генерацией (картинки/видео/голос/SFX/музыка/текст)",
5
5
  "main": "main.js",
6
6
  "bin": {
package/renderer/board.js CHANGED
@@ -280,12 +280,22 @@ function _renderIdentity(wrap, status) {
280
280
  // first, но Chatium может возвращать поле под другим именем —
281
281
  // проверяем все известные варианты + nested user-объект.
282
282
  const u = status.user || status.profile || status.account || {};
283
- const name = status.displayName || status.name || status.fullName
284
- || status.login || status.username || status.userName
285
- || status.confirmedEmail || status.email
286
- || u.displayName || u.name || u.fullName || u.login || u.email
287
- || status.userId || 'KingKont';
288
- const sub = status.userId && status.userId !== name ? `· ${status.userId.slice(0, 8)}` : '';
283
+ let name = status.displayName || status.name || status.fullName
284
+ || status.login || status.username || status.userName
285
+ || status.confirmedEmail || status.email
286
+ || u.displayName || u.name || u.fullName || u.login || u.email
287
+ || null;
288
+ let sub = '';
289
+ if (name && status.userId && status.userId !== name) {
290
+ sub = `· ${status.userId.slice(0, 8)}`;
291
+ }
292
+ if (!name) {
293
+ // Chatium /auth~me возвращает только userId+appName+createdAt —
294
+ // нет ни email, ни displayName. Показываем userId-префикс
295
+ // компактно вместо некрасивого 24-символьного hash'а целиком.
296
+ name = '👤 ' + (status.userId || 'KingKont').slice(0, 10);
297
+ sub = status.userId ? `…${status.userId.slice(-4)}` : '';
298
+ }
289
299
  // Диагностика: если ни одного «человеческого» поля не нашлось —
290
300
  // громкий лог в консоль с полным дампом, чтобы видеть что прислал
291
301
  // сервер (см. main.js [chatium:status] логи тоже).
@@ -381,6 +381,24 @@
381
381
  if (s.filmHandle?.name) return 'folder:' + s.filmHandle.name;
382
382
  return null;
383
383
  }
384
+ // Резолв projectKey (`cloud:<id>` | `folder:<name>`) → читаемое имя.
385
+ // Для cloud — лезем в localStorage cloudProjectsCache (его наполняет
386
+ // welcome.fetchListCached). Для folder — `<name>` уже читаемый.
387
+ function _resolveProjectName(projectKey) {
388
+ if (!projectKey) return '';
389
+ if (projectKey.startsWith('folder:')) return projectKey.slice('folder:'.length);
390
+ if (projectKey.startsWith('cloud:')) {
391
+ const id = projectKey.slice('cloud:'.length);
392
+ try {
393
+ const cached = JSON.parse(localStorage.getItem('cloudProjectsCache') || '[]');
394
+ const found = cached.find(c => c.id === id);
395
+ if (found?.name) return found.name;
396
+ } catch {}
397
+ // Fallback — короткий префикс ID если cache пустой (первый запуск).
398
+ return '☁ ' + id.slice(0, 6);
399
+ }
400
+ return projectKey;
401
+ }
384
402
  function _resolveNodeName(nodeId) {
385
403
  const nodes = window.state?.currentBoard?.metadata?.nodes;
386
404
  if (!Array.isArray(nodes)) return null;
@@ -444,7 +462,11 @@
444
462
  }
445
463
  // Иначе открываем проект.
446
464
  if (pkType === 'cloud') {
447
- if (window.cloudProjects?.open) await window.cloudProjects.open(pkId);
465
+ // Резолвим имя из кэша — иначе brand-title в шапке покажет id.
466
+ // Раньше было `open(pkId)` без имени → handle.name = pkId →
467
+ // юзер видел «cloud:ClBdBcR3...» крупно сверху-слева.
468
+ const name = _resolveProjectName(target.projectKey);
469
+ if (window.cloudProjects?.open) await window.cloudProjects.open(pkId, name);
448
470
  else { alert('Облачный проект недоступен'); return; }
449
471
  } else if (pkType === 'folder') {
450
472
  // Folder-проект: ищем в recents.
@@ -554,9 +576,13 @@
554
576
  } : null;
555
577
  if (e.kind === 'done') {
556
578
  const nameLabel = e.nodeName ? `«${e.nodeName}»` : `(jobId=${(e.jobId||'').slice(0,8)})`;
579
+ // «в <board>» если есть boardKey (читаемо: «episode/Сцена 1»),
580
+ // иначе «в <projectName>» (резолвим cloud-id → имя). Раньше
581
+ // юзер видел raw «cloud:ClBdBcR3...space» — нечитаемо.
582
+ const where = e.boardKey ? ` в ${e.boardKey}` : ` в ${_resolveProjectName(e.projectKey)}`;
557
583
  addEvent({
558
584
  kind: 'ok',
559
- text: `✓ ${e.kindOf || 'gen'} ${nameLabel} готов в ${e.projectKey || ''}`,
585
+ text: `✓ ${e.kindOf || 'gen'} ${nameLabel} готов${where}`,
560
586
  target,
561
587
  });
562
588
  } else if (e.kind === 'failed') {