Десктопное приложение

Как десктопное приложение Cusp запускает демон, хранит ключи в системной связке ключей, обрабатывает диплинки cusp:// и встраивается в систему.

Десктопное приложение — нативная оболочка на Tauri 2. Она показывает интерфейс рабочей области Cusp в системном webview (WKWebView в macOS, WebView2 в Windows, WebKitGTK в Linux) и следит за средой выполнения агента. Сама оболочка небольшая: она добавляет только то, чего не умеет браузер, — запуск демона, связку ключей, строку меню и значок в трее, диплинки, глобальное сочетание клавиш и уведомления.

Десктопное приложение — предварительная версия. Нативная оболочка, контроль демона, связка ключей и диплинки, описанные здесь, уже готовы; интерфейс рабочей области ещё развивается.

Демон

При запуске Cusp стартует cusp-daemon как дочерний процесс и ждёт сообщения о готовности.

  1. Демон (daemon) привязывается к 127.0.0.1 на случайном порту и генерирует новый bearer-токен. Ни то, ни другое никогда не записывается на диск или в журналы.
  2. Демон печатает одну строку о готовности с портом и токеном, и оболочка передаёт их интерфейсу. Каждый запрос интерфейса содержит этот токен.
  3. Оболочка проверяет состояние демона каждые 10 секунд. После трёх неудачных проверок подряд она перезапускает демон.
  4. Если демон падает, он перезапускается с экспоненциальной задержкой — от 0,5 с до 30 с. После 8 неудачных запусков подряд Cusp прекращает попытки и показывает ошибку с кнопкой Перезапустить. Если демон проработал минуту, счётчик сбрасывается.
  5. При каждом перезапуске выдаются новые порт и токен. Интерфейс переподключается сам, и сессии продолжаются с последнего полученного события.
  6. При выходе оболочка просит демон остановиться и, если он не остановился за 3 секунды, завершает его принудительно. Если падает сама оболочка, демон замечает, что родительского процесса больше нет, и завершается.

Данные демона хранятся в папке данных приложения: в macOS это ~/Library/Application Support/run.cusp.desktop/daemon.

CLI вместе с приложением

В режиме по умолчанию CLI сначала ищет работающий демон и только потом запускает свой, поэтому cusp в терминале может работать с теми же сессиями, что и приложение, если у них общая папка данных. Чтобы подключиться к конкретному демону, передайте --daemon-url и --daemon-token. См. CLI.

Ключи и связка ключей

API-ключи, которые вы вставляете в Cusp, хранятся в системном хранилище учётных данных под именем службы run.cusp.desktop:

ПлатформаХранилище
macOSСвязка ключей (Keychain)
WindowsДиспетчер учётных данных
LinuxSecret Service (GNOME Keyring, KWallet)

База данных демона хранит только ссылку на каждый ключ, но не сам ключ. Значения ключей никогда не попадают в журналы и сообщения об ошибках. Чтобы удалить ключ, удалите провайдера в настройках Cusp или удалите запись в системном диспетчере учётных данных.

Cusp регистрирует схему URL cusp://.

СсылкаОткрывает
cusp://session/<sessionId>Сессию, выводя окно на передний план
cusp://auth/callback?code=…&state=…Завершает вход (используется облачным входом, скоро)

Ссылки, пришедшие до готовности окна, например когда ссылка сама запускает Cusp, придерживаются и доставляются после загрузки интерфейса. Неизвестные ссылки передаются приложению, и оно игнорирует то, чего не понимает.

С помощью ссылок на сессии можно перейти к сессии прямо из уведомления, сообщения в чате или скрипта:

open "cusp://session/ses_01JCQ8Z4X9T5V2M3N7K1P6R0WA"      # macOS
xdg-open "cusp://session/ses_01JCQ8Z4X9T5V2M3N7K1P6R0WA"  # Linux

В macOS строка меню Cusp содержит эти действия. На всех платформах те же действия доступны из палитры команд.

ДействиеПункт менюСочетание клавиш
session.newНовая сессия⌘N
workspace.openОткрыть папку…⌘O
settings.openНастройки…⌘,
update.checkПроверить обновления…—
edit.findНайти…⌘F
palette.openПалитра команд…⌘K
sidebar.toggleБоковая панель⌘B
terminal.toggleТерминал⌃`
help.shortcutsСочетания клавиш⌘/
help.docsДокументация Cusp—
help.report-issueСообщить о проблеме…—

Остальное описано в разделе Горячие клавиши.

Интеграция с системой

  • Трей. Значок в трее предлагает пункты «Показать Cusp», «Новая сессия» и «Завершить Cusp».
  • Глобальное сочетание клавиш. ⌘⇧Space (Ctrl+Shift+Space в Windows и Linux) показывает или скрывает Cusp из любого приложения.
  • Уведомления. Когда сессии нужен ваш ответ или она завершается, а окно не в фокусе, Cusp отправляет системное уведомление. В первый раз он запрашивает разрешение.
  • Запуск при входе в систему. По умолчанию выключен. Если включить, Cusp запускается скрытым.
  • Открытие в редакторе. Пути к файлам в переписке открываются в вашем редакторе через его схему URL (VS Code, Zed и другие) или в приложении по умолчанию. Сам Cusp никогда не запускает процессы редактора.
  • Перетаскивание. Перетащите файлы на окно, чтобы прикрепить их.
  • Состояние окна. Размер и положение запоминаются между запусками. Минимальный размер окна — 760 × 520.
  • Потоковая передача в фоне. Пока окно скрыто, сессии продолжают получать данные потоком.

Windows и различия платформ

macOSWindowsLinux
Заголовок окнаВстроенные кнопки-«светофоры» над полупрозрачной боковой панельюНативный заголовок с эффектом MicaНативное оформление
Строка менюДаНет; сочетания клавиш обрабатывает приложениеНет; сочетания клавиш обрабатывает приложение
Закрытие окнаСкрывает CuspЗавершает работуЗавершает работу

Безопасность

  • Никакого удалённого содержимого. Приложение загружает только встроенный интерфейс. Оно никогда не открывает веб-страницы в собственном окне.
  • Строгая политика безопасности содержимого (CSP). Интерфейс может подключаться только к самому себе и к демону на loopback-адресе.
  • Изолированный IPC. Каждое сообщение от интерфейса к нативной оболочке проходит через слой изоляции, который пропускает только команды, объявленные приложением, и для каждой команды нужно явное разрешение.
  • Демон на loopback с токеном. Другие программы на вашем компьютере не могут использовать демон без токена, который выдаётся при каждом запуске, а запросы из браузера демон принимает только с собственного источника (origin) приложения.

См. Безопасность и конфиденциальность.

Обновления

Cusp проверяет обновления, когда вы выбираете Проверить обновления…. Обновления подписаны, и перед установкой приложение сверяет подпись с открытым ключом, встроенным в него при сборке.

На этой странице