AAYMA
RU
Войти

AML Agent

AML-агент по графу переводов (2 248 счетов, 81 seed-клиент) присваивает роли, строит кластеры, ранжирует top-20 целей, создаёт review case и…

Рабочий MVP
Команда «C-3PO» 4💬 0 комментариевс 15 сентября 2026 г.

О проекте

Команда: C-3PO
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Рабочий MVP

Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)

Суть

AML-агент по графу переводов (2 248 счетов, 81 seed-клиент) присваивает роли, строит кластеры, ранжирует top-20 целей, создаёт review case и экспортирует проверенные CSV/XLSX.

Как устроено

Из parquet строится направленный взвешенный граф, считаются структурные и временные признаки. Кластеры находит Louvain по ненаправленной проекции. Роли (coordinator, consolidator, distributor, transit, terminal, peripheral) назначаются по правилам v1 с percentile-порогами, затем считаются role_score и priority_score. Оркестратор вызывает 10 контролируемых tools: в live-режиме их выбирает OpenAI по строгой схеме, в demo детерминированно. Состояние хранится в SQLite, артефакты проверяются независимо. UI на React с ego-графом.

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

  • Louvain
  • directed weighted graph
  • percentile-based role rules
  • pass-through ratio
  • controlled tool calling
  • ego graph 1–2 hop

Особенности

Учтена граница обхода: 444 узлам глубины 4 без исходящих не присваивается автоматически роль terminal. GID передаются строками из-за предела точности JS. Проект собран по фазам и проверяется независимым verify_run.

Стек

Python · FastAPI · React · TypeScript · SQLite · Docker Compose · nginx

Модели

OpenAI


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

README

README.md

AML Agent

AML Agent превращает обезличенный граф банковских переводов в объяснимую очередь проверок для AML-аналитика. Система проверяет входные данные, рассчитывает детерминированные графовые признаки, назначает роли, ранжирует цели, создаёт локальный review case и независимо проверяет полученные артефакты.

Текущий статус: работают детерминированная аналитика, CLI agent, FastAPI и React UI на встроенном датасете (фазы 0–5). Docker Compose собирает и запускает полный demo workflow без API-ключа; состояние остальных задач фазы 6 отражено в TODO.md.

Запуск через Docker Compose

Для воспроизводимого demo не нужен .env или API-ключ:

docker compose up --build

После успешных healthchecks откройте http://127.0.0.1:5173. Backend health доступен по http://127.0.0.1:8000/health и через frontend proxy по http://127.0.0.1:5173/health. По умолчанию используется DEMO_MODE=true; аналитика, tools, SQLite, review case, экспорт и verification выполняются по-настоящему.

Остановка контейнеров:

docker compose down

Именованные volumes сохраняют SQLite и артефакты между обычными перезапусками. Команду docker compose down --volumes используйте только когда нужно намеренно удалить локальное demo-состояние.

Запуск HTTP API и демоверсии

Из корня репозитория, с Python 3.12+ (macOS/Linux):

python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -r backend/requirements.lock
python -m pip install --no-deps --no-build-isolation -e backend
python -m pip install -r backend/requirements-api.txt
python -m uvicorn backend.app.main:create_app --factory --host 127.0.0.1 --port 8000 --workers 1

Windows PowerShell, без активации окружения:

Если установлен Python новее 3.12, замените -3.12 ниже на его версию.

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r backend\requirements.lock
.\.venv\Scripts\python.exe -m pip install --no-deps --no-build-isolation -e backend
.\.venv\Scripts\python.exe -m pip install -r backend\requirements-api.txt
.\.venv\Scripts\python.exe -m uvicorn backend.app.main:create_app --factory --host 127.0.0.1 --port 8000 --workers 1

