Files
runner_rust/examples/osiris/README.md
Timur Gordon 14ff6cae67 feat: reorganize examples and add signature support to JobBuilder
- Reorganized examples into osiris/, sal/, and utils/ folders
- Moved hardcoded scripts to separate .rhai files
- Added signature() method to JobBuilder for job signing
- Updated OSIRIS context to use block_in_place instead of runtime
- Removed runtime field from OsirisContext
- Added typed save() methods for Note and Event objects
- Updated all examples to use new structure and APIs
2025-10-27 13:49:39 +01:00

176 lines
4.4 KiB
Markdown

# OSIRIS Complete Example
A comprehensive end-to-end example demonstrating the complete OSIRIS workflow.
## Prerequisites
1. **Redis** - Must be running on localhost:6379
```bash
redis-server
```
2. **Rust** - Version 1.88+
```bash
rustup update
```
## Complete Example
### osiris_complete - Full End-to-End Workflow
**ONE EXAMPLE TO RULE THEM ALL** - Complete demonstration of OSIRIS.
**Run:**
```bash
cd /Users/timurgordon/code/git.ourworld.tf/herocode/runner_rust
cargo run --example osiris_complete
```
**What it demonstrates:**
1. **Runner Management** - Starts and stops runner_osiris daemon
2. **Job Client** - Creates client with builder pattern
3. **Job Building** - Uses JobBuilder for clean job creation
4. **Synchronous Execution** - Uses `run_job()` to wait for results
5. **OSIRIS Objects** - Creates Note and Event objects
6. **Context Storage** - Stores objects in participant-based contexts
7. **Data Querying** - Retrieves and lists stored data
8. **Access Control** - Demonstrates signatory-based access
9. **Error Handling** - Proper error propagation and cleanup
**Expected Output:**
```
🚀 OSIRIS Demo Script
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 1: Getting context for participants [alice, bob]
✓ Context ID: alice,bob
Step 2: Creating a Note
✓ Note created with title: Project Planning Meeting
...
```
## Key Concepts
### Context Management
**Simple Logic:**
- Context = list of public keys (participants)
- To get_context, at least one participant must be a signatory
- No state tracking - contexts created fresh each time
**Example:**
```rhai
// Signatories: [alice, bob, charlie]
// ✅ Works - alice is a signatory
let ctx = get_context(["alice", "bob"]);
// ❌ Fails - dave is not a signatory
let ctx = get_context(["alice", "dave"]);
```
### OSIRIS Objects
**Note:**
```rhai
let note = note("collection_name")
.title("My Note")
.content("Note content")
.tag("key", "value")
.mime("text/plain");
```
**Event:**
```rhai
let event = event("collection_name")
.title("My Event")
.description("Event description")
.location("Location")
.tag("type", "meeting");
```
### Context Operations
**Save:**
```rhai
let id = ctx.save("collection", "object_id", object);
```
**Get:**
```rhai
let obj = ctx.get("collection", "object_id");
```
**List:**
```rhai
let ids = ctx.list("collection");
```
**Delete:**
```rhai
let deleted = ctx.delete("collection", "object_id");
```
**Query:**
```rhai
let results = ctx.query("collection", "field", "value");
```
## Architecture
```
┌─────────────────────┐
│ Rhai Script │
│ (osiris_demo.rhai)│
└──────────┬──────────┘
┌─────────────────────┐
│ OSIRIS Engine │
│ - Note API │
│ - Event API │
│ - get_context() │
└──────────┬──────────┘
┌─────────────────────┐
│ OsirisContext │
│ - Participants │
│ - CRUD operations │
└──────────┬──────────┘
┌─────────────────────┐
│ HeroDB │
│ (Redis + local DB) │
└─────────────────────┘
```
## Troubleshooting
### "Connection refused" on port 6379
- Make sure Redis is running: `redis-server`
- Check: `redis-cli ping` (should return "PONG")
### "Access denied: none of the participants are signatories"
- Check that at least one participant is in the SIGNATORIES list
- Signatories are set via engine tags (see examples)
### "Failed to create context"
- Verify Redis is accessible
- Check HeroDB URL is correct
- Ensure db_id is valid (typically 1)
## Next Steps
1. **Modify the scripts** - Edit `osiris_demo.rhai` to try different operations
2. **Add more objects** - Create your own object types
3. **Multi-context** - Try creating multiple contexts with different participants
4. **Integration** - Use OSIRIS in your own applications
---
**Status:** ✅ Ready to Use
**Last Updated:** 2025-10-24