kingkont 0.10.8 → 0.10.9

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.10.8",
3
+ "version": "0.10.9",
4
4
  "description": "KingKont · Chatium — нод-редактор сцен с AI-генерацией (картинки/видео/голос/SFX/музыка/текст)",
5
5
  "main": "main.js",
6
6
  "bin": {
package/renderer/chat.js CHANGED
@@ -219,6 +219,10 @@
219
219
  lines.push('- Если нужен новый id для add_node — оставь поле пустым, вернётся в результате.');
220
220
  lines.push('- Для генерации используй generate_node ПОСЛЕ add_node с promptом.');
221
221
  lines.push('- Отвечай по-русски, кратко. Объясняй что делаешь, без лишней воды.');
222
+ lines.push('');
223
+ lines.push('ВАЖНО: НИКОГДА не пиши <tool_result>...</tool_result> сам — это формат который Я');
224
+ lines.push('пришлю тебе с результатами выполнения. В своих сообщениях ты только зовёшь tools');
225
+ lines.push('через <tool>...</tool> и пишешь обычный текст для пользователя.');
222
226
  return lines.join('\n');
223
227
  }
224
228
 
@@ -240,7 +244,14 @@
240
244
  }
241
245
  function stripToolCalls(text) {
242
246
  if (typeof text !== 'string') return '';
243
- return text.replace(/<tool>[\s\S]*?<\/tool>/g, '').trim();
247
+ // Убираем оба тэга:
248
+ // <tool>JSON</tool> — наш command-protocol (модель так зовёт tools)
249
+ // <tool_result>JSON</tool_result> — модель иногда его галюцинирует
250
+ // в outputе, копируя format из user-msg.
251
+ return text
252
+ .replace(/<tool>[\s\S]*?<\/tool>/g, '')
253
+ .replace(/<tool_result>[\s\S]*?<\/tool_result>/g, '')
254
+ .trim();
244
255
  }
245
256
 
246
257
  // ============== PERSISTENCE ==============
@@ -666,8 +666,13 @@
666
666
  });
667
667
  if (typeof positionFloatingMenu === 'function') {
668
668
  positionFloatingMenu(menu, e.clientX, e.clientY);
669
+ } else {
670
+ menu.style.cssText = `position:fixed; left:${e.clientX}px; top:${e.clientY}px; z-index:9999;`;
669
671
  }
670
- setTimeout(() => document.addEventListener('mousedown', () => menu.classList.add('hidden'), { once: true }), 0);
672
+ // Используем глобальный closeNodeMenu он умеет НЕ закрываться на клик
673
+ // по активной кнопке внутри меню (даёт click-обработчику сработать).
674
+ // Без этого mousedown на кнопке закрывал меню до click → нажатие тонуло.
675
+ setTimeout(() => document.addEventListener('mousedown', closeNodeMenu, { once: true }), 0);
671
676
  });
672
677
  setCloudButtonsVisibility();
673
678
  // Переинициализируем видимость кнопок раз в 5 сек — для случая когда юзер