feat: Replace TrivialAgent with canonical agent_main entrypoint#9
Merged
Conversation
## Summary Replace the hardcoded TrivialAgent::run() call in kernel-guest with the canonical extern "Rust" fn agent_main(ctx, opaque_inputs) entrypoint. ## Key Changes ### API Design - Use `extern "Rust"` instead of `extern "C"` for ABI safety with Rust types - 2-argument signature: `agent_main(ctx: &AgentContext, opaque_inputs: &[u8])` - AgentContext uses owned fields (no lifetimes) - clean "header" struct ### New Crate: example-agent - Minimal example agent demonstrating the canonical entrypoint - Echoes input when opaque_inputs[0] == 1, empty output otherwise - Used for testing kernel execution flow ### Refactored Crates - kernel-sdk: AgentContext now uses owned [u8; 32] fields, 144 bytes fixed size - kernel-guest: Uses extern "Rust" block, no unsafe pointer casts needed - agent-traits: Re-exports from kernel-sdk, deprecated legacy Agent trait - host-tests: Added tests for agent_main behavior ## Technical Details - AgentContext is #[repr(C)], Clone, Copy, Debug, PartialEq, Eq - #[no_mangle] requires #[allow(unsafe_code)] due to Rust lint rules - All 88 host-tests pass, plus crate-specific tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replace the hardcoded
TrivialAgent::run()call in kernel-guest with the canonicalextern "Rust" fn agent_main(ctx, opaque_inputs)entrypoint.Key Changes
API Design
extern "Rust"instead ofextern "C"for ABI safety with Rust typesagent_main(ctx: &AgentContext, opaque_inputs: &[u8])AgentContextuses owned fields (no lifetimes) - clean "header" structNew Crate: example-agent
opaque_inputs[0] == 1, empty output otherwiseRefactored Crates
AgentContextnow uses owned[u8; 32]fields, 144 bytes fixed sizeextern "Rust"block, no unsafe pointer casts neededAgenttraitagent_mainbehaviorTechnical Details
AgentContextis#[repr(C)],Clone,Copy,Debug,PartialEq,Eq#[no_mangle]requires#[allow(unsafe_code)]due to Rust lint rulesTest plan
cargo build --releasepassescargo test- all 88 host-tests pass