О проекте
Команда: Samgau
Кейс HackAlem.ai: Логистика — Электрокомплект · ekt.kz
Стадия: Доведённый продукт
Задача кейса: Автоматический расчёт заказов поставщикам для пополнения склада, с утверждением менеджером
Суть
Объяснимый помощник закупщика для Электрокомплекта: по истории продаж, остаткам и поставкам в пути рассчитывает заказ поставщику, показывает «Почему так?», позволяет проверить сценарий «что если», утвердить заказ менеджером и выгрузить CSV. Есть импорт XLSX из 1С и интерактивный 3D-склад.
Как устроено
Статистический модуль на Python считает потребность как прогноз на горизонт плюс страховой запас минус свободный остаток минус своевременные поставки в пути. Результат округляется до минимальной партии и кратности. История очищается от разовых крупных покупок через медиану и MAD, есть компенсация упущенного спроса при отсутствии товара и сезонные поправки. LLM (OpenAI или NVIDIA через адаптер, json_schema) только превращает фразу в параметры сценария и объясняет готовый расчёт, а сервер проверяет параметры и коды факторов. Утверждение заказа остаётся ручным.
Ключевые решения
- формула пополнения со страховым запасом
- MOQ и кратность
- median/MAD очистка выбросов
- компенсация упущенного спроса
- сезонность
- what-if сценарии
- JSON schema output
Особенности
Публичный HTTPS-деплой. Количество к заказу считает только статистический модуль, а LLM лишь разбирает сценарии и объясняет расчёт. Неизвестный остаток не превращается в ноль. Сделан файловый обмен с 1С (шесть XLSX поставщика), а передача реальных коммерческих данных внешнему ИИ по умолчанию выключена.
Стек
Python · FastAPI · SQLite · React · TypeScript · Vite · Caddy · Docker Compose · Playwright · pytest
Модели
OpenAI · NVIDIA API
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-7ccada8c-samgau.
README
README.md
Проверить проект онлайн
Нажмите кнопку ниже, чтобы перейти на публичный сайт QOR ai.
https://qor.152.70.57.1.sslip.io
Публичный HTTPS · готовые frontend и backend · серверный расчёт на синтетических данных
Для просмотра сайта не нужно устанавливать проект на компьютер.
Быстрая проверка: выберите режим API и набор demo-engine-v1 → откройте рекомендации → посмотрите объяснение количества → проверьте сценарий → утвердите заказ и скачайте CSV. Подробный сценарий проверки →
Объяснимый помощник закупщика
От истории продаж и остатков - к обоснованному заказу поставщику.
Открыть демо для жюри · Идея · Возможности · Искусственный интеллект · Запуск · Технологии · Документация
React + TypeScript FastAPI + Python SQLite OpenAI / NVIDIA
Статус: MVP. React подключён к FastAPI через Bearer-сессию. Реализованы расчёт, интерактивный 3D-склад, импорт исходных XLSX и выгрузка утверждённого CSV. Общий Docker Compose собирает React + FastAPI + Caddy. Публичный HTTPS и загрузка серверного расчёта в браузере проверены 23.09.2026. OpenAI настроен на сервере; настоящий вызов при развёртывании не проверялся. Совместимость CSV с обработкой конкретной базы 1С требует отдельной проверки. Файловый обмен и запуск → · План и критерии интеграции →
QOR ai помогает закупщикам и специалистам по управлению запасами понять, какие товары пора заказать, в каком количестве и на основании каких данных. Проект команды Samgau создан для кейса ТОО «Электрокомплект» на HackAlem AI.
Когда расчёты собирают вручную из нескольких Excel, склад легко оказывается между двумя проблемами: нужный товар закончился, а лишний занимает место и замораживает деньги. Разовая крупная покупка искажает средние продажи. Отсутствие товара скрывает спрос: продали ноль, хотя купить хотели.
| Ситуация закупщика | Как помогает QOR ai |
|---|---|
| Один клиент купил необычно много | Отделяет разовую часть покупки от регулярной потребности; клиентский анализ возможен при наличии обезличенного ID |
| Товар отсутствовал, поэтому продажи упали | Оценивает упущенный спрос при известных интервалах отсутствия |
| Часть товара уже заказана | Учитывает количество в пути и даты поступления |
| Спрос меняется по сезонам или растёт | Применяет сезонность и поправку на изменение спроса |
| Нужно объяснить закупку руководителю | Показывает формулу, факторы, источники и предупреждения по позиции |
Для логиста, отвечающего за пополнение склада, это способ заранее увидеть риск дефицита и обсудить ускорение поставки. Для закупщика — основа для проверки и утверждения заказа. Ожидаемая польза: меньше ручной сверки, меньше повторных закупок уже заказанного товара и более понятные решения. Проценты экономии пока не измерены.
| Обзор склада Показатели, интерактивный 3D-склад, графики продаж и прогноз запаса помогают выбрать позиции для проверки. | План закупок Рекомендации по товарам и поставщикам, поиск, фильтры риска и качества данных. |
| Паспорт решения Формула заказа, история, факторы и ограничения — рядом с рассчитанным количеством. | «Что, если…» Проверка задержки поставки или изменения спроса с новым расчётом и сравнением. |
| Проверка данных Пропуски и неопределённость показываются явно: неизвестный остаток не превращается в ноль. | Проверка и выгрузка заказа Менеджер корректирует количество с причиной, утверждает черновик и выгружает CSV. |
Экраны работают с API: отдельный расчёт для каждого поставщика, реальные партии для сценария, проверка предупреждений и утверждённый CSV. Раздел «Обмен с 1С» принимает шесть XLSX одного поставщика и необязательный inventory.csv. Формат, ограничения данных и проверка совместимости описаны в документации обмена.
Пользовательский путь:
- Выбрать серверный синтетический набор или загрузить данные компании в разделе «Обмен с 1С».
- Выбрать поставщика и дату расчёта.
- Открыть рекомендации и проверить проблемные позиции.
- Посмотреть «Почему так?» — какие данные повлияли на количество.
- При необходимости проверить сценарий задержки или роста спроса.
- Проверить заказ, обосновать ручные изменения, утвердить и скачать CSV.
Заказ поставщику автоматически не отправляется. Финальное решение принимает ответственный сотрудник.
Как рассчитывается количество
Предварительная потребность:
Прогноз на горизонт + страховой запас
− свободный остаток − своевременные поставки в пути
Отрицательная потребность становится нулём. Положительная переводится в единицу заказа и округляется с учётом минимальной партии и кратности. Поздняя поставка не отменяет дефицит, который возникнет раньше её прибытия.
Например: 210 + 70 − 80 − 50 = 150. При кратности 12 рекомендуемый заказ — 156 штук. Если партия 50 штук приедет за пределами горизонта, результат после округления — 204 штуки. Это контрольный пример, а не измеренный результат экономии компании.
Текущий алгоритм очистки использует медиану и медианное абсолютное отклонение (MAD), с проверками достаточности истории и повторяемости крупных покупок. Компенсация отсутствия товара и сезонные поправки выполняются в Python. Подробности: движок расчёта.
ИИ помогает работать с результатом на обычном языке. В проекте подготовлены три функции:
| Функция | Пример запроса | Польза клиенту |
|---|---|---|
| Разбор сценария | «Задержи выбранную поставку на неделю, спрос вырастет на 20%» | Превращает фразу в параметры для проверки и подтверждения |
| Объяснение рекомендации | «Почему предложено столько заказать?» | Выделяет подтверждённые факторы уже выполненного расчёта |
| Помощник по интерфейсу | «Где выгрузить заказ?» | Подсказывает следующий шаг и помогает ориентироваться в текущем экране |
Количество рассчитывает статистический модуль. Модель не назначает объём закупки самостоятельно. Сервер проверяет распознанные параметры и коды факторов; применение сценария и утверждение заказа остаются отдельными действиями пользователя.
Подключение: OpenAI либо NVIDIA через серверный адаптер.Конкретная модель задаётся настройками команды. При недоступности провайдера показывается явно обозначенная справка или расчётное объяснение — такой ответ не выдаётся за результат ИИ.
Настройка настоящего ИИ
В корневом .env:
AI_PROVIDER=openai
OPENAI_API_KEY=ваш_ключ
OPENAI_MODEL=идентификатор_доступной_модели
AI_RESPONSE_FORMAT=json_schema
ALLOW_REAL_AI=false
Для NVIDIA используются NVIDIA_API_KEY, NVIDIA_MODEL, NVIDIA_BASE_URL и AI_PROVIDER=nvidia. Общие AI_API_KEY, AI_MODEL, AI_BASE_URL, если заполнены, имеют приоритет. Формат ответа должен поддерживаться выбранной моделью.
Перезапустите backend и выполните scripts/ai_smoke.py при работающем сервере. Также проверьте чат через интерфейс. Успешная конфигурация не заменяет успешный сетевой вызов.
Ключи хранятся только на сервере, не попадают в Git и переменные VITE_*. Передача реальных коммерческих данных внешнему ИИ по умолчанию отключена; разрешение определяет владелец данных. Документация помощника →
Нужны Python 3.12, Node.js 22 и Git. Для Docker-сценария — Docker Engine/поддерживаемый Docker Desktop и Compose v2. Ключ ИИ для синтетического демо не нужен.
git clone https://github.com/BAITC-Hacks/hack-7ccada8c-samgau.git
cd hack-7ccada8c-samgau
Посмотреть интерфейс
cd frontend
npm ci
npm run dev
Откройте http://localhost:5173 и выберите режим API для работы с сервером. В Vite можно явно задать VITE_DATA_MODE=api в frontend/.env.local. Для просмотра без backend выберите локальное демо: 12 синтетических товаров, два поставщика; демо-черновики живут в памяти вкладки.
Запустить серверный расчёт
В другом терминале, из корня репозитория:
Linux / macOS
python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements-dev.lock -r backend/requirements-engine.txt
cp .env.example .env
.venv/bin/python run.py
Windows, PowerShell или cmd
py -3.12 -m venv .venv
.venv\Scripts\python.exe -m pip install -r backend/requirements-dev.lock -r backend/requirements-engine.txt
copy .env.example .env
.venv\Scripts\python.exe run.py
Откройте http://127.0.0.1:8000/api/docs. Серверный набор demo-engine-v1 содержит 8 синтетических товаров и использует движок qor-mvp-1.0. Это отдельный набор от локального UI-демо.
UI и API используют общую Bearer-сессию. При локальной разработке Vite перенаправляет
/apiв backend. Серверные наборы и расчёты отличаются от локального демо. Неизвестный остаток и блокировки качества нельзя превращать в утверждённый заказ.
Проверить решение
При работающем backend, из корня:
.venv/bin/python scripts/smoke.py
.venv/bin/python -m pytest
На Windows используйте .venv\Scripts\python.exe. Дополнительная проверка ИИ после настройки ключа:
.venv/bin/python scripts/ai_smoke.py --url http://127.0.0.1:8000
Проверки frontend, из frontend/:
npm test
npm run build
Сценарий для жюри: открыть режим API и demo-engine-v1 → выбрать 00001 (156) → задержать выбранную поставку на 30 дней (204) → вернуть исходный расчёт → изменить заказ на 168 с причиной → явно подтвердить предупреждения → утвердить и скачать CSV с количеством 168. Для 00007 проверить 2 бухты по 305 м, для 00008 — блокировку заказа. Серверный путь проверяется через scripts/smoke.py и Swagger.
Docker и публикация
Из корня репозитория:
cp .env.example .env
docker compose up --build -d
На Windows: copy .env.example .env. Корневой Compose собирает React + FastAPI + Caddy на http://localhost:8080. Caddy обслуживает React и проксирует /api; база и загрузки сохраняются в томе qor_data. По умолчанию импорт API защищён ключом (IMPORT_ACCESS=admin). Для разрешённой владельцем загрузки из интерфейса без ручного ключа предусмотрен IMPORT_ACCESS=session.
Отдельный UI-контейнер:
docker compose -f frontend/compose.yaml up --build -d
Он также использует порт 8080. Не запускайте оба web-контейнера одновременно на одном порту. Остановка соответствующего Compose: docker compose down с тем же -f, если он использовался. Флаг -v удаляет тома — для обычного перезапуска он не нужен.
Для публичного HTTPS задайте домен в SITE_ADDRESS, HTTP_PORT=80, HTTPS_PORT=443, направьте DNS на сервер и откройте эти порты. Публичная версия для жюри: открыть QOR ai. Обмен, запуск и публикация →
| Часть проекта | Технологии | Назначение |
|---|---|---|
| Интерфейс | React 19, TypeScript, Vite 6, Recharts, Lucide | Рабочее место закупщика, графики и карточки |
| API | Python 3.12, FastAPI, Pydantic | Проверка запросов, сессии, расчёты и заказы |
| Расчёт и импорт | Python, openpyxl | Чтение выгрузок и объяснимый статистический расчёт |
| Хранение | SQLite и файлы импорта | Наборы, расчёты, версии черновиков |
| ИИ | HTTP-адаптер OpenAI / NVIDIA | Сценарии, объяснение, помощник |
| Развёртывание | Docker Compose, Caddy; отдельный UI-образ с Nginx | Упаковка приложения и обслуживание web |
| Проверки | pytest, Vitest, smoke-скрипты | Контракты, алгоритм и воспроизводимые сценарии |
Архитектура приложения:
flowchart TD
UI["React: рабочее место закупщика"] --> API["FastAPI: единый API"]
XLSX["Excel: продажи, остатки, поставки"] --> IMP["Импорт и проверка данных"]
IMP --> DB["SQLite и файлы"]
API --> ENG["Прогноз и расчёт заказа"]
ENG --> DB
API --> AI["ИИ: сценарии и пояснения"]
API --> ORDER["Проверка и утверждение человеком"]
ORDER --> CSV["CSV заказа"]
Источники: предоставленные наборы IEK и Systeme Electric — динамика продаж, месячные продажи и остатки, товары в пути, сезонность, MOQ/кратность. Импортеры и синтетические примеры находятся в backend/app/importers/. Демо не содержит сведения о реальных клиентах.
Границы текущей версии:
- В предоставленной детализации нет ID клиента: клиентский анализ проверяется на синтетических данных.
- Месячные снимки остатков не определяют точные интервалы отсутствия товара. Необходимые предположения должны быть обозначены.
- Для IEK нужен актуальный остаток; неизвестные исходные данные могут блокировать утверждение позиции.
- Excel-выгрузки — снимки на дату, а не непрерывная синхронизация с учётной системой.
- CSV не означает готовую интеграцию с конкретной 1С. Прямое подключение к 1С и автоматическая отправка поставщику не реализованы.
- Нет заявленного расчёта маршрутов транспорта, доказанного процента экономии или автоматического исполнения решений ИИ.
Samgau · HackAlem AI · кейс «Электрокомплект»
| Роль | Ответственность |
|---|---|
| Капитан | API, ИИ, сессии, заказы, интеграция и развёртывание |
| Данные и алгоритм | Импорт, прогноз, аномалии, stockout, сезонность и правила заказа |
| Интерфейс | Экраны, графики, работа пользователя и демонстрация |
| Документ | Что внутри |
|---|---|
| Спецификация MVP | Идея, требования и границы решения |
| Интеграция сайта | Задачи объединения frontend, backend, ИИ и Docker |
| Frontend | Запуск интерфейса и деморежима |
| Backend | Запуск API и проверка серверной части |
| API · OpenAPI | Контракты и форматы |
| Движок · Импорт | Данные, формулы и алгоритмы |
| ИИ-помощник | Сценарии, ограничения и конфигурация |
| Файловый обмен с 1С | Профили XLSX, актуальные остатки, CSV и ограничения |
При разработке и подготовке документации использовался Codex. Наличие AI-инструмента разработки не заменяет проверку ИИ-функций внутри приложения.
QOR ai — каждый заказ можно объяснить.
Оформление: логотип команды; графические заголовки — Archive Ukr, Slava Kirilenko. Буквы сохранены как SVG-контуры, поэтому внешний шрифт для их отображения не требуется. Основной текст использует стандартное оформление GitHub.
Авторы коммитов
История коммитов
- 2026-09-23 17:55Allow file uploads without admin tokenDimash
- 2026-09-23 17:47Merge pull request #10 from BAITC-Hacks/codex/jury-demo-readmeajaxavoc
- 2026-09-23 17:45docs: preserve latest team README updates in jury demo sectionajaxavoc
- 2026-09-23 17:44docs: add prominent jury demo section with Archive Ukr buttonajaxavoc
- 2026-09-23 17:43Merge pull request #9 from BAITC-Hacks/codex/remove-import-keyAsanali
- 2026-09-23 17:42Merge remote-tracking branch 'origin/main' into codex/remove-import-keyAsanali
- 2026-09-23 17:42Remove manual import key fields and retain protected defaultAsanali
- 2026-09-23 17:37readme ipDimash
Все коммиты (53)
- 2026-09-23 17:21Merge pull request #8 from BAITC-Hacks/codex/live-ai-chatAsanali
- 2026-09-23 17:21Merge main and preserve server-verified AI chat contextAsanali
- 2026-09-23 17:17feat: connect live OpenAI chat with grounded calculation contextAsanali
- 2026-09-23 17:17Update README.mdAsanali
- 2026-09-23 17:16.boombacha
- 2026-09-23 17:15Merge pull request #7 from BAITC-Hacks/codex/full-ui-backend-integrationajaxavoc
- 2026-09-23 17:15Merge pull request #6 from BAITC-Hacks/codex/qor-readme-brandingajaxavoc
- 2026-09-23 17:14Merge main, preserve 1C exchange and adapt warehouse to canonical APIajaxavoc
- 2026-09-23 17:11Merge main into README branding and refresh API, 1C and Docker guideajaxavoc
- 2026-09-23 17:01Merge pull request #5 from BAITC-Hacks/codex/interactive-warehouseajaxavoc
- 2026-09-23 17:00feat: implement partner 1C file exchange and connect UI to canonical APIAsanali
- 2026-09-23 17:00Merge remote-tracking branch 'origin/main' into codex/interactive-warehouseAsanali
- 2026-09-23 16:59Integrate dashboard with canonical API, persistent orders and Composeajaxavoc
- 2026-09-23 16:59docs: brand QOR ai README and align guide with current implementationajaxavoc
- 2026-09-23 16:53Merge remote-tracking branch 'origin/main' into codex/full-ui-backend-integrationajaxavoc
- 2026-09-23 16:38Merge branch 'main' of https://github.com/BAITC-Hacks/hack-7ccada8c-samgau commit mergeDimash
- 2026-09-23 16:37Document participant 2 work and backend reviewDimash
- 2026-09-23 16:27Merge remote-tracking branch 'origin/main' into codex/full-ui-backend-integrationajaxavoc
- 2026-09-23 16:27Merge remote-tracking branch 'origin/codex/backend-integration-ready' into codex/full-ui-backend-integrationajaxavoc
- 2026-09-23 16:25feat(frontend): add interactive 3D warehouse overviewAsanali
- 2026-09-23 16:17Merge pull request #3 from BAITC-Hacks/codex/dashboard-redesignAsanali
- 2026-09-23 16:16docs: hand off frontend integration and deployment to captainAsanali
- 2026-09-23 16:12Merge remote-tracking branch 'origin/main' into codex/dashboard-redesignAsanali
- 2026-09-23 16:12Merge pull request #4 from BAITC-Hacks/codex/backend-integration-readyajaxavoc
- 2026-09-23 16:11feat: add contextual AI assistant for warehouse and navigationAsanali
- 2026-09-23 16:10Enable integrated backend and verify engine import order workflowajaxavoc
- 2026-09-23 16:04Update README.mdajaxavoc
- 2026-09-23 16:03Update MVP_SPEC_QOR_AI.mdAsanali
- 2026-09-23 15:58feat(frontend): refresh dashboard design and simplify navigationAsanali
- 2026-09-23 15:45Connect participant 2 engine and importers to API contractsDimash
- 2026-09-23 15:22Merge remote-tracking branch 'origin/main'Dimash
- 2026-09-23 15:20Merge pull request #2 from BAITC-Hacks/codex/qor-interfaceAsanali
- 2026-09-23 15:20Merge branch 'codex/data-engine' Backend with apiDimash
- 2026-09-23 15:17backend dopolnilDimash
- 2026-09-23 15:16feat(frontend): add QOR procurement workspace and demo workflowAsanali
- 2026-09-23 15:13Merge pull request #1 from BAITC-Hacks/codex/integrate-captain-backendajaxavoc
- 2026-09-23 15:09Integrate captain API while preserving shared team filesajaxavoc
- 2026-09-23 15:03Update MVP_SPEC_QOR_AI.mdboombacha
- 2026-09-23 15:01Update README.mdajaxavoc
- 2026-09-23 15:01Update MVP_SPEC_QOR_AI.mdAsanali
- 2026-09-23 14:44Prepare participant 2 data environmentDimash
- 2026-09-23 14:21Add files via uploadAsanali
- 2026-09-23 13:53Update README.mdajaxavoc
- 2026-09-23 13:52Update README.mdAsanali
- 2026-09-23 13:52readme updatedboombacha
Структура репозитория (140 файлов)
.dockerignore .env.example .gitattributes .gitignore Dockerfile MVP_SPEC_QOR_AI.md README.md backend/.python-version backend/DATA_ENVIRONMENT.md backend/app/__init__.py backend/app/ai/__init__.py backend/app/ai/adapter.py backend/app/ai/assistant.py backend/app/api/__init__.py backend/app/api/models.py backend/app/config.py backend/app/contracts.py backend/app/demo.py backend/app/engine/CAPTAIN_HANDOFF.md backend/app/engine/PARTICIPANT_2_REPORT.md backend/app/engine/README.md backend/app/engine/__init__.py backend/app/engine/calculator.py backend/app/engine/demand.py backend/app/engine/demo.py backend/app/engine/examples/table.json backend/app/engine/models.py backend/app/engine/service.py backend/app/importers/README.md backend/app/importers/__init__.py backend/app/importers/assemble.py backend/app/importers/demo_files.py backend/app/importers/partner.py backend/app/importers/service.py backend/app/importers/xlsx.py backend/app/integration.py backend/app/main.py backend/app/orders.py backend/app/storage.py backend/requirements-data.in backend/requirements-data.lock backend/requirements-dev.lock backend/requirements-engine.txt backend/requirements.in backend/requirements.lock backend/tests/test_assistant.py backend/tests/test_engine.py backend/tests/test_importers.py backend/tests/test_partner_exchange.py backend/tests/test_platform.py backend/tests/test_services.py backend/tests/test_startup.py backend/tests/test_team_config.py compose.yaml deploy/Caddyfile deploy/Dockerfile.web deploy/web/index.html docs/API.md docs/ASSISTANT.md docs/BACKEND_LOGIC_REVIEW.md docs/CAPTAIN_BACKEND.md docs/CAPTAIN_UI_INTEGRATION.md docs/DEPLOY_AND_MERGE.md docs/FRONTEND_HANDOFF.md docs/INTEGRATION.md docs/MERGE_NOTES.md docs/ONE_C_EXCHANGE.md docs/ORACLE_DEPLOYMENT.md docs/UI_BACKEND_VERIFICATION.md docs/VERIFICATION.md docs/assets/ai.svg docs/assets/architecture.svg docs/assets/features.svg docs/assets/idea.svg docs/assets/jury.svg docs/assets/open-demo.svg docs/assets/qor-banner.svg docs/assets/qor-logo.jpg docs/assets/start.svg docs/assets/team.svg docs/ci/README.md docs/ci/backend.yml docs/openapi.json examples/api-client.ts frontend/.dockerignore frontend/.env.example frontend/.gitattributes frontend/.gitignore frontend/.prettierignore frontend/.prettierrc.json frontend/Dockerfile frontend/INTEGRATION.md frontend/README.md frontend/VERIFICATION.md frontend/compose.yaml frontend/e2e/integration.spec.ts frontend/index.html frontend/nginx.conf frontend/package-lock.json frontend/package.json frontend/playwright.config.ts frontend/public/favicon.svg frontend/src/App.tsx frontend/src/components/Assistant.css frontend/src/components/Assistant.tsx frontend/src/components/Charts.tsx frontend/src/components/Detail.tsx frontend/src/components/Exchange.css frontend/src/components/Exchange.tsx frontend/src/components/ImportModal.tsx frontend/src/components/InventorySummary.tsx frontend/src/components/Modal.tsx frontend/src/components/OrderModal.tsx frontend/src/components/SavedOrders.tsx frontend/src/components/ScenarioModal.tsx frontend/src/components/WarehouseScene.css frontend/src/components/WarehouseScene.tsx frontend/src/dashboard-theme.css frontend/src/lib/api.test.ts frontend/src/lib/api.ts frontend/src/lib/assistant.test.ts frontend/src/lib/assistant.ts frontend/src/lib/dataMessages.ts frontend/src/lib/demo.test.ts frontend/src/lib/demo.ts frontend/src/lib/format.ts frontend/src/lib/session.ts frontend/src/main.tsx frontend/src/styles.css frontend/src/types.ts frontend/src/vite-env.d.ts frontend/tsconfig.json frontend/vite.config.ts pytest.ini run.py scripts/ai_smoke.py scripts/e2e_smoke.py scripts/export_openapi.py scripts/import_smoke.py scripts/smoke.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.