4.0 KiB
4.0 KiB
Julia Implementation - AgentCore
This directory contains a Julia reimplementation of the @earendil-works/pi-agent-core package.
Project Structure
julia_implementation/
├── src/
│ ├── AgentCore.jl # Main module entry point
│ ├── types.jl # Core type definitions
│ ├── stream_fn.jl # Stream function utilities
│ ├── agent_loop.jl # Low-level agent loop
│ ├── agent.jl # High-level Agent struct
│ ├── harness_types.jl # Extended types for AgentHarness
│ ├── messages.jl # Custom message types
│ ├── system_prompt.jl # System prompt formatting
│ ├── skills.jl # Skill loading and formatting
│ ├── prompt_templates.jl # Prompt template handling
│ ├── agent_harness.jl # AgentHarness implementation
│ │
│ ├── session/
│ │ ├── session.jl # Session class
│ │ ├── jsonl_storage.jl # JSONL storage
│ │ ├── jsonl_repo.jl # JSONL repository
│ │ ├── memory_storage.jl # In-memory storage
│ │ ├── memory_repo.jl # In-memory repository
│ │ └── repo_utils.jl # Repository utilities
│ │
│ ├── tools/
│ │ ├── index.jl # Tool exports
│ │ ├── bash.jl # Bash execution tool
│ │ ├── read.jl # File read tool
│ │ ├── write.jl # File write tool
│ │ ├── edit.jl # File edit tool
│ │ ├── edit_diff.jl # Diff computation
│ │ ├── image.jl # Image utilities
│ │ ├── path_utils.jl # Path resolution
│ │ └── file_mutation_queue.jl # File mutation serialization
│ │
│ ├── compaction/
│ │ ├── compaction.jl # Context compaction
│ │ ├── utils.jl # Compaction utilities
│ │ └── branch_summarization.jl # Branch summarization
│ │
│ ├── utils/
│ │ ├── truncate.jl # Output truncation
│ │ └── shell_output.jl # Shell output capture
│ │
│ ├── proxy.jl # Proxy stream function
│ └── utils.jl # Utility functions
│
├── test/
├── Project.toml
├── Manifest.toml
└── README.md
Key Features
Core Architecture
The implementation follows the same layered architecture as the TypeScript version:
- Low-level (agent_loop.jl): Pure agent loop logic that works with
AgentMessage[] - High-level (agent.jl): Stateful wrapper with event streaming and queueing
- Harness (agent_harness.jl): Session persistence, resource management, hooks
- Session (session/): Conversation history with compaction and branching
- Tools (tools/): Built-in execution tools (bash, read, write, edit)
Julia-Specific Features
- Type system: Uses Julia's parametric types for type-safe tool definitions
- Multiple dispatch: Extensible via multiple dispatch for custom message types
- Async primitives: Leverages Julia's
@asyncand@spawnfor concurrent operations - Error handling: Julia exceptions with typed error codes
Building
using Pkg
Pkg.activate("julia_implementation")
Pkg.instantiate()
Usage Example
using AgentCore
# Create an agent
agent = Agent()
# Subscribe to events
subscribe(agent) do event, signal
if event isa MessageEndEvent
println("Message: $(event.message)")
end
end
# Run a prompt
prompt(agent, "Hello, world!")
Compatibility
This implementation aims for API compatibility with the TypeScript version while providing idiomatic Julia abstractions.
Status
This is an active implementation. Core functionality is in place, with ongoing work on:
- Complete tool implementations
- Full session repository functionality
- Test suite
License
MIT