Редактор экспериментов
Эксперимент — это тест, записанный в виде графа: узлы, которые отправляют (HTTP-запрос, OSC-сообщение, публикацию MQTT…), ждут ответа, проверяют, что пришло, играют роль другой стороны или по сигналу ломают сеть, соединены связями, указывающими, что выполняется дальше. Запуск начинается с узла Старт, идёт по связям и считается пройденным, когда доходит до узла Финиш и все шаги прошли. Эксперимент собирают на экране Эксперименты и там же запускают, а тот же файл можно запустить из командной строки или на сервере.
Редактор держит один эксперимент за раз и сохраняет его по ходу работы. Чтобы хранить несколько, экспортируйте снимки или откройте другой эксперимент из файла (см. Сохранение и файлы).
Все типы узлов, их поля и выходы описаны в справочнике узлов. О том, как значения передаются между узлами, рассказывает страница Данные и шаблоны; о параллельных ветках, циклах, повторах при ошибке и сериях — страница Как идёт запуск.
Экран
| Область | Что в ней |
|---|---|
| Панель инструментов (сверху) | Название эксперимента и состояние сохранения, добавление узлов, параметры, профили, панели, режим фокуса, полноэкранный режим и запуск |
| Панель холста | Отмена и повтор, поиск узла, Упорядочить и масштаб |
| Холст | Граф: узлы, связи и ход запуска, нарисованный на них |
| Параметры (справа) | Поля выбранного узла, его предпросмотр и Отправить сейчас; или то, что можно сделать с несколькими выбранными узлами или с выбранной связью |
| Ход запуска (внизу) | Шаги текущего или последнего запуска, его итог, отчёт и seed |
У панели свойств и ленты запуска на внутреннем краю есть разделитель: перетащите его или поставьте на него фокус клавишей Tab и пользуйтесь стрелками (с Shift шаг больше); двойной щелчок или Enter возвращает панели размер по умолчанию. Размеры запоминаются. Лента запуска остаётся свёрнутой, пока её не откроет первый запуск.
Панель инструментов
| Элемент | Что делает |
|---|---|
| ☰ Эксперименты | Открывает шаблоны, открытие файла JSON и экспорт (Сохранение и файлы) |
| Название эксперимента | Название эксперимента; для запуска оно необходимо. Отчёты о запусках записывают его, и по нему Сравнить находит прежние запуски |
| Сохранено / Сохранение… / Ошибка сохранения | Записано ли последнее изменение на диск |
| ⚠ Завершите схему | Показывается, пока эксперимент не может запуститься; подсказка объясняет почему, щелчок выделяет узел, о котором речь (Проверка) |
| + Добавить нод | Открывает меню добавления — после выбранного узла, если он есть (A) |
| Профиль | Профиль, который используют запуски, предпросмотр и пробная отправка узла; показывается, когда в эксперименте есть профили. ⚠ отмечает профиль, с которым запуск не пройдёт |
{ } Параметры | Параметры, профили, seed, cookie и секреты (Данные и шаблоны) |
| ☷ Параметры | Показывает или скрывает панель свойств |
| ▢ Режим фокуса | Скрывает боковую панель, шапку и нижнюю панель (Режим фокуса и полный экран) |
| ⛶ На весь экран | Окно на весь экран, вместе с режимом фокуса |
| Запустить | Проверяет, сохраняет и запускает эксперимент; пока он идёт, на кнопке — Стоп |
| ▾ Запустить с… | Один запуск с другим профилем, другими значениями параметров или заданным seed, без изменения эксперимента |
Перемещение по холсту
- Сдвиг: перетаскивайте пустой холст или прокручивайте.
- Масштаб: Ctrl и колесо мыши масштабируют вокруг указателя; − и + на панели холста меняют масштаб шагом 10 %. Масштаб — от 15 % до 200 %; процент между кнопками показывает, где вы находитесь.
- 1:1 (Сбросить масштаб, Ctrl+1) возвращает 100 %.
- ⊡ Показать всю схему (Ctrl+0) показывает весь граф, но не крупнее 100 %.
- Поиск узла: кнопка Ноды на панели холста (на ней указано, сколько всего узлов) или Ctrl+F. Введите слова из названия узла, его краткого описания (URL, адрес, топик) или идентификатора; ↑ ↓ выбирают, Enter выделяет узел и показывает его (масштаб не меньше 80 %), Esc закрывает.
Миникарты нет: её работу выполняют Показать всю схему и поиск.
Узлы и связи
Узел показывает свой тип, краткое описание того, что он делает, и значки своих настроек: ↻ и число — повтор при ошибке, × и число (или время) — серия отправок, ⚡ — нагрузка. Вход у узла слева — он есть у каждого узла, кроме Старт, — а выходы справа:
| Выход | У каких узлов | Когда по нему идут |
|---|---|---|
| Выход | У большинства узлов | Шаг прошёл |
| Да / Нет | Ветвление по статусу, Ветвление по значению | Сравнение выполнилось / не выполнилось |
| Поток 1 / Поток 2 | Параллельный запуск | Всегда, оба сразу |
| Получено / Таймаут | Узлы ожидания | Подходящее сообщение пришло / не пришло вовремя |
| Тело / Готово / Лимит | Цикл | Следующая итерация / цикл закончен / итерации кончились |
У выхода может быть несколько связей. Первая связь продолжает ветку; каждая следующая начинает параллельную ветку с копией переменных, известных в этой точке. Узел Слияние потоков ждёт все связи, которые в него входят. Подробности — на странице Как идёт запуск.
Выходы Таймаут и Лимит необязательны: если связи нет, таймаут или исчерпание итераций завершает шаг ошибкой. У всех остальных выходов связь должна быть, иначе эксперимент не запустится.
Связь от тела узла Цикл обратно к нему рисуется дугой над телом; это единственная связь, которая может вести назад.
Добавление узлов
Меню добавления
Меню добавления перечисляет все типы узлов по группам — Действия, Ожидание, Эмуляция, Сбои, Данные, Проверки, Сценарий — а затем Сохранённые сигналы: сигналы вашей библиотеки, которые можно превратить в узел (OSC, HTTP, UDP с текстовым содержимым, MQTT), с уже заполненными полями.
При открытии фокус стоит в поле поиска. Введите несколько букв: каждое слово должно встретиться в названии узла, его описании или типе (http, wait_osc); сигнал находится по названию, папке, протоколу или цели. ↑ ↓ выбирают, Enter добавляет, Esc закрывает. Строка сверху говорит, куда встанет узел: после какого-то узла или параллельно ему.
Новый узел выделяется, панель свойств открывается, а его главное поле — URL, адрес, топик, задержка — получает фокус с выделенным текстом, так что можно сразу печатать. Esc в поле возвращает к узлу на холсте, готовому к следующему A.
После выбранного узла
A, + Добавить нод на панели инструментов и + Добавить следующий на панели свойств добавляют следующий шаг после выбранного узла:
- Он присоединяется к первому выходу узла, у которого ещё нет связи (скажем, к свободному выходу Нет узла Ветвление по статусу), а если такого нет — к первому выходу.
- Если у этого выхода уже есть связь, новый узел вставляется в неё (в первую, если их несколько): теперь связь идёт через новый узел, а всё, что после него, сдвигается вправо, освобождая место.
- Если выбран Финиш, узел встаёт перед ним — когда в него входит одна связь.
- Если ничего не выбрано, узел появляется в середине видимой области, без связей.
Узел с единственным выходом, поставленный на пустой выход Тело узла Цикл — этим способом или на новой связи, — сразу соединяется и обратно с циклом, так что тело получается завершённым.
В связь
У каждой связи посередине есть + (Вставить нод). Он открывает меню добавления, и выбранный узел вставляется в эту связь. Вставленный так узел Цикл продолжает поток через свой выход Готово.
На новой связи
Протяните связь от выхода и отпустите на пустом холсте: там откроется меню добавления, и новый узел встанет на новую связь этого выхода — рядом с уже имеющимися, то есть будет выполняться параллельно им. То же происходит, если щёлкнуть выход, а затем пустой холст или дважды щёлкнуть выход.
В любом месте
Дважды щёлкните пустой холст, чтобы добавить узел в этом месте, без связей.
С других экранов
- Кнопка В эксперимент на экранах OSC и HTTP добавляет то, что вы только что попробовали, как следующий шаг — прямо перед Финиш, если в него входит одна связь, — и переключает на редактор.
- Кнопка Ждать это рядом с сообщением в мониторе OSC добавляет узел Ждать OSC, который его распознаёт: по адресу и по текстовым, целым и логическим (true/false) аргументам (числа с плавающей точкой — меняющиеся измерения, поэтому их оставляют в стороне). Остановите монитор перед запуском: запуск сам слушает этот порт.
- Кнопка Ждать это у топика в дереве MQTT добавляет узел Ждать MQTT на этот топик, на этом брокере.
Пока идёт запуск, узлы добавлять нельзя; консоль сообщает об этом.
Соединение узлов
- Перетащите связь от выхода на узел. Достаточно отпустить её не дальше 24 пикселей от узла.
- Щёлкните выход (или поставьте на него фокус и нажмите Enter или Space): на панели холста появится Выберите входящий порт. Щёлкните узел или его вход, чтобы соединить; щёлкните пустой холст, чтобы добавить там узел на новой связи; чтобы отказаться, нажмите Отмена или Esc.
Связь отклоняется, если создаёт цикл (кроме обратной связи узла Цикл), если ведёт в Старт или выходит из Финиш, а также если соединяет узел с ним самим; редактор об этом сообщает. Если провести уже существующую связь, ничего не изменится.
Чтобы удалить связь, щёлкните её — панель свойств покажет, что она соединяет, — и нажмите Delete или воспользуйтесь там кнопкой Удалить связь. Если навести указатель на связь, над её + появится ×. В свойствах узла перечислены его исходящие связи, у каждой есть × (Разъединить).
Выбор нескольких узлов
| Что сделать | Как |
|---|---|
| Выбрать узел | Щёлкнуть его или перейти к нему клавишей Tab |
| Добавить узел в выделение или убрать из него | Shift или Ctrl и щелчок |
| Выделить рамкой | Shift и протяжка по пустому холсту: в выделение попадает каждый узел, которого коснулась рамка |
| Выделить все узлы | Ctrl+A |
| Снять выделение | Щёлкнуть пустой холст; Esc, если выбрано несколько узлов |
| Переместить | Перетащить один из них: двигаются все |
| Сдвинуть понемногу | Когда фокус на узле, стрелки двигают выделение на 5 пикселей, с Shift — на 20 |
Панель свойств показывает узел, выбранный последним; если выбрано несколько, она показывает их число и кнопки Копировать, Дублировать и Удалить ноды.
Копирование, вырезание и вставка
Ctrl+C копирует выбранные узлы и связи между ними как текст; Ctrl+X ещё и удаляет их; Ctrl+V вставляет — в этот эксперимент, в другой, открытый позже, или в другое окно Signal Lab. Этот текст — JSON, поэтому его можно сохранить и в файле, и в сообщении.
- Старт и Финиш бывают только в единственном экземпляре: их никогда не копируют.
- Связи между скопированным узлом и остальным графом не копируются; соедините копию сами.
- Каждый вставленный узел получает новый идентификатор.
- Узел, который ссылается на другой узел — Сменить помехи, Эмулятор: выкл./вкл., Отправка WebSocket, Ожидание WebSocket, Закрытие WebSocket, — ссылается на копию, если скопирован и тот; иначе он по-прежнему ссылается на оригинал, если тот есть в этом эксперименте, или на первый узел такого типа в нём.
- Вставленный Эмулятор или Сетевые помехи, порт которого этот эксперимент уже слушает, переходит на следующий свободный порт. То, что отправляет на оригинал, продолжает отправлять на него.
- Копия появляется на 32 пикселя правее и на одну строку ниже оригинала, а если место занято — ещё ниже, пока не перестанет перекрывать узлы, и оказывается выделенной.
Ctrl+D (Дублировать) делает то же без буфера обмена.
Удаление
Delete или Backspace (Удалить нод, Удалить ноды) удаляют выбранные узлы и их связи. Если у узла была ровно одна входящая и одна исходящая связь, на его месте остаётся связь от предыдущего узла к следующему, так что цепочка не рвётся. Узлы Старт и Финиш удалить нельзя.
Отмена и повтор
Ctrl+Z отменяет; Ctrl+Shift+Z или Ctrl+Y возвращает отменённое (↶ ↷ на панели холста). Перетаскивание, серия сдвигов стрелками или набор текста в одном поле — один шаг. Последние 100 шагов хранятся, пока приложение открыто, в том числе при переключении экранов; открытие другого эксперимента — тоже один шаг, так что Ctrl+Z возвращает предыдущий. Пока идёт запуск, отмена и повтор недоступны.
Упорядочение
Упорядочить раскладывает граф слева направо: каждый узел встаёт в столбец после последнего узла, который к нему ведёт, тело узла Цикл — в свою строку, — а затем подбирает масштаб, чтобы граф поместился. Это один шаг истории. Черновик с циклом, который не относится к циклу-узлу, остаётся как есть.
Панель свойств
Когда выбран один узел, панель показывает сверху вниз:
- Название узла (его подсказка объясняет, что он делает) и, если эксперимент не может запуститься из-за этого узла, что именно не так.
- Его поля. Поля, которые принимают шаблоны, предлагают параметры, переменные, секреты и генераторы, когда вы вводите
{{или нажимаете Ctrl+Space. - Его настройки: отправлять под нагрузкой у HTTP-запроса, отправлять серией у узлов, которые отправляют, повторять при ошибке у узлов, которые отправляют или слушают, и ждать ответ у OSC- и UDP-сообщений (см. Настройки узлов). Пока нагрузка включена, она заменяет серию отправок и повтор при ошибке.
- Результат последней нагрузки — у HTTP-узла, который работал под нагрузкой.
- Предпросмотр — Будет отправлено, Будет ожидаться или Будет сравниваться — если в узле есть шаблоны: что он отправит, чего будет ждать или что сравнит, с подстановкой текущих параметров и значений, известных на данный момент (Пробная отправка и предпросмотр).
- Отправить сейчас или Слушать сейчас и то, что она сделала в последний раз.
- Исходящие связи узла, у каждой ×.
- ⚡ Пропустить через помехи у OSC- или UDP-сообщения: перед узлом ставится Сетевые помехи — он слушает свободный порт на loopback начиная с 9010 и пересылает на цель узла, — а узел перенаправляется на него, так что следующий запуск ухудшает то, что узел отправляет (Сбои).
- + Добавить следующий, Копировать, Дублировать и Удалить нод.
Двойной щелчок по узлу открывает панель с курсором в его главном поле. Если выбрано несколько узлов, панель предлагает то, что можно сделать со всеми сразу; если выбрана связь — что она соединяет и Удалить связь. Пока идёт запуск, поля заблокированы.
Пробная отправка и предпросмотр
Кнопка Отправить сейчас (Ctrl+Enter, в том числе из полей узла) отправляет выбранный узел сам по себе, не запуская эксперимент, тем же кодом, что и запуск. Она есть у узлов HTTP-запрос, TCP-сообщение, OSC-сообщение, UDP-датаграмма, Публикация MQTT, Подключение WebSocket и Отправка WebSocket. У узлов ожидания вместо неё Слушать сейчас: ожидание слушает с этого момента, пока не подойдёт сообщение или не истечёт таймаут.
- Узел использует активный профиль, сохранённые секреты и значения переменных, известные к этому моменту, — из последнего запуска и из прежних результатов Отправить сейчас. Если шаблон называет значение, которого пока никто не задал, ничего не отправляется, а имена перечисляются.
- Отправка выполняется один раз: повтор при ошибке, серия отправок и нагрузка не применяются, cookie не сохраняются, а эмуляторы и реле эксперимента не запускаются.
- Отправка WebSocket или Ожидание WebSocket открывает соединение, описанное в его Подключение WebSocket, на время этой одной пробы.
- У HTTP-запроса показывается ответ — статус, время, размер и тело, отформатированное как JSON. Значения, которые заберут узлы Извлечь значение, стоящие после запроса, подставляются сразу. Щёлкните значение в JSON-ответе, чтобы сразу после запроса добавить узел Извлечь значение для него — с названной переменной и известным значением. Кнопка Сымитировать превращает ответ в маршрут эмулятора.
- Результат записывается и в консоль.
Предпросмотр тоже вычисляется движком — примерно через четверть секунды после изменения. Значения секретов не показываются ни там, ни где-либо ещё.
Проверка
Редактор проверяет эксперимент по ходу правки и ещё раз, когда вы нажимаете Запустить:
- Выход, которому ещё нужна связь, пульсирует янтарным.
- Узел, до которого не доходит ни одна связь от Старт, рисуется пунктиром; его подсказка это объясняет.
- Узел, о котором говорит проблема, обводится, а сама проблема написана над его полями.
- ⚠ Завершите схему на панели инструментов называет проблему; щелчок выделяет узел.
Эксперимент запускается, если, помимо прочего:
- у него есть название, ровно один Старт и один Финиш, и не больше 64 узлов;
- каждый узел достижим из Старт, а у каждого обязательного выхода есть связь;
- единственные циклы — тела узлов Цикл, ведущие обратно к ним;
- перед каждой проверкой и каждым Извлечь значение на любом пути есть HTTP-запрос (запрос под нагрузкой не считается: он не оставляет ответа);
- Отправка WebSocket, Ожидание WebSocket или Закрытие WebSocket стоит после Подключение WebSocket, который он использует;
- каждое поле заполнено и в допустимых пределах, а каждый шаблон называет то, что известно в этой точке.
Незаконченные черновики всё равно сохраняются. Запуск отклоняется, ещё до какого-либо трафика, если не сохранён нужный ему секрет. Все сообщения перечислены в справочнике ошибок.
Запуск
Запустить проверяет эксперимент, сохраняет и запускает его. Если запустить нельзя, показывается проблема и выделяется её узел. Иначе открывается лента запуска, и узлы загораются по мере того, как до них доходит запуск: ● выполняется, ✓ пройден, ✕ ошибка, ↻ повтор, ⟳ серия, ⚡ под нагрузкой; связи, по которым шёл поток, тоже окрашиваются.
- Узлы ожидания, эмуляторы и реле помех открывают свои порты до первого шага, так что ничего из пришедшего раньше не пропадёт. Порт, который не удалось открыть (скажем, его занимает другая программа), не даёт запуску начаться, и показывается узел, которому он нужен.
- Стоп немедленно завершает запуск, включая паузы, ожидания и нагрузки. Запуск — это ещё и задача в полосе задач консоли, откуда её тоже можно остановить.
- Запуск, который длится дольше 300 секунд, останавливается и завершается ошибкой.
- Пока идёт запуск, эксперимент нельзя редактировать; сдвиг, масштаб и выделение работают.
▾ Запустить с… рядом с кнопкой запускает эксперимент один раз с другим профилем, другими значениями параметров или заданным seed; сам эксперимент не меняется, а форма хранит введённое до закрытия приложения (Данные и шаблоны).
Ход запуска
Панель Ход запуска перечисляет по строке на шаг: время, узел и что произошло — пройден, ошибка и почему, повтор, ход серии отправок, цифры нагрузки раз в секунду. Щёлкните строку, чтобы выделить её узел на холсте.
В её заголовке:
- итог: Успешно, Ошибка с причиной или Остановлено;
- Отчёт сохранён — файл отчёта о запуске (на сервере — ссылка для скачивания);
- Сравнить — этот запуск рядом с более ранним запуском того же эксперимента;
- профиль и изменённые значения, с которыми шёл запуск, если они были;
- seed запуска и кнопка Закрепить, чтобы сохранить его в эксперименте и следующие запуски выбирали те же случайные значения, или Открепить, когда он уже закреплён.
Если Инспектор вёл захват, ожидание (или ожидаемый ответ), в котором нашлось совпадение, ссылается на кадр, с которым совпало; щелчок открывает его в Инспекторе. Отчёты, seed и сравнение запусков описаны на странице Запуски и отчёты.
Режим фокуса и полный экран
▢ Режим фокуса скрывает боковую панель, шапку и нижнюю панель (консоль и Инспектор), оставляя экран редактору. ⛶ На весь экран разворачивает окно на весь экран и включает режим фокуса; при выходе из полноэкранного режима режим фокуса возвращается в прежнее состояние. При переходе на другой экран режим фокуса выключается.
Esc на холсте, когда больше нечего закрывать, выходит из полноэкранного режима, а затем из режима фокуса.
Сохранение и файлы
Эксперимент сохраняется сам, через мгновение после каждого изменения, в файл experiment.json в папке данных (Documents/SignalLab на десктопе; у сервера своя — см. Файлы и папки). Черновики, которые пока не могут запуститься, тоже сохраняются. Запуск сначала сохраняет, так что на диске лежит то, что запускалось.
Если этот файл не читается — например, его вручную испортили до нечитаемого JSON, — редактор сообщает, что это за файл и почему он не читается, и не трогает его. Открытие другого эксперимента через ☰ Эксперименты заменит его при следующем сохранении.
☰ Эксперименты открывает диалог экспериментов:
- Шаблоны: выберите шаблон и нажмите Открыть схему. Во всех используются адреса loopback.
- Открыть JSON… читает файл эксперимента — записанный этой версией Signal Lab или более ранней, до 4 МиБ — и показывает его название, число узлов и число связей, прежде чем вы его откроете. Файлы от прежних версий обновляются при открытии. Файл, который не разбирается или не был бы допустимым экспериментом, отклоняется с указанием причины, а текущий эксперимент остаётся.
- Экспорт текущей схемы записывает снимок текущего эксперимента — узлы, связи, позиции, параметры и профили, но не значения секретов — в новый файл в папке
exportsв папке данных и показывает его путь; на сервере — со ссылкой Скачать. - Открыть схему заменяет текущий эксперимент выбранным шаблоном или файлом. Он не запускает его, а Ctrl+Z возвращает предыдущий.
| Шаблон | Что делает |
|---|---|
| Пустая схема | Старт и Финиш — для вашего собственного сценария |
| Проверка HTTP | GET на http://127.0.0.1:8080/ и проверка статуса 200 — эксперимент, с которого вы начинаете |
| HTTP → OSC | Тот же запрос; при 200 — OSC-сообщение на 127.0.0.1:9000, иначе — задержка 500 мс |
| Параллельные потоки | Две ветки одновременно — запрос и строка лога — сходятся перед Финиш |
| OSC ping → ответ | Отправляет /ping с идентификатором запуска на 127.0.0.1:9000 и ждёт на 127.0.0.1:9001 сообщение /pong, которое возвращает его обратно |
| Опрос до готовности | Каждые 0,3 с спрашивает у устройства /status, пока оно не ответит ready, но не более десяти раз |
| Повтор ненадёжного API | Эмулируемый API, который дважды отказывает, прежде чем ответить, и цикл, который спрашивает, пока ответ не придёт |
| Фазы сбоев | Датаграммы на эмулируемое устройство через реле помех, пока параллельная ветка переключает сеть: чистая, с потерями, недоступная и снова чистая |
| Отказ зависимости | Эмулируемый API, отключённый на две секунды параллельной веткой, и клиент, который продолжает спрашивать, пока тот снова не ответит |
| Эхо WebSocket | Подключается к эхо-сервису ws://127.0.0.1:9001/echo, отправляет JSON ping, ждёт его обратно без изменений и закрывает соединение |
Те же файлы запускаются без редактора: signallab run experiment.json — см. Командная строка.
Сочетания клавиш
Отдельные клавиши действуют на холсте и не срабатывают, пока вы печатаете в поле. На Mac в браузере там, где написано Ctrl, работает Cmd.
| Клавиши | Действие |
|---|---|
| A | Добавить узел после выбранного или в середине видимой области, если ничего не выбрано |
| Ctrl+Enter | Отправить сейчас или Слушать сейчас для выбранного узла |
| Ctrl+Z | Отменить |
| Ctrl+Shift+Z, Ctrl+Y | Вернуть отменённое |
| Ctrl+A | Выделить все узлы |
| Ctrl+C / Ctrl+X / Ctrl+V | Копировать / вырезать / вставить выбранные узлы и связи между ними |
| Ctrl+D | Дублировать выбранные узлы |
| Delete, Backspace | Удалить выбранную связь или выбранные узлы |
| Стрелки (фокус на узле) | Сдвинуть выбранные узлы на 5 пикселей; с Shift — на 20 |
| Ctrl+F | Найти узел |
| Ctrl+0 | Показать весь граф |
| Ctrl+1 | Масштаб 100 % |
| Ctrl + колесо мыши | Масштабировать вокруг указателя |
| Shift + щелчок, Ctrl + щелчок | Добавить узел в выделение или убрать из него |
| Shift + протяжка по пустому холсту | Выделить рамкой |
| Двойной щелчок по узлу | Править его поля |
| Двойной щелчок по пустому холсту | Добавить там узел |
| Enter, Space на выходе в фокусе | Начать от него связь |
{{ или Ctrl+Space в поле | Предложить параметры, переменные, секреты и генераторы |
| Esc в поле | Вернуться к узлу на холсте |
| Esc на холсте | Закрыть меню добавления; иначе отменить рисуемую связь; иначе снять выбор со связи; иначе снять выделение нескольких узлов; иначе выйти из полноэкранного режима; иначе выйти из режима фокуса |
В меню добавления и в поиске ↑ ↓ выбирают, Enter принимает выбор, Esc закрывает. Все сочетания клавиш приложения собраны на странице Сочетания клавиш.