Skip to content

Latest commit

Β 

History

History
123 lines (89 loc) Β· 4.34 KB

File metadata and controls

123 lines (89 loc) Β· 4.34 KB

Development Process

This document outlines the development workflow for ArbiterAI.

Building

ArbiterAI uses CMake with vcpkg for dependency management. A Docker environment ensures consistent builds.

# Start the Docker container
./runDocker.sh

# Build inside the container
./build.sh

# Clean rebuild
./build.sh --rebuild

Build output is located in build/linux_x64_debug/.

Running Tests

# From inside the Docker container
./build/linux_x64_debug/arbiterai_tests

Releases

Version Management

The project version lives in CMakeLists.txt (project(arbiterAI VERSION X.Y.Z)). Do not change the version manually in PRs β€” it is managed exclusively by the release workflows.

The version is embedded into the compiled library at build time via a CMake-generated header. Applications can query it at runtime:

auto ver = arbiterAI::getVersion();
// ver.major, ver.minor, ver.patch, ver.toString()

Point Releases (Automatic)

Every PR merge into main or a release/** branch automatically:

  1. Increments the patch version (X.Y.Z β†’ X.Y.Z+1)
  2. Commits the version bump with [skip ci]
  3. Creates a vX.Y.Z tag
  4. Publishes a GitHub Release with the PR title and link

Major/Minor Releases (Manual)

Triggered from the GitHub Actions page β†’ Release Major/Minor β†’ Run workflow:

  1. Select major or minor release type
  2. Select the source branch (e.g., main)
  3. The workflow creates a release/X.Y branch, sets the version to X.Y.0, builds the project, and publishes a GitHub Release with build artifacts

Release Branch Convention

  • release/0.2 β€” minor release branch for 0.2.x
  • release/1.0 β€” major release branch for 1.0.x

PRs can be opened against release branches for hotfixes. Each merge triggers a point release on that branch.

Tag Format

All tags follow the format vX.Y.Z (e.g., v0.1.3, v0.2.0, v1.0.0).

Task Tracking

Tasks are maintained as markdown files in the docs/ directory structure.

Directory Structure

  • docs/development/tasks/completed/ β€” Completed task files
  • docs/tasks/ β€” Active or planned tasks

Task File Format

Task files use Markdown and include:

  • Title β€” Clear description of the task
  • Description β€” Detailed requirements and context
  • Acceptance Criteria β€” What must be true for the task to be done
  • Progress β€” Checklists or notes on progress

Project Structure

arbiterAI/
β”œβ”€β”€ CMakeLists.txt              # Build configuration
β”œβ”€β”€ vcpkg.json                  # Dependency manifest
β”œβ”€β”€ build.sh                    # Build script
β”œβ”€β”€ runDocker.sh                # Docker environment launcher
β”œβ”€β”€ src/arbiterAI/              # Library source code
β”‚   β”œβ”€β”€ arbiterAI.h/cpp         # Main API and data structures
β”‚   β”œβ”€β”€ chatClient.h/cpp        # Stateful chat client
β”‚   β”œβ”€β”€ modelManager.h/cpp      # Model configuration management
β”‚   β”œβ”€β”€ cacheManager.h/cpp      # Response caching
β”‚   β”œβ”€β”€ costManager.h/cpp       # Spending limits and tracking
β”‚   β”œβ”€β”€ modelDownloader.h/cpp   # Async model downloading
β”‚   β”œβ”€β”€ fileVerifier.h/cpp      # SHA256 file verification
β”‚   β”œβ”€β”€ configDownloader.h/cpp  # Remote config fetching
β”‚   └── providers/              # LLM provider implementations
β”‚       β”œβ”€β”€ baseProvider.h/cpp  # Abstract provider interface
β”‚       β”œβ”€β”€ openai.h/cpp        # OpenAI provider
β”‚       β”œβ”€β”€ anthropic.h/cpp     # Anthropic provider
β”‚       β”œβ”€β”€ deepseek.h/cpp      # DeepSeek provider
β”‚       β”œβ”€β”€ openrouter.h/cpp    # OpenRouter provider
β”‚       β”œβ”€β”€ llama.h/cpp         # Llama.cpp local provider
β”‚       └── mock.h/cpp          # Mock testing provider
β”œβ”€β”€ tests/                      # Google Test test files
β”œβ”€β”€ examples/                   # Example applications
β”‚   β”œβ”€β”€ cli/                    # CLI chat client
β”‚   β”œβ”€β”€ proxy/                  # HTTP proxy server
β”‚   └── mock_example.cpp        # Mock provider demo
β”œβ”€β”€ schemas/                    # JSON schemas
β”œβ”€β”€ docs/                       # Documentation
β”œβ”€β”€ cmake/                      # CMake modules and toolchains
β”œβ”€β”€ docker/                     # Dockerfile
└── vcpkg/                      # Custom vcpkg ports