Откройте интерактивную документацию API или health. /health показывает доступность backend. В /docs создайте run через POST /api/runs с {"dataset_id":"bundled","mode":"demo"}, затем передайте полученный run_id в POST /api/runs/{run_id}/execute. Дождитесь status=completed и verification_status=passed в GET /api/runs/{run_id}; только после этого доступны оценки узлов, case и проверенные файлы. API принимает только встроенный dataset_id=bundled, без загрузки произвольных parquet. В demo-режиме API-ключ не нужен. Используйте один Uvicorn worker: координация выполняющихся запусков находится в памяти процесса.

Запуск интерфейса React

Оставьте API работающим и в другом терминале выполните:

cd frontend
npm ci
npm run dev

Откройте http://127.0.0.1:5173 и нажмите Start bundled demo. Интерфейс покажет безопасный execution trace, затем проверенные top-20, кластеры, направленный 1–2-hop ego graph, локальный review case и скачиваемые файлы. Reset demo доступен после завершения run. Подробности: frontend/README.md.

python -m pip install -r backend/requirements-api-dev.txt
python -m pytest backend/tests/api -q
python -m ruff check backend/app/api backend/app/config.py backend/app/main.py backend/tests/api

Тесты backend/tests/api/ проверяют HTTP-контракт и полный golden path на настоящем backend. Зависимости HTTP зафиксированы отдельно от backend/requirements.lock. Для полного набора установите также backend/requirements-api-dev.txt, затем запустите python -m pytest backend/tests -q в активированном окружении (Windows без активации: .\.venv\Scripts\python.exe -m pytest backend\tests -q).

Проблема

AML-аналитик начинает с 81 известного seed-клиента, но должен вручную исследовать четырёхуровневую сеть из 2 248 счетов. Полезный результат — не общее резюме, а ответ на три конкретных вопроса: какие счета проверять первыми, почему и какие данные подтверждают этот приоритет.

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

Целевой рабочий процесс

Пакет parquet
  -> проверка данных и ограничений
  -> построение направленного взвешенного графа
  -> расчёт структурных и временных признаков
  -> кластеризация и назначение объяснимых ролей
  -> ранжирование целей для проверки
  -> создание локального AML review case
  -> экспорт и проверка обязательных артефактов

В live-режиме модель OpenAI выбирает контролируемые tools и возвращает конечное решение по строгой схеме. Детерминированный backend рассчитывает роли и метрики, создаёт case и проверяет результаты.

Реализованный основной сценарий через CLI

Текущий offline workflow выполняет девять изменяющих состояние или проверочных шагов. Десятый контролируемый tool, get_node_evidence, вызывается по запросу:

inspect_dataset -> build_graph -> compute_graph_features -> cluster_network
-> assign_roles -> rank_targets -> create_review_case -> export_results
-> verify_run -> completed

На встроенном датасете система создаёт 2 248 оценок узлов, 91 сводку по кластерам, top-20, один локальный review case, три обязательных CSV-файла, форматированный aml_review_report.xlsx, audit.json и независимый отчёт проверки. Demo-режиму API-ключ не нужен.

Быстрый запуск в Windows

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r backend\requirements.lock
.\.venv\Scripts\python.exe -m pip install --no-deps --no-build-isolation -e backend
.\.venv\Scripts\aml-agent-tools.exe --data data --database var\aml-agent.sqlite3 --artifacts artifacts --top 20
.\.venv\Scripts\aml-agent-run.exe --mode demo --data data --database var\agent.sqlite3 --artifacts artifacts

Быстрый запуск в macOS/Linux

python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.lock
.venv/bin/python -m pip install --no-deps --no-build-isolation -e backend
.venv/bin/aml-agent-tools --data data --database var/aml-agent.sqlite3 --artifacts artifacts --top 20
.venv/bin/aml-agent-run --mode demo --data data --database var/agent.sqlite3 --artifacts artifacts

Успешный aml-agent-run печатает конечное решение со status: completed и case_id. Сохранённый run имеет verification_status: passed; команда aml-agent-tools дополнительно печатает результаты девяти обязательных tools с ok: true. Каждый запуск создаёт новую запись run.

