Перейти к содержанию
CADCAMFUN
Документы

Документация

Архитектура

Границы выполнения, поток запросов, постоянство и точки расширения на настольном компьютере, в дополнительном приложении, мобильном приложении и на сайте документации.

Автоматически переведено с английского. Смотреть оригинал на английском

Процессы и границы доверия

Tauri владеет встроенной интеграцией окон, безопасными командами учетных данных, меню, обновлениями и жизненным циклом сайдкара. Его веб-представление запускает приложение SolidJS. Скомпилированный сайдкар Bun открывает базу данных и обслуживает HTTP 127.0.0.1 с портом, назначенным операционной системой. Интерфейс не открывает SQLite.

Точка входа в сайдкар apps/sidecar/src/main.ts. Он создает HTTP-сервер, строит уровни приложений, проверяет /api/health, а затем печатает событие готовности JSON, содержащее выбранный порт. Журналы перенаправляются на stderr, поэтому стандартный вывод остается доступным для протокола оболочки.

Мобильный компаньон достигает явно сопряженного шлюза настольного компьютера. Собственные учетные данные транспорта и устройства отделены от кольцевого соединения веб-просмотра рабочего стола. Документация Worker представляет собой отдельное развертывание и не имеет неявного подключения к рабочему столу пользователя.

Зависимости библиотеки

@cadcamfun/core содержит CAD, чертежи и вычисления CAM. Это зависит от эффекта для схем и интеграции границ; алгоритмические циклы — это обычный TypeScript. @cadcamfun/api импортирует основные типы и схемы для объявления входов, выходов, ошибок и потоков HTTP.

@cadcamfun/db владеет службой базы данных приложения, схемой и логикой миграции. Дополнительный модуль объединяет его с ядром, API, AI, плагинами SDK, VCS и пакетами рабочих процессов. Его репозитории используют службу базы данных; обработчики делегируют репозиториям и сервисам.

Рабочий стол импортирует оба @cadcamfun/api и @cadcamfun/core. Он использует API во время выполнения через клиент Effect и использует базовую геометрию в функциях CAD/CAM и в окне просмотра. Мобильная версия зависит от пакета API и оборачивает сопутствующие запросы в свой клиент. Автономный плагин nikcli обнаруживает каталог действий запущенного приложения через HTTP, а не импортирует реализации серверной части.

Жизненный цикл HTTP-запроса

  1. Веб-просмотр получает дополнительное соединение из собственной оболочки.
  2. apps/desktop/src/app/client.ts создает клиент Effect HttpApi с авторизацией на предъявителя и дополнительным токеном сеанса учетной записи. packages/api/src/client.ts поставляет многоразового контрактного клиента для других потребителей.
  3. apps/sidecar/src/layers.ts собирает ServedApi, обработчики, авторизация, CORS и уровни общих сервисов.
  4. Обработчик проверяет входные данные контракта, разрешает службы, выполняет вычисления или сохранение и возвращает объявленное представление успеха или ошибки. Конечные точки потоковой передачи сохраняют заявленный протокол потока.

CORS разрешает использовать в разработке производственные источники Tauri и источники обратной связи HTTP. Это не заменяет авторизацию. API предоставляет несколько стилей конвертов ответов; потребители должны следовать схеме каждой конечной точки, а не предполагать, что каждый ответ имеет одинаковую форму.

Жизненный цикл и хранение услуги

Слои эффектов получают базу данных и общие службы в области приложения. Уровень базы данных создает свой родительский каталог, включает WAL и внешние ключи, при необходимости применяет миграцию и оборачивает неудачные запросы именем операции. Финализация пытается пройти контрольную точку WAL и закрывает дескриптор SQLite.

The DatabaseLive слой выбирает dataDir/cadcamfun.db. Для применения миграции при запуске необходимо указать папку миграции. Учетные данные AI, состояние плагина, объекты VCS, выполнение рабочих процессов и хранение файлов обрабатываются через соответствующие сервисные интерфейсы; Подробности хранения описаны на страницах их модулей.

