О проекте
Команда: RedOrda
Кейс HackAlem.ai: Телеком — Beeline
Стадия: Доведённый продукт
Задача кейса: Агент, который решает, каким абонентам какой тариф предложить (чистый прирост ARPU)
Суть
Агент планирует тарифные кампании: на ограниченном бюджете проверяет гипотезы пилотами через публичную среду, затем собирает портфель до 10 кампаний (сегмент, тариф, канал) в пределах бюджета и лимита контактов и выгружает CSV.
Как устроено
Общий campaign_engine работает и в веб-приложении (Django, Celery, PostgreSQL, Redis, React), и в судейском Agent.act(env). Агент формирует гипотезы по истории и профилю аудитории, тратит часть бюджета на адаптивные пилоты (до 20), обновляет оценки эффекта по каналам и сегментам, затем выполняет ограниченный поиск допустимого портфеля, принимая замену только при улучшении прогнозной цели. LLM (OpenAI) служит дополнительным источником структурированных гипотез, а лимиты и вызовы среды контролирует код. Интерфейс показывает пилоты, расход ресурсов, журнал событий и «живую команду» из пяти ролей с командами explain и compare.
Ключевые решения
- adaptive pilot experiments
- budget/contact-constrained portfolio search
- hypothesis generation
- local_eval over seeds
- deterministic CSV export
Метрики
local_eval на seed 0–9: 10/10 валидных запусков с положительным net, средний net ≈1,08 млн у.е., медиана 1 133 155 (диапазон 532 792–1 559 491); поиск портфеля даёт +8,93% среднего net на 11 dev-seed
Особенности
Агент не знает истинных эффектов и оплачивает информацию пилотами, то есть по сути решает задачу explore/exploit. Результаты воспроизводимы: две независимые сборки дали побайтово одинаковый CSV с известным SHA-256. README честно отделяет цифры публичного мока от закрытого судейского балла.
Стек
Python · Django 5.2 · Celery · PostgreSQL · Redis · React 18 · TypeScript · Vite · Docker Compose · Vitest
Модели
OpenAI
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-182682a3-redorda.
README
README.md
Janymda by RedOrda
AI-команда, которая превращает данные об абонентах в проверенный план тарифных кампаний.
История → гипотезы → пилоты → портфель в пределах бюджета → CSV.
Запустить у себя через Docker · Проверить решение · API-контракт