Датасет

В репозитории находится обезличенный датасет хакатона:

  • data/nodes.parquet: 2 248 клиентов;
  • data/edges.parquet: 3 119 агрегированных направленных рёбер;
  • data/transactions.parquet: 4 840 отдельных транзакций;
  • период: с 2026-07-01 по 2026-07-31;
  • наблюдаемый оборот: 365 890 012,01 KZT.

Поля и ограничения сбора описаны в data/README.md. Главное ограничение — граница обхода в четыре перехода: у 444 узлов с depth=4 нет видимых исходящих переводов, поэтому их нельзя автоматически считать конечными получателями.

Критерии ролей

Версия правил v1 назначает каждому узлу одну роль в указанном порядке. in_degree и out_degree считают уникальных наблюдаемых контрагентов; pass-through равен наблюдаемому out_kzt / in_kzt и не применяется к seed-клиентам.

РольУсловие
coordinatorНе seed, depth < 4, есть входящие и исходящие рёбра; достижимость от seed не ниже 90-го percentile, составной индекс координации не ниже 99-го percentile.
consolidatorНе seed, in_degree >= 5, pass-through < 0.5.
distributorout_degree >= 10 и out_degree >= 2 × max(in_degree, 1).
transitНе seed, depth < 4, in_degree >= 2, out_degree >= 1, 0.8 <= pass-through <= 1.2.
terminalНе seed, depth < 4, out_degree = 0, in_degree >= 2.
peripheralОстальные узлы, включая изолированные seed и узлы с недостаточным evidence на границе обхода.

role_score измеряет силу совпадения с правилом; priority_score задаёт порядок проверки аналитиком. Ни один из них не является вероятностью преступления. Кластеры строятся Louvain по ненаправленной проекции, но признаки ролей используют направленные переводы. Формулы scores, порядок разрешения равенств и шаблоны evidence приведены в аналитическом ruleset.

Ограничения данных

  • У 444 узлов на depth=4 дальнейший outflow не наблюдался из-за границы обхода; они получают флаг неопределённости, а не автоматическую роль terminal.
  • Входящий поток seed-клиентов неполон, поэтому их pass-through нельзя надёжно оценить. Все 19 seed без рёбер всё равно включены в nodes_roles.csv.
  • Данные охватывают наблюдаемые переводы за июль 2026 года с порогом суммы от 5 000 KZT. Даты не содержат время, поэтому порядок переводов внутри дня неизвестен.
  • В наборе нет ФИО, ИИН, возраста, дохода или размеченной истины. Результаты служат гипотезами для проверки аналитиком.
  • GID хранится как int64 в parquet/CSV, но передаётся как десятичная строка в API, JSON и аргументах tools: значения превышают безопасный диапазон JavaScript.

Архитектура

React UI получает результаты через FastAPI, который передаёт работу одному orchestrator с контролируемыми tools. Детерминированная аналитика рассчитывает роли и приоритеты; SQLite хранит run, events и case; локальные артефакты проверяются независимо перед выдачей. Диаграмма компонентов и сценарий показа находятся в docs/JUDGING_DEMO.md.

Подробная документация:

Настройка OpenAI

Live orchestrator использует OpenAI Responses API с function calling и Structured Outputs. Модель задаётся через OPENAI_MODEL; analytics, роли и verification остаются детерминированными. Для live-режима после основной установки добавьте extra backend[live] (он включает официальный SDK), затем задайте ключ в окружении или игнорируемом корневом .env:

.venv/bin/python -m pip install -e 'backend[live]'

В Windows PowerShell используйте .\.venv\Scripts\python.exe -m pip install -e 'backend[live]'.

DEMO_MODE=false
OPENAI_API_KEY=<ваш существующий ключ>
OPENAI_MODEL=gpt-5-mini

