Rust implementation status¶
AGL 0.6 is implemented by the native Rust compiler, checker, runtime, CLI, adapters, and embedding API. The Python implementation remains available as a compatibility oracle and as a migration bridge for existing task/tool plugins; it is not the normative runtime.
Implemented surface¶
| Area | Status |
|---|---|
| Lexer, parser, source spans, diagnostics | Complete |
| AGL 0.2–0.6 language versions | Complete |
Types, records, unions, Result, exhaustive matching |
Complete |
| Workflows and pipeline lowering | Complete |
| Effects, idempotency, retries, budgets | Complete |
| Provider-neutral deployment bindings and policy | Complete |
Parallel, parallel map, race, cancellation |
Complete |
| Durable SQLite-backed events, replay, approvals | Complete |
| Evaluations, distributions, baselines, replay | Complete |
| Modules, visibility, package locks, API comparison | Complete |
| Formatter, JSON-lines protocol, LSP, completions | Complete |
| OpenAI and Anthropic adapters plus native tools | Complete |
| Rust handler/tool/adapter extension traits | Complete |
| Python task/tool plugin bridge | Compatibility support |
Compatibility boundary¶
Rust accepts the checked-in .agent examples and is the implementation used by the conformance and differential suites. Python plugins run in a separate process through a versioned JSON envelope; native applications should prefer Registry, ToolRegistry, and the extension traits in agl::extension.
Embedding¶
use agl::{check_program, execute_pipeline, parse_program, Registry};
use agl::context::ExecutionContext;
use std::collections::BTreeMap;
let program = parse_program(source)?;
check_program(&program)?;
let registry = Registry::default();
let value = execute_pipeline(
&program,
"pipeline_name",
BTreeMap::new(),
®istry,
&ExecutionContext::default(),
)?;
Validation¶
cargo fmt --all -- --check
cargo clippy --all-targets --all-features --offline -- -D warnings
cargo test --locked --offline
python3 -m unittest discover -s tests
cargo package --locked --offline
The live-provider tests are intentionally ignored in ordinary runs because they require credentials and make billable network calls. Run them manually or through .github/workflows/live-smoke.yml before a provider release.