Hermodr is the Eve browser lowering. It was an organ of Odin: Node inside a Rust repository, sharing a common module directory with Odin's coordinator, and until recently running its own provider-session ingress and accepting publications into a private store. The ingress was removed first, deliberately. An extraction that carried it would have moved a second acceptance authority into a repository of its own and called that progress. What moved here is a bridge: it resolves providers through Odin's catalog, reads those providers directly, and relays operator intent to provider-advertised command routes. Contents: the daemon, the provider subscription source and its lifecycle tests, the state stream registry, the browser catalog tests, the four lifecycle scripts, and the persona avatar. Three dependencies on Odin were resolved rather than carried. The swarm document catalog now comes from CultLib's cultcache-ts alongside defineDocumentType. Idunn's health contract is declared locally in idunn-health.cjs, over the generic transport that also moved to CultLib, with sourceRuntimeId "hermodr" rather than Odin's. parseArgs is seventeen lines in args.cjs, because Hermodr used one of that utility module's six functions and carrying the other five would have been carrying a library nobody here reads. MIT, matching CultLib, Odin, Idunn, Eve and Erycina, so the deployment chain is one a creator may lawfully run end to end. Verified: 17 tests pass, every module loads with CultLib resolving from the new location, and no import references Odin. Not verified: behaviour against a live provider over RUDP, which needs a running Verse. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
57 lines
2.3 KiB
PowerShell
57 lines
2.3 KiB
PowerShell
param(
|
|
[string] $HostAddress = $(if ($env:HERMODR_BIND_HOST) { $env:HERMODR_BIND_HOST } else { "127.0.0.1" }),
|
|
[int] $Port = $(if ($env:HERMODR_PORT) { [int]$env:HERMODR_PORT } else { 8798 }),
|
|
[string] $OdinCultMeshUri = $(if ($env:HERMODR_ODIN_CULTMESH_URI) { $env:HERMODR_ODIN_CULTMESH_URI } elseif ($env:ODIN_CULTMESH_URI) { $env:ODIN_CULTMESH_URI } else { "cultmesh://odin/rendezvous/provider-catalog" }),
|
|
[string] $IdunnRudpHealth = $(if ($env:HERMODR_IDUNN_RUDP_HEALTH) { $env:HERMODR_IDUNN_RUDP_HEALTH } else { $env:IDUNN_RUDP_HEALTH }),
|
|
[string] $IdunnDaemon = "hermodr",
|
|
[string] $IdunnHealthContract = "hermodr.cultnet-rudp-browser-lowering-health",
|
|
[string] $StateDir = $(Join-Path $PSScriptRoot "..\scratch\Hermodr"),
|
|
[switch] $NoWindow
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
foreach ($name in @(
|
|
"HERMODR_ODIN_HTTP_BASE",
|
|
"HERMODR_ODIN_WS_BASE",
|
|
"HERMODR_ODIN_STATE_PATH",
|
|
"HERMODR_SLEIPNIR_COMMAND_RUDP",
|
|
"HERMODR_SLEIPNIR_COMMAND_ENDPOINT",
|
|
"HERMODR_MUNINN_RUDP",
|
|
"HERMODR_AETHERIA_COMMAND_RUDP",
|
|
"HERMODR_ODIN_CULTMESH_STORE",
|
|
"ODIN_CULTMESH_STORE"
|
|
)) {
|
|
if (-not [string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($name))) {
|
|
throw "$name was removed. Hermodr lowers Odin/CultMesh state for browsers and may only publish typed CultMesh command documents."
|
|
}
|
|
}
|
|
if (-not [string]::IsNullOrWhiteSpace($env:HERMODR_COMMAND_STORE)) {
|
|
throw "HERMODR_COMMAND_STORE was removed. Hermodr publishes typed commands through provider-advertised CultMesh routes and records visible witnesses in Odin's CultMesh cache."
|
|
}
|
|
|
|
$node = "node"
|
|
$Hermodr = Join-Path $PSScriptRoot "..\src\hermodr-daemon.cjs"
|
|
$arguments = @(
|
|
$Hermodr,
|
|
"--host", $HostAddress,
|
|
"--port", $Port,
|
|
"--odin-cultmesh-uri", $OdinCultMeshUri
|
|
)
|
|
if (-not [string]::IsNullOrWhiteSpace($IdunnRudpHealth)) {
|
|
$arguments += @(
|
|
"--idunn-rudp-health", $IdunnRudpHealth,
|
|
"--idunn-daemon", $IdunnDaemon,
|
|
"--idunn-health-contract", $IdunnHealthContract
|
|
)
|
|
}
|
|
|
|
if ($NoWindow) {
|
|
New-Item -ItemType Directory -Force -Path $StateDir | Out-Null
|
|
$proc = Start-Process -FilePath $node -ArgumentList $arguments -WindowStyle Hidden -PassThru
|
|
$proc.Id | Set-Content -Encoding ASCII -LiteralPath (Join-Path $StateDir "hermodr.pid")
|
|
Write-Host "Started Hermodr browser lowering at http://${HostAddress}:${Port}/"
|
|
return
|
|
}
|
|
|
|
& $node @arguments
|