- Rust 93.2%
- PowerShell 5.7%
- C 0.5%
- HLSL 0.4%
- Batchfile 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
odin-core was a path dependency on `../odin-core`, a sibling that does not exist in this repository — a leftover from when these crates lived inside Odin. It now resolves from Odin's upstream at 3a6368f. CultLib moves from c13b6ba to 96138ff, which is where the media contract, wire envelope and channel delivery live. That surfaces a diamond rather than fixing one. odin-core pins CultLib at c13b6ba; this crate now needs 96138ff; Cargo resolves two cultcache-rs copies and the DatabaseEntry from one is not the DatabaseEntry from the other: git+...CultLib.git?rev=96138ff#cultcache-rs@0.1.0 git+...CultLib.git?rev=c13b6ba#cultcache-rs@0.1.0 Muninn cannot resolve this alone. It uses 23 symbols from odin-core, and while 16 are its own records that belong here — capture stream, command boundary, HID controller state, the five Move records, OBS catalog, Quest access, telemetry surface, transport profile — the remaining 7 are genuinely Odin's: provider discovery, Eve advertisement and surface records, Idunn daemon health. Moving the 16 shrinks the coupling; it does not remove it. The sequence that unblocks a clean build is therefore: 1. CultLib claude/cultmesh-media-stream-contract merges to main 2. Odin bumps its CultLib pin to that main 3. this builds standalone Steps 1 and 2 are not this repository's to take. Until then a local [patch."https://github.com/GameCult/CultLib.git"] unifying both consumers on one CultLib checkout builds fine, and is deliberately not committed — it points at working trees that exist on one machine. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
| crates | ||
| docs | ||
| native | ||
| scripts | ||
| .gitignore | ||
| Cargo.toml | ||
| README.md | ||
Muninn
Local capture broker for the GameCult swarm.
Muninn resolves what data streams a host can offer, advertises them, and serves them to CultMesh peers on request. Screen and loopback audio, cameras, PS Move controllers and their optical markers, HID and XInput gamepads, Quest access.
Muninn running does not mean Muninn is broadcasting. Each feed it can reach is available for another service to request. Mimir asks for sensors. Sleipnir asks for input. A stream asks for screen and audio. Muninn does not decide what any of them are for.
Extracted from Odin with its full history.
Muninn had lived as three crates inside the repository of the service that
discovers it, with its document schemas owned by odin-core — an inversion of
the ownership it needs to hold. Same shape as the
Idunn extraction of 2026-09-05, and done
deliberately after it.
Status
This repository does not build yet. It is a faithful history extraction, not
a finished cut. muninn-daemon still depends on odin-core by path for the
twenty record types and schema constants it uses, and that dependency is one of
the things being removed.
See docs/teardown-map.md for the working map: current
body, the authorities currently fused into one 14,567-line main.rs, schema
decomposition, extraction blast radius, and the measured diagnosis of the audio
decay that prompted the rebuild.
Authority
- Owner: Muninn owns local source enumeration, capability advertisement, per-consumer stream grants, and transport of granted streams.
- Input: locally reachable devices; typed capture stream commands from requesting peers.
- Output: CultMesh Media Streams and typed sensor records.
- Not Muninn's: the media protocol itself (a general CultMesh contract, owned by CultLib), discovery and rendezvous (Odin), deployment and continuity (Idunn), the hue programs that decide what colour a Move should be (Mimir), and any consumer's lowering — OBS, browser, or otherwise.
Muninn is one producer of a general contract. It is not the contract.