online.devhorizon.s...
 
Уведомления
Очистить всё

online.devhorizon.sourcecodemapper

2 Сообщения
1 Пользователи
0 Реакции
66 Просмотры
admin
Сообщения: 7
Автор темы
(@admin)
Active Member
Присоединился: 4 месяца назад
[#6]

Source Code Mapper AI

English | Русский | Deutsch

Android CI

Android-приложение: открывает локальный репозиторий или клонирует его с GitHub, строит «полную картину» кода и формирует интерактивный HTML-отчёт из 4 столбцов со сворачиваемыми блоками.

Что делает

  1. Открыть локальный репозиторий — системный выбор папки (SAF, доступ только на чтение).
  2. Клонировать с GitHub — owner/repo или полный URL; по умолчанию git clone (JGit), при ошибке — автоматический откат на скачивание ZIP (codeload.github.com).
  3. Построить отчёт — гибридный конвейер:
    • на устройстве: обход файлов → статический разбор (файлы, классы, функции, методы, свойства, UI-элементы, триггеры, ресурсы манифеста, маршруты) → эвристики безопасности;
    • через AI: столбец 2 (описание) и столбец 4 (оценка), плюс обзор архитектуры;
    • генерация HTML и показ в WebView с экспортом/шерингом.
  4. Express-отчёт — прогон одного и того же кода по всем настроенным моделям по очереди, затем сравнение результатов в супер-отчёт (согласие/расхождения моделей, мнения по каждому элементу, AI-разбор разногласий).
  5. AI-провайдеры — добавление, редактирование и удаление OpenAI-совместимых провайдеров, возврат к набору по умолчанию.

Правила анализа

  • README, *.md, *.txt, лицензии, changelog и прочая документация не анализируются — учитывается только реальный исполняемый код.
  • Комментарии в коде игнорируются: элементы строятся только по значимым строкам, комментарии и пустые строки в отчёт не попадают; при этом каждая строка кода находит место.
  • Если AI не уверен в назначении участка, он обязан пометить строку уровнем уверенности (Подтверждено / Вероятно / Не подтверждено) и указать краткое обоснование или причину, по которой подтвердить не удалось (столбец 4).

Отчёт: 4 столбца

Колонка Содержимое
1. Наименование / имя / обозначение Все элементы: файлы, классы, функции, методы, свойства, UI-элементы, триггеры и пр. Имя + краткое пояснение. В свёрнутом виде видна только эта суммаризация.
2. Способ / технология / метод / тип / класс Подробное описание (AI + статика).
3. Конкретные строки Номера строк и полное содержимое. Каждая строка файла попадает либо в свой элемент, либо в блок «Прочие строки» — покрытие 100%.
4. Оценка кода Уязвимость / Проблема / Предупреждение / Норма / Лучшая практика + пояснение. База — статические правила, уточняется AI.

Всё свёрнуто по умолчанию: группа файла → строка элемента → 4-колоночная сетка. Любой текст, не вмещающийся в четверть ширины экрана (ячейка ~25%), получает кнопку ▸ / ▾. Есть поиск, фильтр по оценке, «Развернуть всё / Свернуть всё».

Языки интерфейса и отчёта

Английский — основной язык и язык по умолчанию. Русский и немецкий поддерживаются полностью: интерфейс, HTML-отчёт (заголовки, столбцы, уровни, супер-отчёт), статические описания элементов, сообщения и названия провайдеров. Выбор языка влияет и на язык ответов модели. Технический журнал анализа остаётся на английском (отладочная информация).

Провайдеры ИИ (Настройки)

Провайдер Base URL Модель по умолчанию Ключ
       
Ollama Cloud https://ollama.com/v1 задаётся пользователем API-ключ или OAuth device flow
OpenCode Go https://opencode.ai/zen/go/v1 space-bunny-free sk-...
OpenCode Zen https://opencode.ai/zen/v1 big-pickle sk-...

Кнопка «Проверить соединение» дергает /models. Ollama OAuth: приложение открывает ollama.com/connect?... и опрашивает API до появления ключа.

Сборка

$env:JAVA_HOME="C:\Program Files\Microsoft\jdk-17.0.15.6-hotspot"
$env:ANDROID_HOME="C:\Android\Sdk"
.\gradlew.bat :app:assembleDebug

APK: app/build/outputs/apk/debug/app-debug.apk

Установка на эмулятор:

adb -s emulator-5554 install -r -t app/build/outputs/apk/debug/app-debug.apk

Стек

Kotlin (встроенный в AGP 9.1.1), Jetpack Compose (BOM 2024.09.00, Material3), coroutines, kotlinx-serialization-json, OkHttp, JGit, DocumentFile, Gradle 9.3.1, compileSdk 36 / minSdk 26.

Структура исходников

app/src/main/java/online/devhorizon/sourcecodemapper/
  MainActivity.kt, MainViewModel.kt
  model/Models.kt
  i18n/Strings.kt                 # EN / RU / DE
  data/Settings.kt                # провайдеры, настройки, кэш
  data/RepoAccess.kt              # SAF + JGit + ZIP-фолбэк
  analysis/Language.kt
  analysis/Comments.kt            # фильтр комментариев и пустых строк
  analysis/StaticIndexer.kt       # извлечение элементов + покрытие строк
  analysis/SecurityRules.kt       # правила столбца 4
  analysis/Enricher.kt            # AI для столбцов 2 и 4
  analysis/ExpressMerger.kt       # супер-отчёт по нескольким моделям
  ai/AiClient.kt                  # 4 провайдера + Ollama OAuth
  report/HtmlReport.kt            # HTML: 4 колонки, сворачивание, поиск
  ui/                             # Compose-экраны

Ограничения

  • Лимиты по умолчанию: 2000 файлов, 320 КБ на файл, 25 МБ текста (настраиваются).
  • Скорость AI зависит от выбранной модели; результаты кэшируются по хэшу файла.
  • Для приватных репозиториев нужен GitHub-токен.

CI

GitHub Actions собирает debug-APK при каждом пуше в main и в pull request (.github/workflows/android.yml). Пуш тега v* прикрепляет APK к GitHub Release.


Скриншоты

  • Главный экран — источник репозитория: локальная папка через SAF, клон с GitHub (owner/repo, ветка, токен) либо встроенный пример; тут же выбор языка отчёта.
    Source Code Mapper AI — Главный экран
  • Клонированный репозиторий — после клона: 38 файлов, 4756 строк, 203,7 КБ, разбивка по языкам (Kotlin 24 файла / 4200 строк, Text, BAT, XML, YAML, GITIGNORE, Properties, PRO) и кнопки «Build 4-column report» и «Express report (all models)».
    Source Code Mapper AI — Клонированный репозиторий
  • Настройки и провайдеры ИИ — язык отчёта (RU / DE / EN) и список OpenAI-совместимых провайдеров: DevHorizon (primary) без API-ключа, добавление и редактирование своих.

Скачать APK

app-debug.apk — 12,4 МБ, debug-сборка версии 1.0 (Android 8.0+, minSdk 26).

Страница релиза: v1.0-debug · исходники: github.com/sashok53011/SourceCodeMapperAI.


1 ответ
admin
Сообщения: 7
Автор темы
(@admin)
Active Member
Присоединился: 4 месяца назад

Обновление: приложение проверило свой собственный код — и почти все находки оказались ложными.

Первый прогон анализа на своём же репозитории дал 21 находку. Разобрал их по файлам и строкам: оказалось, что сканер находил совпадения в собственных определениях правил, в объявлениях пространств имён XML и в скриптах сборки. Исправил.

Было — 21 находка:

  • 7 «уязвимостей» в analysis/SecurityRules.kt: правило trust_all находило собственный регекс; addJavascriptInterface ×4 — это своё же правило и три строки его перевода (en/ru/de); «выполнение команд ОС» и «небезопасная десериализация» — тоже собственные регексы правил command_exec и unsafe_deser;
  • 2 предупреждения «Unfinished work marker (TODO/FIXME/HACK)» — в регексе правила перечислены сами эти слова;
  • 4 предупреждения «Plain HTTP URL — traffic is not encrypted»: это xmlns:android=" http://schemas.android.com/apk/res/android" в манифесте, в drawable и в двух mipmap-файлах, то есть объявление пространства имён, а не сетевой адрес;
  • 3 предупреждения по манифесту: allowBackup="true" и usesCleartextTraffic="true" — замечания по делу, они исправлены; «Exported component — reachable by other apps» на launcher-активити — это требование Android 12+, а не дефект;
  • 5 строк «Best practice: Uses HTTPS» в скриптах gradlew и gradlew.bat — просто шум.

Что исправлено в анализаторе и приложении:

  • механизм самоисключения в сканере: файловый маркер scm-scan:ignore-file и строчный scm-scan:ignore — пакет правил носит маркер сам и больше не сканируется;
  • объявления пространств имён и доверенные URI (schemas.android.com, w3.org, apache.org, xml.org) больше не считаются «plain HTTP»;
  • exported="true" в манифесте, где объявлен android.intent.category.LAUNCHER, теперь by design;
  • инструментальные скрипты Gradle исключены из анализа — в отчёте 36 файлов вместо 38;
  • манифест усилен: allowBackup="false", usesCleartextTraffic="false", убран requestLegacyExternalStorage.

Стало — 0 находок: 0 уязвимостей, 0 предупреждений, 0 проблем. В отчёте 36 файлов, 1019 строк со статусом «OK» и 25 строк «Best practice». Правки в репозитории — коммит 0baac99.

Кадры ниже — отчёт после исправлений, снятый с телефона.

  • Отчёт: шапка и файлы — «Security & quality findings: 0», разбивка по файлам.
    Source Code Mapper AI — отчёт после исправлений
  • Отчёт: строки кода — столбцы «строка кода ↔ оценка», уровни OK и Best practice.
    Source Code Mapper AI — строки кода и оценка

Ответ
Поделиться: