kingkont 0.20.8 → 0.20.10
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/index.html +35 -15
- package/lib/providers.js +8 -3
- package/main.js +3 -4
- package/package.json +3 -3
- package/renderer/board.js +3741 -2954
- package/renderer/chat.js +4 -0
- package/renderer/cloudFs.js +174 -3
- package/renderer/cloudProjects.js +248 -93
- package/renderer/drawings.js +261 -0
- package/renderer/generate.js +6 -0
- package/renderer/media.js +9 -3
- package/renderer/notifyPanel.js +4 -1
- package/renderer/settings.js +32 -4
- package/renderer/state.js +18 -10
- package/renderer/styles.css +119 -22
- package/server.js +35 -0
package/index.html
CHANGED
|
@@ -7,6 +7,15 @@
|
|
|
7
7
|
<link rel="stylesheet" href="renderer/styles.css">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
10
|
+
<script>
|
|
11
|
+
// Electron: preload.js выставляет window.cloudFs. Если есть — юзер
|
|
12
|
+
// работает локально и всегда в edit-mode (нет share-preview как в web).
|
|
13
|
+
// Без этой строки в Electron .kk-edit-only элементы остаются скрытыми
|
|
14
|
+
// до тех пор пока openFilm/renderTemplateOverlay добавят body.edit-mode —
|
|
15
|
+
// юзер видит «голый» UI без панелей секунду. На web window.cloudFs
|
|
16
|
+
// undefined → noop, режим определяет web-shim.js по URL.
|
|
17
|
+
if (window.cloudFs) document.body.classList.add('edit-mode');
|
|
18
|
+
</script>
|
|
10
19
|
|
|
11
20
|
<aside class="sidebar">
|
|
12
21
|
<div class="sidebar-header">
|
|
@@ -28,20 +37,20 @@
|
|
|
28
37
|
(cloud или папочный). Облачный — обновляет существующую запись;
|
|
29
38
|
папочный — открывает диалог «куда сохранить» (новый/обновить
|
|
30
39
|
существующий, см. saveCurrentProjectAsCloud). -->
|
|
31
|
-
<button id="saveProjectCloud" title="Загрузить весь проект на сервер" style="display:none; margin-top:6px;">☁ Сохранить на сервер</button>
|
|
40
|
+
<button id="saveProjectCloud" class="kk-edit-only" title="Загрузить весь проект на сервер" style="display:none; margin-top:6px;">☁ Сохранить на сервер</button>
|
|
32
41
|
<div id="rootInfo" style="font-size: 12px; color: #aaa; word-break: break-all;"></div>
|
|
33
42
|
</div>
|
|
34
43
|
|
|
35
|
-
<div class="sidebar-search-row">
|
|
44
|
+
<div class="sidebar-search-row kk-edit-only">
|
|
36
45
|
<input id="sidebarSearch" type="text" placeholder="Поиск…" autocomplete="off">
|
|
37
46
|
</div>
|
|
38
47
|
|
|
39
|
-
<div class="sidebar-section">
|
|
48
|
+
<div class="sidebar-section kk-edit-only">
|
|
40
49
|
<h3>Персонажи <button id="newCharacter" disabled title="Создать персонажа">+</button></h3>
|
|
41
50
|
<div class="sidebar-list" id="characterList"></div>
|
|
42
51
|
</div>
|
|
43
52
|
|
|
44
|
-
<div class="sidebar-section">
|
|
53
|
+
<div class="sidebar-section kk-edit-only">
|
|
45
54
|
<h3>Общее <button id="newLocation" disabled title="Создать общую доску">+</button></h3>
|
|
46
55
|
<div class="sidebar-list" id="locationList"></div>
|
|
47
56
|
</div>
|
|
@@ -49,7 +58,7 @@
|
|
|
49
58
|
<div class="sidebar-section flex">
|
|
50
59
|
<h3>
|
|
51
60
|
<span>Сцены</span>
|
|
52
|
-
<span style="display:flex; gap:4px;">
|
|
61
|
+
<span style="display:flex; gap:4px;" class="kk-edit-only">
|
|
53
62
|
<button id="newEpisode" disabled title="Создать сцену">+</button>
|
|
54
63
|
<!-- Кнопка 🎨 «Шаблоны» убрана из sidebar'а внутри проекта:
|
|
55
64
|
scene-templates в текущей модели не используются (см. упрощение
|
|
@@ -61,7 +70,7 @@
|
|
|
61
70
|
</h3>
|
|
62
71
|
<div class="sidebar-list" id="episodeList"></div>
|
|
63
72
|
</div>
|
|
64
|
-
<div class="sidebar-footer">
|
|
73
|
+
<div class="sidebar-footer kk-edit-only">
|
|
65
74
|
<div id="balancesAll" style="display:flex; flex-direction:column; gap:4px;"></div>
|
|
66
75
|
<!-- jobsInfo + hint убраны (юзер: «убери инфу 'в фоне' и 'перетаскивай
|
|
67
76
|
файлы на холст'»). Отступ сохранён через min-height в CSS — UI
|
|
@@ -117,13 +126,21 @@
|
|
|
117
126
|
|
|
118
127
|
<main class="main">
|
|
119
128
|
<div class="toolbar">
|
|
120
|
-
<button id="addText" disabled title="Создать пустую текстовую ноду">✏️ Написать</button>
|
|
121
|
-
<button id="genText" disabled title="Сгенерировать текст">📝 Текст</button>
|
|
122
|
-
<button id="genAudio" disabled title="Сгенерировать голос">🎙 Голос</button>
|
|
123
|
-
<button id="genImage" disabled title="Сгенерировать картинку">🖼 Картинка</button>
|
|
124
|
-
<button id="genVideo" disabled title="Сгенерировать видео">🎬 Видео</button>
|
|
125
|
-
<button id="genSfx" disabled title="Сгенерировать звуковой эффект (ElevenLabs)">💥 SFX</button>
|
|
126
|
-
<button id="genMusic" disabled title="Сгенерировать музыку (ElevenLabs)">🎵 Музыка</button>
|
|
129
|
+
<button id="addText" class="kk-edit-only" disabled title="Создать пустую текстовую ноду">✏️ Написать</button>
|
|
130
|
+
<button id="genText" class="kk-edit-only" disabled title="Сгенерировать текст">📝 Текст</button>
|
|
131
|
+
<button id="genAudio" class="kk-edit-only" disabled title="Сгенерировать голос">🎙 Голос</button>
|
|
132
|
+
<button id="genImage" class="kk-edit-only" disabled title="Сгенерировать картинку">🖼 Картинка</button>
|
|
133
|
+
<button id="genVideo" class="kk-edit-only" disabled title="Сгенерировать видео">🎬 Видео</button>
|
|
134
|
+
<button id="genSfx" class="kk-edit-only" disabled title="Сгенерировать звуковой эффект (ElevenLabs)">💥 SFX</button>
|
|
135
|
+
<button id="genMusic" class="kk-edit-only" disabled title="Сгенерировать музыку (ElevenLabs)">🎵 Музыка</button>
|
|
136
|
+
<span class="toolbar-sep kk-edit-only"></span>
|
|
137
|
+
<button data-draw-tool="paint" class="kk-edit-only" title="Рисование краской — нарисуй линию на холсте. Esc — отмена. Удаление: Backspace или ×.">🖌</button>
|
|
138
|
+
<!-- View-only banner: in-place в toolbar'е (вместо edit-кнопок).
|
|
139
|
+
Видна только в body.view-only-mode (см. styles.css .kk-view-only-banner). -->
|
|
140
|
+
<div id="viewOnlyBanner" class="kk-view-only-banner">
|
|
141
|
+
<span class="kk-vo-label">👁 <b>Только просмотр</b></span>
|
|
142
|
+
<button id="viewOnlyCloneBtn" class="primary">📋 Скопировать себе</button>
|
|
143
|
+
</div>
|
|
127
144
|
<span class="spacer"></span>
|
|
128
145
|
<div class="zoom-ctl">
|
|
129
146
|
<button id="zoomOut" title="Уменьшить (Cmd −)">−</button>
|
|
@@ -131,8 +148,8 @@
|
|
|
131
148
|
<button id="zoomIn" title="Увеличить (Cmd +)">+</button>
|
|
132
149
|
</div>
|
|
133
150
|
<button id="charSettingsBtn" style="display:none;" title="Настройки персонажа">⚙</button>
|
|
134
|
-
<button id="timelineBtn" title="Показать/скрыть таймлайн">🎬 Таймлайн</button>
|
|
135
|
-
<button id="chatBtn" title="Открыть/скрыть чат с KingKont (⌘J / Ctrl+J)" onclick="window.kingChat?.toggle?.()">💬 Чат <span style="opacity:0.6; font-size:10px;">⌘J</span></button>
|
|
151
|
+
<button id="timelineBtn" class="kk-edit-only" title="Показать/скрыть таймлайн">🎬 Таймлайн</button>
|
|
152
|
+
<button id="chatBtn" class="kk-edit-only" title="Открыть/скрыть чат с KingKont (⌘J / Ctrl+J)" onclick="window.kingChat?.toggle?.()">💬 Чат <span style="opacity:0.6; font-size:10px;">⌘J</span></button>
|
|
136
153
|
<!-- скрытые, но используемые элементы (logic ссылается по id) -->
|
|
137
154
|
<span id="hint" class="path" style="display:none;"></span>
|
|
138
155
|
<span id="boardBadge" class="badge" style="display:none;"></span>
|
|
@@ -620,6 +637,9 @@
|
|
|
620
637
|
<script src="renderer/chat.js"></script>
|
|
621
638
|
<!-- notifyPanel.js — окно событий (генерации, чат-ответы, ошибки). 🔔 в углу. -->
|
|
622
639
|
<script src="renderer/notifyPanel.js"></script>
|
|
640
|
+
<!-- drawings.js — freehand-стрелки на доске (карандаш/грифель/краска).
|
|
641
|
+
После board.js — использует state.currentBoard и хук в renderConnections. -->
|
|
642
|
+
<script src="renderer/drawings.js"></script>
|
|
623
643
|
|
|
624
644
|
</body>
|
|
625
645
|
</html>
|
package/lib/providers.js
CHANGED
|
@@ -1092,8 +1092,12 @@ async function deleteTemplate(id, s) {
|
|
|
1092
1092
|
|
|
1093
1093
|
async function listProjects(s) {
|
|
1094
1094
|
const headers = chatiumAuthHeaders(s);
|
|
1095
|
-
|
|
1096
|
-
|
|
1095
|
+
// /proj_list — новый endpoint, отдаёт isPublic / shared / permission /
|
|
1096
|
+
// canModify / firstImageUrl. Старый /projects~list закеширован под
|
|
1097
|
+
// owner-only без этих полей; см. spaces/server/api/proj_list.ts.
|
|
1098
|
+
const url = chatiumBase(s) + '/app/spaces/server/api/proj_list';
|
|
1099
|
+
logCall('GET ', 'Chatium', url);
|
|
1100
|
+
const r = await fetch(url, { headers });
|
|
1097
1101
|
const text = await r.text();
|
|
1098
1102
|
let d; try { d = JSON.parse(text); } catch { d = { raw: text }; }
|
|
1099
1103
|
if (!r.ok) throw new Error(d?.error || d?.reason || `HTTP ${r.status}`);
|
|
@@ -1102,7 +1106,8 @@ async function listProjects(s) {
|
|
|
1102
1106
|
|
|
1103
1107
|
async function getProject(id, s) {
|
|
1104
1108
|
const headers = chatiumAuthHeaders(s);
|
|
1105
|
-
|
|
1109
|
+
// /proj_get — расширенный endpoint с isPublic + permission + share-grants.
|
|
1110
|
+
const url = `${chatiumBase(s)}/app/spaces/server/api/proj_get?id=${encodeURIComponent(id)}`;
|
|
1106
1111
|
logCall('GET ', 'Chatium', url);
|
|
1107
1112
|
const r = await fetch(url, { headers });
|
|
1108
1113
|
const text = await r.text();
|
package/main.js
CHANGED
|
@@ -953,10 +953,9 @@ function buildMenu() {
|
|
|
953
953
|
{ role: 'reload' },
|
|
954
954
|
{ role: 'toggleDevTools' },
|
|
955
955
|
{ type: 'separator' },
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
{ role: '
|
|
959
|
-
{ type: 'separator' },
|
|
956
|
+
// Zoom-роли (Cmd+0 / Cmd+= / Cmd+-) сознательно убраны: с zoom'ом
|
|
957
|
+
// ломалась раскладка холста и юзер случайно его триггерил при
|
|
958
|
+
// обычной правке. Если когда-то понадобится — `{ role: 'zoomIn' }`.
|
|
960
959
|
{ role: 'togglefullscreen' },
|
|
961
960
|
],
|
|
962
961
|
},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kingkont",
|
|
3
|
-
"version": "0.20.
|
|
4
|
-
"description": "KingKont
|
|
3
|
+
"version": "0.20.10",
|
|
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": {
|
|
7
7
|
"kingkont": "bin/kingkont.js"
|
|
@@ -89,4 +89,4 @@
|
|
|
89
89
|
"icon": "assets/logo-1024.png"
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
}
|
|
92
|
+
}
|