Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
201 commits
Select commit Hold shift + click to select a range
08e2a1a
fix(anthropic): omit tool-streaming beta on MiniMax endpoints
kshitijk4poor Apr 10, 2026
b87d002
fix: add actionable hint for OpenRouter 'no tool endpoints' error
teknium1 Apr 10, 2026
13b3ea6
fix: skip stale Nous pool entry when agent_key is expired
benbarclay Apr 10, 2026
dfde405
fix: sync refreshed OAuth tokens from pool back to auth.json providers
benbarclay Apr 10, 2026
a64d8a8
fix: proactive Codex CLI sync before refresh + retry on failure
benbarclay Apr 10, 2026
4caa635
fix: add auth.json write-back for Codex retry and valid-token early-r…
teknium1 Apr 10, 2026
d416a69
feat: add Codex fast mode toggle (/fast command)
g-guthrie Apr 10, 2026
8394b5d
feat: expand /fast to all OpenAI Priority Processing models (#6960)
teknium1 Apr 10, 2026
bda9aa1
fix(streaming): prevent <think> in prose from suppressing response ou…
jquesnelle Apr 10, 2026
f783986
fix: increase stream read timeout default to 120s, auto-raise for loc…
teknium1 Apr 10, 2026
5075717
fix(telegram): adaptive batch delay for split long messages
teknium1 Apr 10, 2026
0fc0c1c
fix(discord): add text batching to merge split long messages
teknium1 Apr 10, 2026
07148ca
fix(matrix): add text batching to merge split long messages
teknium1 Apr 10, 2026
1723e8e
fix(wecom): add text batching to merge split long messages
teknium1 Apr 10, 2026
f92a0b8
fix(feishu): add adaptive batch delay for split long messages
teknium1 Apr 10, 2026
1ed0049
test: add text batching tests for Discord, Matrix, WeCom, Telegram, F…
teknium1 Apr 10, 2026
8104f40
test: disable text batching in existing adapter tests
teknium1 Apr 10, 2026
0602ff8
fix(docker): use uv for dependency resolution to fix resolution-too-d…
EnGassa Apr 9, 2026
d5023d3
docs: document streaming timeout auto-detection for local LLMs (#6990)
teknium1 Apr 10, 2026
13d7ff3
fix(gateway): bypass text batching when delay is 0 (#6996)
teknium1 Apr 10, 2026
871313a
fix: clear conversation_history after mid-loop compression to prevent…
teknium1 Apr 10, 2026
0848a79
fix(update): always reset on stash conflict — never leave conflict ma…
teknium1 Apr 10, 2026
8779a26
feat: add Anthropic Fast Mode support to /fast command (#7037)
teknium1 Apr 10, 2026
6da952b
fix(gateway): /usage now shows rate limits, cost, and token details b…
teknium1 Apr 10, 2026
9431f82
fix: update Kimi Coding User-Agent to KimiCLI/1.30.0
kshitijk4poor Apr 10, 2026
a758883
fix(cli): add missing os and platform imports in uninstall.py (#7034)
JiayuuWang Apr 10, 2026
45034b7
fix: set retryable=False for message-based auth errors in _classify_b…
kuishou68 Apr 10, 2026
38ccd9e
Harden setup provider flows
Apr 9, 2026
7368854
Refresh OpenRouter model catalog
Apr 9, 2026
38cce22
fix: harden cron script timeout and provider recovery
DomGrieco Apr 9, 2026
95ee453
docs: add cron script timeout and provider recovery documentation
teknium1 Apr 10, 2026
940237c
fix(cli): prevent stale image attachment on text paste and voice input
Apr 10, 2026
a048548
fix(security): require auth for session continuation and warn on miss…
Cafexss Apr 10, 2026
51d826f
fix(gateway): apply /model session overrides so switch persists acros…
kshitijk4poor Apr 9, 2026
6c3565d
fix(terminal): cap foreground timeout to prevent session deadlocks
kshitijk4poor Apr 9, 2026
a420235
fix: reject foreground timeout above cap instead of clamping
teknium1 Apr 10, 2026
eaa21a8
fix(copilot): add missing Copilot-Integration-Id header
kamil-gwozdz Apr 9, 2026
f92298f
fix(acp): populate usage from top-level result fields
Astro-Han Apr 10, 2026
4e78963
fix(acp): remove dead nested usage dict path
teknium1 Apr 10, 2026
1495647
fix(config): allow HERMES_HOME_MODE env var to override _secure_dir()…
ygd58 Apr 10, 2026
1f1f297
feat(environments): unified file sync with change tracking and deletion
alt-glitch Apr 8, 2026
41c233c
test: add reproducible perf benchmark for file sync overhead
alt-glitch Apr 8, 2026
aad40f6
fix(tests): update mocks for file sync changes
alt-glitch Apr 9, 2026
b39ea46
fix(gateway): remove DM thread session seeding to prevent cross-threa…
teknium1 Apr 10, 2026
5b22e61
feat(discord): add allowed_channels whitelist config
Apr 10, 2026
b577697
fix(model_metadata): add xAI Grok context length fallbacks
julientalbot-ergonomia Apr 10, 2026
37bb4f8
fix(dingtalk,api): validate session webhook URL origin, cap webhook c…
aaronlab Apr 10, 2026
738f0ba
fix: align auth-by-message classification with status-code path, deco…
aaronlab Apr 10, 2026
94f5979
fix(approval,mcp): log silent exception handlers, narrow OAuth catche…
aaronlab Apr 10, 2026
9afe178
fix: hidden_div regex bypass with newlines, credential config silent …
aaronlab Apr 10, 2026
30ae68d
fix: apply hidden_div regex newline bypass fix to skills_guard.py
teknium1 Apr 10, 2026
7d426e6
test: update session ID tests to require auth (follow-up to #6930)
teknium1 Apr 10, 2026
a2f46e4
fix: include custom_providers in /model command listings and resolution
donrhmexe Apr 9, 2026
568be71
fix: extract custom_provider_slug() helper, harden gateway test
teknium1 Apr 10, 2026
52bd3bd
mattermost added as deliver to webhook gateway
olafthiele Apr 9, 2026
6d5f607
fix: add all platforms to webhook cross-platform delivery
teknium1 Apr 10, 2026
19292eb
feat(cron): support Discord thread_id in deliver targets
maxyangcn Apr 10, 2026
9aedab0
fix(run_agent): recover primary client on openai transport errors
helix4u Apr 9, 2026
c6ff5e5
fix(bluebubbles): auto-register webhook with BlueBubbles server on co…
mehmoodosman Apr 9, 2026
f4f8b95
fix: improve bluebubbles webhook registration resilience
teknium1 Apr 10, 2026
5a8b5f1
fix(run-agent): rotate credential pool on billing-classified 400s
helix4u Apr 10, 2026
0f597dd
fix: STT provider-model mismatch — whisper-1 fed to faster-whisper (#…
teknium1 Apr 10, 2026
8dd738c
fix(gateway): remap all paths in system service unit to target user's…
Tranquil-Flow Apr 10, 2026
6852806
fix(streaming): update stale-stream timer during Anthropic native str…
teknium1 Apr 10, 2026
9a0dfb5
fix(gateway): scope /yolo to the active session
tesseracttars-creator Apr 10, 2026
04baab5
fix(mcp): combine content and structuredContent when both present (#7…
teknium1 Apr 10, 2026
96c0600
fix: remove 115 verified dead code symbols across 46 production files
alt-glitch Apr 10, 2026
cff9b7f
fix: restore 6 tests that tested live code but used deleted helpers
alt-glitch Apr 10, 2026
f63cc3c
chore: remove spec-dead-code.md from tracked files
alt-glitch Apr 10, 2026
c6c7697
fix: clean up stale test references to removed attributes
alt-glitch Apr 10, 2026
9574858
fix: update 6 test files broken by dead code removal
teknium1 Apr 10, 2026
437feab
fix(gateway): launchd_stop uses bootout so KeepAlive doesn't respawn …
teknium1 Apr 10, 2026
1bcc87a
fix(acp): declare session load and resume capabilities in initialize …
luyao618 Apr 10, 2026
fbfa7c2
docs: add cron troubleshooting guide
TumCucTom Apr 9, 2026
af7d809
fix: correct inaccuracies and add sidebar entry for cron troubleshoot…
teknium1 Apr 10, 2026
4f2f09a
fix(gateway): avoid false failure reactions on restart cancellation
bobashopcashier Apr 8, 2026
429da6c
fix(gateway): route /background through active-session bypass
Tranquil-Flow Apr 10, 2026
bb3a4fc
test(gateway): add /background to active-session bypass tests
Tranquil-Flow Apr 10, 2026
96f9b91
fix(gateway): replace assertions with proper error handling in Telegr…
Cafexss Apr 10, 2026
b1e2b5e
fix(telegram): harden HTTPX request pools during reconnect
borischou Apr 10, 2026
5dea7e1
fix(gateway): prevent duplicate messages on no-message-id platforms
KUSH42 Apr 9, 2026
9bb8cb8
fix(tests): repair three pre-existing gateway test failures
KUSH42 Apr 9, 2026
00dd5cc
fix(gateway): implement platform-aware PID termination
Apr 9, 2026
c8e4dcf
fix: prevent duplicate completion notifications on process kill (#7124)
teknium1 Apr 10, 2026
0b143f2
fix(gateway): validate Slack image downloads before caching
Tranquil-Flow Apr 10, 2026
f4c7086
fix(api-server): share one Docker container across all API conversati…
teknium1 Apr 10, 2026
7148096
fix(security): prevent SSRF redirect bypass in Slack adapter
Dusk1e Apr 10, 2026
7663c98
fix: make safe_url_for_log public, add SSRF redirect guards to base.p…
teknium1 Apr 10, 2026
e683c9d
fix(security): enforce path boundary checks in skill manager operations
Junass1 Apr 10, 2026
d716460
feat(auth): add is_provider_explicitly_configured() helper
Apr 10, 2026
f3fb3ed
fix(auth): gate Claude Code credential seeding behind explicit provid…
Apr 10, 2026
419b719
fix(auth): make 'auth remove' for claude_code prevent re-seeding
Apr 10, 2026
5a1cce5
fix(auxiliary): skip anthropic in fallback chain when not explicitly …
Apr 10, 2026
aedf6c7
security(approval): close 4 pattern gaps found by source-grounded audit
win4r Apr 10, 2026
2629927
fix(feishu): wrap image bytes in BytesIO before uploading to lark SDK
Cygra Apr 10, 2026
e376a9b
feat(telegram): support custom base_url for credential proxy
spniyant Apr 9, 2026
74e883c
fix(cli): make /status show gateway-style session status
xinbenlv Apr 10, 2026
cc12ab8
fix(matrix): remove eyes reaction on processing complete
fxfitz Apr 9, 2026
58413c4
test: update Matrix reaction tests for new _send_reaction return type
fxfitz Apr 10, 2026
21bb254
fix(matrix): log redact failures and add missing reaction test cases
fxfitz Apr 10, 2026
76a1e6e
feat(discord): add channel_skill_bindings for auto-loading skills per…
teknium1 Apr 10, 2026
49da1ff
test(discord): add tests for channel_skill_bindings resolution
teknium1 Apr 10, 2026
f3ae1d7
fix: flush stdin after curses/terminal menus to prevent escape sequen…
teknium1 Apr 10, 2026
6d2fa03
fix: UTF-8 config encoding, pairing hint, credential_pool key, header…
teknium1 Apr 10, 2026
0e315a6
fix(telegram): use valid reaction emojis for processing completion (#…
teknium1 Apr 10, 2026
5fc5ced
fix: add Alibaba/DashScope rate-limit pattern to error classifier
teknium1 Apr 10, 2026
fd3e855
fix: pass config_context_length to switch_model context compressor
rarf Apr 9, 2026
49bba10
fix: opencode-go missing from /model list and improve HERMES_OVERLAYS…
rarf Apr 9, 2026
0cdf523
fix: always show model selection menu for custom providers
r266-tech Apr 10, 2026
e3b395e
test: add regression tests for custom provider model switching
r266-tech Apr 10, 2026
1662b7f
fix(test): correct mock target for fetch_api_models in custom provide…
r266-tech Apr 10, 2026
fd5cc6e
fix(model): normalize native provider-prefixed model ids
bobashopcashier Apr 8, 2026
b730c29
fix(model): normalize direct provider ids in auxiliary routing
bobashopcashier Apr 10, 2026
916fbf3
fix(model): tighten direct-provider fallback normalization
bobashopcashier Apr 10, 2026
4a65c9c
fix: profile paths broken in Docker — profiles go to /root/.hermes in…
teknium1 Apr 10, 2026
5b63bf7
feat(gateway): add native Weixin/WeChat support via iLink Bot API
bravohenry Apr 10, 2026
be4f049
fix: salvage follow-ups for Weixin adapter (#6747)
teknium1 Apr 10, 2026
7cec784
fix: complete Weixin platform parity audit — 16 missing integration p…
teknium1 Apr 10, 2026
5b8beb0
fix(gateway): handle provider command without config
bobashopcashier Apr 10, 2026
970192f
feat(gateway): add fast mode support to gateway chats
Apr 10, 2026
7e60b09
fix: add _session_model_overrides to test runner fixture
teknium1 Apr 10, 2026
f72faf1
fix: fall back to default certs when CA bundle path doesn't exist (#7…
teknium1 Apr 10, 2026
a093eb4
fix: propagate child activity to parent during delegate_task (#7295)
teknium1 Apr 10, 2026
7e28b7b
fix: parallelize skills browse/search to prevent hanging (#7301)
teknium1 Apr 10, 2026
71036a7
fix: handle UnicodeEncodeError with ASCII codec (#6843)
Apr 9, 2026
2c99b4e
fix(unicode): sanitize surrogate metadata and allow two-pass retry
Apr 10, 2026
c6e1add
fix(agent): preserve quoted @file references with spaces
WAXLYY Apr 9, 2026
37a1c75
fix(browser): hardening — dead code, caching, scroll perf, security, …
kshitijk4poor Apr 10, 2026
360b21c
fix(gateway): reject file paths in get_command() + file-drop tests (#…
teknium1 Apr 10, 2026
0bea603
fix: handle NoneType request_overrides in fast_mode check (#7350)
0xbyt4 Apr 10, 2026
f83e86d
feat(cli): restore live per-tool elapsed timer in TUI spinner (#7359)
teknium1 Apr 10, 2026
4fb42d0
fix: per-profile subprocess HOME isolation (#4426) (#7357)
teknium1 Apr 10, 2026
6c11544
fix(delegate): sync self.base_url with client_kwargs after credential…
Tranquil-Flow Apr 10, 2026
7ccdb74
fix(delegate): make max_concurrent_children configurable + error on e…
Apr 10, 2026
363d5d5
test: update schema assertion after maxItems removal
teknium1 Apr 10, 2026
f07b35a
fix: use raw docstring to suppress invalid escape sequence warning
0xbyt4 Apr 10, 2026
8bcb8b8
feat(providers): add native xAI provider
Julientalbot Apr 10, 2026
03f23f1
feat: multi-agent Discord filtering — skip messages addressed to othe…
shannonsands Apr 10, 2026
496e378
fix: resolve overlay provider slug mismatch in /model picker (#7373)
teknium1 Apr 10, 2026
ea81aa2
fix: guard api_kwargs in except handler to prevent UnboundLocalError …
teknium1 Apr 10, 2026
2b0912a
fix(install): handle Playwright deps correctly on non-apt systems
Tranquil-Flow Apr 10, 2026
8254b82
fix(docker): --init for zombie reaping + sleep infinity for idle-base…
Apr 10, 2026
e1167c5
fix(deps): add socks extra to httpx for SOCKS proxy support
duerzy Apr 10, 2026
e8f16f7
fix(docker): add missing skins/plans/workspace dirs to entrypoint
teknium1 Apr 10, 2026
d8cd797
fix(feishu): register group chat member event handlers
ygd58 Apr 10, 2026
3e24ba1
feat(matrix): add MATRIX_DM_MENTION_THREADS env var
fxfitz Apr 10, 2026
6f63ba9
fix(mcp): fall back when SIGKILL is unavailable
Junass1 Apr 9, 2026
c1f832a
fix(tools): guard against ValueError on int() env var and header parsing
Cafexss Apr 10, 2026
475cbce
fix(aux): honor api_mode for custom auxiliary endpoints
iacker Apr 9, 2026
0e939af
fix(patch): harden V4A patch parser and fuzzy match — 9 correctness bugs
KUSH42 Apr 9, 2026
a4fc38c
test: remove dead TestResolveForcedProvider tests (function doesn't e…
teknium1 Apr 10, 2026
c5ab760
fix(cron): missing field init, unnecessary save, and shutdown cleanup
Cafexss Apr 10, 2026
2a6cbf5
fix(cron): prevent silent data loss by raising exceptions on unrecove…
devorun Apr 9, 2026
989b950
fix(security): enforce API_SERVER_KEY for non-loopback binding
entropidelic Apr 10, 2026
5b42aec
feat(agent): add AIAgent.close() for subprocess cleanup
pefontana Apr 10, 2026
fbe2835
fix(gateway): call agent.close() on session end to prevent zombies
pefontana Apr 10, 2026
672cc80
fix(delegate): close child agent after delegation completes
pefontana Apr 10, 2026
8414f41
test: add zombie process cleanup tests
pefontana Apr 10, 2026
f00dd31
fix(gateway): guard _agent_cache_lock access in reset handler
pefontana Apr 10, 2026
9555a0c
fix(gateway): look up expired agents in _agent_cache, add global kill…
pefontana Apr 10, 2026
7033dbf
test(e2e): add Discord e2e integration tests
dsocolobsky Apr 6, 2026
7956563
refactor(e2e): unify Telegram and Discord e2e tests into parametrized…
dsocolobsky Apr 7, 2026
dab5ec8
test(e2e): add Slack to parametrized e2e platform tests
dsocolobsky Apr 7, 2026
e8034e2
fix(gateway): replace os.environ session state with contextvars for c…
0xFrank-eth Apr 10, 2026
baddb6f
fix(gateway): derive channel directory platforms from enum instead of…
teknium1 Apr 11, 2026
9a0c44f
fix(nix): gate matrix extra to Linux in [all] profile (#7461)
alt-glitch Apr 11, 2026
9924229
fix(api): send tool progress as custom SSE event to prevent model cor…
Apr 10, 2026
842e669
fix: activate fallback provider on repeated empty responses + user-vi…
teknium1 Apr 11, 2026
fe7e6c1
feat: add ContextEngine ABC, refactor ContextCompressor to inherit fr…
stephenschoettler Apr 7, 2026
92382fb
feat: wire context engine plugin slot into agent and plugin system
stephenschoettler Apr 7, 2026
5d8dd62
feat: wire context engine tools, session lifecycle, and tool dispatch
stephenschoettler Apr 7, 2026
3fe6938
fix: robust context engine interface — config selection, plugin disco…
teknium1 Apr 8, 2026
436dfd5
fix: no auto-activation + unified hermes plugins UI with provider cat…
teknium1 Apr 11, 2026
79198eb
docs: context engine plugin system + unified hermes plugins UI
teknium1 Apr 11, 2026
bff6485
perf(daytona): bulk upload files in single HTTP call
Rafa-Ross Apr 10, 2026
ac30abd
fix(config): bridge container resource settings to env vars
Rafa-Ross Apr 10, 2026
223a062
fix(daytona): use logger.warning instead of warnings.warn for disk cap
Rafa-Ross Apr 10, 2026
97bb64d
test(file_sync): add tests for bulk_upload_fn callback
Rafa-Ross Apr 10, 2026
830040f
fix: remove unused BulkUploadFn import from daytona.py
Rafa-Ross Apr 11, 2026
a8fd725
feat(gateway): WSL-aware gateway with smart systemd detection (#7510)
teknium1 Apr 11, 2026
1850747
refactor(matrix): swap matrix-nio for mautrix-python dependency
alt-glitch Apr 11, 2026
8053d48
refactor(matrix): rewrite adapter from matrix-nio to mautrix-python
alt-glitch Apr 11, 2026
417e28f
test(matrix): update all test mocks for mautrix-python API
alt-glitch Apr 11, 2026
d5be23a
docs(matrix): update all references from matrix-nio to mautrix
alt-glitch Apr 11, 2026
1f3f120
fix(matrix): persist E2EE crypto store and fix decrypted event dedup
alt-glitch Apr 11, 2026
bc8b938
refactor(matrix): simplify adapter after code review
alt-glitch Apr 11, 2026
5d3332d
fix(matrix): close leaked sessions on connect failure + HMAC-sign pic…
alt-glitch Apr 11, 2026
be06db7
fix(matrix): ignore m.notice messages to prevent bot-to-bot loops
alt-glitch Apr 11, 2026
be9198f
fix: guard mautrix imports for gateway-safe fallback + fix test isola…
teknium1 Apr 11, 2026
718e8ad
feat(delegation): add configurable reasoning_effort for subagents
hermes-agent-dhabibi Apr 9, 2026
c1af614
fix: wrap copilot Responses-API models in CodexAuxiliaryClient for au…
hermes-agent-dhabibi Apr 10, 2026
fc06a01
fix(tools): remove dead code in _is_likely_binary and harden _check_l…
luyao618 Apr 10, 2026
d6c2ad7
fix(gateway): make compress responses truthful
bobashopcashier Apr 8, 2026
1ffd92c
fix(gateway): make manual compression feedback truthful
bobashopcashier Apr 10, 2026
2410324
fix: don't evict cached agent on failed runs — prevents MCP restart l…
teknium1 Apr 11, 2026
3163731
fix(gateway): drain in-flight work before restart
bobashopcashier Apr 10, 2026
c4ccb32
fix(gateway): tolerate partial runner construction
bobashopcashier Apr 10, 2026
a55c044
fix(gateway): self-request service restarts when invoked in-process
bobashopcashier Apr 10, 2026
ecfae98
fix(gateway): address restart review feedback
bobashopcashier Apr 10, 2026
9605195
fix: restore agent.close() cleanup and correct /restart category
teknium1 Apr 11, 2026
b2b9e51
fix(anthropic-oauth): sanitize user messages and tool results at sing…
jeanclawd99 Apr 11, 2026
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: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ COPY . /opt/hermes
WORKDIR /opt/hermes

# Install Python and Node dependencies in one layer, no cache
RUN pip install --no-cache-dir -e ".[all]" --break-system-packages && \
RUN pip install --no-cache-dir uv --break-system-packages && \
uv pip install --system --break-system-packages --no-cache -e ".[all]" && \
npm install --prefer-offline --no-audit && \
npx playwright install --with-deps chromium --only-shell && \
cd /opt/hermes/scripts/whatsapp-bridge && \
Expand Down
16 changes: 9 additions & 7 deletions acp_adapter/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
SessionCapabilities,
SessionForkCapabilities,
SessionListCapabilities,
SessionResumeCapabilities,
SessionInfo,
TextContentBlock,
UnstructuredCommandInput,
Expand Down Expand Up @@ -245,9 +246,11 @@ async def initialize(
protocol_version=acp.PROTOCOL_VERSION,
agent_info=Implementation(name="hermes-agent", version=HERMES_VERSION),
agent_capabilities=AgentCapabilities(
load_session=True,
session_capabilities=SessionCapabilities(
fork=SessionForkCapabilities(),
list=SessionListCapabilities(),
resume=SessionResumeCapabilities(),
),
),
auth_methods=auth_methods,
Expand Down Expand Up @@ -451,14 +454,13 @@ def _run_agent() -> dict:
await conn.session_update(session_id, update)

usage = None
usage_data = result.get("usage")
if usage_data and isinstance(usage_data, dict):
if any(result.get(key) is not None for key in ("prompt_tokens", "completion_tokens", "total_tokens")):
usage = Usage(
input_tokens=usage_data.get("prompt_tokens", 0),
output_tokens=usage_data.get("completion_tokens", 0),
total_tokens=usage_data.get("total_tokens", 0),
thought_tokens=usage_data.get("reasoning_tokens"),
cached_read_tokens=usage_data.get("cached_tokens"),
input_tokens=result.get("prompt_tokens", 0),
output_tokens=result.get("completion_tokens", 0),
total_tokens=result.get("total_tokens", 0),
thought_tokens=result.get("reasoning_tokens"),
cached_read_tokens=result.get("cache_read_tokens"),
)

stop_reason = "cancelled" if state.cancel_event and state.cancel_event.is_set() else "end_turn"
Expand Down
Loading