Ключ вводится только локально: не отправляйте его в чат и не добавляйте в .env.example. Корневой .env исключён из Git.

После настройки можно использовать любой из двух способов:

  • Docker: docker compose up --build, затем выберите OpenAI live в интерфейсе. Образ уже содержит зафиксированную версию OpenAI SDK.
  • CLI: aml-agent-run --mode live --data data --database var/live.sqlite3 --artifacts artifacts. На Windows используйте .\.venv\Scripts\aml-agent-run.exe; на macOS/Linux — .venv/bin/aml-agent-run.

Через HTTP API создайте run с {"dataset_id":"bundled","mode":"live"}, затем вызовите /execute. Ключ нельзя добавлять в исходный код, логи или коммиты.

CLI по умолчанию запускается с --mode demo. Настройка API DEMO_MODE=true также выбирает demo для новых runs без явного mode и разрешает локальный demo reset; DEMO_MODE=false меняет режим по умолчанию на live и отключает reset. Demo заменяет только model provider — аналитика, tools, case, экспорт и проверка остаются настоящими.

Автоматические тесты live-provider используют имитацию транспорта Responses. Настоящий внешний запрос к OpenAI API ими не проверяется.

Запуск стартового решения

Starter проверяет parquet-файлы, строит граф, рассчитывает базовые признаки и записывает пустые шаблоны результатов. Это baseline, а не готовый продукт.

python3.12 -m venv .venv
.venv/bin/python -m pip install -r starter/requirements.txt
.venv/bin/python starter/starter.py --data data --out out

В Windows замените .venv/bin/python на .\.venv\Scripts\python.exe.

Ожидаемые файлы:

  • out/nodes_roles.csv
  • out/clusters.csv
  • out/top_nodes.csv

Starter намеренно не реализует назначение ролей, кластеризацию, ранжирование и визуализацию.

Компонент оркестрации фазы 3

backend/aml_agent/agent/ содержит ограниченный цикл запуска, demo-provider, адаптер OpenAI Responses, строгую проверку вызовов tools и адаптеры к рабочим SQLite-аудиту и runtime tools. Demo-режим выполняет настоящую аналитику и создание case. Интеграционный тест сравнивает результаты demo- и live-provider на встроенных parquet-файлах; транспорт Responses в тесте имитируется.

Запуск тестов после установки backend/requirements-api-dev.txt:

python -m pytest backend/tests -q

Для live-режима требуются дополнительные зависимости backend[live] и OPENAI_API_KEY в окружении или игнорируемом .env.

Создаваемые артефакты

  • nodes_roles.csv: одна строка для каждого из 2 248 узлов;
  • clusters.csv: статистика кластеров и осторожная гипотеза;
  • top_nodes.csv: минимум 20 ранжированных целей для проверки;
  • aml_review_report.xlsx: те же проверенные данные в удобной для аналитика книге с фильтрами, закреплёнными заголовками, переносом текста и настроенной шириной колонок;
  • audit.json: хеш датасета, версия ruleset, события tools, предупреждения и результат проверки;
  • браузерный UI с направлением графа, ролями, кластерами, поиском GID, execution trace и состоянием до/после;
  • локальный review case в SQLite со snapshot top-20.

Артефакты каждого run сохраняются в artifacts/<run_id>/ и исключены из Git. Для получения проверенных файлов на своей машине запустите aml-agent-tools или demo в React UI; скачивание доступно только после verification_status=passed. Проверенные counts, SHA-256 и команда воспроизведения описаны в docs/VERIFIED_EXPORTS.md.