Реальный экран интерфейса. В кейсе используются синтетические данные; показанное состояние команды зависит от выбранного плана.
Задача
В тарифном маркетинге недостаточно найти аудиторию с высоким ARPU: переход может уменьшить выручку, а каждый контакт расходует деньги и охват. История описывает другую выборку, поэтому агент сначала проверяет гипотезы небольшими пилотами, затем выбирает кампании по полученным наблюдениям.
| Аудитория кейса | Ресурсы агента | Итог |
|---|---|---|
| 23 441 синтетических абонента · 21 тариф · 4 канала | 100 000 у. е. · 15 000 контактов, включая пилоты · до 20 пилотов | До 10 кампаний: кому, какой тариф и через какой канал предложить |
[!NOTE] Локальное приложение и судейский
Agent.act(env)используют одинcampaign_engine. Прогнозы и результаты на публичном моке не являются баллом закрытого оценщика.
Запуск за одну команду
Нужны запущенный Docker с Compose v2 и Bash. Python, Node.js и PostgreSQL на компьютере проверяющего не требуются.
- Скачайте официальный ZIP участника. Он не включён в Git.
- Клонируйте репозиторий и запустите установку с реальным абсолютным путём к скачанному ZIP; имя файла у вас может отличаться от примера:
git clone https://github.com/BAITC-Hacks/hack-182682a3-redorda.git
cd hack-182682a3-redorda
bash scripts/quickstart-compose.sh "/absolute/path/to/participant-kit.zip"
- В приглашении
createsuperuserзадайте свои имя пользователя и пароль. Откройте localhost:5173 и войдите под этой учётной записью.
Скрипт создаёт локальный .env со случайными секретами, проверяет SHA-256 архива, распаковывает его через Docker, поднимает PostgreSQL, Redis, Django, Celery и React, импортирует полный набор и проверяет готовность агента. Существующий .env он сохраняет без изменений. Готовых логинов и паролей в репозитории нет.
[!TIP] Если запуск был неинтерактивным, создайте пользователя командой
docker compose exec backend python backend/manage.py createsuperuser. Статус контейнеров:docker compose ps -a; готовность API:curl -fsS http://localhost:5173/api/v1/ready/.
Контрольные точки после запуска:
| Проверка | Ожидаемый результат |
|---|---|
docker compose ps -a | db, redis, backend, worker и frontend работают; migrate завершился с кодом 0 |
docker compose exec -T backend python backend/manage.py check_agent | Agent preflight: OK и профиль из 23 441 абонента |
| Новый план в браузере | Расчёт доходит до результата; кампании и CSV доступны в карточке запуска |
Посмотреть интерфейс без ZIP
Запустите bash scripts/quickstart-compose.sh, создайте пользователя и в разделе «Аудитория» нажмите «Импортировать демоданные». Четыре включённых CSV позволяют изучить данные и сохранить черновик. Для пилотов и расчёта нужен полный ZIP с customer_profile.csv; после его получения повторите команду с путём к архиву.
Если запуск остановился
docker compose ps -a
docker compose logs --tail=120 backend worker frontend
Повторный запуск bash scripts/quickstart-compose.sh "/absolute/path/to/participant-kit.zip" сохраняет существующий .env. Если вы изменили переменные в нём вручную, пересоздайте контейнеры: docker compose up -d --force-recreate backend worker. Подробная инструкция Compose.
Сценарий для проверки
- Аудитория. После полного импорта откройте сводку: профиль абонентов и справочники становятся входом агента.
- План. Создайте запуск с бюджетом, лимитом контактов, числом пилотов и seed.
baselineработает без внешнего API-ключа. - Решение. Запустите расчёт. Смотрите пилоты, расход ресурсов, журнал событий, задачи команды и кампании в двух представлениях одного запуска.
- Результат. Откройте объяснения и сравнение доступных вариантов, затем скачайте сохранённый CSV. Новый набор ограничений создаёт отдельный план.
Экспорт читает сохранённый результат и не запускает пилоты повторно. Предполагаемый эффект, фактические расходы пилотов и плановая стоимость кампаний обозначаются раздельно. Поле результата симулятора остаётся null, если веб-запуск не выполнял отдельную оценку.
Живая команда получает задачи пяти ролей, результаты и передачи из реальных шагов движка. explain объясняет выбранную кампанию по сохранённым фактам. compare проверяет, какая начальная часть сохранённого портфеля укладывается в новые ограничения, включая уже потраченные ресурсы пилотов. Это ограниченный сценарий, а не полный поиск нового портфеля; обе команды не проводят дополнительных пилотов. Границы сравнения описаны в API-контракте. Ограничение каналов для нового запуска пока не поддерживается.
Почему здесь нужен агент
flowchart LR
A["История и профиль аудитории"] --> B["Гипотезы"]
B --> C["Пилоты через публичную среду"]
C --> D["Обновление оценок"]
D --> E["Поиск допустимого портфеля"]
E --> F["Кампании и CSV"]
C --> G["События и свидетельства"]
D --> G
E --> G
Агент не получает истинные эффекты заранее. Он расходует ограниченный бюджет на пилоты, учитывает их результаты при выборе каналов и сегментов, а затем проверяет итоговый портфель по общим лимитам. После пилотов ограниченный поиск может заменить кампанию, канал или порядок; он сохраняет вариант только при улучшении прогнозной цели. Это не обещание улучшить фактический результат на каждом seed.
LLM — дополнительный источник структурированных гипотез. При отсутствии ключа или ошибке провайдера расчётная стратегия продолжает работу. Проверка лимитов и вызовы публичной среды остаются в коде движка.
Результаты, которые можно повторить
[!IMPORTANT] Все цифры ниже получены на публичном локальном моке и seed, использованных при разработке. Это измеренный результат локального симулятора, не прогноз веб-интерфейса и не балл закрытого судейства. Данные кейса синтетические. Срез: 23 сентября 2026, версия агента
d91aabc.
Стандартный агент · адаптивные пилоты
| 10 / 10 | ≈1,08 млн у. е. | 14 пилотов | 8–10 кампаний |
|---|---|---|---|
| Валидные запуски с положительным net | Средний чистый результат | В каждом запуске, из 20 допустимых | В каждом итоговом плане |
Agent.act(env) без вызовов LLM прошёл официальный local_eval --runs 10 на seed 0–9. Чистый результат учитывает пилоты и финальные кампании: медиана 1 133 155 у. е., диапазон 532 792–1 559 491 у. е. Общие расходы — 97 142–100 000 у. е.; контакты — 9 090–15 000. Проверка лимитов завершилась OK в каждом запуске.
Все 10 запусков · net, кампании и ресурсы
| Seed | Чистый результат, у. е. | Кампании | Контакты | Расходы, у. е. |
|---|---|---|---|---|
| 0 | 1 260 272 | 10 | 13 728 | 98 276 |
| 1 | 1 435 659 | 8 | 15 000 | 97 142 |
| 2 | 532 792 | 10 | 13 592 | 99 466 |
| 3 | 1 559 491 | 9 | 9 090 | 99 982 |
| 4 | 1 497 251 | 8 | 15 000 | 97 456 |
| 5 | 1 037 147 | 10 | 15 000 | 99 984 |
| 6 | 644 650 | 8 | 15 000 | 97 288 |
| 7 | 1 229 162 | 9 | 14 765 | 99 852 |
| 8 | 625 103 | 8 | 15 000 | 98 826 |
| 9 | 992 439 | 9 | 15 000 | 100 000 |
Отдельный эксперимент · поиск портфеля
На одинаковых замороженных пилотах fixed_200 сравнили исходный и улучшенный портфели на 11 dev-seed. Средний измеренный net изменился с 1 373 058,47 до 1 495 712,80 у. е. — +8,93%. Из 11 пар: 6 улучшений · 1 совпадение · 4 ухудшения. Поиск сохраняет улучшение прогнозной цели; роста фактического net на каждом seed он не гарантирует. Это другая конфигурация, и её среднее нельзя приписывать стандартному адаптивному агенту. Протокол и границы вывода.
Воспроизводимая сдача
Два отдельных процесса make_submission с seed 42 и автономная сборка дали побайтово одинаковый CSV: 9 кампаний · 14 пилотов · 15 000 контактов · 99 994 у. е. расходов. Автономный агент повторил все десять локальных результатов. SHA-256 CSV: 8cffdc8561421204e1fee3de599918304173b3d9acb00fa8462dc395eee0ee52.
Команды для независимой локальной проверки
После установки Python 3.11+ и Node.js 20.19+:
make setup
.venv/bin/python scripts/import_participant_kit.py "/absolute/path/to/participant-kit.zip"
PYTHON_DOTENV_DISABLED=1 .venv/bin/python scripts/run_official.py local_eval --runs 10
PYTHON_DOTENV_DISABLED=1 .venv/bin/python scripts/run_official.py make_submission
.venv/bin/python scripts/build_agent.py --submission artifacts/submission.csv
make schema
make check
Готовый для копирования комплект создаётся в artifacts/delivery/: автономный agent.py, submission.csv и минимальные зависимости. Сгенерированные артефакты и пакет организаторов не входят в Git. ТЗ конкурса · Подробный протокол поиска.
Архитектура
flowchart LR
UI["React · рабочий стол и команда"] --> API["Django API"]
API --> Q["Celery worker"]
Q --> ENGINE["campaign_engine"]
JUDGE["Agent.act(env)"] --> ENGINE
ENGINE <--> ENV["Публичная среда и пилоты"]
ENGINE --> STORE["События · результаты · CSV"]
STORE --> API
| Слой | Ответственность |
|---|---|
frontend/ | Два представления запуска, персонажи, импорт данных, управление планом и экспорт |
backend/ | Авторизация, хранение наборов и запусков, очередь, события, результаты и HTTP API |
packages/campaign_engine/ | Общая стратегия для веба и судейского Agent.act, пилоты, оценки, ограничения и портфель |
agent.py / scripts/build_agent.py | Конкурсный вход и автономная сборка для передачи организаторам |
Документация: API и авторизация · OpenAPI · развёртывание · контракт живой команды · конкурсный агент.
RedOrda · HackAlem AI 2026 · Beeline Tariff Marketing Campaigns. Все данные и суммы кейса синтетические.
Авторы коммитов
История коммитов
- 2026-09-23 17:59Update production deployment docs and Blob download testoreke13
- 2026-09-23 17:56Show reproducible local evaluation results in READMEoreke13
- 2026-09-23 17:48Merge updated main onboarding with live team fixeserkebulanmyrzabek
- 2026-09-23 17:48Document verified live team workflow and comparison limitserkebulanmyrzabek
- 2026-09-23 17:46Present Janymda and streamline Compose onboardingoreke13
- 2026-09-23 17:44Implement saved snapshot campaign explanations and constrained comparisonserkebulanmyrzabek
- 2026-09-23 17:43Publish evidence-linked team tasks from real campaign stepserkebulanmyrzabek
- 2026-09-23 17:41Fix budget extraction in create-plan text requestserkebulanmyrzabek
Все коммиты (99)
- 2026-09-23 17:22Merge latest portfolio search into mainerkebulanmyrzabek
- 2026-09-23 17:20Merge backend team services with live frontenderkebulanmyrzabek
- 2026-09-23 17:18Merge live team frontend into mainerkebulanmyrzabek
- 2026-09-23 17:18Merge latest main and verify portfolio search integrationByOrynbasar
- 2026-09-23 17:16Improve final portfolio search with frozen pilot evidenceByOrynbasar
- 2026-09-23 17:14Merge integrated backend team servicesoreke13
- 2026-09-23 17:14Integrate durable team commands and validate cross-branch workfloworeke13
- 2026-09-23 17:10Merge team HTTP APIoreke13
- 2026-09-23 17:08Merge team command executionoreke13
- 2026-09-23 17:08Merge team state persistenceoreke13
- 2026-09-23 17:06Persist team tasks artifacts and consistent snapshotsoreke13
- 2026-09-23 17:05Prepare typed team commands from short text requestserkebulanmyrzabek
- 2026-09-23 17:04Share selected run, team snapshot and commands across viewserkebulanmyrzabek
- 2026-09-23 17:02Handle missing run progress in detail viewerkebulanmyrzabek
- 2026-09-23 17:01Implement durable team commands and AI adapteroreke13
- 2026-09-23 17:00Drive existing pets from run tasks and handoffserkebulanmyrzabek
- 2026-09-23 17:00Connect run detail to shared live team stateerkebulanmyrzabek
- 2026-09-23 16:59Add team snapshot and command HTTP APIoreke13
- 2026-09-23 16:59Merge remote-tracking branch 'origin/main' into codex/production-integrationerkebulanmyrzabek
- 2026-09-23 16:59Merge authenticated agent workflow with imports and verified simulationerkebulanmyrzabek
- 2026-09-23 16:49Fix dataset readiness and import integration before production releaseerkebulanmyrzabek
- 2026-09-23 16:49Merge production-based team scopeoreke13
- 2026-09-23 16:48Align team tasks with inspected production mascotsoreke13
- 2026-09-23 16:46Merge parallel AI team specificationsoreke13
- 2026-09-23 16:45Document parallel delivery plan for live AI teamoreke13
- 2026-09-23 16:43Integrate subscriber persistence with validated immutable datasetserkebulanmyrzabek
- 2026-09-23 16:41Integrate dataset imports, authenticated workflow and Janymda petserkebulanmyrzabek
- 2026-09-23 16:39Merge latest frontend into agent web integrationByOrynbasar
- 2026-09-23 16:38Connect campaign agent to authenticated web workflowByOrynbasar
- 2026-09-23 16:38Integrate verified campaign execution and Janymda sign-inerkebulanmyrzabek
- 2026-09-23 16:37Add four pixel pets and a Janymda mini-officeerkebulanmyrzabek
- 2026-09-23 16:37Polish pet controls after browser and accessibility verificationerkebulanmyrzabek
- 2026-09-23 16:36fix: preserve saved runs and negotiate CSV downloadserkebulanmyrzabek
- 2026-09-23 16:36Polish pet controls after browser and accessibility verificationerkebulanmyrzabek
- 2026-09-23 16:33feat(backend): enable verified official local simulationerkebulanmyrzabek
- 2026-09-23 16:33fix(frontend): align full run workflow with backend contracterkebulanmyrzabek
- 2026-09-23 16:32Add four pixel pets and a Janymda mini-officeerkebulanmyrzabek
- 2026-09-23 16:25Guard frontend routes with Janymda sessionerkebulanmyrzabek
- 2026-09-23 16:25Keep logout visible with long usernameserkebulanmyrzabek
- 2026-09-23 16:25Add session and CSRF API clienterkebulanmyrzabek
- 2026-09-23 16:25Add Janymda sign-in pageerkebulanmyrzabek
- 2026-09-23 16:24feat(frontend): prepare campaign run workflowerkebulanmyrzabek
- 2026-09-23 16:24fix(frontend): preserve run polling after network failureserkebulanmyrzabek
- 2026-09-23 16:23fix(backend): connect web runs to shared campaign runnererkebulanmyrzabek
- 2026-09-23 16:22Complete CSV import documentation and verification guidanceerkebulanmyrzabek
- 2026-09-23 16:21Keep dataset import results across route navigationerkebulanmyrzabek
- 2026-09-23 16:20Publish dataset import schema and storage documentationerkebulanmyrzabek
- 2026-09-23 16:18Add validated raw CSV and demo dataset importserkebulanmyrzabek
- 2026-09-23 16:17Add demo and CSV dataset import interfaceerkebulanmyrzabek
- 2026-09-23 16:17Merge latest main before publishing diagnosticsByOrynbasar
- 2026-09-23 16:16Keep uploaded datasets out of Docker image layerserkebulanmyrzabek
- 2026-09-23 16:15Merge AI agent diagnostics into mainByOrynbasar
- 2026-09-23 16:15Add controlled pilot and portfolio diagnosticsByOrynbasar
- 2026-09-23 16:14Bundle demo CSVs and define web import contracterkebulanmyrzabek
- 2026-09-23 16:13Expose run progress and sanitized failure detailsoreke13
- 2026-09-23 16:08Merge campaign agent into mainByOrynbasar
- 2026-09-23 16:05Keep logout visible with long usernameserkebulanmyrzabek
- 2026-09-23 16:01Guard frontend routes with Janymda sessionerkebulanmyrzabek
- 2026-09-23 15:57Add Janymda favicon to frontenderkebulanmyrzabek
- 2026-09-23 15:57fix(frontend): preserve run polling after network failureserkebulanmyrzabek
- 2026-09-23 15:56Add Janymda sign-in pageerkebulanmyrzabek
- 2026-09-23 15:55Implement campaign agent with adaptive pilots and OpenAI integrationByOrynbasar
- 2026-09-23 15:54Add session and CSRF API clienterkebulanmyrzabek
- 2026-09-23 15:54feat(frontend): prepare campaign run workflowerkebulanmyrzabek
- 2026-09-23 15:51Plan Janymda frontend login implementationerkebulanmyrzabek
- 2026-09-23 15:49Specify Janymda frontend login flowerkebulanmyrzabek
- 2026-09-23 15:44Merge public Swagger documentationoreke13
- 2026-09-23 15:44Make Swagger and OpenAPI publicly accessibleoreke13
- 2026-09-23 15:41Merge verified backend integration with latest mainoreke13
- 2026-09-23 15:40Preserve latest main branding and disabled Actions; retain CI templateoreke13
- 2026-09-23 15:38Merge backend integration, session auth and infrastructureoreke13
- 2026-09-23 15:38Integrate backend auth, infrastructure and PostgreSQL worker checksoreke13
- 2026-09-23 15:35Remove failing GitHub Actions workflowerkebulanmyrzabek
- 2026-09-23 15:34Merge pull request #2 from BAITC-Hacks/codex/janymda-brandМырзабек Еркебұлан Қалдыбекұлы
- 2026-09-23 15:33Use Janymda branding in navigationerkebulanmyrzabek
- 2026-09-23 15:26Persist subscriber profiles in participant importerkebulanmyrzabek
- 2026-09-23 15:17Merge codex/backend-results into backend integrationoreke13
- 2026-09-23 15:17Merge codex/backend-api into backend integrationoreke13
- 2026-09-23 15:17Merge codex/backend-data into backend integrationoreke13
- 2026-09-23 15:17Merge codex/backend-execution into backend integrationoreke13
- 2026-09-23 15:15Add campaign run API actions and explicit contractsoreke13
- 2026-09-23 15:14Merge pull request #1 from BAITC-Hacks/codex/dev3-frontendМырзабек Еркебұлан Қалдыбекұлы
- 2026-09-23 15:14Fix execution test to use queued task idoreke13
- 2026-09-23 15:13Add validated Beeline dataset import and run lifecycle modelsoreke13
- 2026-09-23 15:12Implement transactional campaign execution and Celery workeroreke13
- 2026-09-23 15:12Implement saved campaign results and deterministic CSV exportoreke13
- 2026-09-23 15:11Add React Bits motion to frontenderkebulanmyrzabek
- 2026-09-23 15:06Poll main on Mac mini while GitHub Actions billing is blockedoreke
- 2026-09-23 15:05Deploy hack.1ge.kz on Mac mini with checked main autodeployoreke
- 2026-09-23 14:54Scaffold Django React monorepo and three developer briefsoreke13
- 2026-09-23 14:00Document Beeline tariff campaign caseoreke13
Структура репозитория (201 файлов)
.dockerignore .env.example .gitignore AGENTS.md Makefile README.md agent.py artifacts/.gitkeep backend/Dockerfile backend/apps/__init__.py backend/apps/campaigns/__init__.py backend/apps/campaigns/admin.py backend/apps/campaigns/apps.py backend/apps/campaigns/auth_views.py backend/apps/campaigns/dataset_views.py backend/apps/campaigns/errors.py backend/apps/campaigns/management/__init__.py backend/apps/campaigns/management/commands/__init__.py backend/apps/campaigns/management/commands/check_agent.py backend/apps/campaigns/management/commands/import_participant_data.py backend/apps/campaigns/migrations/0001_initial.py backend/apps/campaigns/migrations/0002_campaignrun_cancel_requested_campaignrun_error_code_and_more.py backend/apps/campaigns/migrations/0002_subscriber.py backend/apps/campaigns/migrations/0003_campaignrun_constraints_campaignrun_parent_run_and_more.py backend/apps/campaigns/migrations/0003_merge_subscriber_execution.py backend/apps/campaigns/migrations/0004_merge_20260923_1710.py backend/apps/campaigns/migrations/__init__.py backend/apps/campaigns/models.py backend/apps/campaigns/serializers.py backend/apps/campaigns/services/__init__.py backend/apps/campaigns/services/datasets.py backend/apps/campaigns/services/engine_bridge.py backend/apps/campaigns/services/execution.py backend/apps/campaigns/services/export.py backend/apps/campaigns/services/participant_environment.py backend/apps/campaigns/services/public_environment.py backend/apps/campaigns/services/raw_datasets.py backend/apps/campaigns/services/results.py backend/apps/campaigns/services/team_ai.py backend/apps/campaigns/services/team_commands.py backend/apps/campaigns/services/team_state.py backend/apps/campaigns/tasks.py backend/apps/campaigns/team_serializers.py backend/apps/campaigns/team_views.py backend/apps/campaigns/urls.py backend/apps/campaigns/views.py backend/config/__init__.py backend/config/celery.py backend/config/health.py backend/config/permissions.py backend/config/runtime.py backend/config/settings.py backend/config/urls.py backend/config/wsgi.py backend/manage.py backend/tests/__init__.py backend/tests/integration/__init__.py backend/tests/integration/test_pipeline.py backend/tests/integration/test_postgres.py backend/tests/integration/test_team_commands_postgres.py backend/tests/integration/test_team_pipeline.py backend/tests/integration/test_team_state_postgres.py backend/tests/test_agent_readiness.py backend/tests/test_api.py backend/tests/test_auth.py backend/tests/test_dataset_execution_readiness.py backend/tests/test_dataset_upload.py backend/tests/test_engine_integration.py backend/tests/test_execution.py backend/tests/test_export.py backend/tests/test_import.py backend/tests/test_models.py backend/tests/test_participant_environment.py backend/tests/test_participant_pipeline.py backend/tests/test_public_engine_integration.py backend/tests/test_public_environment.py backend/tests/test_results.py backend/tests/test_team_analysis.py backend/tests/test_team_api.py backend/tests/test_team_commands.py backend/tests/test_team_state.py compose.yaml data/demo/README.md data/demo/arpu_monthly.csv data/demo/change_tariff.csv data/demo/dict_tariff.csv data/demo/traffic.csv docs/api-contract.md docs/assets/local-eval-10.svg docs/assets/team-office.jpg docs/backend-api.md docs/backend-data.md docs/backend-execution.md docs/backend-integration.md docs/backend-results.md docs/deployment.md docs/developers/00-team-plan.md docs/developers/01-backend.md docs/developers/02-agent-integration.md docs/developers/02-agent.md docs/developers/02-portfolio-search.md docs/developers/03-frontend.md docs/openapi.yaml docs/team-contract.md frontend/Dockerfile frontend/README.md frontend/index.html frontend/package-lock.json frontend/package.json frontend/public/branding/janymda-logo.jpg frontend/src/App.auth.test.tsx frontend/src/App.tsx frontend/src/api/adapters.test.ts frontend/src/api/adapters.ts frontend/src/api/client.auth.test.ts frontend/src/api/client.ts frontend/src/api/run-state.ts frontend/src/api/team-requests.ts frontend/src/api/types.ts frontend/src/components/DataPage.css frontend/src/components/DataPage.tsx frontend/src/components/LoginPage.test.tsx frontend/src/components/LoginPage.tsx frontend/src/components/RunDetail.css frontend/src/components/RunDetail.tsx frontend/src/components/pets/AgentPets.css frontend/src/components/pets/AgentPets.tsx frontend/src/components/pets/PetAvatar.tsx frontend/src/components/pets/PetOffice.tsx frontend/src/components/pets/choreography.ts frontend/src/components/react-bits/CountUp.tsx frontend/src/components/react-bits/LICENSE.md frontend/src/components/react-bits/SpotlightCard.css frontend/src/components/react-bits/SpotlightCard.tsx frontend/src/main.tsx frontend/src/runs/RunDetail.tsx frontend/src/runs/RunResults.tsx frontend/src/runs/presentation.ts frontend/src/runs/runs.css frontend/src/runs/useRun.ts frontend/src/state/RunContext.tsx frontend/src/styles.css frontend/src/test/run-workflow.test.tsx frontend/src/test/setup.ts frontend/src/vite-env.d.ts frontend/tests/api-client.test.mjs frontend/tsconfig.json frontend/vite.config.ts frontend/vitest.config.ts infra/ci/github-actions.yaml infra/macos/com.oa.redorda.api.plist infra/macos/com.oa.redorda.autodeploy.plist infra/macos/com.oa.redorda.web.plist infra/macos/com.oa.redorda.worker.plist infra/macos/production.env.example infra/macos/proxy.mjs infra/macos/run-service.sh infra/nginx.conf packages/campaign_engine/__init__.py packages/campaign_engine/agent.py packages/campaign_engine/beliefs.py packages/campaign_engine/candidates.py packages/campaign_engine/contracts.py packages/campaign_engine/engine_types.py packages/campaign_engine/openai_gateway.py packages/campaign_engine/pilots.py packages/campaign_engine/portfolio.py packages/campaign_engine/runner.py packages/campaign_engine/segments.py packages/campaign_engine/team_analysis.py packages/campaign_engine/team_events.py packages/campaign_engine/tests/test_candidates.py packages/campaign_engine/tests/test_delivery.py packages/campaign_engine/tests/test_diagnostic_package.py packages/campaign_engine/tests/test_hypothesis_provider.py packages/campaign_engine/tests/test_openai_gateway.py packages/campaign_engine/tests/test_pilot_diagnostics.py packages/campaign_engine/tests/test_pilots.py packages/campaign_engine/tests/test_portfolio.py packages/campaign_engine/tests/test_portfolio_diagnostics.py packages/campaign_engine/tests/test_portfolio_search.py packages/campaign_engine/tests/test_portfolio_search_diagnostics.py packages/campaign_engine/tests/test_runner.py packages/campaign_engine/tests/test_runner_edges.py packages/campaign_engine/tests/test_runner_search.py packages/campaign_engine/tests/test_team_analysis.py pyproject.toml requirements.lock requirements.txt scripts/benchmark_agent.py scripts/build_agent.py scripts/check_openai.py scripts/compare_portfolio_search.py scripts/deploy-production-macos.sh scripts/diagnose_pilots.py scripts/diagnose_portfolio.py scripts/import_participant_kit.py scripts/package_diagnostics.py scripts/poll-production-macos.sh scripts/quickstart-compose.sh scripts/run_official.py
Ветки (15)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.