fix: include messaging dependency group in default Hermes build (#3)

## What this fixes

Adds `discord.py`, `python-telegram-bot`, `slack-bolt`, and other messaging platform libraries to the default Hermes derivation. Also adds a `docker-image` OCI image target for k3s deployment.

Fixes https://os.scoble.me/forgejo/sscoble/hermes-speckl/issues/2

## Problem

The `[all]` extras group in upstream hermes-agent (NousResearch) stopped including the `messaging` dependency group on 2026-05-12 — it switched to lazy-install at runtime. But our Nix-built container images running on k3s have no `pip` available, so lazy installation fails.

Agent logs show:
```
WARNING gateway.run: Discord: discord.py not installed
WARNING gateway.run: No adapter available for discord
```

## Changes

- Added `extraDependencyGroups = ["messaging"]` override on the hermes-agent derivation
- Added `docker-image` OCI image target built with `dockerTools.buildLayeredImage`
- Fixed scoping: `forAllSystems` moved into `let...in` binding for flake-parts compatibility
- Added `flake.lock` (previously missing)

## After Merge

1. Build the OCI image:
   ```
   nix build .#docker-image
   ```
2. Import into containerd:
   ```
   sudo ctr -n k8s.io images import result
   sudo ctr -n k8s.io images tag --force hermes-speckl/sme:latest docker.io/hermes-speckl/sme:latest
   ```
3. Restart the demo concierge:
   ```
   kubectl delete pod -n cust-demo -l agent=concierge
   ```
4. Verify:
   ```
   kubectl logs -n cust-demo -l agent=concierge --tail=5
   # Should show Discord connected, not "discord.py not installed"
   ```

**Verified:** The image builds successfully and includes `discord.py==2.7.1`, `python-telegram-bot==22.6`, and `slack-bolt==1.27.0`. Image imported to containerd and ready for deployment.

Reviewed-on: https://os.scoble.me/forgejo/forgejo/sscoble/hermes-speckl/pulls/3
Reviewed-by: sscoble <sscoble@users.noreply.git>
Co-authored-by: agent-engineering <engineering@marcus.local>
Co-committed-by: agent-engineering <engineering@marcus.local>
This commit is contained in:
engineering Agent 2026-05-14 18:51:48 -07:00 • committed by sscoble
parent e99b08c0da
commit f9071e6f49
2 changed files with 298 additions and 4 deletions

View file

@ -1,10 +1,40 @@
{ inputs, ... }:
let
forAllSystems = inputs.nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ];
in
{
flake.packages = forAllSystems (system:
let
pkgs = inputs.nixpkgs.legacyPackages.${system};
# Hermes agent with messaging platform support (Discord, Slack, Telegram)
hermesMessaging = inputs.hermes-agent.packages.${system}.default.override {
extraDependencyGroups = [ "messaging" ];
};
# OCI container image for k3s deployment
hermesImage = pkgs.dockerTools.buildLayeredImage {
name = "hermes-speckl/sme";
tag = "latest";
created = "now";
contents = [
hermesMessaging
pkgs.cacert
pkgs.tzdata
pkgs.bash
pkgs.coreutils
];
config = {
Entrypoint = [ "/bin/hermes" "gateway" "run" ];
Env = [
"PATH=/bin"
"SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
];
};
};
in {
default = inputs.hermes-agent.packages.${system}.default;
default = hermesMessaging;
docker-image = hermesImage;
speckl-config = pkgs.writeTextDir "speckl-config.yaml" ''
# Speckl SME — generated config
@ -20,7 +50,4 @@
'';
}
);
# Helper: build for the standard platforms
forAllSystems = inputs.nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ];
}