Files
horus/WORKSPACE_STRUCTURE.md
2025-11-13 20:44:00 +01:00

4.0 KiB

Horus Workspace Structure

The Horus workspace consolidates all Hero ecosystem components into a single, well-organized monorepo.

Workspace Members

Binaries (bin/)

bin/supervisor/

  • Package: hero-supervisor
  • Description: Main supervisor for managing actor runners
  • Binaries: supervisor
  • Library: hero_supervisor

bin/osiris/

  • Package: osiris-server
  • Description: Osiris HTTP server for object storage
  • Binaries: osiris

bin/runners/sal/

  • Package: runner-sal
  • Description: System Abstraction Layer (SAL) runner
  • Binaries: runner_sal

bin/runners/osiris/

  • Package: runner-osiris
  • Description: Osiris-backed runner with database support
  • Binaries: runner_osiris

Libraries (lib/)

Models (lib/models/)

lib/models/job/
  • Package: hero-job
  • Description: Job model types and builders
  • Library: hero_job

Clients (lib/clients/)

lib/clients/job/
  • Package: hero-job-client
  • Description: Redis-based job client
  • Library: hero_job_client
lib/clients/supervisor/
  • Package: hero-supervisor-openrpc-client
  • Description: OpenRPC client for supervisor (native + WASM)
  • Library: hero_supervisor_openrpc_client
lib/clients/osiris/
  • Package: osiris-client
  • Description: Client library for Osiris
  • Library: osiris_client

Core Libraries

lib/runner/
  • Package: hero-runner
  • Description: Core runner library for executing jobs
  • Library: hero_runner
lib/osiris/core/
  • Package: osiris-core
  • Description: Osiris core - object storage and indexing
  • Library: osiris
lib/osiris/derive/
  • Package: osiris-derive
  • Description: Derive macros for Osiris
  • Type: Procedural macro crate

Dependency Graph

bin/supervisor
├── lib/models/job
├── lib/clients/job
└── (jsonrpsee, redis, tokio, etc.)

bin/osiris
└── lib/osiris/core
    └── lib/osiris/derive

bin/runners/sal
├── lib/runner
│   ├── lib/models/job
│   └── lib/clients/job
└── (SAL modules from herolib_rust)

bin/runners/osiris
├── lib/runner
│   ├── lib/models/job
│   └── lib/clients/job
└── lib/osiris/core

lib/clients/supervisor
├── lib/models/job
└── (jsonrpsee, WASM support)

lib/clients/osiris
├── lib/models/job
└── lib/clients/supervisor

lib/clients/job
└── lib/models/job

Build Commands

# Check entire workspace
cargo check --workspace

# Build entire workspace
cargo build --workspace

# Build specific package
cargo build -p hero-supervisor
cargo build -p osiris-core
cargo build -p runner-sal

# Run binaries
cargo run -p hero-supervisor --bin supervisor
cargo run -p osiris-server --bin osiris
cargo run -p runner-sal --bin runner_sal
cargo run -p runner-osiris --bin runner_osiris

Migration Notes

From External Repos

The following components were migrated into this workspace:

  1. Job (/herocode/job/rust) → lib/models/job + lib/clients/job
  2. Runner (/herocode/runner/rust) → lib/runner + bin/runners/*
  3. Osiris (/herocode/osiris) → lib/osiris/* + bin/osiris + lib/clients/osiris
  4. Supervisor (already in workspace) → bin/supervisor + lib/clients/supervisor

Path Dependencies

All internal dependencies now use path-based references:

  • hero-job = { path = "../../lib/models/job" }
  • osiris-core = { path = "../../lib/osiris/core" }
  • etc.

External dependencies (SAL modules, heromodels, etc.) remain as git dependencies.

Workspace Configuration

Shared dependencies are defined in the root Cargo.toml under [workspace.dependencies]:

  • tokio, async-trait
  • serde, serde_json
  • redis, uuid, chrono
  • jsonrpsee, axum, tower
  • And more...

Individual crates reference these with .workspace = true:

[dependencies]
tokio.workspace = true
serde.workspace = true