Skip to main content

Crate aptu_core

Crate aptu_core 

Source
Expand description

§aptu-core

Core library for Aptu - AI-Powered Triage Utility.

docs.rs CLI crate REUSE OpenSSF Best Practices

§Features

  • AI Triage - Analyze issues with summaries, labels, and contributor guidance
  • PR Review - AI-powered pull request analysis with full file content and multi-language AST context (Rust, Python, Go, Java, TypeScript, TSX, JavaScript, C, C++, C#, Fortran)
  • Security Scanning - Built-in security pattern detection with SARIF output
  • Multiple Providers - OpenRouter (default), Cerebras, Groq, Gemini, Z.AI, and ZenMux
  • GitHub Integration - Auth, issues, PRs, and GraphQL queries
  • Resilient - Exponential backoff, circuit breaker, rate limit handling

§Installation

Add to your Cargo.toml:

[dependencies]
aptu-core = "*"

Note: Replace * with the current version on crates.io when used in production.

§Optional Features

FeatureDescription
keyringSecure token storage using system keyring (macOS Keychain, Linux Secret Service, Windows Credential Manager)
ast-contextAST and call-graph context injection for PR reviews (Rust, Go, Python, TypeScript, JS, C/C++, C#, Java, Fortran)

To enable optional features:

[dependencies]
aptu-core = { version = "*", features = ["keyring"] }

§Example

use aptu_core::{load_config, AiClient, IssueDetails, ai::AiProvider};
use anyhow::Result;

#[tokio::main]
async fn main() -> Result<()> {
    // Load configuration
    let config = load_config()?;

    // Create AI client
    let client = AiClient::new(&config.ai.provider, &config.ai)?;

    // Create issue details
    let issue = IssueDetails::builder()
        .owner("block".to_string())
        .repo("goose".to_string())
        .number(123)
        .title("Example issue".to_string())
        .body("Issue description...".to_string())
        .url("https://github.com/block/goose/issues/123".to_string())
        .build();

    // Analyze with AI
    let response = client.analyze_issue(&issue).await?;
    println!("Summary: {}", response.triage.summary);

    Ok(())
}

§Modules

  • ai - AI integration and triage analysis
  • config - Configuration loading and XDG paths
  • facade - High-level platform-agnostic API
  • github - GitHub API and authentication
  • history - Contribution history tracking
  • repos - Curated repository list
  • security - Security pattern detection and SARIF output

§Benchmarks

Head-to-head comparison of aptu+mercury-2 vs a raw claude-opus-4.6 call (no schema, no rubric, no AST context) across 6 fixtures (3 triage, 3 PR review).

ArmQuality (mean, /5)Cost/callLatency p50
aptu+mercury-24.8/5$0.00111,934 ms
raw claude-opus-4.62.2/5$0.019316,032 ms

Measured across aptu #737, #850, #1094 (triage) and #1091, #1098, #1101 (PR review); n=1 per fixture.

aptu+mercury-2 is 17x cheaper and 8x faster than a raw claude-opus-4.6 call, while scoring more than twice as high on the structured rubric.

See docs/BENCHMARKS.md for full methodology, fixture breakdown, and C1-C5 scores.

§FAQ

Q: The install examples use "*" – what version should I pin in production?

The "*" wildcard in documentation examples means “any version” and is used so the docs stay accurate across releases. For production use or library dependencies, always pin to a specific version:

[dependencies]
aptu-core = "0.4"            # semver-compatible: accepts patch and minor updates
# or for exact pinning:
aptu-core = "=0.4.0"         # exact: only this release

Check crates.io/crates/aptu-core for the latest published version. aptu-core follows Semantic Versioning: patch releases are bug-fixes only; minor releases may add new APIs but remain backward-compatible with existing usage.

§Support

For questions and support, visit clouatre.ca.

§License

Apache-2.0. See LICENSE.

Re-exports§

pub use auth::TokenProvider;
pub use error::AptuError;
pub use config::AiConfig;
pub use config::AppConfig;
pub use config::CacheConfig;
pub use config::GitHubConfig;
pub use config::TaskType;
pub use config::UiConfig;
pub use config::UserConfig;
pub use config::config_dir;
pub use config::config_file_path;
pub use config::data_dir;
pub use config::load_config;
pub use config::prompts_dir;
pub use cache::CacheEntry;
pub use cache::FileCache;
pub use cache::FileCacheImpl;
pub use ai::types::IssueComment;
pub use ai::types::IssueDetails;
pub use ai::types::PrDetails;
pub use ai::types::PrFile;
pub use ai::types::PrReviewResponse;
pub use ai::types::ReviewEvent;
pub use ai::types::TriageResponse;
pub use ai::AiClient;
pub use ai::AiModel;
pub use ai::ModelProvider;
pub use ai::ProviderConfig;
pub use ai::all_providers;
pub use ai::get_provider;
pub use github::auth::TokenSource;
pub use github::graphql::IssueNode;
pub use github::ratelimit::RateLimitStatus;
pub use github::ratelimit::check_rate_limit;
pub use ai::types::CreditsStatus;
pub use history::AiStats;
pub use history::Contribution;
pub use history::ContributionStatus;
pub use history::HistoryData;
pub use repos::discovery::DiscoveredRepo;
pub use repos::discovery::DiscoveryFilter;
pub use repos::discovery::search_repositories;
pub use repos::CuratedRepo;
pub use repos::RepoFilter;
pub use triage::APTU_SIGNATURE;
pub use triage::TriageStatus;
pub use triage::check_already_triaged;
pub use triage::render_pr_review_comment_body;
pub use triage::render_pr_review_markdown;
pub use triage::render_triage_markdown;
pub use retry::is_retryable_anyhow;
pub use retry::is_retryable_http;
pub use retry::retry_backoff;
pub use bulk::BulkOutcome;
pub use bulk::BulkResult;
pub use bulk::process_bulk;
pub use utils::format_relative_time;
pub use utils::infer_repo_from_git;
pub use utils::is_priority_label;
pub use utils::parse_and_format_relative_time;
pub use utils::truncate;
pub use utils::truncate_with_suffix;
pub use facade::add_custom_repo;
pub use facade::analyze_issue;
pub use facade::analyze_pr;
pub use facade::apply_triage_labels;
pub use facade::create_pr;
pub use facade::discover_repos;
pub use facade::fetch_issue_for_triage;
pub use facade::fetch_issues;
pub use facade::fetch_pr_for_review;
pub use facade::format_issue;
pub use facade::label_pr;
pub use facade::list_curated_repos;
pub use facade::list_models;
pub use facade::list_repos;
pub use facade::post_issue;
pub use facade::post_pr_review;
pub use facade::post_triage_comment;
pub use facade::remove_custom_repo;
pub use facade::validate_model;
pub use github::issues::ApplyResult;
pub use github::pulls::PrCreateResult;
pub use security::Confidence;
pub use security::Finding;
pub use security::FindingCache;
pub use security::PatternEngine;
pub use security::SarifReport;
pub use security::SecurityConfig;
pub use security::SecurityScanner;
pub use security::Severity;
pub use security::needs_security_scan;
pub use git::patch::PatchError;
pub use git::patch::PatchStep;
pub use git::patch::apply_patch_and_push;

Modules§

ai
AI integration module.
auth
Token provider abstraction for multi-platform credential resolution.
bulk
Generic bulk processing with concurrent execution and retry logic.
cache
TTL-based file caching for GitHub API responses.
config
Configuration management for the Aptu CLI.
error
Error types for the aptu-core library.
facade
Platform-agnostic facade functions for FFI and CLI integration.
git
Git utilities: patch application, branch management, and version gating.
github
GitHub integration module.
history
Local contribution history tracking.
repos
Curated and custom repository management for Aptu.
retry
Retry logic with exponential backoff for transient failures.
security
Security scanning module for vulnerability detection.
triage
Triage status detection for GitHub issues.
utils
Text utility functions for Aptu.

Enums§

State
The status of a issue or pull request.

Type Aliases§

Result
Convenience Result type for Aptu operations.