e04012c8c02d64ec4ac25678ba3a238f692003d0
Major Changes:
- Moved Rhai support from rhai_support/ to rhai/ module
- Implemented context-based execution with signatory access control
- Added TypeRegistry for dynamic type registration and object creation
- Refactored engine to use context (Vec<String>) instead of instance
- Removed old runner binary (moved to runner_rust crate)
Rhai Module:
- engine.rs: Core Rhai engine with context-based get_context()
- functions.rs: Rhai function bindings (create_note, create_event, etc.)
- mod.rs: Module exports and organization
Store Improvements:
- TypeRegistry for registering object types and creators
- Generic store uses type registry for dynamic object creation
- Improved error handling and type safety
Documentation:
- RHAI_REFACTOR_COMPLETE.md: Refactoring details
- SIGNATORY_ACCESS_CONTROL.md: Context-based access control
- TYPE_REGISTRY_DESIGN.md: Type registry architecture
- REFACTORING_COMPLETE.md: Overall refactoring summary
- TESTS_COMPLETE.md: Testing documentation
Build Status: ✅ Compiles successfully with minor warnings
OSIRIS
Object Storage, Indexing & Retrieval Intelligent System
OSIRIS is a Rust-native object storage and retrieval layer built on top of HeroDB, providing structured storage with metadata, field indexing, and search capabilities.
Features
- Object Storage: Store structured objects with metadata (title, tags, MIME type, timestamps)
- Namespace Management: Organize objects into isolated namespaces
- Field Indexing: Fast filtering by tags and metadata fields
- Text Search: Simple keyword-based search across object content
- CLI Interface: Command-line tools for object management and search
- 9P Filesystem: Mount OSIRIS as a filesystem (future)
Quick Start
Prerequisites
Start HeroDB:
cd /path/to/herodb
cargo run --release -- --dir ./data --admin-secret mysecret --port 6379
Installation
cd /path/to/osiris
cargo build --release
Initialize
# Create configuration
mkdir -p ~/.config/osiris
cat > ~/.config/osiris/config.toml <<EOF
[herodb]
url = "redis://localhost:6379"
[namespaces.notes]
db_id = 1
EOF
# Initialize OSIRIS
./target/release/osiris init --herodb redis://localhost:6379
# Create a namespace
./target/release/osiris ns create notes
Usage
# Add objects
./target/release/osiris put notes/my-note.md ./my-note.md --tags topic=rust,project=osiris
# Get objects
./target/release/osiris get notes/my-note.md
# Search
./target/release/osiris find --ns notes --filter topic=rust
./target/release/osiris find "retrieval" --ns notes
# Delete objects
./target/release/osiris del notes/my-note.md
# Show statistics
./target/release/osiris stats --ns notes
Architecture
HeroDB (unmodified)
│
├── KV store + encryption
└── RESP protocol
↑
│
└── OSIRIS
├── store/ – object schema + persistence
├── index/ – field index & keyword scanning
├── retrieve/ – query planner + filtering
├── interfaces/ – CLI, 9P
└── config/ – namespaces + settings
Data Model
Objects are stored with metadata:
- ID: Unique identifier (UUID or user-assigned)
- Namespace: Logical grouping (e.g., "notes", "calendar")
- Title: Optional human-readable title
- MIME Type: Content type
- Tags: Key-value pairs for categorization
- Timestamps: Created and updated times
- Text Content: Optional plain text content
Keyspace Design
meta:<id> → serialized OsirisObject
field:<field>:<val> → Set of IDs (for equality filtering)
scan:index → list of IDs for text scan
Example:
field:tag:project=osiris → {note_1, note_2}
field:mime:text/markdown → {note_1, note_3}
Future Enhancements
- Content-addressable deduplication
- Vector embeddings for semantic search
- Relation graphs
- Full-text search with Tantivy
- 9P filesystem interface
License
See LICENSE file.
Description
Languages
Rust
97.8%
V
2.2%