Skip to main content

adk_code/
lib.rs

1//! # adk-code
2//!
3//! First-class code execution substrate for ADK-Rust.
4//!
5//! This crate provides a typed executor abstraction, a truthful sandbox capability model,
6//! and shared execution backends for agent tools, Studio code nodes, and generated projects.
7//!
8//! ## Overview
9//!
10//! `adk-code` owns:
11//!
12//! - Execution request and result types ([`ExecutionRequest`], [`ExecutionResult`])
13//! - Backend interface ([`CodeExecutor`] trait)
14//! - Sandbox policy model ([`SandboxPolicy`], [`BackendCapabilities`])
15//! - Request validation helpers ([`validate_policy`], [`validate_request`])
16//! - Workspace abstraction for collaborative project builds ([`Workspace`], [`CollaborationEvent`])
17//! - Built-in execution backends (Rust sandbox, embedded JS, WASM guest, container)
18//!
19//! ## Product Direction
20//!
21//! The primary code-execution path is Rust-first:
22//!
23//! - Author Rust code
24//! - Execute it live in a sandbox via [`CodeExecutor`]
25//! - Export the same Rust body into generated projects
26//!
27//! Secondary support includes embedded JavaScript for lightweight transforms,
28//! WASM guest modules for portable sandboxed plugins, and container-backed
29//! execution for broader multi-language isolation.
30//!
31//! ## Quick Start
32//!
33//! ```rust
34//! use adk_code::{
35//!     ExecutionLanguage, ExecutionPayload, ExecutionRequest,
36//!     ExecutionResult, ExecutionStatus, SandboxPolicy,
37//! };
38//!
39//! let request = ExecutionRequest {
40//!     language: ExecutionLanguage::Rust,
41//!     payload: ExecutionPayload::Source {
42//!         code: r#"
43//! fn run(input: serde_json::Value) -> serde_json::Value {
44//!     serde_json::json!({ "greeting": "hello" })
45//! }
46//! "#.to_string(),
47//!     },
48//!     argv: vec![],
49//!     stdin: None,
50//!     input: None,
51//!     sandbox: SandboxPolicy::strict_rust(),
52//!     identity: None,
53//! };
54//!
55//! assert_eq!(request.language, ExecutionLanguage::Rust);
56//! ```
57//!
58//! ## Crate Relationships
59//!
60//! - Depends on [`adk-core`] for shared error types
61//! - [`adk-tool`] depends on this crate for language-preset tool wrappers
62//! - [`adk-studio`] depends on this crate for live runner and code generation
63
64pub mod a2a_compat;
65mod code_tool;
66pub mod compat;
67mod container;
68pub mod diagnostics;
69#[cfg(feature = "embedded-js")]
70mod embedded_js;
71mod error;
72mod executor;
73pub mod harness;
74mod rust_executor;
75mod rust_sandbox;
76mod types;
77mod wasm_guest;
78mod workspace;
79
80pub use code_tool::CodeTool;
81#[cfg(feature = "docker")]
82pub use container::DockerExecutor;
83pub use container::*;
84pub use diagnostics::{RustDiagnostic, parse_diagnostics};
85#[cfg(feature = "embedded-js")]
86pub use embedded_js::*;
87pub use error::*;
88pub use executor::*;
89pub use harness::{HARNESS_TEMPLATE, validate_rust_source};
90pub use rust_executor::{CodeResult, RustExecutor, RustExecutorConfig};
91pub use rust_sandbox::*;
92pub use types::*;
93pub use wasm_guest::*;
94pub use workspace::*;