Each agent row on the hive dashboard, and the agent page's link menu, linked to the agent's forge profile and its config repo. Both are gone, with what only they used: - hive-agent no longer builds the two links, the `Forge` link kind, or the `forge_public_url` field of its state, and no longer reads `HIVE_FORGE_PUBLIC_URL`. The agent page's link menu and the dashboard row's icon strip (which skips a forge link an agent not yet rebuilt still sends) drop their forge handling. - hive-c0re's dashboard state no longer carries `forge_public_url`. - `HIVE_FORGE_PUBLIC_URL` is no longer forwarded to agents through the meta flake (the forwarded-variable list, its test fixture, the controller's settings and the VM test), so the next meta flake render differs by that one line. hive-c0re still reads it for the forge URL a hive publishes, so `swarm.forge.publicUrl` stays, with its description corrected. - The docs stop describing the links.
93 lines
4.7 KiB
Nix
93 lines
4.7 KiB
Nix
{
|
|
description = "hyperhive deployed agents";
|
|
inputs = {
|
|
hyperhive.url = "@HYPERHIVE_URL@";
|
|
nixpkgs.follows = "hyperhive/nixpkgs";
|
|
};
|
|
outputs =
|
|
{ self, hyperhive, ... }@inputs:
|
|
let
|
|
mkAgent = { name, port, archetype ? null }:
|
|
let
|
|
base = hyperhive.nixosConfigurations.agent-base;
|
|
# Every flake an archetype can come from, by its source name.
|
|
archetypeSources = { inherit hyperhive; };
|
|
agentModule =
|
|
if archetype == null then
|
|
inputs."agent-${name}".nixosModules.default
|
|
else
|
|
(archetypeSources.${archetype.source}
|
|
or (throw "agent ${name}: archetype source ${archetype.source} is not an input of this hive's meta flake")
|
|
).hyperhiveArchetypes.${archetype.name}.module
|
|
or (throw "agent ${name}: this hive's ${archetype.source} input has no archetype ${archetype.name}; update that input");
|
|
service = "hive-agent";
|
|
# One attrset for `environment.variables` (login shells),
|
|
# `systemd.globalEnvironment` (every unit) and the harness service,
|
|
# so the three cannot disagree. The forwarded vars come from the host.
|
|
agentEnv = {
|
|
HIVE_LABEL = name;
|
|
HYPERHIVE_STATE_DIR = "/agents/${name}/state";
|
|
HYPERHIVE_HARNESS_DIR = "/agents/${name}/harness";
|
|
HIVE_AGENT_BAO_ADDR = "@HIVE_AGENT_BAO_ADDR@";
|
|
HIVE_AGENT_BAO_SERVICES_PKI_MOUNT = "@HIVE_AGENT_BAO_SERVICES_PKI_MOUNT@";
|
|
HIVE_AGENT_LOGS_QUERY_URL = "@HIVE_AGENT_LOGS_QUERY_URL@";
|
|
HIVE_AGENT_METRICS_URL = "@HIVE_AGENT_METRICS_URL@";
|
|
HIVE_FORGE_URL = "@HIVE_FORGE_URL@";
|
|
HIVE_MATRIX_URL = "@HIVE_MATRIX_URL@";
|
|
};
|
|
in
|
|
base.extendModules {
|
|
modules = [
|
|
agentModule
|
|
{
|
|
services.hyperhive.agent.bao.addr = "@HIVE_AGENT_BAO_ADDR@";
|
|
services.hyperhive.agent.bao.servicesPkiMount = "@HIVE_AGENT_BAO_SERVICES_PKI_MOUNT@";
|
|
services.hyperhive.agent.logs.queryUrl = "@HIVE_AGENT_LOGS_QUERY_URL@";
|
|
services.hyperhive.agent.metrics.url = "@HIVE_AGENT_METRICS_URL@";
|
|
services.hyperhive.agent.forge.url = "@HIVE_FORGE_URL@";
|
|
services.hyperhive.agent.matrix.url = "@HIVE_MATRIX_URL@";
|
|
# The harness service inside the container runs as a
|
|
# non-root unix user named after the agent (`damocles`,
|
|
# `iris`, `root`, …). UID auto-assigned by NixOS; the
|
|
# per-agent override here is what makes
|
|
# `services.hyperhive.agent.user.name` match the agent's identity
|
|
# instead of the harness default of `"agent"`.
|
|
services.hyperhive.agent.user.name = name;
|
|
# Without this an agent container is called `nixos` and ships
|
|
# every log line under that: nixpkgs sets the hostname from the
|
|
# attr name in the `containers.<name>` submodule, and an
|
|
# agent's system is its own `nixosSystem` off this flake, which
|
|
# never evaluates that option. The machine name, not the
|
|
# logical one — it is what `container.name` on our metrics and
|
|
# nspawn itself already call this container, so logs join to
|
|
# both without a prefix transform.
|
|
networking.hostName = "h-${name}";
|
|
programs.git.config.user = {
|
|
name = name;
|
|
email = "${name}@hyperhive.local";
|
|
};
|
|
# Container-wide env, all from `agentEnv`: every unit and daemon
|
|
# (the bash-task runner where `hive-forge` and `git` run included)
|
|
# resolves the state dir and the forwarded service URLs without
|
|
# redeclaring them. `environment.variables` is what login shells
|
|
# read; `systemd.globalEnvironment` is the analogue for units.
|
|
environment.variables = agentEnv;
|
|
systemd.globalEnvironment = agentEnv;
|
|
systemd.services.${service}.environment = agentEnv // {
|
|
HIVE_PORT = toString port;
|
|
};
|
|
}
|
|
# Tells the harness the agent has no config repo of its own.
|
|
(if archetype == null then { } else {
|
|
systemd.services.${service}.environment.HIVE_ARCHETYPE = archetype.name;
|
|
})
|
|
];
|
|
};
|
|
in
|
|
{
|
|
nixosConfigurations = {
|
|
iris = mkAgent { name = "iris"; port = 8178; archetype = { source = "hyperhive"; name = "reviewer"; }; };
|
|
ruth = mkAgent { name = "ruth"; port = 8232; archetype = { source = "hyperhive"; name = "reviewer"; }; };
|
|
};
|
|
};
|
|
}
|