Skip to content

Tech Stack

Overview

AeroGuard-MAS combines JVM, logic programming, agent programming, and Python visualization technologies. The stack was chosen to support intelligent-system engineering while keeping the project executable from the command line and testable through CI.

Technology Map

mindmap
  root((AeroGuard-MAS Stack))
    Core
      Kotlin
      Gradle
      JVM
    Intelligence
      Jason AgentSpeak
      tuProlog
      STRIPS planning
    Data
      JSON scenarios
      JSONL events
    GUI
      Python
      Streamlit
      pandas
      Plotly
    Testing
      JUnit 5
      ktlint
      GUI validation
    Automation
      GitHub Actions
      Dokka
      MkDocs
      Mermaid

Kotlin

Kotlin is the main implementation language. It is used for:

  • the domain model;
  • scenario loading;
  • simulation;
  • conflict detection;
  • planning;
  • reasoning integration;
  • event generation;
  • CLI execution;
  • tests.

Kotlin is suitable because it provides strong typing, data classes, null-safety, concise syntax, and good interoperability with JVM libraries.

Gradle

Gradle with Kotlin DSL is used as the build system. It manages:

  • dependencies;
  • compilation;
  • tests;
  • application execution;
  • custom tasks such as Jason smoke execution;
  • CI build commands.

The project uses the Gradle wrapper, so developers and CI runners can execute the build consistently.

Jason / AgentSpeak(L)

Jason is used to represent BDI agents. The project includes real .asl files for agents such as:

  • aircraft agent;
  • sector controller;
  • conflict detector;
  • resolution planner;
  • explanation agent.

The current integration validates these files through smoke analysis, checking that they expose BDI concepts and message passing.

Jason is used because the project explicitly targets multi-agent BDI modeling.

tuProlog

tuProlog provides the symbolic reasoning layer. Kotlin communicates with this layer through a SafetyReasoner interface.

tuProlog is used for:

  • safety rules;
  • priority reasoning;
  • maneuver feasibility;
  • symbolic explanation facts.

The Prolog theory is stored as a real project resource, making the symbolic logic inspectable and versioned.

JSON

JSON is used for input scenarios. Scenario files define:

  • aircraft;
  • routes;
  • positions;
  • altitudes;
  • speeds;
  • priorities;
  • separation thresholds;
  • weather zones;
  • dynamic events.

JSON was chosen because it is human-readable, easy to version, and simple to load from Kotlin.

JSONL

JSONL is used for simulation event logs. Each line represents one event, such as:

{"tick":0,"type":"aircraft_state","aircraft":"AZA123","x":0.0,"y":0.0}

JSONL is useful because it is:

  • stream-friendly;
  • easy to parse in Python;
  • easy to inspect manually;
  • suitable for replay-based visualization.

Python

Python is used for the GUI. It is separate from the core and acts only as a viewer.

Streamlit

Streamlit provides the web-based replay GUI. It was chosen because it allows quick development of an interactive demo with:

  • file upload;
  • tick slider;
  • charts;
  • tables;
  • layout panels;
  • explanations.

pandas

pandas is used to load, group, filter, and transform JSONL events in the GUI.

Plotly

Plotly is used for interactive visualizations, including:

  • aircraft map;
  • trails;
  • routes and waypoints;
  • altitude profiles;
  • vertical separation profiles;
  • event timelines.

JUnit 5

JUnit 5 is used for automated testing. Tests validate the domain model, parsing, simulation, reasoning, planning, event serialization, CLI behavior, and agent-source smoke checks.

ktlint

ktlint is used to enforce Kotlin formatting and style. This helps maintain consistency as the project grows.

Dokka

Dokka is used for Kotlin API documentation generation. The generated documentation can be published as project KDocs through GitHub Pages.

MkDocs and Mermaid

MkDocs is used to generate the project documentation website. Mermaid diagrams are used to describe architecture, execution flows, testing, and deployment directly inside Markdown files.

GitHub Actions

GitHub Actions is used for CI/CD. The workflow runs tests and builds on:

  • Ubuntu;
  • Windows;
  • macOS.

The release job is configured for the main branch and can generate documentation and publish artifacts.

Node.js and npm

Node.js and npm are used in the release job. The workflow runs npm ci and npm run release, which suggests a release automation tool such as semantic-release is expected.

Runtime Environment

The Kotlin core runs on the JVM. The CI configuration uses Java 25 through Temurin.

The GUI runs in a Python virtual environment with dependencies installed from gui/requirements.txt.

Why This Stack Fits the Project

The project is intentionally multi-paradigm:

  • Kotlin provides engineering structure.
  • Jason provides BDI agent modeling.
  • Prolog provides declarative symbolic reasoning.
  • STRIPS-style planning provides automated decision generation.
  • JSON/JSONL provide reproducible data exchange.
  • Python/Streamlit provide demonstration and observability.
  • Gradle and GitHub Actions provide repeatable build and validation.
  • MkDocs and Mermaid provide maintainable project documentation.