AAYMA
RU
Войти

OrbitDuo Campaign Studio

Приложение для маркетолога Beeline: агент выбирает аудиторию, тариф и канал кампаний с учётом бюджета, лимита контактов и пересечений, проводит…

Доведённый продукт
Команда «UniFlow AI» 23💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: UniFlow AI
Кейс HackAlem.ai: Телеком — Beeline
Стадия: Доведённый продукт

Задача кейса: Агент, который решает, каким абонентам какой тариф предложить (чистый прирост ARPU)

Суть

Приложение для маркетолога Beeline: агент выбирает аудиторию, тариф и канал кампаний с учётом бюджета, лимита контактов и пересечений, проводит пилоты и максимизирует чистый прирост ARPU; есть история запусков, what-if и калькулятор.

Как устроено

Точка входа Agent().act(env) в participant_package: аудит аудитории, генерация кандидатов, пробные кампании (пилоты) с шумными наблюдениями, оценки с неопределённостью, затем планировщик под бюджет и контакты с учётом пересечений аудиторий. Расчётное ядро работает без LLM и сети. Бэкенд на FastAPI с worker и SQLite хранит запуски с идемпотентностью; фронтенд на React/TanStack Query показывает обзор, аудиторию, план, сравнение запусков, what-if с исключением предложений и экспорт в CSV/JSON/PDF. Отдельно проведены эксперименты и ablation стратегий.

Ключевые решения

  • пилотные кампании с байесовским обновлением оценок (explore-exploit)
  • планирование под бюджет и контакты
  • what-if анализ
  • ablation стратегий

Особенности

Агент работает с учебной средой организаторов через пилоты и неопределённость. Идемпотентный API, восстановление после сбоя, сверка CSV из make_submission с экспортом API побайтно. Обширные e2e-тесты на Playwright.

Стек

Python · FastAPI · Pydantic · SQLite · React · TypeScript · Vite · TanStack Query · Nginx · Docker · Playwright


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-baec897e-uniflow-ai.

README

README.md

OrbitDuo Campaign Studio

Приложение для аналитика маркетинга в кейсе Beeline Tariff Marketing Campaigns: аудит аудитории → пробные кампании → выбор плана → объяснение результата → экспорт. В проекте реализованы React-интерфейс, FastAPI, локальный расчётный агент и история запусков в SQLite. Агент выбирает аудиторию, тариф и канал с учётом бюджета, контактов, пересечений и неопределённости наблюдений.

Все данные синтетические; реальные рассылки не выполняются. Денежные значения указаны в у.е. (CU). net_arpu_gain — моделируемый прирост выручки за вычетом расходов на коммуникации. Это не полная прибыль оператора и не доказанный эффект для реальных абонентов.

Что можно показать

  1. Обзор: размер аудитории, исходная выручка и конкурсные ограничения.
  2. Аудитория: группы клиентов, поиск по тарифу, фильтры допуска, сортировка и страницы таблицы; выбранные условия сохраняются в URL.
  3. Подбор кампаний: сбалансированный или осторожный подход к риску, номер сценария (seed), прогресс, фактические пилоты и журнал решений.
  4. Результат: выбранный план, расходы, контакты, уникальный охват, разбор слабых мест и карточка каждого предложения с основаниями выбора.
  5. История и сравнение: поиск и фильтры среди последних 100 записей, понятные названия, заметки и избранное; сравнение 2–3 запусков по эффекту, ресурсам и составу предложений с проверкой сопоставимости условий.
  6. Предварительный калькулятор: ползунки аудитории, бюджета и предположений об отклике, мгновенная оценка эффекта, порог окупаемости и сравнение каналов; сохранённые сценарии, ссылки с параметрами и три варианта чувствительности.
  7. Проверка исключений: убрать предложения из отдельного учебного варианта и пересчитать эффект, расходы и охват с учётом пересечений и порядка исполнения. Сохранённые пилоты учитываются, исходный план остаётся неизменным.
  8. Экспорт: CSV плана, JSON результата и оформленный отчёт с графиком, выводами и ограничениями; PDF сохраняется через системное окно печати браузера.

Справка с поиском и пояснения показателей доступны на всех экранах. Технические записи можно раскрыть отдельно; экспорт сохраняет исходные поля. Интерфейс предусматривает работу с клавиатурой и мобильный экран.

Данные результатаЧто означают
forecast — прогноз агентаОценка эффекта после обновления по пилотам, с неопределённостью
pilots — наблюденияШумные результаты пробных кампаний в учебной среде
local_evaluation — локальная симуляцияОценка уже выбранного плана публичным оценщиком

null означает отсутствие оценки; отрицательные значения сохраняют знак. Контакты учитывают повторные обращения, уникальный охват — отдельных клиентов. Разбор результата объясняет сохранённые данные. Отдельная проверка исключений доступна для завершённого расчёта с подключённой учебной средой; она повторяет локальную оценку оставшихся предложений и не заменяет прогноз агента. Несовпадение исходных данных или результата воспроизведения блокирует эксперимент.

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

Сценарий выступления: показ за 3 минуты.

Структура проекта

КаталогНазначение
frontend/React, TypeScript, Vite, TanStack Query; интерфейс, API-клиент, unit- и Playwright-тесты
backend/FastAPI, Pydantic, worker расчёта, SQLite, сохранение результатов и экспорт
participant_package/agent.pyКонкурсная точка входа Agent().act(env)
participant_package/orbitduo/Аудит, кандидаты, оценки по пилотам, планировщик и адаптер локальной оценки
participant_package/experiments/Сравнения стратегий, ablation, проверка воспроизводимости поставки
participant_package/reports/Измерения и журнал решений; отдельно текущие результаты и архивы
docs/Архитектура, сценарий показа, API-контракт и матрица приёмки
scripts/Общий запуск PowerShell и сквозная проверка Docker

Исходные данные, среда и оценщик организаторов находятся в participant_package/. Расчётное ядро работает без сети, LLM, GPU, API-ключей и веб-сервера.

Запуск всего приложения через Docker

Из корня проекта, при запущенном Docker Desktop с Linux-контейнерами:

docker compose up -d --build --wait
  • Приложение OrbitDuo: http://localhost:8080.
  • Предварительный калькулятор: http://localhost:8080/calculator — ползунки аудитории, бюджета и отклика, мгновенная оценка эффекта и сравнение каналов.
  • Документация API: http://localhost:8000/docs.
  • Проверка состояния: docker compose ps.
  • Журнал: docker compose logs --tail=100 backend frontend.
  • Остановка с сохранением запусков: docker compose down.

Frontend работает с настоящим API; демонстрационный режим выключен. Nginx раздаёт сборку и передаёт /api/v1 backend. SQLite хранится в отдельном Docker volume и переживает перезапуск/пересоздание контейнеров. docker compose down -v удаляет этот volume и историю: для обычной остановки флаг -v не нужен. Порты доступны только на локальной машине. При занятых портах задайте ORBITDUO_WEB_PORT и ORBITDUO_API_PORT перед запуском, например 8081 и 8001.

Образы Python, Node и Nginx зафиксированы по digest. Оба сервиса выполняются без root с доступом к записи только во временные каталоги и volume базы. На первой сборке интернет нужен для загрузки образов и зависимостей; готовому агенту и приложению внешние сервисы или API-ключи не нужны.

Сквозная проверка Docker из подготовленного Python-окружения:

.\.venv\Scripts\python.exe -m scripts.verify_stack --restart

Она проверяет настоящий API через Nginx, исполнение плана, экспорт, повторный POST, ETag, SPA-маршруты и сохранность результата после перезапуска backend. Штатный make_submission.py отдельно запускается в чистом каталоге внутри Linux-контейнера; его CSV сравнивается с экспортом API побайтно. С локальным Windows-файлом сравниваются строки CSV: окончания строк платформ различаются.

Локальный запуск без Docker

Команды ниже — для PowerShell из корня репозитория. Docker использует Python 3.13; в сохранённых локальных проверках использовался также Python 3.14.4. Frontend требует Node 24.15.0+ в ветке 24 или 26+ и npm. Версии Python-пакетов зафиксированы в backend/requirements.txt и participant_package/requirements.txt, frontend — в frontend/package-lock.json.

Подготовка окружения при первом запуске и после изменения зависимостей:

$env:PYTHONUTF8 = '1'
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r participant_package/requirements.txt -r backend/requirements.txt
.\.venv\Scripts\python.exe -m pip check
Push-Location frontend
npm ci
Pop-Location

Для конкурсной части достаточно participant_package/requirements.txt.

Общий запуск frontend и API:

powershell -ExecutionPolicy Bypass -File .\scripts\start-demo.ps1

