О проекте
Команда: ascend.
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
Полноценная AML-платформа: пайплайн по графу транзакций с ролями, кластерами и приоритетами, React-дашборд с интерактивным графом, AI-помощник, выгрузка PDF-досье, а также Telegram-бот и Mini App с уведомлениями о новых связях.
Как устроено
Три Parquet-файла валидируются, строится направленный граф. Считаются степени, betweenness, PageRank и достижимость от seed, кластеры выделяются Louvain на неориентированной проекции. Шесть ролей назначаются по правилам из methodology.yaml. Extras: временные паттерны, цепочки и циклы, признаки дробления, устойчивость сети, граница наблюдения. Backend на FastAPI публикует снимки с run_id; помощник на OpenAI Responses API имеет 16 read-only инструментов и локальный fallback. Telegram-бот сравнивает снимки и уведомляет о впервые появившихся направленных связях.
Ключевые решения
- NetworkX
- Louvain
- PageRank
- betweenness
- кратчайший направленный путь
- проверка хронологии
- правила аномалий (дробление)
- анализ устойчивости
- function calling
- сравнение снимков
Особенности
PDF-досье сервер собирает из фактов выбранного снимка, а не из текста клиента. Telegram-канал оповещает о новых связях между снимками. Эвалуация ассистента в репозитории (assistant_eval). В репо лежат презентация pptx и видео mp4.
Стек
Python · FastAPI · Uvicorn · Pydantic · ReportLab · pandas · NumPy · NetworkX · SciPy · PyArrow · React · TypeScript · Vite · Cytoscape.js · Telegram Bot API · SQLite · Docker
Модели
gpt-4.1-mini (OpenAI Responses API)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-0b94fdb6-ascend.
README
README.mdFreedom Graph — Ascend
Объяснимая аналитика финансовых связей для AML-аналитика банка. Проект команды Ascend для HackAlem AI: от транзакционного графа к приоритетам проверки, наблюдаемым основаниям и досье аналитика.
Жюри: инструкция быстрого запуска и проверки. Весь комплект уже в репозитории: три Parquet, готовый расчёт и сборка сайта. После скачивания и распаковки репозитория выполните py -3.12 jury_start.py в Windows или python3 jury_start.py в Linux/macOS и откройте http://127.0.0.1:8000/. Ключи OpenAI и Telegram для этого не нужны. GitHub хранит код; постоянный публичный сайт пока не развёрнут.
Роли, уровни приоритета и найденные структуры — аналитические гипотезы. Они не устанавливают виновность, не заменяют проверку первичных документов и не являются вероятностью нарушения.
1. Какую проблему решает проект
В сети переводов аналитику нужно определить, какие узлы проверить первыми, кто собирает или распределяет средства и какие связи подтверждают рабочую гипотезу. Freedom Graph рассчитывает признаки графа, назначает объяснимые роли и приоритеты, показывает контекст клиента по GID и помогает сформировать проверяемый отчёт.
Основной пользователь — AML-аналитик банка. Интерфейс предназначен для ручного исследования наблюдаемой сети, а не для автоматического принятия санкционных решений.
2. Что реализовано
Основной сайт
- React-dashboard с backend API: статистика и период снимка, список приоритетных узлов, точный поиск по GID, фильтры ролей и кластеров.
- Интерактивный направленный граф: масштабирование, перемещение, выбор узлов и рёбер, просмотр соседей, раскраска по приоритету, роли или кластеру. Анимация потоков включается отдельно, по умолчанию выключена.
- Карточка узла: роль, role_score, priority_score, кластер, входящие и исходящие связи, полученные и отправленные суммы, evidence и пояснение правила. Отдельно отмечаются seed, граница обхода и изоляты.
- Выбор уровня приоритета показывает соответствующие узлы с непосредственными соседями и связями внутри окружения. Обычный список расширяется порциями по 100 узлов.
- «Расследование»: агрегаты связей, один кратчайший направленный путь до шести рёбер, проверка совместимости диапазонов дат, досье до 30 фактов и выгрузка PDF- и Markdown-отчётов. PDF формируется сервером по фактам выбранного снимка, а не по тексту клиента.
- Скачивание nodes_roles.csv, clusters.csv, top_nodes.csv из того же опубликованного снимка, который использует API.
- Переключатель RU / KZ / EN для основной оболочки. Часть новых аналитических панелей, сообщений API и объяснений пока остаётся на русском.
Рабочая точка входа: Frontend/src/main.tsx → DesignDashboard.tsx. Старый App.tsx с mock-данными сохранён в исходниках, но не является текущим основным экраном.
Расчёт графа
- Загрузка трёх Parquet-файлов; валидация GID, дат, сумм и связей; сверка агрегированных рёбер с транзакциями.
- Направленный граф, степени узлов, наблюдаемые потоки, betweenness, PageRank, достижимость от seed; Louvain на неориентированной проекции для выделения кластеров.
- Шесть ролей: consolidator, distributor, transit, terminal, coordinator, peripheral. Правила, пороги и веса — в methodology.yaml.
- Детерминированные объяснения, рейтинг и гипотезы кластеров. role_score — эвристическое соответствие правилу; priority_score — относительная очерёдность проверки.
- Дополнительные анализы: временные паттерны, цепочки и циклы, признаки дробления и другие правила аномалий, устойчивость сети при удалении узлов, граница наблюдения и рекомендации по недостающим данным.
- Публикация каталога запуска с run_id, JSON-снимком, CSV, метаданными и отчётом качества.
Дополнительные анализы доступны через API и отдельный экран /analysis-extras при запуске через ai_agent; не все они встроены в основной React-dashboard.
AI-помощник
- Чат в основном сайте: вопросы о приоритетах, узлах, соседях, путях и других доступных фактах снимка; переход из ответа к GID и просмотр вызванных инструментов.
- OpenAI Responses API с 16 инструментами только для чтения. Модель не пересчитывает роли и не изменяет результаты анализа.
- Без настроек OpenAI или при ошибке провайдера используется помеченный локальный режим fallback для поддерживаемых типов вопросов. Это разбор по правилам и фактам, не ответ LLM.
- Ограничения времени и числа вызовов, проверки GID и числовых утверждений, предупреждения о неполных результатах. Эти проверки не гарантируют истинность каждого предложения.
Telegram-бот и Mini App
- Отдельный Python-бот @FreedomGraphbot: личная активация кодом команды, автоматическая подписка, статус, пауза, возобновление и отключение.
- Сравнение опубликованных backend-снимков и уведомления о впервые наблюдаемых направленных связях в сопоставимом срезе. Первый снимок создаёт базу без рассылки. Это не предсказание будущих связей и не поток банковских операций в реальном времени.
- Подписки, очередь и история доставок — в локальной SQLite. По умолчанию разрешены только синтетические снимки, GID и суммы в сообщениях скрыты.
- Mini App: мобильный интерфейс в тёмно-фиолетовой теме, RU / KZ / EN, сигналы, фильтры, граф и объяснения.
- Mini App пока использует синтетические данные из data.mjs. Отметки проверки сохраняются только в браузерной сессии и не синхронизируются с ботом или backend. Серверная авторизация Mini App не реализована.
3. Основной пользовательский сценарий
- Команда помещает nodes.parquet, edges.parquet, transactions.parquet в backend/data/ и запускает pipeline.
- Graph Engine проверяет входы, рассчитывает роли, кластеры, приоритеты и объяснения. Backend публикует согласованный снимок.
- Аналитик открывает сайт, выбирает приоритетный узел или вводит полный GID. Интерфейс показывает окружение и карточку с основаниями.
- Аналитик изучает направление, суммы и даты связей, проверяет структурную цепочку и ограничения хронологии. При необходимости задаёт вопрос помощнику.
- Факты добавляются в досье. На выходе — PDF- или Markdown-отчёт с run_id, направлениями, суммами, датами и оговорками либо CSV результатов.
Цепочка показывает достижимость в графе. Суммы её рёбер нельзя автоматически складывать в «сумму прошедших по цепочке денег».
4. Технологии
| Компонент | Технологии |
|---|---|
| Основной frontend | React, TypeScript, Vite, Cytoscape.js, lucide-react, CSS; lockfile: Frontend/package-lock.json |
| API и публикация результатов | Python, FastAPI, Uvicorn, Pydantic, python-dotenv, ReportLab для PDF, файловые снимки JSON/CSV |
| Графовая аналитика | pandas, NumPy, NetworkX, SciPy, PyArrow, PyYAML |
| AI-помощник | Python SDK OpenAI, Responses API, function calling; модель задаётся OPENAI_MODEL |
| Telegram-бот | Python standard library, Telegram Bot API, SQLite, long polling |
| Telegram Mini App | HTML, CSS, JavaScript ES-модули, SVG, Telegram WebApp SDK; без npm-сборки |
| Проверки | unittest, pytest, Node.js test runner, TypeScript |
В репозитории есть отчёт проверки агента с моделью gpt-4.1-mini. Это модель указанного прогона, а не автоматически выбираемая модель всех установок. NVIDIA и другие LLM-провайдеры в текущей реализации не подключены.
5. Архитектура
Три Parquet-файла
│
▼
backend.run_pipeline → graph.analyze → роли, признаки, кластеры, extras
│
▼
backend/output/runs/<run_id>/ + LATEST
│
▼
FastAPI /api/v1
├── React-dashboard → карточки, граф, досье, CSV
├── AI-помощник → инструменты снимка → OpenAI или локальный fallback
└── Telegram-бот → сравнение снимков → личные уведомления
Telegram Mini App → свои синтетические данные (пока отдельно от API)
| Каталог | Назначение |
|---|---|
| Frontend/ | Основной сайт и готовая сборка dist/ |
| backend/ | Pipeline, API, публикация снимков и экспорт |
| graph/ | Аналитика, методика, валидация и extras/ |
| ai_agent/ | Агент, интеграция и отдельные экраны |
| TelegramBot/ | Бот, локальная конфигурация и состояние |
| TelegramBot/miniapp/ | Независимая frontend-демонстрация Mini App |
graph.analyze() сам не записывает файлы и не обращается к сети. Публикацией занимается backend. API использует один загруженный снимок до явного перечитывания. GID в JSON — строки: преобразование в JavaScript Number может потерять точность.
6. Установка и запуск
Команды выполняются из корня репозитория, если не указано иначе. Нужны Git, доступ к репозиторию и Python 3.11+; проверенные окружения описаны в документации модулей. Для первого получения зависимостей нужен интернет.
6.1. Получить код и зависимости
git clone https://github.com/BAITC-Hacks/hack-0b94fdb6-ascend.git
cd hack-0b94fdb6-ascend
Если рабочая копия уже есть, обновите её, предварительно сохранив свои изменения; не клонируйте поверх существующей папки.
Windows / PowerShell:
py -m venv backend/.venv
.\backend\.venv\Scripts\python.exe -m pip install -r backend/requirements-assistant.txt
macOS / Linux:
python3 -m venv backend/.venv
backend/.venv/bin/python -m pip install -r backend/requirements-assistant.txt
Набор включает API, Graph Engine и SDK агента. Установка SDK сама по себе не включает платные обращения к OpenAI. Готовая сборка Frontend/dist/ включена в Git: для обычного запуска основного сайта Node.js не требуется.
6.2. Запуск на данных кейса
Выданные организаторами файлы включены в репозиторий в следующей структуре:
backend/data/nodes.parquet
backend/data/edges.parquet
backend/data/transactions.parquet
Windows:
.\backend\.venv\Scripts\python.exe -m backend.run_pipeline
.\backend\.venv\Scripts\python.exe -m backend.serve
macOS / Linux:
backend/.venv/bin/python -m backend.run_pipeline
backend/.venv/bin/python -m backend.serve
Откройте основной сайт или диагностику. Схема API — openapi.json; Swagger UI /docs в текущем backend отключён.
Терминал сервера должен оставаться открытым. Остановка — Ctrl+C. По умолчанию сервер доступен только с того же компьютера через 127.0.0.1.
Три исходных файла и готовый расчёт backend/jury_snapshot/ входят в Git. Чтобы открыть готовый расчёт без повторного pipeline, используйте jury_start.py по инструкции жюри. Локальные пересчёты в backend/output/ и секретные настройки остаются вне Git.
Если pipeline выполнен при уже работающем сервере, на /check нажмите «Перечитать результат» (POST /api/v1/reload), затем обновите данные сайта. Кнопка обновления сайта сама по себе не пересчитывает граф и не выполняет reload API.
6.3. Запуск без исходных данных
Windows:
.\backend\.venv\Scripts\python.exe -m backend.run_pipeline --demo
.\backend\.venv\Scripts\python.exe -m backend.serve --demo
macOS / Linux:
backend/.venv/bin/python -m backend.run_pipeline --demo
backend/.venv/bin/python -m backend.serve --demo
Демо содержит 24 синтетических изолированных узла и 0 связей. Оно проверяет запуск, карточки, поиск и CSV, но не демонстрирует транзакционные цепочки. Пустые связи здесь ожидаемы. Ошибка анализа настоящих данных не подменяется демо автоматически.
Перед сменой режима остановите предыдущий сервер. Результаты демо находятся отдельно в backend/output-demo/.
6.4. OpenAI — необязательно
Создайте локальный backend/.env по backend/.env.example, если его ещё нет. Для AI заполните:
ASSISTANT_ENABLED=1
OPENAI_API_KEY=<ваш_секретный_ключ>
OPENAI_MODEL=<доступная_вашему_проекту_модель>
Значения в угловых скобках — заглушки. Нужна модель с поддержкой используемого Responses API и вызовов инструментов. После изменения настроек перезапустите backend.serve. Ключ не вводится в frontend и не коммитится.
Вопрос, до шести предыдущих сообщений и выбранные результаты инструментов могут передаваться OpenAI; обращения могут тарифицироваться. Без настройки OpenAI основные расчёты и сайт работают локально, помощник использует fallback. Значение assistant_enabled в health характеризует настройку провайдера, но не проверяет баланс или доступность модели.
6.5. Дополнительные экраны аналитики
Чтобы открыть /assistant и /analysis-extras, после расчёта используйте альтернативную точку входа на порту 8001:
# Windows
.\backend\.venv\Scripts\python.exe -m ai_agent --output backend/output --port 8001
# macOS / Linux
backend/.venv/bin/python -m ai_agent --output backend/output --port 8001
Этот процесс также предоставляет backend и основной сайт. Для OpenAI здесь нужно явно передать --env-file ai_agent/.env с тремя AI-настройками из инструкции агента; backend/.env автоматически не загружается. В старом снимке без extras новые анализы отсутствуют — требуется пересчёт текущим Graph Engine.
6.6. Разработка frontend
Нужны Node.js и npm, совместимые с установленной версией Vite. Из корня:
cd Frontend
npm ci
npm run dev
Vite проксирует /api на 127.0.0.1:8000: backend запускается отдельно. Адрес frontend показывает терминал Vite. Для обновления поставляемой сборки выполните npm run build; результат записывается в Frontend/dist/.
При отдельном API-адресе перед сборкой задайте VITE_API_BASE_URL и согласуйте CORS. Любые VITE_* доступны браузеру и не подходят для секретов.
6.7. Telegram и Mini App
Это дополнительные компоненты; для основного сайта они не требуются.
- Запуск бота на macOS/Linux из корня:
python3 -m TelegramBot.launch. Первая настройка запросит токен скрытым вводом и создаст локальную конфигурацию. На Windows для текущего бота нужен WSL/Linux из-за fcntl. - В TelegramBot/.env задаются BACKEND_URL, MINIAPP_URL и параметры уведомлений. backend/.env не заменяет конфигурацию бота.
- Не запускайте одновременно два процесса одного токена. При переносе отдельно передаются конфигурация и SQLite; они не входят в Git.
- Локальный Mini App:
python3 -m http.server 5175 --bind 127.0.0.1 --directory TelegramBot/miniapp(на Windows можно использоватьpy). Открыть http://127.0.0.1:5175/. - Внутри Telegram нужен публичный HTTPS-адрес. Публикация и перенос описаны в README Mini App.
Не публикуйте .env, токены, код активации команды и TelegramBot/state/. Опубликованный ранее код активации нельзя считать секретом: перед использованием с ограниченным доступом его нужно заменить. Разрешение настоящих снимков через ALLOW_REAL_DATA=1 допустимо только после согласования передачи данных; это не настройка по умолчанию.
7. Как жюри проверить решение
На данных кейса — основной сценарий
- Выполните быстрый запуск или раздел 6.2 для самостоятельного пересчёта. На
/checkпроверьте успешный run_id, отсутствие синтетической пометки и доступность CSV. - На сайте выберите первый приоритетный узел, скопируйте полный GID и найдите его через поиск. Проверьте роль, вход/выход, кластер и evidence.
- Откройте связь через граф или «Расследование» → «Связи». Проверьте источник, получателя, сумму, количество переводов и диапазон дат.
- В разделе «Цепочка» укажите два GID с направленным путём. Изучите результат и сообщение о хронологии; отсутствие противоречия не доказывает передачу одних и тех же денег.
- Добавьте узел, связь и путь в досье, нажмите «Скачать PDF» или сохраните .md. Проверьте факты, run_id и ограничения. Сопоставьте выбранный узел с CSV.
- В «Спросить AI» отправьте «Выбери 10 приоритетных узлов» или «Объясни роль узла
#<GID>». Проверьте режим ai / fallback, ссылки на узлы и перечень инструментов.
В репозитории есть сценарий на 3–4 минуты с конкретными GID, привязанный к снимку 20260923T093020Z-77346e52. Он подходит для соответствующих исходных данных; на другом наборе ожидания могут отличаться.
По зафиксированной проверке Graph Engine исходный набор содержит 2 248 узлов, 3 119 рёбер, 4 840 транзакций; получен 91 кластер. Это показатели конкретного набора, а не фиксированные значения интерфейса и не гарантия для произвольных входов.
Без данных кейса
Выполните раздел 6.3, найдите GID 900000000000000000, откройте карточку и CSV. Ожидаются синтетическая пометка, роль peripheral и отсутствие рёбер. Для проверки цепочек нужны данные кейса или автоматические тесты, а не этот smoke-test.
Автоматические проверки
Следующие Python-команды выполняются Python из созданного окружения: backend/.venv/bin/python на macOS/Linux или .\backend\.venv\Scripts\python.exe на Windows. Ниже он обозначен как python.
python -m pip install -r graph/requirements-dev.txt
python -m pytest graph/tests ai_agent/tests backend/tests -q
python -m unittest TelegramBot.test_bot -v
Приёмочные тесты настоящих данных требуют локальных Parquet и могут пропускаться без них. Пропуск — не успешный анализ. Тесты с подставным провайдером не подтверждают работу живой модели. Живая оценка вынесена в инструкцию AI и может расходовать API-кредиты.
Для следующих тестов .ts нужен Node.js с поддержкой прямого выполнения TypeScript (например, использованный при локальной проверке Node.js 26):
node --test Frontend/tests/graphView.test.mjs Frontend/tests/flowAnimation.test.mjs Frontend/tests/investigation.test.mjs TelegramBot/miniapp/test.mjs
При подготовке комплекта 23.09.2026 прошли 17 Node.js-тестов интерфейса/Mini App и 80 тестов Graph/AI; TypeScript и сборка frontend — без ошибок. Приёмка комплекта на данных организаторов находится в backend/tests/test_jury_bundle.py: проверяет файлы, API, CSV, PDF, локальный помощник и Mini App. Для неё не нужны личные ключи.
Отдельные отчёты команды: Graph Engine, дополнительные анализы, агент. Это не заявление о завершённой сквозной приёмке всех компонентов.
8. Данные и интеграции
| Вход | Обязательные поля |
|---|---|
| nodes.parquet | gid, depth, is_seed |
| edges.parquet | src, dst, sum_kzt, n_tx, depth |
| transactions.parquet | src, dst, date, sum_kzt |
Источник — файлы кейса организаторов, включённые в backend/data/ для проверки жюри. Прямой коннектор к банковской системе, потоковому источнику или внешним реестрам не реализован. Проверяются точность идентификаторов, уникальность пар рёбер, допустимость дат и положительных сумм, согласованность рёбер с числом и суммами транзакций.
Основные запросы: /api/v1/health, /overview, /graph, /nodes, /nodes/{gid}, /nodes/{gid}/neighbors, /subgraph, /top, /clusters, /clusters/{id}, /export/{name}, /assistant. Все сокращённые пути в этом перечне начинаются с /api/v1. Дополнительные маршруты описаны в документации extras.
Внешние сервисы — OpenAI для необязательных AI-ответов и Telegram для бота/Mini App. Локальная графовая аналитика не требует внешней LLM или GPU. GitHub передаёт исходники, но не выполняет Python-приложение.
9. Ограничения и безопасность
- Неполный срез. По методике кейса не видны межбанковские переводы, остатки, атрибуты клиентов и операции ниже порога наблюдения 5 000 KZT. У seed неполные входящие; на глубине 4 исходящие не прослежены. Отсутствие наблюдений не равно отсутствию активности.
- Гипотезы, не диагноз. Роли, аномалии, кластеры и приоритеты рассчитаны правилами. Размеченной выборки для заявления accuracy нет. Название уровня приоритета в UI не является вероятностью нарушения.
- Временная точность. Вход содержит календарную дату без времени суток. Связи главного графа агрегированы; хронология пути и FIFO-анализ не доказывают принадлежность денег конкретному маршруту.
- Масштаб. Используются NetworkX и снимки в памяти; работа на миллионе узлов не реализована и не подтверждена. Браузер ограничивает отображение и анимацию, но всё равно загружает полный снимок графа.
- Сохранение работы. Досье основного сайта сбрасывается при перезагрузке/смене снимка и требует выгрузки для сохранения. Нет общего хранилища расследований и совместного редактирования.
- AI. Локальный fallback понимает ограниченные типы вопросов. Проверки ответа модели не доказывают корректность всей интерпретации. Перед внешним вызовом требуется разрешение на передачу выбранных фактов провайдеру.
- Telegram. Нужны работающий бот и доступные согласованные снимки. Первый снимок и новый несопоставимый срез не запускают массовую рассылку старых связей. Доставка не обещает exactly-once: при потере сетевого подтверждения возможен повтор.
- Mini App. Нет реальных сигналов, синхронизации с ботом и серверной проверки Telegram initData. Публичная кнопка Mini App сама по себе не подтверждает полномочия аналитика.
- Не банковский production. В основном API нет полноценной аутентификации, разграничения доступа, SSO, защищённого многопользовательского контура и полного аудита. Не выставляйте API и клиентские данные в открытый интернет без отдельной защиты. Секреты и закрытые данные не должны попадать в Git.
- Общая приёмка. Модульные тесты не подтверждают цепочку «новый backend-снимок → уведомление → реальные данные Mini App». Последний этап Mini App ещё не реализован.
10. Развёрнутая версия
Постоянный публичный адрес общей версии пока не настроен. Для воспроизводимой проверки используйте JURY.md. Для размещения подготовлены Dockerfile, compose.yaml и render.yaml. Адрес 127.0.0.1 доступен только на машине сервера и не является ссылкой для удалённого жюри.
Ранее настроенный временный HTTPS-туннель относится только к демонстрационному Mini App, зависит от работающего ноутбука и не заменяет размещение всего проекта. Его адрес не указан здесь как стабильная ссылка решения. Инструкция для публикации Mini App — в его README.
11. Документация по компонентам
- Backend: запуск, API и публикация результатов.
- Graph Engine: правила ролей и приоритетов, дополнительные анализы.
- AI-агент: настройка, инструменты и проверки.
- Сценарий демонстрации основного сайта.
- Telegram Mini App: запуск, ограничения и передача тимлиду.
Некоторые ранние инструкции модулей описывают предыдущие этапы разработки. Этот README отражает текущие точки входа и разделяет основной сайт с API, необязательный AI и независимую демонстрацию Mini App.
Авторы коммитов
История коммитов
- 2026-09-23 17:51Package organizer data and reproducible jury launchz1p1xxx
- 2026-09-23 17:40Add files via uploadhelmut
- 2026-09-23 17:28Presentation of Freedom GraphTemochkaa
- 2026-09-23 17:21fix: localize interface controls and restore Windows miniapp servingz1p1xxx
- 2026-09-23 17:13docs: add comprehensive Russian hackathon jury READMEKinad-IT
- 2026-09-23 17:11docs(ai-agent): clarify manual answer verificationasevelev564-rgb
- 2026-09-23 17:05feat: connect Telegram navigation and export verified PDF dossiersz1p1xxx
- 2026-09-23 16:48docs(telegram): add teammate setup and bot transfer instructionsKinad-IT
Все коммиты (46)
- 2026-09-23 16:46fix(frontend): distinguish local fallback and match agent response deadlinez1p1xxx
- 2026-09-23 16:44feat(frontend): add evidence workspace, directed traces and chronology checksz1p1xxx
- 2026-09-23 16:44Merge remote-tracking branch 'origin/main'z1p1xxx
- 2026-09-23 16:43docs(telegram): explain temporary mini app tunnel and final handoffKinad-IT
- 2026-09-23 16:37feat(telegram): add purple mini app and team lead handoff guideKinad-IT
- 2026-09-23 16:31feat(graph-ai): implement optional analyses and resilient OpenAI assistantasevelev564-rgb
- 2026-09-23 16:26fix(frontend): retain complete neighborhoods for priority levelsz1p1xxx
- 2026-09-23 16:26Merge remote-tracking branch 'origin/main'z1p1xxx
- 2026-09-23 16:22README.mdTemochkaa
- 2026-09-23 16:19feat(frontend): refine midnight theme and focused graph workflowz1p1xxx
- 2026-09-23 16:19Merge remote-tracking branch 'origin/main'z1p1xxx
- 2026-09-23 16:14Update README.mdOdysseus
- 2026-09-23 16:08fix(telegram): use verified macOS system CA bundleKinad-IT
- 2026-09-23 16:06fix(frontend): load next hundred nodes and their graph edgesz1p1xxx
- 2026-09-23 16:06Merge remote-tracking branch 'origin/main'z1p1xxx
- 2026-09-23 16:04feat(telegram): add private activated alerts and local launcherKinad-IT
- 2026-09-23 16:01perf(frontend): remove map and bound default graph renderingz1p1xxx
- 2026-09-23 15:47feat: connect dashboard to graph API and integrated AI assistantz1p1xxx
- 2026-09-23 15:33Merge remote-tracking branch 'origin/main'z1p1xxx
- 2026-09-23 15:33fix(backend): return complete grounded top selections from AI toolsz1p1xxx
- 2026-09-23 15:32feat(frontend): integrate role and cluster PNG artwork across dashboardKinad-IT
- 2026-09-23 15:30fix(ai-agent): render exact financial facts and partial source coverageasevelev564-rgb
- 2026-09-23 15:23fix(ai-agent): repair ungrounded drafts before returning answersasevelev564-rgb
- 2026-09-23 15:22feat(frontend): add supplied artwork and unify role and cluster colorsKinad-IT
- 2026-09-23 15:07feat(ai-agent): add website assistant and graph owner handoffasevelev564-rgb
- 2026-09-23 15:04feat(frontend): animate Kazakhstan map and unify priority icon systemKinad-IT
- 2026-09-23 14:56feat(frontend): checkpoint multilingual Freedom design and priority iconsKinad-IT
- 2026-09-23 14:54feat(backend): connect graph AI agent and add question interfacez1p1xxx
- 2026-09-23 14:35feat(graph): add offline graph snapshot viewerasevelev564-rgb
- 2026-09-23 14:32test(backend): verify pipeline and API against local parquet dataz1p1xxx
- 2026-09-23 14:22feat(backend): add snapshot API and offline check pagez1p1xxx
- 2026-09-23 14:18feat(graph): copy tested graph package from feature to mainasevelev564-rgb
- 2026-09-23 14:14feat(graph): implement contract analytics and optional OpenAI agentasevelev564-rgb
- 2026-09-23 14:07Merge branch 'backend-pipeline'z1p1xxx
- 2026-09-23 14:04feat(backend): add validated CSV pipeline and synthetic demoz1p1xxx
- 2026-09-23 14:01Create CONTRACT_AITemochkaa
- 2026-09-23 14:00Create PROJECTTemochkaa
- 2026-09-23 13:41feat(frontend): build MoneyGraph AML dashboard MVPKinad-IT
Структура репозитория (241 файлов)
.dockerignore .gitignore CONTRACT_AI Dockerfile Freedom Graph — Граф денег.pptx Freedom Graph.mp4 Frontend/.gitattributes Frontend/.gitignore Frontend/README.md Frontend/design-assets/role-cluster-icons.zip Frontend/docs/DEMO.md Frontend/docs/DESIGN.md Frontend/docs/PROGRESS_LOG.md Frontend/index.html Frontend/package-lock.json Frontend/package.json Frontend/scripts/extract-role-cluster-icons.mjs Frontend/src/App.tsx Frontend/src/DesignDashboard.tsx Frontend/src/api.ts Frontend/src/assets/brand/freedom-graph.png Frontend/src/assets/priority/critical.jpeg Frontend/src/assets/priority/high.jpeg Frontend/src/assets/priority/low.jpeg Frontend/src/assets/priority/medium.jpeg Frontend/src/assets/priority/minimal.jpeg Frontend/src/assets/role-cluster/README.md Frontend/src/assets/role-cluster/clusters/cyan.png Frontend/src/assets/role-cluster/clusters/green.png Frontend/src/assets/role-cluster/clusters/neutral.png Frontend/src/assets/role-cluster/clusters/orange.png Frontend/src/assets/role-cluster/clusters/red.png Frontend/src/assets/role-cluster/clusters/yellow.png Frontend/src/assets/role-cluster/preview.png Frontend/src/assets/role-cluster/roles/company.png Frontend/src/assets/role-cluster/roles/risk.png Frontend/src/assets/role-cluster/roles/sanction.png Frontend/src/assets/role-cluster/roles/transaction.png Frontend/src/assets/role-cluster/roles/verification.png Frontend/src/components/AssistantChat.tsx Frontend/src/components/DesignNetwork.tsx Frontend/src/components/EntitySignalIcon.tsx Frontend/src/components/Header.tsx Frontend/src/components/InvestigationPanel.tsx Frontend/src/components/KazakhstanMap.tsx Frontend/src/components/NetworkGraph.tsx Frontend/src/components/NodeDetails.tsx Frontend/src/components/RiskAvatar.tsx Frontend/src/components/Sidebar.tsx Frontend/src/components/flowAnimation.ts Frontend/src/data/mockData.ts Frontend/src/data/networkArtwork.ts Frontend/src/data/palette.ts Frontend/src/data/visualAssets.ts Frontend/src/design.css Frontend/src/graphView.ts Frontend/src/i18n.ts Frontend/src/integration.css Frontend/src/interfaceCopy.ts Frontend/src/investigation.css Frontend/src/investigation.ts Frontend/src/main.tsx Frontend/src/midnight.css Frontend/src/motion.css Frontend/src/styles.css Frontend/src/types/graph.ts Frontend/src/types/react-cytoscapejs.d.ts Frontend/src/useAnalysis.ts Frontend/src/vite-env.d.ts Frontend/tests/flowAnimation.test.mjs Frontend/tests/graphView.test.mjs Frontend/tests/investigation.test.mjs Frontend/tsconfig.app.json Frontend/tsconfig.json Frontend/tsconfig.node.json Frontend/vite.config.ts JURY.md PROJECT README.md TelegramBot/.env.example TelegramBot/.gitignore TelegramBot/README.md TelegramBot/__init__.py TelegramBot/__main__.py TelegramBot/bot.py TelegramBot/config.py TelegramBot/demo.py TelegramBot/design/assets/brand.png TelegramBot/design/index.html TelegramBot/engine.py TelegramBot/launch.command TelegramBot/launch.py TelegramBot/messages.py TelegramBot/miniapp/README.md TelegramBot/miniapp/app.mjs TelegramBot/miniapp/assets/mark.svg TelegramBot/miniapp/data.mjs TelegramBot/miniapp/i18n.mjs TelegramBot/miniapp/icons.mjs TelegramBot/miniapp/index.html TelegramBot/miniapp/styles.css TelegramBot/miniapp/test.mjs TelegramBot/serve_miniapp.py TelegramBot/setup.py TelegramBot/test_bot.py TelegramBot/transport.py ai_agent/.env.example ai_agent/.gitignore ai_agent/README.md ai_agent/VALIDATION.md ai_agent/__init__.py ai_agent/__main__.py ai_agent/api.py ai_agent/app.py ai_agent/config.py ai_agent/docs/assistant_eval.json ai_agent/docs/assistant_eval.md ai_agent/docs/assistant_eval_offline.json ai_agent/docs/assistant_eval_offline.md ai_agent/evaluate.py ai_agent/fallback.py ai_agent/guard.py ai_agent/report.py ai_agent/requirements.txt ai_agent/service.py ai_agent/tests/test_api.py ai_agent/tests/test_grounding.py ai_agent/tests/test_report.py ai_agent/tests/test_spec.py ai_agent/ui/AssistantPanel.tsx ai_agent/ui/assistant.js ai_agent/ui/extras.html ai_agent/ui/index.html backend/.env.example backend/.gitignore backend/README.md backend/__init__.py backend/api.py backend/assets/fonts/DejaVuSans.ttf backend/assets/fonts/LICENSE-DejaVu.txt backend/assistant.py backend/check.html backend/data/README.md backend/data/edges.parquet backend/data/nodes.parquet backend/data/transactions.parquet backend/demo.py backend/export.py backend/jury.py backend/jury_snapshot/LATEST backend/jury_snapshot/clusters.csv backend/jury_snapshot/last_attempt.json backend/jury_snapshot/nodes_roles.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/clusters.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/anomalies.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/boundary.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/boundary_rates.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/cards_top.md backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/chains.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/coverage.json backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/cycles.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/daily_flow.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/gaps.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/resilience.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/resilience_removed.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/temporal_events.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/nodes_roles.csv backend/jury_snapshot/runs/20260923T123524Z-761e950f/quality_report.json backend/jury_snapshot/runs/20260923T123524Z-761e950f/run.json backend/jury_snapshot/runs/20260923T123524Z-761e950f/snapshot.json backend/jury_snapshot/runs/20260923T123524Z-761e950f/top_nodes.csv backend/jury_snapshot/top_nodes.csv backend/pipeline.py backend/report_pdf.py backend/requirements-assistant.txt backend/requirements-graph.txt backend/requirements.txt backend/run_pipeline.py backend/serve.py backend/snapshot.py backend/tests/test_backend_api.py backend/tests/test_backend_assistant.py backend/tests/test_backend_graph.py backend/tests/test_backend_pdf.py backend/tests/test_backend_pipeline.py backend/tests/test_backend_real_data.py backend/tests/test_jury_bundle.py compose.yaml edges.parquet graph/.env.example graph/.gitignore graph/INTEGRATION.md graph/NEXT_STEPS.md graph/README.md graph/VALIDATION.md graph/__init__.py graph/__main__.py graph/assistant/__init__.py graph/assistant/service.py graph/assistant/tools.py graph/clusters.py graph/config/methodology.yaml graph/docs/SPEC_IMPLEMENTATION.md graph/evidence.py graph/extra_query.py graph/extras/__init__.py graph/extras/anomalies.py graph/extras/base.py graph/extras/boundary.py graph/extras/cards.py graph/extras/export.py graph/extras/gaps.py graph/extras/resilience.py graph/extras/routes.py graph/extras/temporal.py graph/features.py graph/gui.py graph/integration/backend_assistant.py graph/integration/extras_api.py graph/integration/frontend-adapter.ts graph/layout.py graph/load.py graph/models.py graph/priority.py graph/query.py graph/requirements-dev.txt graph/requirements-optional.txt graph/requirements.txt graph/roles.py graph/serialization.py graph/tests/test_assistant.py graph/tests/test_engine.py graph/tests/test_extras.py graph/tests/test_integration.py graph/tool_limits.py graph/validate.py graph/viewer.html jury_start.py nodes.parquet render.yaml transactions.parquet
Ветки (3)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.