Устройство приложения

NodeWise Studio это приложение Electron: один главный процесс, одно окно и небольшой скрипт preload между ними. На этой странице показано, как они делят работу и как одно изменение проходит от щелчка до базы и обратно.

Три части

ЧастьГде работаетЧто делаетГде лежит
MainNode.jsВладеет базой, файлами, сетью и всеми секретами. Применяет команды, ведёт ходы помощника, читает ComfyUI.src/main/
Preloadв окне, до страницыДаёт странице один объект window.electronAPI с постоянным списком вызовов. Больше ничего из Node и Electron до страницы не доходит.src/preload/index.ts
RendererChromium, в песочницеРисует всё: холст (React Flow), панели, чат, настройки. Держит отражение графа, но не сам граф.src/renderer/
Sharedв обоихТипы, схемы, кодек workflow, каталог текстов, уроки и встроенные знания. Чистый код без Electron.src/shared/

Правила, которые действуют везде:

  • Пишет только main. Renderer просит; main проверяет, применяет и отвечает новым состоянием.
  • Секреты не доходят до renderer. Ключи и токены живут в main; окно знает только, есть ли ключ и где он. Безопасность
  • ComfyUI только читается. Каждый вызов ComfyUI или MCP-сервера проходит одну проверку «только чтение». ComfyUI только читается
  • Каждый вызов IPC проверяется: отправитель должен быть собственной страницей приложения, а входные данные должны подходить под схему. IPC между окном и main

Как проходит изменение

Пусть человек перетаскивает ноду:

  1. Renderer. Холст собирает команду: actionId (новый id), expectedRevisionId (версия, которую показывает окно), actor: 'manual' и содержимое, например { type: 'move-node', … }. Каждая правка холста идёт через src/renderer/components/graph/commit.ts в submitManual из src/renderer/services/commands/projection.ts.
  2. Preload. window.electronAPI.commitCommand отправляет её по каналу command:commit.
  3. Main, проверка. src/main/ipc/guard.ts отклоняет отправителя, который не страница приложения.
  4. Main, движок. commitCommand из src/main/commands/commit.ts сверяет запрос со схемой и в одной транзакции SQLite: отклоняет версию, которая уже не текущая (конфликт), применяет содержимое к текущему графу, пишет новую строку в graph_revisions, переводит проект на неё, записывает команду в applied_commands (поэтому повтор того же actionId получает ответ из записи, а не применяется дважды) и обновляет объяснения и открытые предложения.
  5. Обратно. Main отвечает applied, historical, conflict или rejected, всегда вместе с текущей проекцией: графом, его версией и открытым ходом.
  6. Renderer. Хранилища (src/renderer/state/) принимают проекцию; React перерисовывает.

Отмена проходит тот же путь с содержимым restore-revision. Изменения помощника идут тем же путём из самого main, с actor: 'ai' и id его хода. Подробнее: Движок команд и история.

Как проходит ответ помощника

  1. Renderer начинает ход (startRun) и открывает поток по llm:stream-chat (src/renderer/services/llm/chatService.ts).
  2. Main собирает запрос из графа, каталога и последних действий и вызывает выбранную модель через AI SDK (src/main/agent/turn.ts, src/main/llmService.ts).
  3. Каждый вызов инструмента моделью проверяется и выполняется в main: чтение каталога, поиск в интернете, предложение черновика или, при сборке, команда, как выше.
  4. Main передаёт обратно текст, шаги и новые проекции; чат и холст рисуют их по мере прихода.
  5. Ход заканчивается, встаёт на паузу на лимите шагов или останавливается человеком.

Подробнее: Как устроен помощник.

Как читается ComfyUI

Синхронизация (src/main/mcp/sync.ts) читает типы нод, паки нод и файлы моделей через инструменты MCP только для чтения или /object_info прямо из ComfyUI и кладёт их в таблицы каталога. Метаданные моделей читаются в фоне порциями. Подробнее: Чтение ComfyUI.

Рецепты

Что добавитьГде читать
Инструмент помощникаКак добавить инструмент помощнику
НастройкуКак добавить настройку
Канал IPCIPC между окном и main
Миграцию базыБаза данных и миграции
УрокКак написать урок
Встроенные знанияКак написать встроенное знание
ЯзыкТексты и языки
Ссылку из приложения на страницу викиСсылки на справку из приложения

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/dev/Architecture.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.