Местная студия в packages/web/script/studio-server.ts это дополнительный процесс Бана. Он открывает настроенную существующую базу данных приложения напрямую и передает проверенные обзорные данные через порт обратной связи 4396. Его сеансы прокси-сервера разработки и файлов cookie не зависят от подключения боковой панели Tauri.

События проекта в реальном времени (запросы на включение, фиксации, запуск рабочего процесса и этапы сеанса помощника) публикуются через службу внутрипроцессных событий. Новый подписчик сначала получает не более 20 последних соответствующих событий, а затем текущие события, при необходимости отфильтрованные по проекту и типу события (apps/sidecar/src/services/live-events.ts).

Границы расширения

Есть две интеграции плагинов. SDK подключаемого модуля приложения определяет манифесты, возможности, активацию и контракты хоста. Мост nikcli предоставляет зарегистрированные действия CAD/CAM внешнему помощнику. Установка плагина через маршрут реестра HTTP — это отдельная операция от активации модуля на хосте среды выполнения.

Синтаксический анализ и планирование рабочего процесса в реальном времени packages/workflow. Шаги, поддерживаемые сервисом, регистрируются дополнительными слоями, в то время как чисто проектные шаги и шаги CAM могут выполняться с использованием предоставленных ими входных данных. VCS вычисляет хэши объектов, различия, слияния и операции транспорта GitHub в своей библиотеке; Дополнительные сервисы связывают эти операции с постоянством проекта.

Помощник по веб-документации извлекает подготовленную документацию и может публиковать артефакты руководств при настройке хранилища. Он отвечает на вопросы документации; он не наследует доступ к локальному проекту приложения CAD/CAM.

Границы подключения и учетных данных

ПолномочияЦельГраница
Токен носителя приложенияРазрешите локальному приложению использовать защищенные маршруты с сайдкаром.Создано/предоставлено для запуска сайдкара; веб-просмотр получает его через собственное соединение.
x-session-tokenВыберите учетную запись, действующую за принятым приложением.Отсутствующий, недействительный, истекший или потерянный сеанс возвращается к локальному профилю.
Токен сопутствующего устройстваРазрешите индивидуально сопряженный телефон к маршрутам шлюза.Проверяется отдельным шлюзом HTTPS и его списком разрешенных методов/путей.
Токен моста AIПредоставьте разрешенные действия для одного проекта внешнему агенту.Допускает две конечные точки моста действий и обеспечивает область чтения или чтения/записи.
API-ключ поставщикаАутентификация исходящих вызовов модели.Управляется службой учетных данных сайдкара; не заменяет авторизацию приложения.
Токен GitHubВыполните запрошенную операцию зеркалирования.Предусмотрен для этого вызов через x-github-token; а не данные моментального снимка проекта.

Авторизация многоуровневая. Передача промежуточного программного обеспечения-носителя не доказывает право собственности на конкретный рисунок или проект; обработчики и репозитории проверяют эти ресурсы. Сопряжение также не превращает телефон в неограниченный клиент-сайдкар. Прежде чем выбирать учетные данные, ознакомьтесь с политикой конкретной конечной точки и сопутствующего устройства.

Адаптер авторизации apps/sidecar/src/http/authorization.ts. Решения-компаньоны и мосты живут сами по себе. Разделение этих путей позволяет отозвать потерянное устройство или токен интеграции без замены секрета поставщика ИИ.

Изоляция отказов

Сбои перед событием готовности относятся к инициализации вспомогательной машины: настройке, обновлению базы данных, построению службы или запуску HTTP. Сбои после готовности могут быть связаны с поставщиком, операцией файловой системы, конечной точкой или сеансом клиента. Жизненный цикл оболочки и бюджет повторных попыток подключения веб-просмотра различны; проверьте оба, когда перезапуск меняет порт прослушивания.

Отключенный поток ИИ не обязательно прекращает общение на стороне сервера. Восстановите состояние сеанса перед повторной отправкой инструкции по редактированию. Неудавшийся рабочий процесс не откатывает инициирующую фиксацию. Неудачная удаленная отправка не стирает локальную историю. Эти различия не позволяют обрабатывать сетевой сбой так, как если бы постоянная операция никогда не происходила.

