Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
6667 commits
Select commit Hold shift + click to select a range
346e567
🐛 fix(dashboard): offload cron profile scans
BlackishGreen33 Jun 13, 2026
49fa04a
🐛 fix(dashboard): use managed cron threadpool
BlackishGreen33 Jun 13, 2026
7d0ddbb
fix(dashboard): cache gateway PID status probes
0disoft Jun 27, 2026
492be28
fix(web): bound dashboard action log tails
ooiuuii Jul 4, 2026
d7e4d94
perf(dashboard): recursive-CTE descendant lookup in _session_latest_d…
sebastianlutycz Jul 8, 2026
24d5bda
fix(dashboard): run GET /api/sessions session-DB read off the event loop
0-CYBERDYNE-SYSTEMS-0 Jul 8, 2026
206c042
chore: AUTHOR_MAP entries for salvaged contributors (#53511/#53966/#3…
kshitijk4poor Jul 8, 2026
1e2ad17
fix: descendant CTE must dedup (UNION) to survive parent-chain cycles
kshitijk4poor Jul 8, 2026
664878b
fix: guard /api/status active count against missing state.db
kshitijk4poor Jul 8, 2026
c95cf31
test: patch the cached PID probe name in profile-unification status t…
kshitijk4poor Jul 8, 2026
0d5549a
fix(api): add pagination to GET /api/sessions/{id}/messages
mahdiwafy Jul 7, 2026
4df16c4
Refresh on upstream/main: resolve conflicts (no behavior change)
Jul 5, 2026
22eb1af
perf(state): add compact_rows to skip system_prompt blob in session l…
CodeForgeNet Jun 16, 2026
4f220fc
fix: follow-up for salvaged #60347/#43653/#47437
kshitijk4poor Jul 8, 2026
7570bb4
fix: offset-without-limit was silently ignored in get_messages
kshitijk4poor Jul 8, 2026
7a25017
test: accept compact_rows kwarg in tui_gateway session fakes
kshitijk4poor Jul 8, 2026
31e39de
test: expect compact_rows in the read-only status-count fake
kshitijk4poor Jul 8, 2026
0569a63
fix(agent): guard response.text access in _summarize_api_error agains…
gauravsaxena1997 Jul 8, 2026
1792a3a
chore: add gauravsaxena1997 to AUTHOR_MAP (PR #59868 salvage)
kshitijk4poor Jul 8, 2026
74e28f7
style(tests): merge import blocks in test_summarize_api_error
kshitijk4poor Jul 8, 2026
be1346c
fix(gateway): reload fallback_providers on live agent create/reuse
HexLab98 Jul 8, 2026
e721ad8
test(gateway): cover fallback_providers reload for live sessions
HexLab98 Jul 8, 2026
0a01b20
fix(gateway): harden fallback-chain refresh from review findings
kshitijk4poor Jul 8, 2026
e21ba91
perf(skills): speed up snapshot prompt builds
dexhunter Jul 7, 2026
449706c
chore: add dexhunter to AUTHOR_MAP (PR #60339 salvage)
kshitijk4poor Jul 8, 2026
2a29331
fix: run CLI new-session memory flush off-thread
Tosko4 Jul 5, 2026
d8bc4f2
fix: serialize /new end→switch boundary on the memory manager worker
kshitijk4poor Jul 8, 2026
e0ed5dc
refactor: address Phase-2 review findings on /new boundary handoff
kshitijk4poor Jul 8, 2026
6d65210
feat(desktop): group tool calls across text-less assistant messages
OutThisLife Jul 8, 2026
fac8551
Merge pull request #61147 from NousResearch/bb/desktop-tool-window-merge
OutThisLife Jul 8, 2026
39d0945
feat(desktop): ts-ify everything
ethernet8023 Jun 29, 2026
7a65530
fix(js): set @types/node to node 22, what's required in "engines"
ethernet8023 Jul 3, 2026
56a8e81
cleanup(desktop): `npm run fix` for fmtting
ethernet8023 Jul 8, 2026
513dba4
chore(models): drop x-ai/grok-4.3 from OpenRouter/Nous curated lists …
teknium1 Jul 9, 2026
bf913ab
fix(desktop): stop using tsx to boot Electron main in dev
OutThisLife Jul 9, 2026
88a58ff
Merge pull request #61277 from NousResearch/bb/fix-desktop-tsx-electr…
OutThisLife Jul 9, 2026
3e24b16
fix(dashboard): support mobile OAuth login
shannonsands Jul 9, 2026
ad8f103
i18n(dashboard): translate OAuth copy-code strings in all locales
shannonsands Jul 9, 2026
4734071
test(dashboard): assert server still gates OAuth endpoints without co…
kshitijk4poor Jul 9, 2026
32a0f9e
fix(model_metadata): avoid str(tools) token estimate stalls
infinitycrew39 Jul 8, 2026
f4d5cfd
test(model_metadata): cache tools schema token estimate
infinitycrew39 Jul 8, 2026
55dbc3f
fix(model_metadata): bound the tools-token estimate cache
kshitijk4poor Jul 9, 2026
cbf6853
fix(gateway): sync HERMES_HOME before refreshing system systemd units
HexLab98 Jul 8, 2026
8f18f6c
test(gateway): cover sudo system-unit refresh adopting HERMES_HOME
HexLab98 Jul 8, 2026
d54a8f7
refactor(gateway): funnel HERMES_HOME sync through a single chokepoint
kshitijk4poor Jul 9, 2026
3fe7f6d
fix: preserve fallback switch notice on successful fallback
Umi4Life Jun 16, 2026
a4ba8c9
chore: map poowis2011@hotmail.com → Umi4Life for PR #47377 salvage
kshitijk4poor Jul 9, 2026
0b2b08d
fix(dashboard): recover mobile chat reconnect
shannonsands Jul 9, 2026
3e88cae
fix(dashboard): harden PTY input tracker against escape sequences
shannonsands Jul 9, 2026
6f42bf3
fix(dashboard): harden PTY reconnect race, wedged-connect recovery, I…
kshitijk4poor Jul 9, 2026
c889941
fix(model_metadata): cache detect_local_server_type result for proces…
uzaylisak May 21, 2026
91ece5c
perf(model-metadata): resolve localhost to IPv4 in detect_local_serve…
rodboev Jun 2, 2026
9a18a2d
fix(agent): probe localhost via IPv4 for LM Studio detection
rodboev Jul 9, 2026
c454d32
fix(model_tools): honor model.context_length to skip OpenRouter probe…
Jun 22, 2026
040e30a
perf(model_metadata): cache ollama /api/show probe + normalize contex…
kshitijk4poor Jul 9, 2026
20cb385
fix(model_metadata): widen localhost->IPv4 rewrite to all sibling pro…
kshitijk4poor Jul 9, 2026
f556edc
fix(model_metadata): address Phase-2 review findings on probe caches
kshitijk4poor Jul 9, 2026
750c131
fix(caching): include Kimi/Moonshot in OpenRouter prompt cache policy…
zccyman Jul 8, 2026
fbbb841
test(caching): pin Kimi/Moonshot OpenRouter cache policy (#25970)
kshitijk4poor Jul 8, 2026
1d689e1
fix(caching): use canonical Kimi-family matcher in cache policy
kshitijk4poor Jul 8, 2026
74609f9
fix(dashboard): run residual cron profile I/O off the event loop
kshitijk4poor Jul 9, 2026
8cfada0
test(dashboard): pin cron fire + blueprint handlers off the event loop
kshitijk4poor Jul 9, 2026
d928017
fix(dashboard): validate HERMES_WEB_DIST before startup
kshitijk4poor Jul 9, 2026
4ed910c
fix(cli): mock systemd preflight in gateway service tests for non-sys…
Tranquil-Flow Apr 24, 2026
724ab90
perf: avoid broad message prep deepcopies
pedrommaiaa Jun 5, 2026
63ddd02
refactor(salvage): scope #40632 to the two live copy-on-write sites
kshitijk4poor Jul 8, 2026
e7648d5
test: restore gemma-3-27b to keep-extra_content coverage
kshitijk4poor Jul 8, 2026
f5bc18f
fix: write expanded HERMES_WEB_DIST back for web_server's raw read
kshitijk4poor Jul 9, 2026
cb79518
Merge pull request #61385 from kshitijk4poor/fix/dashboard-residual-c…
kshitijk4poor Jul 9, 2026
3ed7c8a
Merge pull request #61388 from kshitijk4poor/fix/dashboard-validate-w…
kshitijk4poor Jul 9, 2026
1e16120
fix(reasoning): add deepseek-v4-flash and deepseek-v4-pro to reasonin…
liuhao1024 Jul 7, 2026
411d599
test: fold deepseek-v4 cases into canonical reasoning-floor test, dro…
kshitijk4poor Jul 9, 2026
5a42491
perf(skills): cache skill discovery results by directory mtime
nankingjing Jul 6, 2026
9e9608e
fix: harden skill-discovery cache signature + TTL
kshitijk4poor Jul 9, 2026
cbdf87b
fix: return per-call copies from the skill-discovery cache
kshitijk4poor Jul 9, 2026
709da84
feat(gateway): attach MEDIA: caption to the media bubble on standalon…
kshitijk4poor Jul 9, 2026
73b611a
Merge pull request #61415 from kshitijk4poor/fix/media-tag-caption
kshitijk4poor Jul 9, 2026
d23990f
fix(gateway): offload channel directory session scans
embwl0x Jul 8, 2026
daedf4f
chore: AUTHOR_MAP entry for embwl0x (PR #60810 salvage)
teknium1 Jul 8, 2026
3a1a3c7
add 5.6 (#61578)
rob-maron Jul 9, 2026
bd767b5
feat(openai): complete gpt-5.6 registration — context, codex catalog,…
kshitijk4poor Jul 9, 2026
db117af
review fixes: openai-api pricing route normalization, GA pricing_vers…
kshitijk4poor Jul 9, 2026
a3828a9
feat(openai): cover gpt-5.6 -pro variants (PR #61587 complement)
kshitijk4poor Jul 9, 2026
7efee32
pro variants
rob-maron Jul 9, 2026
5da7b23
chore(catalog): regenerate model-catalog.json from source
kshitijk4poor Jul 9, 2026
4af484d
feat(openai): complete gpt-5.6 E2E — codex catalog + 272K compaction …
kshitijk4poor Jul 9, 2026
111544d
test(codex-picker): raise max_models so count invariant survives cata…
kshitijk4poor Jul 9, 2026
5829fe1
fix(kanban): failure diagnostics exempt done/archived tasks
OutThisLife Jul 9, 2026
e87c495
fix(kanban): spawn workers headless — TUI can never eat a worker run
OutThisLife Jul 9, 2026
aea570d
fix(kanban): clear failure/crash diagnostics while a retry is in flight
OutThisLife Jul 9, 2026
77db9d6
fix(kanban): explicit re-queue bypasses the recent-success respawn guard
OutThisLife Jul 9, 2026
b06e2f8
fix(kanban): no-TTY gate in _wants_tui_early — the actual worker-cras…
OutThisLife Jul 9, 2026
8e3f953
Merge pull request #61649 from NousResearch/bb/kanban-worker-headless
OutThisLife Jul 9, 2026
fe25806
fix(config): retain last-known-good config when config.yaml fails to …
teknium1 Jul 9, 2026
a23d507
fix(agent): stop switch_model from pairing new provider with stale ba…
JoaoMarcos44 Jul 8, 2026
1f57ed2
fix(export): escape tool-call name in HTML session export
Adolanium Jul 9, 2026
501616e
fix(cli): set HERMES_YOLO_MODE before plugin discovery at startup
bytesnail Jul 7, 2026
d2e64fc
fix(cli): widen --yolo env guarantee to the _prepare_agent_startup ch…
teknium1 Jul 9, 2026
c71d19c
fix(cron): id-less job no longer freezes the whole scheduler
Jul 9, 2026
8e2ce43
fix(cron): non-dict schedule no longer freezes the whole scheduler
necoweb3 Jul 9, 2026
26f040e
fix(cron): malformed next_run_at no longer freezes the scheduler
necoweb3 Jul 9, 2026
10c0d9b
fix(cron): contain any per-job exception in the due scan; harden as a…
teknium1 Jul 10, 2026
b298fd5
test(cli): deflake --accept-hooks position test — one driver, one imp…
teknium1 Jul 10, 2026
549b87c
fix(gateway): prevent hygiene compression from destroying archived tr…
AlexFucuson9 Jul 9, 2026
9cbac64
test(gateway): pin in-place compaction skipping the destructive rewrite
teknium1 Jul 9, 2026
79f1274
chore: AUTHOR_MAP entry for AlexFucuson9 (PR #61209 salvage)
teknium1 Jul 10, 2026
b5226ca
fix(memory): share one SQLite connection per holographic store database
adambiggs Jun 10, 2026
a801046
fix(memory): resolve() the shared-connection registry key; symlink test
teknium1 Jul 10, 2026
0a4b4d6
fix(agent): reapply provider headers after model switch
AlexFucuson9 Jul 9, 2026
c75789f
test: regression coverage for header reapplication on model switch
teknium1 Jul 10, 2026
bd16395
chore: add AlexFucuson9 to AUTHOR_MAP (PR #61347 salvage)
teknium1 Jul 10, 2026
bdecf0a
fix(cli): ignore empty config sections
yungchentang Jul 4, 2026
4661307
fix(config): widen empty-section guard to _deep_merge in load_config
teknium1 Jul 10, 2026
50c66b2
fix(gateway): ignore malformed config sections
sharziki Jun 6, 2026
a7f65e3
fix(gateway): tolerate scalar gateway config block
sharziki Jun 6, 2026
276542c
fix(qqbot): add is_reconnect param to QQAdapter.connect for gateway r…
luxuguang-leo Jun 26, 2026
0f8603c
test(gateway): regression: every adapter.connect() must accept is_rec…
lemonwan Jul 6, 2026
9c40fc2
chore: map QQBot fix contributor
teknium1 Jul 10, 2026
16b841b
docs: add gateway reconnect contract infographic
teknium1 Jul 10, 2026
540f901
chore: map reconnect contract contributor
teknium1 Jul 10, 2026
b5c655c
fix(cli): normalize role into a single CSS token for the message class
briandevans Jul 9, 2026
a4dd08a
fix(session-export): escape html tool call names
kohoj Jul 9, 2026
c49d51b
chore: AUTHOR_MAP entry for kohoj (PR #61667 salvage)
teknium1 Jul 10, 2026
b2e227d
fix(agent): handle YAML null value in context_length_cache
ygd58 Jun 16, 2026
881a952
test: regression coverage for null context_lengths key (#47135)
teknium1 Jul 10, 2026
4c03032
fix(cli): normalize malformed skills config in get_disabled_skills (#…
teknium1 Jul 10, 2026
8937121
fix(stt/tts): guard against null config subsections crashing with Att…
x7peeps Jun 16, 2026
3a39421
fix(stt/tts): widen null-subsection guards to all provider config reads
teknium1 Jul 10, 2026
1a47769
test: deflake CI and dev-machine flaky tests in bulk (11 tests, 10 fi…
teknium1 Jul 10, 2026
5693265
fix(web): don't crash on a null web/backend config value
HumphreySun98 Jul 8, 2026
df886d0
fix(tools_config): guard against None in known_plugin_toolsets config
Jun 26, 2026
c9d5491
chore: AUTHOR_MAP entries for HumphreySun98 + 17324393074 (PR #61142/…
teknium1 Jul 10, 2026
07271a6
fix(tools_config): widen null guard to known_plugin_toolsets write path
teknium1 Jul 10, 2026
949e4cb
fix(feishu): add extra_ua_tags=["channel"] to FeishuWSClient for grou…
luxuguang-leo Jun 26, 2026
651e632
fix(feishu): ship Channel signaling SDK support
teknium1 Jul 10, 2026
0b0f60b
docs: add Feishu group events infographic
teknium1 Jul 10, 2026
5e50f18
fix(agent): reject malformed tool call arguments (#61784)
teknium1 Jul 10, 2026
838aa74
fix(agent): guard .get(key, "").method() None dereference in adapters
AlexFucuson9 Jul 1, 2026
a0972b9
fix: widen None-deref guards to config-derived sibling sites + tests
teknium1 Jul 10, 2026
f8361d2
fix(tools): enforce registry result contract (#61787)
teknium1 Jul 10, 2026
ec0227b
fix(cron): isolate profile store paths by context
embwl0x Jul 10, 2026
f82c713
fix(cron): scope profile runtime during webhook fire
kshitijk4poor Jul 10, 2026
3eb937a
fix(cron): preserve composed reports when verify-on-stop exhausts budget
HexLab98 Jul 10, 2026
53231fb
test(cron): cover verify-on-stop iteration-limit exit normalization
HexLab98 Jul 10, 2026
cd7c203
fix(agent): preserve gated responses without masking failures
kshitijk4poor Jul 10, 2026
1453431
refactor(agent): scope pending fallback to verification
kshitijk4poor Jul 10, 2026
f46e764
fix(agent): clear stale intermediate acknowledgments
kshitijk4poor Jul 10, 2026
8fc80bc
test(agent): pin verification fallback edge cases
kshitijk4poor Jul 10, 2026
6abf195
fix(agent): keep pending verification behind exit provenance
kshitijk4poor Jul 10, 2026
c101207
feat(desktop): Hermes Cloud connection mode — one sign-in, agent disc…
benbarclay Jul 10, 2026
2d315d3
polish(desktop): normalize cloud-URL highlight match + correct signed…
OutThisLife Jul 10, 2026
0ff0974
refactor(desktop): DRY the cloud helpers
OutThisLife Jul 10, 2026
9cb2a8a
Merge pull request #60757 from giggling-ginger/bugfix/issue-hunt-2026…
OutThisLife Jul 10, 2026
3f8b220
fix(tools): resolve MSYS paths in file tools on Windows
OutThisLife Jul 10, 2026
703487d
feat(desktop): point the no-agents link at the Hermes Cloud instance-…
OutThisLife Jul 10, 2026
1c7f31a
simplify(desktop): hardcode the Hermes Cloud setup link
OutThisLife Jul 10, 2026
24f6ed5
simplify(desktop): inline the cloud setup link like the rest of the app
OutThisLife Jul 10, 2026
04ca34b
Merge pull request #61915 from NousResearch/bb/salvage-50488-msys-paths
OutThisLife Jul 10, 2026
24ea219
fix(gateway): offload session store calls off the event loop via asyn…
kenyonxu Jul 10, 2026
94c2a40
fix(gateway): offload both blocking sources in compression-in-flight …
kenyonxu Jul 10, 2026
08e9dcf
fix(gateway): move all I/O out of session_store._lock in get_or_creat…
kenyonxu Jul 10, 2026
9d38a23
fix(gateway): enforce one async SessionStore boundary
kshitijk4poor Jul 10, 2026
b3f77f5
fix(gateway): close SessionStore concurrency gaps
kshitijk4poor Jul 10, 2026
b196ce8
fix(gateway): unify routing save and reset races
kshitijk4poor Jul 10, 2026
ed36edd
test(gateway): recognize awaited reset result
kshitijk4poor Jul 10, 2026
57dfebe
fix(desktop): re-apply UI zoom on show/restore, scoped to chat windows
OutThisLife Jul 10, 2026
1318cd9
Merge pull request #61925 from NousResearch/bb/salvage-61245-ui-zoom
OutThisLife Jul 10, 2026
301acc9
fix(web): paste/drop images into dashboard Chat via HERMES_HOME/images
OutThisLife Jul 10, 2026
678be9f
Merge pull request #61929 from NousResearch/bb/salvage-57912-dash-paste
OutThisLife Jul 10, 2026
6207d68
fix(desktop): prevent bootstrap stale commit repin on existing checkouts
OutThisLife Jul 10, 2026
46cf87b
Merge pull request #61935 from NousResearch/bb/salvage-59902-bootstra…
OutThisLife Jul 10, 2026
5f00f36
fix(model): probe no-key custom provider catalogs
ooiuuii Jun 29, 2026
0629caa
fix(model): derive catalog policy from declarations
kshitijk4poor Jul 10, 2026
7628f27
test(model): assert explicit catalogs never probe
kshitijk4poor Jul 10, 2026
69f1460
test(model): isolate custom provider discovery
kshitijk4poor Jul 10, 2026
3aeaf37
fix(nous): forward provider routing through Portal
helix4u Jul 10, 2026
a0032f5
fix(routing): preserve profile and delegation parity
kshitijk4poor Jul 10, 2026
b3bde1f
feat(desktop): soft gateway switch + gateway-settings polish
OutThisLife Jul 10, 2026
79a104d
Merge pull request #61912 from NousResearch/bb/salvage-55402-desktop-…
OutThisLife Jul 10, 2026
a9f3f08
Merge pull request #61916 from NousResearch/bb/desktop-gateway-switch-ux
OutThisLife Jul 10, 2026
29f3dc0
fix(desktop): stop Tip from sticking open and blocking clicks
OutThisLife Jul 10, 2026
caf557b
Merge pull request #61973 from NousResearch/bb/desktop-tip-stuck
OutThisLife Jul 10, 2026
422d9da
feat(agent): core affection reaction detector + reaction_callback
OutThisLife Jul 10, 2026
0e2adf9
feat(gateway,cli): emit + consume the reaction signal
OutThisLife Jul 10, 2026
fbefb5c
refactor(tui): drive the vibe heart from the core reaction event
OutThisLife Jul 10, 2026
3aaf7e3
feat(desktop): TikTok-style vibe hearts on a reusable particle system
OutThisLife Jul 10, 2026
ca65135
fix(auth): recover runtime Nous token from shared store
Jul 7, 2026
03b8a00
fix(auth): recompute Nous routing after shared recovery
kshitijk4poor Jul 10, 2026
0e67c72
fix(auth): validate and persist shared Nous routing
kshitijk4poor Jul 10, 2026
8fa0d8b
test(auth): pin runtime routing persistence on failure
kshitijk4poor Jul 10, 2026
dfdc315
fix(models): remove unavailable OpenCode Zen free models (#61163)
gigakun3030 Jul 10, 2026
623165a
fix(tui): discover MCP tools in slash workers
HexLab98 Jul 10, 2026
d37090a
test(tui): cover profile-local MCP discovery
kshitijk4poor Jul 10, 2026
304cdbd
fix(curator): forward credential pool from runtime resolution
infinitycrew39 Jul 9, 2026
f39c88b
test(curator): assert review fork forwards pool and overrides
infinitycrew39 Jul 9, 2026
97e9c64
fix(runtime): preserve resolved fork metadata
kshitijk4poor Jul 10, 2026
8727e67
fix(runtime): preserve resolved fork metadata
kshitijk4poor Jul 10, 2026
7ae9fae
fix(tools): handle dict URLs in web_extract display and tool processing
liuhao1024 Jul 9, 2026
de33c24
fix(web): harden extract input and display boundaries
kshitijk4poor Jul 10, 2026
e640bb5
test(web): cover model-facing dict URL dispatch
kshitijk4poor Jul 10, 2026
459cf34
fix(web): preserve extract result input order
kshitijk4poor Jul 10, 2026
c2a40b2
fix(web): handle short extract provider results
kshitijk4poor Jul 10, 2026
0b753d8
fix(display): harden fallback label formatting
kshitijk4poor Jul 10, 2026
54e1864
fix(acp): unwrap web extract object titles
kshitijk4poor Jul 10, 2026
97fb9e1
fix(telegram): classify PTB heartbeat transport errors
liuhao1024 Jul 10, 2026
90bd5b0
test(telegram): mirror PTB errors in heartbeat recovery
kshitijk4poor Jul 10, 2026
9b72995
fix(cron): never stale-remove a one-shot whose run is still alive
PRATHAMESH75 Jul 10, 2026
cd7a8df
fix(agent): release pool FDs on owning-thread client close (#61979)
giggling-ginger Jul 10, 2026
1a2f3ae
fix tui finalize persist drop conversation_history so disconnect save…
WilsonKinyua Jul 10, 2026
35d777d
chore: map WilsonKinyua release attribution
teknium1 Jul 10, 2026
b9b463f
feat(security): expose deterministic tool output risk (#61793)
teknium1 Jul 10, 2026
db8772a
fix(desktop): don't emit js files when we build desktop
ethernet8023 Jul 10, 2026
b8880f1
fix(desktop): type-check electron/ in CI typecheck
ethernet8023 Jul 10, 2026
f7c9feb
fix(desktop): only show slash popover when / is first char
ethernet8023 Jul 10, 2026
fc977f6
fix(desktop): remove old .js files
ethernet8023 Jul 10, 2026
1fa3886
chore(desktop): remove the DEV Shift+H heart preview
OutThisLife Jul 10, 2026
291eae6
Merge pull request #62016 from NousResearch/bb/desktop-vibe-hearts
OutThisLife Jul 10, 2026
5e84994
feat(dev): add isolated sandbox script for local dev
ethernet8023 Jul 10, 2026
5ba2d16
Revert "fix(agent): release pool FDs on owning-thread client close (#…
teknium1 Jul 11, 2026
dabae38
fix(cron): bind claim heartbeats to dispatch owner (#62155)
teknium1 Jul 11, 2026
0b2907f
fix(codex): drop oversized message ids on Responses input replay
JoaoMarcos44 Jul 10, 2026
2afa92c
fix(desktop): pin composer draft scope to the swap-effect owner, not …
JoaoMarcos44 Jul 10, 2026
7acaff5
fix(desktop): pin session context during async prompt submit (#54527)
HexLab98 Jul 10, 2026
d00c15c
fix(cron): run gateway cron LLM calls synchronously (#62151)
HexLab98 Jul 10, 2026
1234f39
test(cron): guard direct API path for gateway deadlock (#62151)
HexLab98 Jul 10, 2026
5c5dd6b
fix(agent): run cron LLM calls inline to avoid gateway deadlock (#62151)
PRATHAMESH75 Jul 10, 2026
8acac44
fix(cron): keep inline dispatch behind the agent call seam
kshitijk4poor Jul 10, 2026
47c91e4
fix(cron): abort inline requests on timeout
kshitijk4poor Jul 10, 2026
02063ec
fix(cron): scope inline calls to reported transport
kshitijk4poor Jul 11, 2026
0489863
fix(telegram): recover final delivery after stream flood
helix4u Jul 10, 2026
4aa499f
fix(telegram): harden flood fallback recovery
kshitijk4poor Jul 11, 2026
b9146a4
fix(codex): never replay message-item id on Copilot Responses connect…
JoaoMarcos44 Jul 10, 2026
83b2a68
fix(codex): also guard the auxiliary Copilot Responses adapter
JoaoMarcos44 Jul 10, 2026
22d5a35
fix(codex): harden Copilot replay classification
kshitijk4poor Jul 11, 2026
bce17bf
fix(codex): enforce Copilot replay policy at dispatch
kshitijk4poor Jul 11, 2026
9eaf3ab
test(codex): pin final replay preflight boundary
kshitijk4poor Jul 11, 2026
a061788
security(providers): strip credential headers on cross-host redirects…
solyanviktor-star Jul 7, 2026
61e3bd6
compare full origin (scheme, host, port), not hostname, before keepin…
solyanviktor-star Jul 7, 2026
5415b77
fix(models): strip credentials on catalog redirects
necoweb3 Jul 10, 2026
b8dd1bf
test(models): preserve catalog urlopen monkeypatches
necoweb3 Jul 10, 2026
6e75ba7
fix(security): enforce one redirect credential policy
kshitijk4poor Jul 11, 2026
6fe2c8b
test(models): patch the secured request seam
kshitijk4poor Jul 11, 2026
27a1042
fix(security): preserve installed urllib policies
kshitijk4poor Jul 11, 2026
cf34a1e
fix(security): cover remaining catalog credential paths
kshitijk4poor Jul 11, 2026
4530a4c
fix(security): preserve opener-level header policy
kshitijk4poor Jul 11, 2026
92c2146
fix(security): sanitize after installed request hooks
kshitijk4poor Jul 11, 2026
1f46145
fix(security): order sanitizer after installed hooks
kshitijk4poor Jul 11, 2026
d83cd6f
fix(security): secure Azure catalog probes
kshitijk4poor Jul 11, 2026
3b2ef78
test(models): patch secured Novita pricing seam
kshitijk4poor Jul 11, 2026
aaf4ecd
feat(skills): add youtube learnings - home-ai-lab, ai-game-studio, pr…
Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
77 changes: 77 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,30 @@
.gitignore
.gitmodules

# Python
__pycache__
*.py[cod]
*$py.class
*.so
.Python
*.egg-info/
dist/
build/

# Virtual environments
venv/
env/
ENV/

# Dependencies
node_modules
**/node_modules
.venv
**/.venv
.notebooklm-cli-venv/
.notebooklm-playwright/
.pip-cache/
.uv-cache/

# Built artifacts that are regenerated inside the image. Excluded so local
# rebuilds on the developer's machine don't invalidate the npm-install layer
Expand All @@ -20,12 +39,70 @@ ui-tui/packages/hermes-ink/dist/

# Environment files
.env
.env.*

# IDE
.vscode/
.idea/
*.swp
*.swo

# Testing
.pytest_cache/
.coverage
htmlcov/

# Documentation
*.md

# Runtime data (bind-mounted at /opt/data; must not leak into build context)
data/
.hermes-docker/
.notebooklm-home/

# Compose/profile runtime state (bind-mounted; avoid ownership/secret issues)
hermes-config/
runtime/

# ---------- Not needed inside the Docker image ----------

# Desktop app source (Tauri/Electron); never installed in the container.
# apps/shared is the dashboard↔desktop websocket helper and is linked from
# web/package.json as a file: workspace dep — keep it in the build context.
apps/
!apps/shared/
!apps/shared/**

# Test suite — not shipped in production images
tests/

# Documentation site (Docusaurus) and supplementary docs
website/
docs/

# Assets only used by the GitHub README
assets/
infographic/

# Plugin-level docs (hermes-achievements ships docs/ but the runtime doesn't read them)
plugins/hermes-achievements/docs/

# Nix / Homebrew / AUR packaging metadata — irrelevant to Docker
nix/
flake.nix
flake.lock
packaging/

# Design and planning documents
plans/
.plans/

# ACP registry manifest (icon + agent.json) — not consumed at runtime
acp_registry/

# Repo-level dotfiles that are git-only or dev-tooling config
.env.example
.envrc
.gitattributes
.hadolint.yaml
.mailmap
13 changes: 10 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@
# Get your token at: https://huggingface.co/settings/tokens
# Required permission: "Make calls to Inference Providers"
# HF_TOKEN=
# HF_BASE_URL=https://router.huggingface.co/v1 # Override default base URL
# OPENCODE_GO_BASE_URL=https://opencode.ai/zen/go/v1 # Override default base URL

# =============================================================================
Expand Down Expand Up @@ -339,6 +340,7 @@ BROWSER_INACTIVITY_TIMEOUT=120
# TELEGRAM_ALLOWED_USERS= # Comma-separated user IDs
# TELEGRAM_HOME_CHANNEL= # Default chat for cron delivery
# TELEGRAM_HOME_CHANNEL_NAME= # Display name for home channel
# TELEGRAM_CRON_THREAD_ID= # Forum topic ID for cron deliveries; overrides TELEGRAM_HOME_CHANNEL_THREAD_ID for cron so replies work in topic mode

# Webhook mode (optional — for cloud deployments like Fly.io/Railway)
# Default is long polling. Setting TELEGRAM_WEBHOOK_URL switches to webhook mode.
Expand Down Expand Up @@ -410,26 +412,31 @@ IMAGE_TOOLS_DEBUG=false
# Groq API key (free tier — used for Whisper STT in voice mode)
# GROQ_API_KEY=

# ElevenLabs API key (cloud STT/TTS — Scribe transcription)
# ELEVENLABS_API_KEY=

# =============================================================================
# STT PROVIDER SELECTION
# =============================================================================
# Default STT provider is "local" (faster-whisper) — runs on your machine, no API key needed.
# Install with: pip install faster-whisper
# Model downloads automatically on first use (~150 MB for "base").
# To use cloud providers instead, set GROQ_API_KEY or VOICE_TOOLS_OPENAI_KEY above.
# Provider priority: local > groq > openai
# Configure in config.yaml: stt.provider: local | groq | openai
# To use cloud providers instead, set GROQ_API_KEY, VOICE_TOOLS_OPENAI_KEY, or ELEVENLABS_API_KEY above.
# Provider priority: local > groq > openai > mistral > xai > elevenlabs
# Configure in config.yaml: stt.provider: local | groq | openai | mistral | xai | elevenlabs

# =============================================================================
# STT ADVANCED OVERRIDES (optional)
# =============================================================================
# Override default STT models per provider (normally set via stt.model in config.yaml)
# STT_GROQ_MODEL=whisper-large-v3-turbo
# STT_OPENAI_MODEL=whisper-1
# STT_ELEVENLABS_MODEL=scribe_v2

# Override STT provider endpoints (for proxies or self-hosted instances)
# GROQ_BASE_URL=https://api.groq.com/openai/v1
# STT_OPENAI_BASE_URL=https://api.openai.com/v1
# ELEVENLABS_STT_BASE_URL=https://api.elevenlabs.io/v1

# =============================================================================
# MICROSOFT TEAMS INTEGRATION
Expand Down
6 changes: 3 additions & 3 deletions .envrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
watch_file pyproject.toml uv.lock
watch_file ui-tui/package-lock.json ui-tui/package.json
watch_file flake.nix flake.lock nix/devShell.nix nix/tui.nix nix/package.nix nix/python.nix
watch_file pyproject.toml uv.lock hermes
watch_file package-lock.json package.json web/package.json ui-tui/package.json website/package.json apps/shared/package.json apps/desktop/package.json ui-tui/packages/hermes-ink/package.json
watch_file flake.nix flake.lock nix/devShell.nix nix/tui.nix nix/package.nix nix/python.nix nix/hermes-agent.nix nix/desktop.nix

use flake
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
# Auto-generated files — collapse diffs and exclude from language stats
web/package-lock.json linguist-generated=true

# Enforce LF for scripts that run inside Linux containers.
# Without this, Windows checkout converts to CRLF and breaks `exec` in the
# container entrypoint with "no such file or directory".
*.sh text eol=lf
Dockerfile text eol=lf
*.dockerfile text eol=lf
docker/entrypoint.sh text eol=lf
62 changes: 62 additions & 0 deletions .github/actions/detect-changes/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Detect affected areas
description: >-
Classify a PR's changed files into CI work lanes (python, frontend, site,
scan, deps, mcp_catalog) so the orchestrator can conditionally call only
the sub-workflows a PR can affect. Outputs are always "true" on push/dispatch
events and fail open (everything "true") when the diff cannot be computed.

outputs:
python:
description: Run Python tests / ruff / ty / windows-footguns.
value: ${{ steps.classify.outputs.python }}
frontend:
description: Run the TypeScript typecheck matrix + desktop build.
value: ${{ steps.classify.outputs.frontend }}
docker_meta:
description: Docker setup and meta files have changed.
value: ${{ steps.classify.outputs.docker_meta }}
site:
description: Build the Docusaurus docs site.
value: ${{ steps.classify.outputs.site }}
scan:
description: Run the supply-chain critical-pattern scanner.
value: ${{ steps.classify.outputs.scan }}
deps:
description: Check pyproject.toml dependency upper bounds.
value: ${{ steps.classify.outputs.deps }}
mcp_catalog:
description: Require MCP catalog security review label.
value: ${{ steps.classify.outputs.mcp_catalog }}

runs:
using: composite
steps:
- name: Classify changed files
id: classify
shell: bash
env:
GH_TOKEN: ${{ github.token }}
REPO: ${{ github.repository }}
EVENT_NAME: ${{ github.event_name }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail

# Only pull_request events are gated. Other events (push, release,
# dispatch) leave CHANGED empty, so the classifier fails open and every
# lane runs. Post-merge / on-demand validation is never weakened.
if [ "$EVENT_NAME" = "pull_request" ]; then
# Use the compare endpoint with the pinned base/head SHAs from the
# event payload instead of the "current PR files" endpoint. The SHAs
# are frozen at trigger time, so the file list is deterministic even
# if the PR receives a new push between trigger and detect.
CHANGED="$(gh api \
--paginate \
"repos/${REPO}/compare/${BASE_SHA}...${HEAD_SHA}" \
--jq '.files[].filename' || true)"
fi

echo "Changed files:"
printf '%s\n' "${CHANGED:-(none)}"
printf '%s\n' "${CHANGED:-}" | python3 scripts/ci/classify_changes.py
47 changes: 0 additions & 47 deletions .github/actions/hermes-smoke-test/action.yml

This file was deleted.

50 changes: 50 additions & 0 deletions .github/actions/retry/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Retry a flaky command
description: >-
Run a shell command, retrying on non-zero exit. For dependency installs
(npm ci, uv sync) whose only failures are transient network/toolchain
flakes — a node-gyp header fetch, a registry blip — so CI self-heals
instead of needing a manual re-run.

inputs:
command:
description: Shell command to run (and retry).
required: true
attempts:
description: Max attempts before giving up.
default: "3"
delay:
description: Seconds to wait between attempts.
default: "10"
working-directory:
description: Directory to run in.
default: "."

runs:
using: composite
steps:
- shell: bash
working-directory: ${{ inputs.working-directory }}
# command goes through env, never interpolated into the script body, so
# a command with quotes/specials can't break or inject into the runner.
env:
_CMD: ${{ inputs.command }}
_ATTEMPTS: ${{ inputs.attempts }}
_DELAY: ${{ inputs.delay }}
run: |
set -uo pipefail
n=0
while :; do
n=$((n + 1))
echo "::group::attempt $n/$_ATTEMPTS: $_CMD"
if bash -c "$_CMD"; then
echo "::endgroup::"
exit 0
fi
echo "::endgroup::"
if [ "$n" -ge "$_ATTEMPTS" ]; then
echo "::error::failed after $n attempts: $_CMD"
exit 1
fi
echo "::warning::attempt $n failed; retrying in ${_DELAY}s: $_CMD"
sleep "$_DELAY"
done
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-screenshots/39327/tools-collapsed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-screenshots/39327/tools-expanded.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-screenshots/45449/billing-confirm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading