1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! Sandbox trait definitions.
//!
//! Defines the interface for sandboxed code execution.
use crateToolError;
use Value;
use Debug;
use Future;
use Pin;
/// The result type for sandbox execution futures.
pub type SandboxExecutionFuture =
;
/// The result type for sandbox factory futures.
pub type SandboxFactoryFuture =
;
/// Trait for sandboxed code execution.
///
/// Sandboxes provide isolated environments for executing untrusted code.
/// The primary implementation uses Hyperlight micro-VMs for hardware isolation.
///
/// # Thread Safety
///
/// Sandboxes must be `Send + Sync` to support use across async contexts.
/// Implementations should ensure thread-safe internal state management.
///
/// # Example
///
/// ```rust,ignore
/// use acton_ai::tools::sandbox::{Sandbox, SandboxFactory, HyperlightSandboxFactory};
///
/// let factory = HyperlightSandboxFactory::new()?;
/// let sandbox = factory.create().await?;
///
/// let result = sandbox.execute("echo hello", serde_json::json!({})).await?;
/// sandbox.destroy();
/// ```
/// Factory for creating sandbox instances.
///
/// This allows different sandbox implementations to be plugged in
/// without changing the tool execution code.
///
/// # Availability
///
/// Use `is_available()` to check if the factory can create sandboxes
/// on the current system (e.g., hypervisor presence).
///
/// # Example
///
/// ```rust,ignore
/// use acton_ai::tools::sandbox::{SandboxFactory, HyperlightSandboxFactory};
///
/// let factory = HyperlightSandboxFactory::new_with_fallback();
/// if factory.is_available() {
/// let sandbox = factory.create().await?;
/// // Use sandbox...
/// }
/// ```