Для неудачного запроса API запишите его метод, путь, статус, идентификатор конечной точки и соответствующие несекретные идентификаторы. Сравните бег /api/openapi.json с снимок документации контракта когда версии клиента и сервера различаются. Избегайте устранения неполадок с помощью токена предыдущего запуска сайдкара.

Снимок архитектуры по исходному пути

ОбластьГде он живетЧто прочитать в первую очередь
Оболочка рабочего стола (Rust)apps/desktop/src-tauri/src/sidecar.rs (руководитель), commands.rs, updater.rs, menu.rs, tray.rs, secrets.rs
Настольный пользовательский интерфейсapps/desktop/src/app/, features/ (cAD, CAM, AI, чат, проекты, траектории, плагины, …), viewport/, shared/
Въезд с сайдкаромapps/sidecar/src/main.tsГотовое рукопожатие, слоями layers.ts, конфигурация в config.ts
HTTP-обработчикиapps/sidecar/src/http/Один файл на группу, например. toolpath-generator.ts, ai.ts, kv.ts
Сервисы и репозиторииapps/sidecar/src/services/, repos/cam-program.ts, companion.ts, auth-tokens.ts, storage.ts
Договорpackages/api/src/index.ts, groups/, errors.ts, client.ts
Ядроpackages/core/src/cad/history.ts, cad/sketch.ts, cam/kernel/, cam/post/
Ассистентpackages/ai/src/actions/, tools/, nikcli/, prompts/
Хранилищеpackages/db/src/index.ts, upgrade.ts, schema.ts
Историяpackages/vcs/, packages/workflow/API репозитория, слияние, схема рабочего процесса
Компаньонapps/mobile/app/ маршруты, lib/ подключение и сопряжение

Трассировка: от запуска до первого запроса

  1. Таури стартует, и супервайзер входит. sidecar.rs генерирует случайный токен.
  2. Он порождает sidecar-<triple> с CADCAMFUN_TOKEN, CADCAMFUN_DATA_DIR и CADCAMFUN_MIGRATIONS_DIR.
  3. Дополнительный модуль считывает свою конфигурацию, открывает SQLite (WAL, внешние ключи), выполняет резервное копирование и миграцию при необходимости, а также создает свои сервисные уровни.
  4. Это связывает 127.0.0.1 на эфемерном порту и печатает строку готовности JSON на стандартный вывод. Супервизор ожидает этого до 60 с.
  5. Руководитель излучает sidecar-status { state: "ready", port }; вызовы веб-просмотра get_sidecar_endpoint для { baseUrl, token }.
  6. Веб-просмотр строит ApiClient.layer({ baseUrl, token }) и начинает загрузку проектов.

Если сайдкар завершает работу, супервизор перезапускает ее один раз и объявляет новый порт; второй сбой оставляет статус на failed. При выходе супервизор записывает строку завершения работы, ждет 2 с, а затем возобновляет процесс; уровень базы данных проверяет WAL при закрытии его области действия.

Трассировка: запрос на производство

  1. Рабочее пространство CAM фиксирует элементы чертежа и запасы и вызывает POST /api/toolpaths/manufacture.
  2. Промежуточное программное обеспечение носителя принимает запрос; тело декодируется против CamKernelRequest.
  3. runKernelRequest в services/cam-program.ts звонки cam.kernel.jobOfSnapshot; вопросы подготовки становятся 400.
  4. cam.kernel.runJob планирует или следит за операциями, вычисляет данные резания, генерирует траектории движения инструмента, размещает ЧПУ для диалекта станка и воспроизводит его на воксельном материале для оценки претензий.
  5. Результат декодируется по CamKernelResult и вернулся. Ничего не сохраняется до тех пор, пока клиент не сохранит траекторию инструмента в переносимом документе, после чего вспомогательная программа повторно запускает захваченный запрос и сравнивает его.

Через 3Д

График зависимости рабочей области Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Все пакеты рабочей области 13 из файлов package.json; каждая строка представляет собой зависимость workspace:* (всего 17). Строки — это глубина зависимости: пакеты без зависимостей от рабочей области спереди, вспомогательная программа, которая зависит от 8 из них, сзади. Оранжевые квадратики — это приложения.