2026-06-05 12:23:59 +01:00
|
|
|
# Huginn
|
2026-05-06 03:11:02 +01:00
|
|
|
|
2026-06-21 15:51:46 +01:00
|
|
|
Huginn reads CultCache `.cc` state and emits Eve DSL for inspectable witness
|
|
|
|
|
surfaces.
|
2026-05-06 03:11:02 +01:00
|
|
|
|
2026-06-05 12:23:59 +01:00
|
|
|
CultLib owns the CultCache implementation: document registration, MessagePack
|
|
|
|
|
payloads, schema catalogs, backing stores, and the canonical
|
2026-06-05 12:42:30 +01:00
|
|
|
`cultcache.store.v1` snapshot parser/writer. Huginn consumes CultLib's
|
|
|
|
|
`cultcache-ts/inspection` surface and projects inspection results into UI
|
|
|
|
|
documents that Eve-capable runtimes can lower.
|
2026-05-06 03:11:02 +01:00
|
|
|
|
2026-06-21 15:51:46 +01:00
|
|
|
Upstream: `https://github.com/GameCult/Huginn.git`
|
|
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
## Authority
|
2026-05-06 03:11:02 +01:00
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
- Owner: Huginn owns `.cc` inspection projection, not `.cc` persistence.
|
|
|
|
|
- Input: `.cc`, `.msgpack`, or `.mpack` bytes readable by CultLib.
|
|
|
|
|
- Output: Eve DSL for `cultcache.huginn.inspector`.
|
|
|
|
|
- Renderers: browser, native, overlay, TUI, or future rooms lower the emitted
|
|
|
|
|
DSL without becoming state owners.
|
2026-05-06 03:11:02 +01:00
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
There is no Electron app, Vite dashboard, React renderer, or Norn-owned
|
|
|
|
|
presentation path in this repo. If a runtime wants to display Huginn, it should
|
|
|
|
|
consume the emitted Eve DSL.
|
|
|
|
|
|
2026-06-21 15:51:46 +01:00
|
|
|
## Witness Contract
|
|
|
|
|
|
|
|
|
|
Huginn's useful first artifact is not a dashboard. It is a read-only specimen
|
|
|
|
|
tray for typed state:
|
|
|
|
|
|
|
|
|
|
- which file was inspected
|
|
|
|
|
- which CultCache format decoded
|
|
|
|
|
- which schema/catalog entry owns each record
|
|
|
|
|
- what payload preview survived decoding
|
|
|
|
|
- which failure state stayed visible instead of being polished away
|
|
|
|
|
|
|
|
|
|
The inspector may make evidence easier to read. It must not mutate canonical
|
|
|
|
|
bytes, bless missing schemas, or let a renderer become the source of truth.
|
|
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
## CLI
|
2026-05-06 04:41:11 +01:00
|
|
|
|
2026-06-05 12:23:59 +01:00
|
|
|
```sh
|
|
|
|
|
npm install
|
|
|
|
|
npm run build
|
2026-06-05 12:42:30 +01:00
|
|
|
npx huginn path/to/state.cc > huginn.eve
|
2026-05-06 04:41:11 +01:00
|
|
|
```
|
|
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
The CLI writes Eve DSL to stdout and errors to stderr.
|
2026-05-06 04:41:11 +01:00
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
## API
|
2026-05-06 04:41:11 +01:00
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
```ts
|
|
|
|
|
import { inspectCultCacheBytes, buildHuginnEveDsl } from "@gamecult/huginn";
|
2026-05-06 04:41:11 +01:00
|
|
|
|
2026-06-05 12:42:30 +01:00
|
|
|
const inspection = inspectCultCacheBytes(filePath, bytes);
|
|
|
|
|
const eveDsl = buildHuginnEveDsl(inspection);
|
2026-05-06 03:11:02 +01:00
|
|
|
```
|
2026-06-21 15:51:46 +01:00
|
|
|
|
|
|
|
|
## Persona And Epiphany
|
|
|
|
|
|
|
|
|
|
Huginn has a repo Persona under `.voidbot/voice`. The Persona's current
|
|
|
|
|
jurisdiction is this repository body, `E:\Projects\Huginn`, and its useful
|
|
|
|
|
pressure is simple: return from the world with evidence, not vibes.
|
|
|
|
|
|
|
|
|
|
Epiphany wiring has been smoke-tested through the repo front doors:
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
cargo run --manifest-path E:\Projects\EpiphanyAgent\epiphany-core\Cargo.toml --bin epiphany-repo -- init --workspace E:\Projects\Huginn
|
|
|
|
|
cargo run --manifest-path E:\Projects\EpiphanyAgent\epiphany-core\Cargo.toml --bin epiphany-swarm -- online --workspace E:\Projects\Huginn
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Live fire should happen on an `epiphany/*` or `codex/*` workbench branch.
|
|
|
|
|
Publication to `main` remains a maintainer/Bifrost decision, not something the
|
|
|
|
|
inspection projection owns.
|