Безопасность и объяснимость

  • В JSON значения GID передаются строками, потому что они превышают безопасный целочисленный диапазон JavaScript. В CSV/parquet сохраняется int64.
  • Входящие переводы seed-клиентов неполны, поэтому их коэффициент pass-through нельзя использовать без оговорок.
  • Узел с depth=4 без видимого исходящего ребра получает флаг truncated_by_depth, а не автоматически роль terminal.
  • role_score означает силу совпадения с правилом, а не вероятность преступной деятельности.
  • Каждая строка evidence должна ссылаться на рассчитанные значения и занимать не более 200 символов.
  • Внешние и разрушительные действия не входят в MVP. Единственное действие для аналитика — создание локального review case и проверенного пакета экспорта; служебные run, events и audit также сохраняются локально.

Масштабирование и режим работы

Проверенный масштаб встроенного датасета — 2 248 узлов, 3 119 рёбер и 4 840 транзакций. Pipeline использует pandas/NetworkX в памяти, SQLite и локальные файлы; HTTP API запускается с одним Uvicorn worker. API ограничивает размер страниц и ego graph, но чтение узлов после завершения run заново загружает проверенные CSV и исходный parquet и пересчитывает признаки. Это локальный однопользовательский MVP, без подтверждённой работы на графе в миллион узлов. Для большего масштаба потребуются другие реализации графового расчёта, хранения и bounded queries при сохранении контрактов API и tools.

Устранение неполадок

