Move provider adapters (anthropic, bedrock, azure), platform adapters (telegram, slack, discord, feishu, dingtalk, matrix), and terminal backends (modal, daytona) out of core into plugins/ workspace members. Core references them via the plugin registries (get_provider_namespace / get_provider_service / get_tool_provider / get_credential_pool_hook) instead of direct imports. - Provider/platform/terminal adapters relocated under plugins/; pyproject extras reference workspace members; nix variants aggregate per-platform extras. - Anthropic credential discovery + OAuth-masquerade guard live in the plugin's credential_pool_hook; browser-open guarded by _can_open_graphical_browser. - Vercel AI Gateway + Vercel Sandbox removed (upstream deletion); get_bedrock_model_ids removed (replaced by bedrock_model_ids_or_none + discover_bedrock_models). - Terminal backends resolve ModalEnvironment / DaytonaEnvironment lazily from the plugin registry. - uv.lock regenerated against the pluginified workspace. Plugin test suites updated for the relocation: imports point at hermes_agent_<plat>.adapter, caplog logger-name filters and monkeypatch targets use the new module paths, and credential/rollback tests patch registries.get_provider_service rather than the removed agent.*_adapter modules. Verified: zero dead imports of relocated modules in core (import smoke test + rename-map grep); nix develop succeeds; targeted plugin suites green (bedrock, anthropic-auxiliary, matrix, dingtalk, feishu, credential_pool, switch_model_rollback). Remaining full-suite failures are pre-existing on the pre-merge tree (telegram setUpModule __code__) or environmental (voice/media/ PTY/network-dependent), not introduced here.
63 lines
2.0 KiB
Nix
63 lines
2.0 KiB
Nix
# nix/packages.nix — Hermes Agent package built with uv2nix
|
|
{ inputs, ... }:
|
|
{
|
|
perSystem =
|
|
{ pkgs, lib, inputs', ... }:
|
|
let
|
|
hermesAgent = pkgs.callPackage ./hermes-agent.nix {
|
|
inherit (inputs) uv2nix pyproject-nix pyproject-build-systems;
|
|
npm-lockfile-fix = inputs'.npm-lockfile-fix.packages.default;
|
|
# Only embed clean revs — dirtyRev doesn't represent any upstream
|
|
# commit, so comparing it would always claim "update available".
|
|
rev = inputs.self.rev or null;
|
|
};
|
|
in
|
|
{
|
|
packages = {
|
|
default = hermesAgent;
|
|
|
|
# Ships discord.py + python-telegram-bot + slack-sdk so a plain
|
|
# `nix profile install .#messaging` connects to Discord/Telegram/Slack
|
|
# on first run — lazy-install can't write to the read-only /nix/store.
|
|
# (Pluginify: the old `messaging` extra is now per-platform workspace
|
|
# members, so this aggregates discord/telegram/slack explicitly.)
|
|
messaging = hermesAgent.override {
|
|
extraDependencyGroups = [ "discord" "telegram" "slack" ];
|
|
};
|
|
|
|
# All platform-portable optional integrations pre-built.
|
|
# matrix is Linux-only (oqs/liboqs lacks aarch64-darwin wheels).
|
|
full = hermesAgent.override {
|
|
extraDependencyGroups = [
|
|
"anthropic"
|
|
"azure-identity"
|
|
"bedrock"
|
|
"daytona"
|
|
"dingtalk"
|
|
"discord"
|
|
"edge-tts"
|
|
"exa"
|
|
"fal"
|
|
"feishu"
|
|
"firecrawl"
|
|
"hindsight"
|
|
"honcho"
|
|
"modal"
|
|
"parallel-web"
|
|
"slack"
|
|
"telegram"
|
|
"tts-premium"
|
|
"voice"
|
|
] ++ lib.optionals pkgs.stdenv.isLinux [ "matrix" ];
|
|
};
|
|
|
|
tui = hermesAgent.hermesTui;
|
|
web = hermesAgent.hermesWeb;
|
|
|
|
fix-lockfiles = hermesAgent.hermesNpmLib.mkFixLockfiles {
|
|
packages = [ hermesAgent.hermesTui hermesAgent.hermesWeb ];
|
|
};
|
|
};
|
|
};
|
|
}
|