Issue #24 embeds the first Orleans silo into the desktop runtime path without polluting the Uno UI project or the browserwasm build. The first cut is intentionally local-first: UseLocalhostClustering, in-memory grain storage, and in-memory reminders only.
- a dedicated
DotPilot.Runtime.Hostclass library for Orleans hosting - Orleans grain interfaces and runtime-host contracts in
DotPilot.Core - initial Session, Workspace, Fleet, Policy, and Artifact grains
- desktop startup integration through the Uno host builder
- automated tests for lifecycle, grain round-trips, mismatched keys, and in-memory volatility across restarts
- remote clusters
- external durable storage providers
- Agent Framework orchestration and session-archive flows beyond the host boundary
- UI redesign around the runtime host
flowchart LR
App["DotPilot/App.xaml.cs"]
HostExt["UseDotPilotEmbeddedRuntime()"]
Silo["Embedded Orleans silo"]
Store["In-memory grain storage + reminders"]
Grains["Session / Workspace / Fleet / Policy / Artifact grains"]
Contracts["DotPilot.Core runtime-host contracts"]
App --> HostExt
HostExt --> Silo
Silo --> Store
Silo --> Grains
Grains --> Contracts
- The app references
DotPilot.Runtime.Hostonly on non-browser targets soDotPilot.UITestsand the browserwasm build do not carry the server-only Orleans host. DotPilot.Coreowns the grain interfaces plus theEmbeddedRuntimeHostSnapshotcontract.DotPilot.Runtime.Hostowns:- Orleans host configuration
- host lifecycle catalog state
- grain implementations
- Agent Framework orchestration, replay archives, and resume logic live in the sibling runtime slice document: Embedded Runtime Orchestration.
- The initial cluster configuration is intentionally local:
UseLocalhostClustering- named in-memory grain storage
- in-memory reminders
- Runtime DTOs used by Orleans grain calls now carry Orleans serializer metadata so the grain contract surface is actually serialization-safe instead of only being plain records.
dotnet build DotPilot.slnx -warnaserror -m:1 -p:BuildInParallel=falsedotnet test DotPilot.Tests/DotPilot.Tests.csproj --filter FullyQualifiedName~EmbeddedRuntimeHostdotnet test DotPilot.Tests/DotPilot.Tests.csprojdotnet test DotPilot.slnx