СимптомЧто проверить
/health возвращает 503Наличие трёх файлов data/*.parquet, доступность локальной SQLite и запуск из корня репозитория.
409 OPENAI_KEY_REQUIREDДля demo выберите mode=demo. Для live установите backend[live] и настройте OPENAI_API_KEY локально.
409 INVALID_STATE при запросе узлов или файловДождитесь status=completed и verification_status=passed у run.
422 при запросе GIDПередайте канонический десятичный GID как строку, без JSON number или ведущих нулей.
409 RUN_BUSY при demo resetДождитесь завершения активного run и закройте SSE-подключения.
503 EXECUTION_CAPACITY или STREAM_CAPACITYПовторите запрос после освобождения слота; для MVP оставьте один API worker.
Run завершился failed или verification_failedПосмотрите безопасные events и сохранённые предупреждения, исправьте причину и создайте новый run.
UI на :5173 не получает данныеУбедитесь, что FastAPI запущен на 127.0.0.1:8000; Vite проксирует /api и /health на этот порт.
docker compose up --build не проходит healthchecksПроверьте, что Docker Engine запущен, а порты 8000 и 5173 свободны; docker compose ps покажет состояние сервисов.

Полный HTTP-контракт и коды ошибок описаны в docs/API.md. Вывод /health подтверждает доступность локального backend, но не действительность ключа или доступность внешнего API.

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

.
|-- AGENTS.md
|-- TODO.md
|-- data/
|   |-- README.md
|   |-- edges.parquet
|   |-- nodes.parquet
|   `-- transactions.parquet
|-- docs/
|   |-- AGENT_LOOP.md
|   |-- ANALYTICS.md
|   |-- ARCHITECTURE.md
|   |-- API.md
|   |-- DATA_MODEL.md
|   |-- JUDGING_DEMO.md
|   |-- VERIFIED_EXPORTS.md
|   `-- TOOLS.md
|-- backend/
|   |-- app/api/          # Phase 4 HTTP routes, DTOs, SSE, adapters
|   |-- app/config.py
|   |-- app/main.py
|   |-- aml_agent/
|   |   |-- agent/
|   |   |-- analytics/
|   |   |-- storage/
|   |   |-- tools/
|   |   `-- tool_runtime.py
|   |-- tests/            # Phase 1–3 tests and Phase 4 tests/api/
|   |-- pyproject.toml
|   |-- requirements.lock
|   |-- requirements-api.txt
|   |-- requirements-live.txt
|   `-- requirements-api-dev.txt
|-- frontend/          # React/Vite/TypeScript UI и Cytoscape-граф
|-- docker-compose.yml # backend/frontend и healthchecks
|-- starter/
|   |-- README.md
|   |-- requirements.txt
|   `-- starter.py
|-- .env.example
`-- README.md

Границы MVP

В hackathon MVP не входят автоматическая блокировка счетов, отправка данных регулятору, внешнее обогащение, выполнение произвольного кода, generic chat, multi-agent orchestration и production-обработка графа из миллиона узлов.

Для будущего развёртывания на миллионе узлов слой NetworkX следует заменить графовым движком или распределённой аналитической базой данных, сохранив контракты tools и API.

Звёзды
⭐ 1
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
35
Авторы
4
Файлы
113
Ветки
7

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

jjigaev 14Muratbay 8SyrDan 7Isaraft 6

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

  • 2026-09-23 17:56Restore bundled-only workflowIsaraft
  • 2026-09-23 17:47Improve custom dataset upload interfacejjigaev
  • 2026-09-23 17:33Merge remote-tracking branch 'origin/main'jjigaev
  • 2026-09-23 17:29Add controlled CSV dataset import workflowjjigaev
  • 2026-09-23 17:23Merge pull request #6 from BAITC-Hacks/fix/sidebar-scroll-syncMuratbay
  • 2026-09-23 17:18fix: follow page scroll in sidebar navigationIsaraft
  • 2026-09-23 17:05Merge remote-tracking branch 'origin/main'jjigaev
  • 2026-09-23 16:59исправления excel filesjjigaev
Все коммиты (35)
  • 2026-09-23 16:54Merge pull request #5 from BAITC-Hacks/fix/phase-5-ui-localization-responsiveMuratbay
  • 2026-09-23 16:48fix: polish Phase 5 workflow UI and localize interfaceIsaraft
  • 2026-09-23 16:47smal fixMuratbay
  • 2026-09-23 16:46Merge pull request #4 from BAITC-Hacks/codex/phase-6-judgingMuratbay
  • 2026-09-23 16:45merge: sync Phase 6 judging branch with mainSyrDan
  • 2026-09-23 16:37docs: finish Phase 6 judging guidanceSyrDan
  • 2026-09-23 16:33fix: connect Docker Compose to phases 4 and 5jjigaev
  • 2026-09-23 16:16Merge pull request #3 from BAITC-Hacks/feat/phase-5-workflow-uiMuratbay
  • 2026-09-23 16:11feat: complete Phase 5 analyst workflow UIIsaraft
  • 2026-09-23 15:59Merge pull request #2 from BAITC-Hacks/codex/phase-4-apiMuratbay
  • 2026-09-23 15:59merge: sync Phase 4 PR with latest mainSyrDan
  • 2026-09-23 15:56feat: connect Phase 4 API to verified AML workflowSyrDan
  • 2026-09-23 15:55chore: add Docker Compose runtime scaffoldjjigaev
  • 2026-09-23 15:55fix: read translated contracts as utf-8jjigaev
  • 2026-09-23 15:54merge: integrate Phase 3 into Phase 4 branchSyrDan
  • 2026-09-23 15:37Merge pull request #1 from BAITC-Hacks/feat/IsaPhase3Muratbay
  • 2026-09-23 15:34Merge origin/main into feat/IsaPhase3Isaraft
  • 2026-09-23 15:29feat: integrate Phase 3 agent orchestrationIsaraft
  • 2026-09-23 15:26merge: update Phase 4 branch with phases 1 and 2SyrDan
  • 2026-09-23 15:24docs: translate project documentation to Russianjjigaev
  • 2026-09-23 15:20feat: add Phase 4 FastAPI HTTP boundarySyrDan
  • 2026-09-23 15:13docs: record phases 0-2 completionjjigaev
  • 2026-09-23 15:13feat: add controlled AML tool workflowjjigaev
  • 2026-09-23 15:13feat: add deterministic AML analytics pipelinejjigaev
  • 2026-09-23 14:08chore: define AML Agent architecture and import datajjigaev
  • 2026-09-15 16:56chore: initialize repository configurationjjigaev
  • 2026-09-15 16:21testingMuratbay
Структура репозитория (113 файлов)
.dockerignore
.env.example
.gitignore
AGENTS.md
README.md
TODO.md
backend/Dockerfile
backend/README.md
backend/__init__.py
backend/aml_agent/__init__.py
backend/aml_agent/agent/__init__.py
backend/aml_agent/agent/catalog.py
backend/aml_agent/agent/cli.py
backend/aml_agent/agent/events.py
backend/aml_agent/agent/integration.py
backend/aml_agent/agent/models.py
backend/aml_agent/agent/orchestrator.py
backend/aml_agent/agent/providers.py
backend/aml_agent/analytics/__init__.py
backend/aml_agent/analytics/clustering.py
backend/aml_agent/analytics/exports.py
backend/aml_agent/analytics/features.py
backend/aml_agent/analytics/pipeline.py
backend/aml_agent/analytics/review_workbook.py
backend/aml_agent/analytics/roles.py
backend/aml_agent/analytics/validation.py
backend/aml_agent/cli.py
backend/aml_agent/safety.py
backend/aml_agent/storage/__init__.py
backend/aml_agent/storage/_json.py
backend/aml_agent/storage/artifacts.py
backend/aml_agent/storage/database.py
backend/aml_agent/storage/models.py
backend/aml_agent/tool_runtime.py
backend/aml_agent/tools/__init__.py
backend/aml_agent/tools/schemas.py
backend/app/__init__.py
backend/app/api/__init__.py
backend/app/api/errors.py
backend/app/api/events.py
backend/app/api/phase_adapter.py
backend/app/api/phase_executor.py
backend/app/api/ports.py
backend/app/api/routes.py
backend/app/api/schemas.py
backend/app/api/service.py
backend/app/config.py
backend/app/main.py
backend/pyproject.toml
backend/requirements-api-dev.in
backend/requirements-api-dev.txt
backend/requirements-api.in
backend/requirements-api.txt
backend/requirements-live.txt
backend/requirements.lock
backend/tests/__init__.py
backend/tests/api/__init__.py
backend/tests/api/conftest.py
backend/tests/api/fakes.py
backend/tests/api/test_execution_events.py
backend/tests/api/test_http.py
backend/tests/api/test_phase_adapter.py
backend/tests/api/test_phase_executor.py
backend/tests/api/test_real_http.py
backend/tests/api/test_settings_schemas.py
backend/tests/test_agent.py
backend/tests/test_agent_integration.py
backend/tests/test_analytics_pipeline.py
backend/tests/test_analytics_ranking.py
backend/tests/test_phase0.py
backend/tests/test_review_workbook.py
backend/tests/test_storage_artifacts.py
backend/tests/test_storage_database.py
backend/tests/test_tool_runtime.py
backend/tests/test_tool_schemas.py
data/README.md
data/SHA256SUMS
data/edges.parquet
data/nodes.parquet
data/transactions.parquet
docker-compose.yml
docs/AGENT_LOOP.md
docs/ANALYTICS.md
docs/API.md
docs/ARCHITECTURE.md
docs/BASELINE.md
docs/DATA_MODEL.md
docs/JUDGING_DEMO.md
docs/PHASES_0_2_RESULTS.md
docs/TOOLS.md
docs/VERIFIED_EXPORTS.md
frontend/Dockerfile
frontend/README.md
frontend/index.html
frontend/nginx.conf
frontend/package-lock.json
frontend/package.json
frontend/src/App.test.tsx
frontend/src/App.tsx
frontend/src/GraphView.tsx
frontend/src/api.test.ts
frontend/src/api.ts
frontend/src/i18n.ts
frontend/src/main.tsx
frontend/src/styles.css
frontend/src/test-setup.ts
frontend/src/types.ts
frontend/tsconfig.json
frontend/vite.config.ts
pyproject.toml
starter/README.md
starter/requirements.txt
starter/starter.py
Ветки (7)

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

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

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