Скрипт проверяет Python, npm и свободные порты 8000/5173, устанавливает недостающие зависимости, запускает один backend и Vite с VITE_DEMO_MODE=false. Он использует корневую .venv, а при её отсутствии — существующую participant_package/.venv либо создаёт окружение. После обновления зависимостей выполните подготовку выше: наличие окружения само по себе не обновляет его пакеты.

  • Frontend: http://127.0.0.1:5173.
  • Swagger: http://127.0.0.1:8000/docs.
  • Логи обоих процессов: backend/data/*.log.
  • Остановка: Enter в окне скрипта.
  • Отдельная БД: параметр -DatabasePath 'C:\path\orbitduo.sqlite3'.

Для ручного запуска откройте два терминала. В первом, из корня:

.\.venv\Scripts\python.exe -m uvicorn backend.app:app --host 127.0.0.1 --port 8000

Во втором, также из корня:

Set-Location frontend
$env:VITE_DEMO_MODE = 'false'
npm run dev -- --host 127.0.0.1

Vite передаёт /api/v1 на 127.0.0.1:8000. Пример настроек — frontend/.env.example; VITE_* читаются при старте Vite или сборке Docker. При недоступном API автоматического перехода на demo нет. Для разработки интерфейса без backend явно задайте VITE_DEMO_MODE=true перед запуском Vite. Демо использует fixtures и localStorage; его числа не являются измерением агента. Сценарии описаны в frontend/README.md.

API, сохранение и восстановление

Один процесс, без --workers. SQLite по умолчанию находится в backend/data/runs.sqlite3; другой путь задаётся через ORBITDUO_DB_PATH. ОС-блокировка не допускает второй сервер с той же БД. Миграция существующей базы сохраняет результаты и ключи идемпотентности. После аварии незавершённые задания получают failed / SERVER_RESTARTED; готовые результаты остаются доступны. Расчёт выполняется в выделенном worker, HTTP продолжает отвечать.

Из другого окна PowerShell:

$runKey = [guid]::NewGuid().ToString()
$run = Invoke-RestMethod -Method Post -Uri 'http://127.0.0.1:8000/api/v1/runs' -ContentType 'application/json' -Headers @{ 'Idempotency-Key' = $runKey } -Body '{"seed":42,"risk_profile":"balanced"}'
Invoke-RestMethod "http://127.0.0.1:8000/api/v1/runs/$($run.id)"

Polling примерно раз в секунду до completed или failed. Повтор POST использует тот же ключ; новый эксперимент — новый ключ. Второй активный расчёт возвращает 409 RUN_ALREADY_ACTIVE. Опциональный If-None-Match с предыдущим ETag позволяет получить 304, когда результат не изменился. После завершения доступны /runs/{id}/campaigns.csv и /runs/{id}/report.json. Экспорт читает сохранённый план и не запускает агента заново.

При обновлении страницы интерфейс открывает тот же run_id. Во время сетевого сбоя сохраняет последний полученный снимок, показывает приостановку обновления и повторяет опрос. Повтор создания после потери ответа использует прежний Idempotency-Key; двойная отправка блокируется. Ошибка RUN_ALREADY_ACTIVE предлагает перейти к активному запуску.

Проверки

Ниже команды повторного запуска проверок. Сохранённые результаты предыдущих прогонов перечислены отдельно в конце README.

Ядро и backend, из корня после установки зависимостей:

.\.venv\Scripts\python.exe -m pytest participant_package/tests backend/tests -q
.\.venv\Scripts\python.exe -m backend.final_smoke

backend.final_smoke сам запускает сервер на временном порту с отдельной БД, проверяет balanced/42, CSV, события, идемпотентность, ETag и перезапуск. Он не изменяет пользовательские запуски. Дополнительный замер хранилища: .\.venv\Scripts\python.exe -m backend.benchmark_storage.

Frontend, из корня перейти в frontend/:

Set-Location frontend
npm run build
npm run lint
npm run test
npx playwright install chromium
npm run test:e2e
npm run test:e2e:real
Браузерный наборОкружение и назначение
npm run test:e2eСобственный Vite, явное demo; сценарии UI, ошибки, справка, таблицы и ширины 1440/1280/768/390 px
npm run test:e2e:realСобственные FastAPI и Vite, demo выключен, временная SQLite; настоящий расчёт, reload, история, экспорты и сетевые сбои
npm run test:e2e:liveУже запущенное приложение; один сценарий с настоящим расчётом и регрессии на сохранённом API-снимке

Перед test:e2e и test:e2e:real освободите порт 5173, перед вторым — также 8000: наборы не переиспользуют серверы. Запускайте их последовательно. Для real-набора нужен Python с зависимостями backend в корневой .venv/Scripts/python.exe. Другой абсолютный путь задаётся через ORBITDUO_PYTHON (в том числе .venv/bin/python на Linux). Вместо установки Chromium можно использовать установленный браузер: $env:ORBITDUO_BROWSER_CHANNEL = 'msedge' или 'chrome'.

Live-проверка работающего Docker-приложения, из frontend/:

$env:ORBITDUO_BASE_URL = 'http://127.0.0.1:8080'
npm run test:e2e:live

Этот набор добавляет запуск в историю работающего backend. Основной сценарий не подменяет API и сравнивает оба скачанных файла с экспортом сохранённого запуска. Дополнительные сценарии читают fixture tests/fixtures/real-run.json через подмену GET и проверяют тексты, анализ, клавиатуру и мобильный вид. Сквозная Docker-проверка scripts.verify_stack --restart, описанная выше, также создаёт запуск и перезапускает backend.

Оценка и submission

Из корня перейти в пакет участника:

$env:PYTHONUTF8 = '1'
Set-Location participant_package
..\.venv\Scripts\python.exe local_eval.py
..\.venv\Scripts\python.exe local_eval.py --runs 10
..\.venv\Scripts\python.exe make_submission.py
$submissionHash = (Get-FileHash -LiteralPath submission.csv -Algorithm SHA256).Hash
..\.venv\Scripts\python.exe make_submission.py
if ((Get-FileHash -LiteralPath submission.csv -Algorithm SHA256).Hash -ne $submissionHash) { throw 'CSV не воспроизводится' }
..\.venv\Scripts\python.exe -m pytest -q
..\.venv\Scripts\python.exe -m orbitduo.evaluation
..\.venv\Scripts\python.exe -m experiments.verify_delivery

local_eval.py перехватывает ошибки агента, поэтому exit code недостаточен. Строгий adapter дополнительно проверяет 1-10 непустых кампаний, успешные пилоты, санитаризацию, поля, фактические аудитории и совпадение ресурсов с оценщиком. verify_delivery проверяет неизменность организаторских файлов относительно Git HEAD и совпадение submission в чистой копии без backend.

Сдавать agent.py, каталог orbitduo/, requirements.txt, submission.csv и исторический data/change_tariff.csv, если его нет в поставке организатора. Без истории предусмотрен нейтральный prior, но для повторения результатов нужны те же входные CSV. Точка входа — Agent().act(env). Balanced/42 через API использует ту же конфигурацию.

Конкурсные ограничения: 1–10 финальных кампаний, минимум один успешный пилот, до 20 пилотов с запрашиваемым размером 10–200 клиентов, до 5 000 клиентов на кампанию. Общий бюджет — 100 000 у.е., лимит — 15 000 контактов, включая пилоты и повторы. Доступны push, sms, digital_ads, call. Агент читает фактические остатки из публичной среды. Организаторские скрипты и исходные CSV сохраняются неизменными.

Что улучшено во второй версии

Пилоты уточняют не только эффект предложения, но и степень доверия к истории и масштаб неопределённости. Разведка сравнивает размеры выборок, учитывает цену информации и обычно сохраняет 80% бюджета для финала. Fallback при отрицательных оценках выбирает минимальный ущерб по той же риск-цели.

Планировщик кэширует аудитории и суммы по префиксам, пересчитывая только затронутые группы. На замороженном posterior тот же план получен за 0.076 с вместо 0.613 с (около 8 раз быстрее; измерен именно шаг планирования). Дополнительный поиск каналов/порядка включён после более широкого парного сравнения сценариев: первые три seed не показали разницы, но на других семействах выигрыш обнаружен. Вариант без расширения доступен как Agent(advanced_search=False).

Backend сохраняет неизменяемые завершённые результаты, стабильные события, версию snapshot и краткие сводки для списка. В отдельном измерении списка из 100 запусков чтение ускорилось с 62.05 до 7.86 мс. Это скорость хранилища, а не всей HTTP-операции.

Подробнее: математика и допущения, конкурсный контракт.

Измерения и ограничения

Аудит: 23 441 клиент, 21 тариф, baseline 150 641 084.25 CU. Для адресных кандидатов пригодна 23 341 строка; 100 исключены с учётом причин. Пересечение ID исторической и целевой аудитории равно нулю.

Сравнение v1/v2 содержит среднее, медиану, минимум, p10, стоимость, контакты, охват, пилоты и время. В нём явно сохранены ухудшения и границы независимости контрольных выборок. Каталог отчётов различает текущие измерения, архив v1 и промежуточную v2 с расширенным поиском.

После фиксации стратегии проверены mock-seed 40, 41, 43, 44, 45. При переименовании в OrbitDuo обе версии повторно запущены: результаты совпали, время измерено заново при параллельной проверке Docker. Повтор не считается новой независимой выборкой.

ВерсияСредний net, CUСредние расходы, CUСреднее act(), с
v1756 162.6799 912.8010.30
v21 255 793.2536 965.604.58

В этой серии средний net вырос примерно на 66%; обе версии дали положительные результаты во всех пяти запусках. Это малая выборка шума той же mock-модели, не гарантия переноса на неизвестные эффекты. Другие серии содержат ухудшения.

Стандартный seed 42: net 431 321.12 CU, расходы 20 000, контакты 10 355, уникальный охват 8 620, 16 пилотов и 5 финальных кампаний. В v1 на этом seed было 928 158.79 CU при расходах 99 646: улучшение среднего не означает улучшения каждого запуска.

Смена seed проверяет шум одной mock-модели. Дополнительные семейства меняют истинные эффекты, однако гарантии на неизвестной модели нет. Возможны убытки при слабых эффектах и перестановке лидеров. Пересечения с пилотами приближённые, posterior-прогноз не откалиброван как гарантированный интервал. Conservative также не гарантирует положительного результата.

Сохранённые отчёты и документация

Отчёты относятся к указанным в них версиям и прогонам. Они не означают, что все проверки повторялись при каждом изменении README. Ранние сводки содержат меньше тестов, чем добавленные позднее наборы интерфейса.

ДокументСодержание
Калькулятор, 23.09.2026Сборка и lint; 144 unit-теста, 24 demo-сценария и 5 live-сценариев, включая расчёт по актуальному API
Понятность интерфейса, 23.09.2026Сборка и lint; 91 различный unit-тест и 17 demo-сценариев с описанием исправлений и частичных повторов; 4/4 live-сценария
Проверка UI/UX, 23.09.2026Предыдущий этап интерфейса, адаптивность, навигация, справка и скриншоты
Проверка поставки ядраКоманды, среда, тесты и воспроизводимость конкурсного результата
Docker-приёмкаAPI через nginx, независимая генерация CSV в Linux, экспорт и сохранность после рестарта
HTTP smokeНастоящий HTTP, идемпотентность, ETag и сохранённые результаты
АрхитектураГраницы агента, адаптера, worker, хранилища и интерфейса
API-контрактDTO, статусы, ошибки, ограничения и экспорт
Матрица приёмкиСоответствие требованиям и ссылки на свидетельства проверок
Сценарий показаДемонстрация от задачи до экспорта за три минуты

В Docker-отчёте CSV сравнивается побайтно с независимой генерацией внутри Linux; с Windows сравниваются разобранные строки из-за различий окончаний строк. Повтор POST после перезапуска должен возвращать прежний результат по сохранённому ключу идемпотентности. Для повторения проверок используйте команды выше.

Звёзды
⭐ 0
Форки
0
Язык
HTML
Последний push
в прошлом месяце
Коммиты
16
Авторы
2
Файлы
382
Ветки
1

Авторы коммитов

Yerasyl Aikenov 9Sherloock077 7

История коммитов

  • 2026-09-23 17:58Add scenario library, run comparison, what-if analysis and PDF reportsYerasyl Aikenov
  • 2026-09-23 17:40Add interactive campaign effect calculator with guided scenariosYerasyl Aikenov
  • 2026-09-23 17:40Remove stored access credentials from page snapshotYerasyl Aikenov
  • 2026-09-23 17:34docs: refresh OrbitDuo project overview and runbookSherloock077
  • 2026-09-23 17:25Complete OrbitDuo UI, Docker setup, branding and validation reportsYerasyl Aikenov
  • 2026-09-23 16:17Preserve and update remaining agent experimentsSherloock077
  • 2026-09-23 16:13Integrate real Campaign Studio demo and browser coverageSherloock077
  • 2026-09-23 15:54Publish final evaluation reports and update project documentationYerasyl Aikenov
Все коммиты (16)
  • 2026-09-23 15:49Update completed experiment reportsYerasyl Aikenov
  • 2026-09-23 15:48Implement campaign agent and backend with tests and reportsYerasyl Aikenov
  • 2026-09-23 15:33Rename product branding to OrbitDuoSherloock077
  • 2026-09-23 15:26Build UniFlow Campaign Studio frontendSherloock077
  • 2026-09-23 14:53Add team API contract and frontend/backend implementation promptsYerasyl Aikenov
  • 2026-09-23 14:51Add project-specific AI development skillYerasyl Aikenov
  • 2026-09-23 14:38Add project scaffoldSherloock077
  • 2026-09-23 13:48Add Beeline case materialsSherloock077
Структура репозитория (382 файлов)
.dockerignore
.gitignore
HackAlem AI_ Beeline Tariff Marketing Campaigns Case.docx
README.md
backend/.gitignore
backend/Dockerfile
backend/README.md
backend/__init__.py
backend/app.py
backend/benchmark_storage.py
backend/final_smoke.py
backend/locking.py
backend/models.py
backend/reports/docker_acceptance.json
backend/reports/http_final_smoke.json
backend/reports/http_hardening_smoke.json
backend/reports/http_smoke.json
backend/reports/storage_benchmark.json
backend/requirements.txt
backend/smoke.py
backend/storage.py
backend/tests/test_api.py
backend/tests/test_integration.py
backend/tests/test_whatif.py
backend/whatif.py
backend/whatif_models.py
backend/worker.py
beeline_case_participants (1).zip
beeline_solution_and_codex_prompt.md
compose.yaml
docs/ACCEPTANCE.md
docs/ARCHITECTURE.md
docs/DEMO.md
docs/team/API_CONTRACT.md
docs/team/BACKEND_PROMPT.md
docs/team/FRONTEND_PROMPT.md
docs/team/INTEGRATION_PROMPT.md
docs/team/WHAT_IF_API.md
frontend/.dockerignore
frontend/.env.example
frontend/.gitignore
frontend/Dockerfile
frontend/README.md
frontend/eslint.config.js
frontend/index.html
frontend/nginx.conf
frontend/package-lock.json
frontend/package.json
frontend/playwright.config.ts
frontend/playwright.live.config.ts
frontend/playwright.real.config.ts
frontend/public/favicon.svg
frontend/reports/acceptance.json
frontend/reports/calculator-desktop.png
frontend/reports/calculator-mobile.png
frontend/reports/calculator-validation.md
frontend/reports/plain-analysis.png
frontend/reports/plain-language-validation.md
frontend/reports/plain-mobile-analysis.png
frontend/reports/plain-mobile.png
frontend/reports/plain-research.png
frontend/reports/plain-result-desktop.png
frontend/reports/ui-ux-validation.md
frontend/reports/ui/audience-1440.png
frontend/reports/ui/help-1440.png
frontend/reports/ui/help-390.png
frontend/reports/ui/new-run-1440.png
frontend/reports/ui/new-run-390.png
frontend/reports/ui/overview-1440.png
frontend/reports/ui/overview-390.png
frontend/reports/ui/overview-live-1440.png
frontend/reports/ui/result-1440.png
frontend/reports/ui/result-390.png
frontend/scripts/generate_demo_overview.py
frontend/src/app/AppRoutes.tsx
frontend/src/app/RouteStates.tsx
frontend/src/app/Shell.tsx
frontend/src/app/routeModules.ts
frontend/src/components/ui/HelpCenter.tsx
frontend/src/components/ui/TechnicalDetails.tsx
frontend/src/components/ui/common.tsx
frontend/src/features/audience/AudiencePage.tsx
frontend/src/features/audience/exploration.css
frontend/src/features/calculator/CalculatorPage.tsx
frontend/src/features/calculator/CalculatorPromo.tsx
frontend/src/features/calculator/ScenarioLibrary.tsx
frontend/src/features/calculator/SensitivityScenarios.tsx
frontend/src/features/calculator/calculator.css
frontend/src/features/calculator/calculatorScenarioStore.ts
frontend/src/features/overview/OverviewPage.tsx
frontend/src/features/reports/RunReportPage.tsx
frontend/src/features/reports/run-report.css
frontend/src/features/runs/CampaignWhatIf.tsx
frontend/src/features/runs/CompareRunsPage.tsx
frontend/src/features/runs/NewRunPage.tsx
frontend/src/features/runs/ResearchActivity.tsx
frontend/src/features/runs/RunAnalysis.tsx
frontend/src/features/runs/RunNotebook.tsx
frontend/src/features/runs/RunPage.tsx
frontend/src/features/runs/RunsPage.tsx
frontend/src/features/runs/campaign-what-if.css
frontend/src/features/runs/research-activity.css
frontend/src/features/runs/run-analysis.css
frontend/src/features/runs/run-experience.css
frontend/src/features/runs/run-organization.css
frontend/src/lib/api/client.ts
frontend/src/lib/api/types.ts
frontend/src/lib/api/whatIf.ts
frontend/src/lib/explanations.ts
frontend/src/lib/format.ts
frontend/src/lib/runAnalysis.ts
frontend/src/lib/runComparison.ts
frontend/src/lib/runNotes.ts
frontend/src/lib/scenarioCalculator.ts
frontend/src/main.tsx
frontend/src/mocks/fixtures.ts
frontend/src/mocks/overview.json
frontend/src/mocks/transport.ts
frontend/src/studio.css
frontend/src/styles.css
frontend/src/vite-env.d.ts
frontend/tests/client.test.ts
frontend/tests/connection.test.tsx
frontend/tests/demo-resilience.test.ts
frontend/tests/demo.test.ts
frontend/tests/e2e/calculator.spec.ts
frontend/tests/e2e/exploration.spec.ts
frontend/tests/e2e/flow.spec.ts
frontend/tests/e2e/guidance.spec.ts
frontend/tests/e2e/report.spec.ts
frontend/tests/e2e/responsive.spec.ts
frontend/tests/e2e/run-organization.spec.ts
frontend/tests/e2e/scenario-library.spec.ts
frontend/tests/explanations.test.ts
frontend/tests/fixtures/real-run.json
frontend/tests/format.test.ts
frontend/tests/live/api-flow.spec.ts
frontend/tests/live/calculator.spec.ts
frontend/tests/live/plain-language.spec.ts
frontend/tests/live/what-if.spec.ts
frontend/tests/new-run.test.tsx
frontend/tests/real/flow.spec.ts
frontend/tests/real/teardown.ts
frontend/tests/run-analysis.test.tsx
frontend/tests/run-comparison.test.tsx
frontend/tests/run-notes.test.tsx
frontend/tests/run-page.test.tsx
frontend/tests/scenario-calculator.test.ts
frontend/tests/scenario-library.test.tsx
frontend/tests/setup.ts
frontend/tests/what-if.test.tsx
frontend/tsconfig.app.json
frontend/tsconfig.json
frontend/tsconfig.node.json
frontend/vite.config.ts
participant_package/PARTICIPANT_GUIDE.md
participant_package/PARTICIPANT_GUIDE.pdf
participant_package/agent.py
participant_package/agent_template.py
participant_package/customer_profile.csv
participant_package/data/arpu_monthly.csv
participant_package/data/change_tariff.csv
participant_package/data/dict_tariff.csv
participant_package/data/traffic.csv
participant_package/docs/approach.md
participant_package/docs/contract.md
participant_package/environment.py
participant_package/experiments/README.md
participant_package/experiments/__init__.py
participant_package/experiments/archive/pre_branding.tar.gz
participant_package/experiments/benchmark.py
participant_package/experiments/capture_decision_trace.py
participant_package/experiments/data_audit.py
participant_package/experiments/diverse_fixed.py
participant_package/experiments/improvement.py
participant_package/experiments/overlap_sensitivity.py
participant_package/experiments/planner_benchmark.py
participant_package/experiments/portfolio_refinement.py
participant_package/experiments/publish_reports.py
participant_package/experiments/reference_v1/__init__.py
participant_package/experiments/reference_v1/agent_core.py
participant_package/experiments/reference_v1/candidates.py
participant_package/experiments/reference_v1/manifest.json
participant_package/experiments/reference_v1/portfolio.py
participant_package/experiments/reference_v1/posterior.py
participant_package/experiments/run_ablations.py
participant_package/experiments/run_benchmarks.py
participant_package/experiments/scenario_harness.py
participant_package/experiments/search_objective_check.py
participant_package/experiments/sensitivity.py
participant_package/experiments/summarize.py
participant_package/experiments/v2_ablation.py
participant_package/experiments/verify_delivery.py
participant_package/feature_dictionary.csv
participant_package/local_eval.py
participant_package/make_submission.py
participant_package/mock_environment.py
participant_package/orbitduo/__init__.py
participant_package/orbitduo/agent_core.py
participant_package/orbitduo/audit.py
participant_package/orbitduo/candidates.py
participant_package/orbitduo/evaluation.py
participant_package/orbitduo/portfolio.py
participant_package/orbitduo/posterior.py
participant_package/orbitduo/service_data.py
participant_package/reports/README.md
participant_package/reports/ablation.csv
participant_package/reports/ablation_summary.json
participant_package/reports/advanced_vs_simple.csv
participant_package/reports/advanced_vs_simple_summary.json
participant_package/reports/baseline.csv
participant_package/reports/baseline_summary.json
participant_package/reports/benchmark.csv
participant_package/reports/benchmark_report.md
participant_package/reports/benchmark_summary.json
participant_package/reports/branding_migration.json
participant_package/reports/branding_revalidation.json
participant_package/reports/conservative_check.json
participant_package/reports/data_audit.json
participant_package/reports/decision_trace.json
participant_package/reports/delivery_verification.json
participant_package/reports/diverse_fixed.csv
participant_package/reports/diverse_fixed_decision.md
participant_package/reports/diverse_fixed_summary.json
participant_package/reports/environment.json
participant_package/reports/experiment_environment.json
participant_package/reports/historical_cache/improvement_final_holdout_reference.csv
participant_package/reports/historical_cache/improvement_final_holdout_reference_manifest.json
participant_package/reports/historical_cache/improvement_model_holdout_reference.csv
participant_package/reports/historical_cache/improvement_model_holdout_reference_manifest.json
participant_package/reports/historical_cache/improvement_reference.csv
participant_package/reports/historical_cache/improvement_reference_manifest.json
participant_package/reports/improvement.csv
participant_package/reports/improvement_baseline_full.csv
participant_package/reports/improvement_baseline_full_summary.json
participant_package/reports/improvement_final_holdout.csv
participant_package/reports/improvement_final_holdout_reference.csv
participant_package/reports/improvement_final_holdout_reference_manifest.json
participant_package/reports/improvement_final_holdout_summary.json
participant_package/reports/improvement_model_holdout.csv
participant_package/reports/improvement_model_holdout_reference.csv
participant_package/reports/improvement_model_holdout_reference_manifest.json
participant_package/reports/improvement_model_holdout_summary.json
participant_package/reports/improvement_quick.csv
participant_package/reports/improvement_quick_checkpoint1.csv
participant_package/reports/improvement_quick_checkpoint1_summary.json
participant_package/reports/improvement_quick_risk055.csv
participant_package/reports/improvement_quick_risk055_summary.json
participant_package/reports/improvement_quick_summary.json
participant_package/reports/improvement_reference.csv
participant_package/reports/improvement_reference_manifest.json
participant_package/reports/improvement_report.md
participant_package/reports/improvement_search_comparison.csv
participant_package/reports/improvement_search_comparison.json
participant_package/reports/improvement_summary.json
participant_package/reports/overlap_sensitivity.csv
participant_package/reports/overlap_sensitivity.json
participant_package/reports/planner_benchmark.json
participant_package/reports/portfolio_refinement.json
participant_package/reports/prior_sensitivity.csv
participant_package/reports/prior_sensitivity_summary.json
participant_package/reports/publication_manifest.json
participant_package/reports/scenarios.csv
participant_package/reports/scenarios_summary.json
participant_package/reports/search_objective_check.json
participant_package/reports/sensitivity_notes.json
participant_package/reports/v1/ablation.csv
participant_package/reports/v1/ablation_summary.json
participant_package/reports/v1/baseline.csv
participant_package/reports/v1/baseline_summary.json
participant_package/reports/v1/benchmark.csv
participant_package/reports/v1/benchmark_report.md
participant_package/reports/v1/benchmark_summary.json
participant_package/reports/v1/conservative_check.json
participant_package/reports/v1/data_audit.json
participant_package/reports/v1/decision_trace.json
participant_package/reports/v1/delivery_verification.json
participant_package/reports/v1/diverse_fixed.csv
participant_package/reports/v1/diverse_fixed_decision.md
participant_package/reports/v1/diverse_fixed_summary.json
participant_package/reports/v1/environment.json
participant_package/reports/v1/experiment_environment.json
participant_package/reports/v1/overlap_sensitivity.csv
participant_package/reports/v1/overlap_sensitivity.json
participant_package/reports/v1/portfolio_refinement.json
participant_package/reports/v1/prior_sensitivity.csv
participant_package/reports/v1/prior_sensitivity_summary.json
participant_package/reports/v1/scenarios.csv
participant_package/reports/v1/scenarios_summary.json
participant_package/reports/v1/sensitivity_notes.json
participant_package/reports/v1/validation.json
participant_package/reports/v2_ablation.csv
participant_package/reports/v2_ablation_notes.json
participant_package/reports/v2_ablation_summary.json
participant_package/reports/v2_advanced/improvement.csv
participant_package/reports/v2_advanced/improvement_baseline_full.csv
participant_package/reports/v2_advanced/improvement_baseline_full_summary.json
participant_package/reports/v2_advanced/improvement_model_holdout.csv
participant_package/reports/v2_advanced/improvement_model_holdout_reference.csv
participant_package/reports/v2_advanced/improvement_model_holdout_reference_manifest.json
participant_package/reports/v2_advanced/improvement_model_holdout_summary.json
participant_package/reports/v2_advanced/improvement_quick.csv
participant_package/reports/v2_advanced/improvement_quick_checkpoint1.csv
participant_package/reports/v2_advanced/improvement_quick_checkpoint1_summary.json
participant_package/reports/v2_advanced/improvement_quick_risk055.csv
participant_package/reports/v2_advanced/improvement_quick_risk055_summary.json
participant_package/reports/v2_advanced/improvement_quick_summary.json
participant_package/reports/v2_advanced/improvement_reference.csv
participant_package/reports/v2_advanced/improvement_reference_manifest.json
participant_package/reports/v2_advanced/improvement_report.md
participant_package/reports/v2_advanced/improvement_summary.json
participant_package/reports/v2_advanced/v2_ablation.csv
participant_package/reports/v2_advanced/v2_ablation_notes.json
participant_package/reports/v2_advanced/v2_ablation_summary.json
participant_package/reports/v2_simple/improvement.csv
participant_package/reports/v2_simple/improvement_archive_note.md
participant_package/reports/v2_simple/improvement_baseline_full.csv
participant_package/reports/v2_simple/improvement_baseline_full_summary.json
participant_package/reports/v2_simple/improvement_final_holdout.csv
participant_package/reports/v2_simple/improvement_final_holdout_reference.csv
participant_package/reports/v2_simple/improvement_final_holdout_reference_manifest.json
participant_package/reports/v2_simple/improvement_final_holdout_summary.json
participant_package/reports/v2_simple/improvement_model_holdout.csv
participant_package/reports/v2_simple/improvement_model_holdout_reference.csv
participant_package/reports/v2_simple/improvement_model_holdout_reference_manifest.json
participant_package/reports/v2_simple/improvement_model_holdout_summary.json
participant_package/reports/v2_simple/improvement_quick.csv
participant_package/reports/v2_simple/improvement_quick_checkpoint1.csv
participant_package/reports/v2_simple/improvement_quick_checkpoint1_summary.json
participant_package/reports/v2_simple/improvement_quick_risk055.csv
participant_package/reports/v2_simple/improvement_quick_risk055_summary.json
participant_package/reports/v2_simple/improvement_quick_summary.json
participant_package/reports/v2_simple/improvement_reference.csv
participant_package/reports/v2_simple/improvement_reference_manifest.json
participant_package/reports/v2_simple/improvement_report.md
participant_package/reports/v2_simple/improvement_summary.json
participant_package/reports/validation.json
participant_package/requirements.txt
participant_package/scoring_core.py
participant_package/submission.csv
participant_package/tariff_dictionary.csv
participant_package/tests/conftest.py
participant_package/tests/test_agent.py
participant_package/tests/test_agent_contract.py
participant_package/tests/test_audit_adapter.py
participant_package/tests/test_calibrated_posterior.py
participant_package/tests/test_inference_candidates.py
participant_package/tests/test_portfolio.py
participant_package/tests/test_public_mechanics.py
participant_package/tests/test_v2.py
scripts/start-demo.ps1
scripts/verify_stack.py
skill.md
Промпт для Codex решения.html
Промпт для Codex решения_files/FormattedText-j6xa3r87.css
Промпт для Codex решения_files/ansi-1f6vhsjh.css
Промпт для Codex решения_files/app-block-trigger-actions-hxl87txx.css
Промпт для Codex решения_files/client-defined-widget-gdqdmhro.css
Промпт для Codex решения_files/code-block-dop2czwo.css
Промпт для Codex решения_files/conversation-small-h5tbcwbw(1).css
Промпт для Codex решения_files/conversation-small-h5tbcwbw.css
Промпт для Codex решения_files/cot-message-chunk-b8hse3v2.css
Промпт для Codex решения_files/cot-v5-cwqe3unp.css
Промпт для Codex решения_files/favicons
Промпт для Codex решения_files/frame.html
Промпт для Codex решения_files/global-modals-ml4if1tf.css
Промпт для Codex решения_files/library-new-menu-nob9j3zc.css
Промпт для Codex решения_files/lightbox-b1e7tsj7.css
Промпт для Codex решения_files/ma.png
Промпт для Codex решения_files/model-reasoning-effort-slider-gjxuripq.css
Промпт для Codex решения_files/react-elopj9y2.css
Промпт для Codex решения_files/root-ikky18n3(1).css
Промпт для Codex решения_files/root-ikky18n3.css
Промпт для Codex решения_files/root-izi12y3s.css
Промпт для Codex решения_files/sdk(1).js.Без названия
Промпт для Codex решения_files/sdk.js.Без названия
Промпт для Codex решения_files/table-components-b39fqymt.css
Промпт для Codex решения_files/user-markdown-formatted-text-nfjbrik7.css
Промпт для Codex решения_files/wham-terminal-citation-renderer-nf9y3qm4.css
Промпт для Codex решения_files/writing-block-gwgymy54.css
Промпт для Codex решения_files/writing-block-provider-lbnz1gc0.css
Текстовый документ.txt

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.