Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,3 @@ acp_registry/
.gitattributes
.hadolint.yaml
.mailmap

# Top-level LICENSE (not matched by *.md); not needed inside the container
LICENSE
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ locales = ["locales/*.yaml"]
# entry; tests/test_packaging_metadata.py enforces an entry per optional-mcps/<name>.
"optional-mcps/linear" = ["optional-mcps/linear/manifest.yaml"]
"optional-mcps/n8n" = ["optional-mcps/n8n/manifest.yaml"]
"optional-mcps/unreal-engine" = ["optional-mcps/unreal-engine/manifest.yaml"]

[tool.setuptools.package-data]
hermes_cli = ["web_dist/**/*", "tui_dist/**/*", "scripts/install.sh", "scripts/install.ps1"]
Expand Down
5 changes: 5 additions & 0 deletions tests/hermes_cli/test_doctor.py
Original file line number Diff line number Diff line change
Expand Up @@ -1409,6 +1409,11 @@ def test_no_drift_when_ghost_absent(self, monkeypatch, tmp_path):
assert "shadows" not in out


@pytest.mark.xfail(
reason="Fork's hermes_cli/doctor.py diverged from upstream (evolved toward "
"managed-scope) and does not implement upstream's npm-audit-per-workspace check "
"this test asserts. Remove this marker if the fork ports that doctor surface.",
)
def test_npm_audit_fix_hint_avoids_crashing_workspace_flag(monkeypatch, tmp_path):
"""`hermes doctor` must not hand users `npm audit fix --workspace <name>`:
that exact form crashes npm with "Cannot read properties of null (reading
Expand Down
7 changes: 7 additions & 0 deletions tests/test_dashboard_sidecar_close_on_disconnect.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import re
from pathlib import Path

import pytest

CHAT_SIDEBAR = Path(__file__).resolve().parent.parent / "web/src/components/ChatSidebar.tsx"


Expand All @@ -13,6 +15,11 @@ def test_sidecar_session_create_requests_close_on_disconnect():
assert re.search(r"close_on_disconnect:\s*true", call.group(1))


@pytest.mark.xfail(
reason="Fork's web/src/components/ChatSidebar.tsx diverged from upstream (fork added a "
"reasoning-effort picker / session switcher) and has no dashboard profile switcher, so its "
"session.create has no profile to scope. Remove this marker if the fork adds web profile scoping.",
)
def test_sidecar_session_create_scopes_profile():
"""The sidecar must pass the dashboard's selected profile so model/credential
info matches the PTY child under profile-scoped chat."""
Expand Down
9 changes: 8 additions & 1 deletion website/static/api/model-catalog.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 1,
"updated_at": "2026-06-16T18:04:33Z",
"updated_at": "2026-06-24T23:50:35Z",
"metadata": {
"source": "hermes-agent repo",
"docs": "https://hermes-agent.nousresearch.com/docs/reference/model-catalog"
Expand All @@ -12,6 +12,10 @@
"note": "Descriptions drive picker badges. Live /api/v1/models filters curated ids by tool-calling support and free pricing."
},
"models": [
{
"id": "anthropic/claude-fable-5",
"description": ""
},
{
"id": "anthropic/claude-opus-4.8",
"description": ""
Expand Down Expand Up @@ -152,6 +156,9 @@
"note": "Free-tier gating is determined live via Portal pricing (partition_nous_models_by_tier), not this manifest."
},
"models": [
{
"id": "anthropic/claude-fable-5"
},
{
"id": "anthropic/claude-opus-4.8"
},
Expand Down
Loading