Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
5591 commits
Select commit Hold shift + click to select a range
135a294
feat(mcp): add fingerprint-keyed on-disk MCP tool-schema cache
Vansh5632 Aug 3, 2026
1d5ecad
feat(mcp): lazy server startup from schema cache (design from #56832)
kshitijk4poor Aug 3, 2026
ebf967f
polish(mcp): simplify-pass folds on the lazy-startup salvage
kshitijk4poor Aug 3, 2026
fe6330d
fix(stt): thread confidence thresholds into faster-whisper's own gate…
PRATHAMESH75 Jul 29, 2026
32686bb
chore: add contributor email mapping for wangyunyou
kshitijk4poor Aug 3, 2026
c062fde
Merge pull request #77560 from kshitijk4poor/chore-wyy-email
kshitijk4poor Aug 3, 2026
0a2a69d
fix(credential_pool): check copilot suppression before token exchange
Aug 1, 2026
77404ce
perf(credential_pool): skip gh subprocess when all copilot sources su…
Aug 1, 2026
536ed6a
fix(credential_pool): classify copilot sources by exact match
kshitijk4poor Aug 3, 2026
9c20f7f
chore: add contributor email mapping for szzhoujiarui
kshitijk4poor Aug 3, 2026
7997c9c
Merge pull request #77565 from kshitijk4poor/chore-szz-email
kshitijk4poor Aug 3, 2026
5bbfe63
chore: map rodboev and MaartenDMT contributor emails
kshitijk4poor Aug 3, 2026
a1b3ce6
Merge pull request #77574 from kshitijk4poor/chore/attrib-rodboev-maa…
kshitijk4poor Aug 3, 2026
16bd5d2
fix(tools): reuse subscription features for toolset listing
szzhoujiarui Aug 1, 2026
b45d886
fix(api-server): reuse toolset feature snapshot
szzhoujiarui Aug 1, 2026
9aab062
chore: add EndeavorYen to AUTHOR_MAP
kshitijk4poor Aug 3, 2026
4e698cd
Merge pull request #77586 from kshitijk4poor/chore/attrib-endeavoryen
kshitijk4poor Aug 3, 2026
425c54b
fix(platforms/line): fix broken import of non-existent config functions
ErnestHysa May 26, 2026
abe7f78
chore(contributors): map tbsonline@protonmail.com -> jasoisjaso (#77600)
kshitijk4poor Aug 3, 2026
ec10cfd
chore: add light-merlin-dark to AUTHOR_MAP
kshitijk4poor Aug 3, 2026
844411d
Merge pull request #77601 from kshitijk4poor/chore/attrib-light-merli…
kshitijk4poor Aug 3, 2026
a278db1
fix(agent): jittered, interrupt-aware backoff for empty-response retries
arimu1 Jul 24, 2026
b953a5a
test: fake clock for the backoff-status test (was busy-spinning 7.5s)
kshitijk4poor Aug 3, 2026
d0be609
perf(providers): cache provider list snapshots
yyzquwu Jun 4, 2026
51743f4
test: pin the hit-path copy guard on the provider snapshot cache
kshitijk4poor Aug 3, 2026
ad345a9
feat(gateway): add opt-in 'latency' runtime footer field
Kyzcreig Jul 26, 2026
f4fb23f
perf(transport): gate prompt cache keys by provider capability
rungmc357 Jul 2, 2026
78e2987
feat(transport): imply prompt_cache_key capability for api.openai.com
kshitijk4poor Aug 3, 2026
c8df422
perf(gateway): reuse loaded turn config for timestamp check
MaartenDMT Aug 3, 2026
bdcdde9
perf(cli): add --prefer-offline to npm install during update (#39267)
rodboev Aug 3, 2026
0422479
perf(cron): skip config load on idle scheduler ticks (idea from #33612)
kshitijk4poor Aug 3, 2026
b51c4e6
fix(feishu): defer the lark_oapi import off the startup path
baauzi Jul 17, 2026
f84e368
test: bind lark SDK globals session-wide, not per-file
kshitijk4poor Aug 3, 2026
e80b7ae
fix(feishu): test SDK globals by None-ness, not globals() membership
kshitijk4poor Aug 3, 2026
6cedec1
chore: add contributor email mapping for WojtekMR3
kshitijk4poor Aug 3, 2026
23021f4
Merge pull request #77632 from kshitijk4poor/chore-woj-email
kshitijk4poor Aug 3, 2026
be3be06
perf: replace COUNT(*) with LIMIT-based existence checks
Skywind5487 Jul 2, 2026
14b6e0d
fix(state): take the connection lock in session_count_ge + document a…
kshitijk4poor Aug 3, 2026
034eadb
perf(state): index assistant tool-call rows for Insights queries
PRATHAMESH75 Jul 19, 2026
7f1d84f
perf(insights): pin partial index on assistant tool-call queries
PRATHAMESH75 Jul 19, 2026
401e054
fix(insights): fall back to unpinned queries when the partial index i…
kshitijk4poor Aug 3, 2026
5017deb
refactor(insights): strip INDEXED BY pins via an attribute loop
kshitijk4poor Aug 3, 2026
adcdf9d
perf(state): batch compression-tip row fetch in list_sessions_rich
Jul 6, 2026
b2e1d57
test(state): guard compact_rows threading through batched tip-row fetch
kshitijk4poor Aug 3, 2026
7db2827
refactor(state): chunk the batched tip-row IN clause at 900 ids
kshitijk4poor Aug 3, 2026
b651121
fix(yuanbao): clear _processing_msg_ids/_processing_msg_texts after e…
AhmetArif0 May 10, 2026
81c8645
fix(yuanbao): evict stale entries from _member_cache on TTL expiry
AhmetArif0 May 10, 2026
f3add02
fix(yuanbao): pop tracking entries only for truthy matching msg_id + …
kshitijk4poor Aug 3, 2026
4cf2fb5
chore: add frizikk to AUTHOR_MAP
kshitijk4poor Aug 3, 2026
2b0d58e
Merge pull request #77636 from kshitijk4poor/chore/attrib-frizikk
kshitijk4poor Aug 3, 2026
9891f4b
perf(zai): parallelize endpoint detection probes
light-merlin-dark Apr 11, 2026
9e99a33
test(zai): cover parallel-probe contracts + restore candidate-model loop
kshitijk4poor Aug 3, 2026
0e4daad
perf(zai): early-exit when the highest-priority endpoint wins (simpli…
kshitijk4poor Aug 3, 2026
94ef36a
Bound MiniMax OAuth error responses
ooiuuii Jul 1, 2026
219bb35
fix(minimax-oauth): read streamed error bodies inside the client cont…
kshitijk4poor Aug 3, 2026
a762625
chore: map xaydinoktay@gmail.com to aydnOktay
kshitijk4poor Aug 3, 2026
ebda995
Merge pull request #77640 from kshitijk4poor/chore/attrib-aydnoktay
kshitijk4poor Aug 3, 2026
f327c89
chore(contributors): map four B2 salvage author emails (#77641)
kshitijk4poor Aug 3, 2026
ffb5430
perf(session-search): project fields before enrichment
frizikk Jul 14, 2026
f795d54
test(session-search): guard projected enrichment
frizikk Jul 14, 2026
2f14c3e
fix: skip memory prefetch on trivial user prompts (greetings)
ayushere Aug 3, 2026
46073d7
chore: add ayushere to AUTHOR_MAP
ayushere May 15, 2026
c093492
refactor(memory): single shared trivial-prompt classifier + gate tests
kshitijk4poor Aug 3, 2026
34d6095
refactor(honcho): delegate _is_trivial_prompt wholly to the shared cl…
kshitijk4poor Aug 3, 2026
b9b0505
fix(desktop): measure adaptive stream flush through the deferred comm…
Adolanium Jul 27, 2026
3060bee
fix(desktop): dedupe optimistic user turns for all wire references, n…
pnascimento9596 Jul 31, 2026
fed10fa
test(desktop): cover wire reference normalization edges
pnascimento9596 Jul 31, 2026
2ebe175
fix(desktop): sort reference-kinds import per lint gate
pnascimento9596 Aug 1, 2026
ed66ff1
fix(desktop): full-jitter backoff on gateway WS reconnect loops
Aug 1, 2026
5ffbea8
fix(desktop): escalate gateway reconnect on elapsed time, not attempt…
kshitijk4poor Aug 3, 2026
94fac06
chore(contributors): map vittoria3103.123@gmail.com -> VittoriaLanzo …
kshitijk4poor Aug 3, 2026
1306ac0
fix(desktop): un-break the .btn-arc rule — '*/' inside a CSS comment …
rerdi92 Aug 3, 2026
82fd574
perf(desktop): stop idle chat re-renders — memo ChatView, stable tile…
hdd69 Aug 3, 2026
bc3fa54
perf(curator): trim dead tool-schema from the LLM review fork
VittoriaLanzo Jul 10, 2026
b6f15f5
fix(desktop): keep a mid-turn reply on screen when its session is reo…
OutThisLife Aug 3, 2026
34f0427
fix(desktop): stop a finished reply rendering twice after history cat…
OutThisLife Aug 3, 2026
cb11a7e
chore(contributors): map two B3 salvage author emails (#77685)
kshitijk4poor Aug 3, 2026
1f692a8
refactor(desktop): hoist the reference-line matcher; drop dead textWi…
kshitijk4poor Aug 3, 2026
53398ff
fix(desktop): do not sandwich structured mid-turn rows with inflight …
686f6c61 Aug 2, 2026
2ecc1db
fix(desktop): scope inflight dump suppression to the live turn tail
686f6c61 Aug 2, 2026
dbefd27
fix(desktop): require structure-bearing row for live-tail same-turn c…
686f6c61 Aug 3, 2026
7a4d047
refactor(desktop): one live-tail vocabulary for transcript reconcilia…
OutThisLife Aug 3, 2026
0de8c32
fix(dashboard): cache plugins hub payload and avoid auth probes
ahmadashfq Jul 15, 2026
9fa17c1
test(dashboard): cover install-hook invalidation of plugins hub cache
kshitijk4poor Aug 3, 2026
1f1acc0
fix(dashboard): warm cold check_fn verdicts with a background probe
kshitijk4poor Aug 3, 2026
c4ac62a
fix(desktop): cancel the pending commit-cost measurement rAF
kshitijk4poor Aug 3, 2026
c163932
perf(dashboard): skip full InsightsEngine on /api/analytics/usage (#1…
rodboev Jun 4, 2026
e3ce092
perf(dashboard): keep tools in focused analytics usage (#18511)
rodboev Jul 14, 2026
773d690
refactor(insights): drop consumer-less get_skill_breakdown alias (sim…
kshitijk4poor Aug 3, 2026
b536f06
Merge pull request #77644 from NousResearch/bb/review-75967
OutThisLife Aug 3, 2026
105aba6
fix(web): clamp dashboard pagination and analytics-days params (#3920…
aydnOktay Aug 3, 2026
2000278
fix(clamps): raise profile fan-out limit to le=500 (simplify-pass fin…
kshitijk4poor Aug 3, 2026
9645ea8
fix(web): avoid blocking provider validation
youzi-1122 Jul 20, 2026
050b953
perf(plugins): seed plugin routes from sessionStorage cache for insta…
AllardQuek May 4, 2026
057939c
fix(plugins): validate cached manifests are an array
AllardQuek Jul 19, 2026
41bba3c
test(plugins): export cache helpers and add focused fallback/refresh …
AllardQuek Jul 19, 2026
c0c45ab
fix(plugins): keep loading gate when cached manifests include a /chat…
kshitijk4poor Aug 3, 2026
decf12e
perf(dashboard): serve hashed /assets bundles with immutable cache he…
kshitijk4poor Aug 3, 2026
6611d87
feat: reset-aware primary restore — stay on fallback until the rate-l…
WojtekMR3 Jul 19, 2026
4c2d473
fix(credential_pool): run next_available_at under the pool lock
kshitijk4poor Aug 3, 2026
9cd605f
fix(credential_pool): defer single-use-token refresh outside threadin…
necoweb3 Jul 26, 2026
687dd63
fix(credential_pool): serialize deferred-refresh pool mutations
kshitijk4poor Aug 3, 2026
2f32092
`hermes sessions optimize-storage` aborts with
Kyzcreig Jul 26, 2026
c2c95f5
Merge pull request #77713 from NousResearch/bb/review-76744-fold
OutThisLife Aug 3, 2026
48e12a0
perf(tools): shrink lazy tool catalog overhead
carbongotfound Jul 29, 2026
13172fc
refactor(tool-search): drop dead fallback ladder in _available_source…
kshitijk4poor Aug 3, 2026
82019e7
fix(credential_pool): unpack the tuple in next_available_at's gate
kshitijk4poor Aug 3, 2026
8167b9f
chore: map copii.list@gmail.com to stremtec
kshitijk4poor Aug 3, 2026
4a99ba1
Merge pull request #77760 from kshitijk4poor/chore/attrib-stremtec
kshitijk4poor Aug 3, 2026
dae5df2
chore(contributors): map marzukia@users.noreply.github.com -> marzuki…
kshitijk4poor Aug 3, 2026
f1133c9
chore: map bot@bkstock.dev to BKStock
kshitijk4poor Aug 3, 2026
7e47a0f
Merge pull request #77779 from kshitijk4poor/chore/attrib-bkstock
kshitijk4poor Aug 3, 2026
eaf4d51
perf(session): route SQLite PRAGMAs through central apply_database_pr…
crayfish-ai Jul 30, 2026
3ac7168
fix(pr): remove remnant local PRAGMAs from PR branch
crayfish-ai Jul 30, 2026
7026177
test(session): guard config-gated performance PRAGMAs across all conn…
kshitijk4poor Aug 3, 2026
416b56b
fix(desktop): flush queued deltas on window focus
unixwzrd Jul 30, 2026
7700597
perf(desktop): stop scroll and status loops in busy sessions
myk0la-b Jul 30, 2026
52fb96d
perf(desktop): pause hidden-pane timers in agents view, cron sidebar,…
hariNEzuMI928 Aug 3, 2026
e2a2149
style(desktop): restore alphabetical import order in agents/index.tsx
kshitijk4poor Aug 3, 2026
aece98c
refactor(desktop): shared pulse beat + fully-gated cron peek (simplif…
kshitijk4poor Aug 3, 2026
9d76d48
fix(lint): import sort + eslint-disable for timer-handle ref clear in…
kshitijk4poor Aug 3, 2026
dab7c88
fix(state): narrow FTS UPDATE triggers with AFTER UPDATE OF + migration
Jul 31, 2026
a5ce909
fix(state): fail closed on CJK trigger migration
yuzilongleif-collab Aug 1, 2026
b66111f
fix(state): quarantine CJK when ensure soft-fails after OF migration
Aug 1, 2026
ae17163
refactor(state): drop unreachable regex guard in trigger migration
kshitijk4poor Aug 3, 2026
c7fd21a
fix(security): reject always-blocked OpenViking endpoints
zapabob Jul 23, 2026
65bcca6
fix(openviking): fail closed on blocked endpoints
zapabob Aug 2, 2026
a3f6953
fix(openviking): don't spawn a second server onto a live port
jeff-mettel Jul 30, 2026
9014aa0
fix(openviking): drop stale "disabled for this Hermes run" warnings
Jul 26, 2026
f0cb219
fix(openviking): re-arm the commit guard after in-place compression
jeff-mettel Jul 30, 2026
f94914f
test(openviking): cover the compression lifecycle, not a hand-set latch
jeff-mettel Jul 30, 2026
5396dd8
fix(memory): read non-secret provider config from config.yaml for Ope…
PRATHAMESH75 Jul 20, 2026
4ebe990
fix(openviking): read recall settings from config.yaml first, env var…
justemu Jul 11, 2026
4b57943
test(openviking): cover config.yaml recall settings with temp-HERMES_…
justemu Jul 11, 2026
e43bc0b
fix(openviking): integrate reliability and configuration hardening
ehz0ah Aug 2, 2026
8fb9c3b
chore(contributors): map OpenViking source authors
ehz0ah Aug 2, 2026
e443d32
test(retaindb): guard scoped secret config resolution
ehz0ah Aug 3, 2026
a49a9e5
fix(openviking): verify servers before sending credentials
ehz0ah Aug 3, 2026
41cc4a1
fix(openviking): catch endpoint errors in setup validation functions
kshitijk4poor Aug 3, 2026
7d066c3
fix(state): deduplicate session system prompts
embwl0x Aug 2, 2026
26133b5
chore: map cicav legacy noreply email
kshitijk4poor Aug 3, 2026
5828687
fix(tui): avoid writable Kanban opens on empty polls
joncaldwell90 Jul 31, 2026
fe4cf36
Merge pull request #77796 from kshitijk4poor/chore/attrib-cicav
kshitijk4poor Aug 3, 2026
5bbd0db
fix(context): dedupe subdirectory hints by content digest and skip ba…
Jul 27, 2026
06ae5b6
perf(state): batch the turn flush into one SQLite transaction
Aug 3, 2026
b58b3ad
perf(tui-gateway): batch branch-seed history copies (whole-bug-class)
kshitijk4poor Aug 3, 2026
84146fb
test(run-agent): update flush-path fakes and assertions for batched w…
kshitijk4poor Aug 3, 2026
da6d960
refactor(state): fold simplify findings — reuse _insert_message_rows,…
kshitijk4poor Aug 3, 2026
5bff398
fix(tests): update two more append_message.call_args assertions to ap…
kshitijk4poor Aug 3, 2026
128ca2e
perf(tui): memoize useSessionLifecycle return (idea from #38491)
stremtec Aug 3, 2026
1770028
ci: retry uv python install
ethernet8023 Aug 3, 2026
67d4bbb
fix(state): route session-resume reads through the WAL read-only conn…
pierrenode Jul 28, 2026
d48a78a
chore: add contributor email mapping for ArcherQAQ
kshitijk4poor Aug 3, 2026
d5584a3
Merge pull request #77821 from kshitijk4poor/chore-archer-email
kshitijk4poor Aug 3, 2026
fc32a38
fix(model_metadata): rewrite localhost->IPv4 for the remaining local …
pierrenode Aug 3, 2026
733e7d2
fix(model_metadata): guard _localhost_to_ipv4 against non-string urls
kshitijk4poor Aug 3, 2026
25a9c2c
perf(cold-start): mitigate ~14s GIL stall during backend init (#60800)
jinglun010-cpu Jul 8, 2026
0bb1462
test: harden cold-start regression tests + debug-log the env-var skip
kshitijk4poor Aug 3, 2026
003b4c8
perf(gateway): per-platform skip_context_files to cut agent build lat…
ArcherQAQ Aug 3, 2026
2f09df5
fix(relay): route Discord tool-progress into the auto-thread, not the…
benbarclay Aug 3, 2026
1f8acb3
fix(agent): stop re-probing endpoints that blackhole TCP connects
rlaope Aug 3, 2026
3c27eb6
chore: release v0.20.0 (2026.8.3)
teknium1 Aug 3, 2026
3763706
chore: add contributor email mapping for Ahmett101
kshitijk4poor Aug 3, 2026
f03eb25
Merge pull request #77867 from kshitijk4poor/chore-ahmett-email
kshitijk4poor Aug 3, 2026
d1c6c6b
perf(moa): cache resolved preset + per-slot runtime to cut cold-start…
Jul 18, 2026
e6f1d61
fix(discord): leave voice channels before cancelling the bot task
BrinShadewater Aug 1, 2026
c0b0cc3
feat(image): parallelize image_generate batches
EndeavorYen May 28, 2026
952d86b
fix(file-sync): serialize concurrent sync cycles
EndeavorYen Jul 13, 2026
a7ad713
fix(tool-executor): unpack 5-tuple runnable_calls in _max_workers_for…
kshitijk4poor Aug 3, 2026
9267c78
fix: exponential backoff for rate-limit fallback cooldown
May 22, 2026
df9dbba
fix(backoff): keep 60s first-hit cooldown, escalate only on consecuti…
kshitijk4poor Aug 3, 2026
861ca18
fix(catalog): wire api_key auth headers for http MCP servers
JonthanaHanh Aug 3, 2026
f8f4755
perf(compressor): release allocator pages after successful compaction
kshitijk4poor Aug 3, 2026
00475e1
fix(catalog): validate http+api_key manifests declare the header's en…
kshitijk4poor Aug 3, 2026
23f8ae3
fix(agent): cap auxiliary LLM concurrency per task
konsisumer Jul 18, 2026
ddae511
fix: thread extra_headers through the call_llm split
kshitijk4poor Aug 3, 2026
7eefb09
fix(nix): tie devShell's HERMES_PYTHON to the venv actually on PATH
ethernet8023 Aug 3, 2026
9b9cbdd
fix(system_prompt): move skills index to the volatile band
marzukia Jun 2, 2026
9555525
docs(system_prompt): fix stale reconstruct_static_prefix docstring ex…
kshitijk4poor Aug 3, 2026
efbfe08
fix(prompt_size): search volatile tier for skills block after the sta…
kshitijk4poor Aug 3, 2026
164c3d6
chore: add contributor email mapping for zabih-sudo
kshitijk4poor Aug 3, 2026
d92a28d
Merge pull request #77902 from kshitijk4poor/chore-zabih-email
kshitijk4poor Aug 3, 2026
f40d63d
chore: add contributor email mapping for HAOWANG116
kshitijk4poor Aug 3, 2026
53cc628
Merge pull request #77912 from kshitijk4poor/chore-haowang-email
kshitijk4poor Aug 3, 2026
aad8f74
fix(backup): serialize and atomically publish snapshots
Jul 22, 2026
827bb0d
chore: add contributor email mapping for ElSnacko
kshitijk4poor Aug 3, 2026
0845232
fix: prefer explicit anthropic api key
kshitijk4poor Aug 3, 2026
a991dfc
docs: document /personality none|default|neutral reset across persona…
teknium1 Aug 3, 2026
dac4bbe
fix comment about relay workaround
jquesnelle Aug 3, 2026
3c3ae74
feat(models): add qwen3.8-max to Nous portal + OpenRouter catalogs, r…
teknium1 Aug 3, 2026
91937a6
test: swap context-switch-guard fixture off qwen3.8-max-preview
teknium1 Aug 3, 2026
70db671
Merge pull request #76643 from NousResearch/fix/termux-nemo-relay
jquesnelle Aug 4, 2026
d218496
Merge pull request #77924 from kshitijk4poor/chore/author-map-elsnacko
kshitijk4poor Aug 4, 2026
3a0a295
fix(agent): keep context_length pin for named custom providers
xxxigm Aug 3, 2026
942ff91
test(gateway): cover named-custom context pin on session-info banner
xxxigm Aug 3, 2026
60c721a
fix(model_metadata): read llama.cpp context from meta.n_ctx + accept …
ElSnacko Jul 15, 2026
f66d625
chore: add contributor email mapping for johnrazmus
kshitijk4poor Aug 4, 2026
e4888a9
Merge pull request #78226 from kshitijk4poor/chore-razmus-email
kshitijk4poor Aug 4, 2026
3b0bb3b
fix(gateway): keep event loop alive during /compress and Relay drain
Dannyzen Aug 4, 2026
9c88625
fix(gateway): bound go_dormant ws.close with teardown timeout
kshitijk4poor Aug 4, 2026
e623432
fix: close the Codex app-server session on agent teardown
johnrazmus Aug 4, 2026
ba9068c
fix(agent): discard bare tool-call marker before fallback/persistence…
JoaoMarcos44 Aug 4, 2026
70d7e4c
fix(agent): repair sessions already contaminated with stale tool-call…
JoaoMarcos44 Aug 4, 2026
e1a2739
feat(cli): add sessions clean-markers to permanently purge stale tool…
JoaoMarcos44 Aug 4, 2026
e18c040
fix(cli): back up state.db before clean-markers writes by default
JoaoMarcos44 Aug 4, 2026
15d51bb
refactor: dedup stale-marker regex — use compiled _STALE_MARKER_RE in…
kshitijk4poor Aug 4, 2026
9938d20
fix(conversation_loop): compress messages on output-cap retry path (#…
Rafa-Ross Aug 3, 2026
04098e2
fix(conversation_loop): prune dead vision-strip fallback; harden outp…
BobClawblaw Aug 3, 2026
78c8bcd
chore: drop CHANGELOG.md and docs/reports/ — not shipped with salvage…
kshitijk4poor Aug 4, 2026
9fc8926
perf: reuse request_input_estimate instead of recomputing estimate_re…
kshitijk4poor Aug 4, 2026
743dc94
chore: AUTHOR_MAP — add BobClawblaw for PR #77870 salvage
kshitijk4poor Aug 4, 2026
bdc82e3
perf(gateway): prewarm /model picker cache on TUI startup
ZachariahChu Jul 26, 2026
5c078b9
test(tui): pin picker-cache prewarm wiring in entry.main()
kshitijk4poor Aug 4, 2026
dbafb59
perf(cli): check local auth.json/config before slow provider registry…
frohsinnllc Jul 12, 2026
8f52040
test(cli): regression tests pinning auth-first ordering skips registr…
kshitijk4poor Aug 4, 2026
9a20d7f
perf(desktop): keep spinner frames out of React commits
myk0la-b Jul 29, 2026
be54f28
test(desktop): cover minimized/hidden window-state + visibilitychange…
kshitijk4poor Aug 4, 2026
9076ada
fmt(js): `npm run fix` on merge (#78271)
hermes-seaeye[bot] Aug 4, 2026
7098862
perf(gateway): replace SSE poll loop with call_soon_threadsafe-fed as…
zabih-sudo Jul 15, 2026
7a1f2e3
refactor(gateway): extract _sse_frame() helper, dedup 5 inline SSE en…
zabih-sudo Jul 15, 2026
1a09b07
refactor(gateway): route all three SSE writers through _sse_frame()
zabih-sudo Jul 16, 2026
221afc0
refactor(gateway): route session event stream through _sse_frame (ens…
zabih-sudo Jul 16, 2026
fc8e393
test: add cross-thread put_threadsafe + long-reasoning tail tests
zabih-sudo Jul 31, 2026
98165da
fix: reconstruct fused test after conflict resolution
kshitijk4poor Aug 3, 2026
64882bc
perf(tui): bound reasoning-clean input to the displayed tail
zabih-sudo Aug 4, 2026
7e344dc
test: exercise the production _loop_ref path in put_threadsafe tests
kshitijk4poor Aug 4, 2026
fb4e17b
fix(test): feed the SSE writers an asyncio queue, not queue.Queue
kshitijk4poor Aug 4, 2026
db0bd42
fix(credential-pool): re-select in acquire_lease after a deferred ref…
kshitijk4poor Aug 4, 2026
4075c8f
fix(credential-pool): lock the quarantine read-modify-write of _entries
kshitijk4poor Aug 4, 2026
cb3e8e9
perf(file-ops): eliminate redundant subprocess calls in write_file an…
zzy-git Jun 30, 2026
eb78ab2
fix(file-ops): decouple BOM detection from pre_content, add V4A backw…
zzy-git Jul 15, 2026
fcae5ad
fix(file-ops): surrogatepass in bytes_written encode (review finding)
kshitijk4poor Aug 3, 2026
8c19e29
refactor(file-ops): fold simplify-pass findings
kshitijk4poor Aug 3, 2026
622b9a9
chore: update uv.lock for tomli dependency (rebase fix)
kshitijk4poor Aug 3, 2026
1709f82
chore: remove dead tomli dependency declaration
kshitijk4poor Aug 4, 2026
e05eba2
fix(telegram+sqlite): resolve polling conflict loop + misleading WAL …
kshitijk4poor Aug 4, 2026
e9a8b70
chore: map jun@junho.co to junhohong
kshitijk4poor Aug 4, 2026
3aeff23
Merge pull request #78362 from kshitijk4poor/chore/attrib-junhohong
kshitijk4poor Aug 4, 2026
cab8673
fix(dashboard): reload loopback tabs after stale session-token closes
izumi0uu Jun 28, 2026
19e697d
fix: update ChatPage test import for react-router v7
kshitijk4poor Aug 4, 2026
b8b17b8
fix: wire HermesConsoleModal WS into stale-token reload guard
kshitijk4poor Aug 4, 2026
d2772b4
fix(xai): honor configured web search backend on Responses path
xxxigm Aug 4, 2026
29eba9c
test(xai): cover Firecrawl vs native web_search on Responses
xxxigm Aug 4, 2026
f5be923
refactor(xai): simplify _xai_prefers_native_web_search to use registry
kshitijk4poor Aug 4, 2026
d2e4a58
rebaseline: exactly Nous upstream + the VECTOR overlay
vectorcmd Aug 4, 2026
4c5eca8
ci(guard): pass when the fork desktop patch surface no longer exists
vectorcmd Aug 4, 2026
a1b783c
ci(guard): node 22 for upstream's engine floor
vectorcmd Aug 4, 2026
a85c850
chore: map contributor emails for the upstream rebaseline sync
vectorcmd Aug 4, 2026
ef9dd2c
fix(sweeper): keep the queue sweeper's timer inert under pytest
vectorcmd Aug 4, 2026
68d6e35
Rebaseline Ace patches onto current Nous Hermes main
vectorcmd Aug 4, 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.
2 changes: 1 addition & 1 deletion .ace/upstream-main.sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0b17d4d71e1ad94aa8d3d9ae3172e031ab42860a
f5be9236e00ddf2f2a412697f267078fc4ee068e
3 changes: 3 additions & 0 deletions .github/actions/detect-changes/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ outputs:
python:
description: Run Python tests / ruff / ty / windows-footguns.
value: ${{ steps.classify.outputs.python }}
python_prod:
description: Python changes outside tests/ — gates product jobs (Desktop E2E, Docker).
value: ${{ steps.classify.outputs.python_prod }}
frontend:
description: Run the TypeScript testing matrix + desktop build.
value: ${{ steps.classify.outputs.frontend }}
Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/capella-patches-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,18 @@ jobs:
with:
fetch-depth: 0
- name: Verify Capella patches are present
run: bash apps/desktop/scripts/capella-patch-guard.sh
run: |
# Post-rebaseline the desktop tree is pure upstream — there is no
# patch surface to guard. Succeed (keeping this required check
# green) when the guard script no longer exists.
if [ -f apps/desktop/scripts/capella-patch-guard.sh ]; then
bash apps/desktop/scripts/capella-patch-guard.sh
else
echo "no fork desktop patch surface (rebaselined to upstream) — guard passes"
fi
- uses: actions/setup-node@v4
with:
node-version: '20'
node-version: '22'
- name: Install deps (lockfile-faithful)
run: npm ci
- name: Build desktop renderer
Expand Down
26 changes: 23 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ jobs:
timeout-minutes: 10
outputs:
python: ${{ steps.classify.outputs.python }}
python_prod: ${{ steps.classify.outputs.python_prod }}
frontend: ${{ steps.classify.outputs.frontend }}
site: ${{ steps.classify.outputs.site }}
scan: ${{ steps.classify.outputs.scan }}
Expand Down Expand Up @@ -89,7 +90,19 @@ jobs:
e2e-desktop:
name: Desktop E2E
needs: detect
if: needs.detect.outputs.python == 'true' || needs.detect.outputs.frontend == 'true'
# python_prod (not python): the Playwright suite exercises the built app
# + `hermes serve` backend, which never import anything under tests/.
# Tests-only PRs (~17% of commits) skip this 5-minute job — the longest
# single job in the workflow — while still running the full pytest lanes.
#
# ⛔ TEMPORARILY DISABLED (Aug 2, 2026, Teknium) — the suite is red on
# every PR and on main itself since the Aug 1 night engines/npm churn
# (#76499 → #76562 → #76575): the mock-backend Electron window never
# gets a title, so boot/chat/setup/interim specs all fail identically
# regardless of the PR's diff (verified on #76573 and the docs-only
# #76582). Tracking issue: #76627 (assigned: Ari). To re-enable,
# delete the `false &&` below — nothing else changed.
if: ${{ false && (needs.detect.outputs.python_prod == 'true' || needs.detect.outputs.frontend == 'true') }}
uses: ./.github/workflows/e2e-desktop.yml

docs-site:
Expand Down Expand Up @@ -117,6 +130,11 @@ jobs:
needs: detect
uses: ./.github/workflows/uv-lockfile-check.yml

infographic-check:
name: Check no committed infographics
needs: detect
uses: ./.github/workflows/infographic-check.yml

lockfile-diff:
name: package-lock.json diff
needs: detect
Expand All @@ -134,8 +152,10 @@ jobs:
needs: detect
# Trusted main pushes run docker.yml directly so its container-publish
# environment secrets never cross this reusable-workflow call. PR runs
# remain build/test-only and secret-free.
if: needs.detect.outputs.event_name == 'pull_request' && (needs.detect.outputs.python == 'true' || needs.detect.outputs.frontend == 'true' || needs.detect.outputs.docker_meta == 'true')
# remain build/test-only and secret-free. Gated on python_prod (not
# python): the image copies installed code, never tests/ — tests-only
# PRs skip the build.
if: needs.detect.outputs.event_name == 'pull_request' && (needs.detect.outputs.python_prod == 'true' || needs.detect.outputs.frontend == 'true' || needs.detect.outputs.docker_meta == 'true')
uses: ./.github/workflows/docker.yml

supply-chain:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/contributor-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ jobs:
echo -e "$MISSING"
echo ""
echo "Add a mapping file (do NOT edit AUTHOR_MAP in release.py):"
echo " python3 scripts/audit_pr_attribution.py --fix # auto-resolve + create files"
echo "or manually:"
echo -e "$MISSING" | while read -r line; do
email=$(echo "$line" | sed 's/^ *//' | cut -d' ' -f1)
[ -z "$email" ] && continue
Expand All @@ -89,7 +91,7 @@ jobs:

# Emit review_status for unmapped emails
DETAIL=$(echo -e "$MISSING" | sed '/^$/d; s/^ //')
HOW_TO_FIX=$'Add mappings to scripts/release.py AUTHOR_MAP:\n```\n"<email>": "<github-username>",\n```\nTo find the GitHub username for an email:\n```\ngh api \'search/users?q=EMAIL+in:email\' --jq \'.items[0].login\'\n```\n'
HOW_TO_FIX=$'Run from the PR branch:\n```\npython3 scripts/audit_pr_attribution.py --fix\ngit add contributors && git commit -m "chore: map contributor emails" && git push\n```\nOr map one email manually (do NOT edit AUTHOR_MAP in release.py):\n```\npython3 scripts/add_contributor.py <email> <github-username>\n```\nTo find the GitHub username for an email:\n```\ngh api \'search/users?q=EMAIL+in:email\' --jq \'.items[0].login\'\n```\n'
REVIEW_STATUS=$(jq -nc \
--arg detail "$DETAIL" \
--arg how_to_fix "$HOW_TO_FIX" \
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,14 @@ jobs:

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
node-version: 26
cache: npm
cache-dependency-path: website/package-lock.json

- name: grab npm 12
run: |
npm i -g npm@12

- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.11'
Expand Down
37 changes: 36 additions & 1 deletion .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,19 @@ jobs:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

# Retry once on transient Docker Hub / buildkit pull failures
# (connection reset, auth token timeout, rate limiting). The action
# generates a unique builder name per invocation so the retry doesn't
# collide with the failed first attempt. A genuine persistent failure
# still fails the job — only the first attempt has continue-on-error.
# Refs: docker/setup-buildx-action#510
- name: Set up Docker Buildx
id: buildx
continue-on-error: true
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Set up Docker Buildx (retry)
if: steps.buildx.outcome == 'failure'
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

# Build once, load into the local daemon for testing. Cached
Expand Down Expand Up @@ -88,9 +100,16 @@ jobs:
# ---------------------------------------------------------------------
- name: Install uv (for docker tests)
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # 8.2.0
with:
# Pinned: unpinned setup-uv fetches a 'latest' manifest from
# raw.githubusercontent.com every job; transient fetch failures
# fail the job (2026-07-28 incident). Keep in sync with tests.yml.
version: "0.9.28"

- name: Set up Python 3.11 (for docker tests)
run: uv python install 3.11
uses: ./.github/actions/retry
with:
command: uv python install 3.11

- name: Install Python dependencies (for docker tests)
# ``dev`` extra pulls in pytest, pytest-asyncio —
Expand Down Expand Up @@ -141,7 +160,15 @@ jobs:
- name: Checkout trusted source
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

# Retry once on transient Docker Hub / buildkit pull failures.
# See build job for rationale; same pattern.
- name: Set up Docker Buildx
id: buildx
continue-on-error: true
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Set up Docker Buildx (retry)
if: steps.buildx.outcome == 'failure'
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Log in to Docker Hub
Expand Down Expand Up @@ -203,7 +230,15 @@ jobs:
pattern: digest-*
merge-multiple: true

# Retry once on transient Docker Hub / buildkit pull failures.
# See build job for rationale; same pattern.
- name: Set up Docker Buildx
id: buildx
continue-on-error: true
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Set up Docker Buildx (retry)
if: steps.buildx.outcome == 'failure'
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Log in to Docker Hub
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/docs-site-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,14 @@ jobs:

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
node-version: 26
cache: npm
cache-dependency-path: website/package-lock.json

- name: grab npm 12
run: |
npm i -g npm@12
- name: Install website dependencies
uses: ./.github/actions/retry
with:
Expand Down
26 changes: 20 additions & 6 deletions .github/workflows/e2e-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,13 @@ jobs:
# ── Node ───────────────────────────────────────────────────────────
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
node-version: 26
cache: npm

- name: grab npm 12
run: |
npm i -g npm@12

# Full npm ci (not --ignore-scripts): electron's postinstall
# downloads the binary we launch, and node-pty's native build is
# needed for the terminal pane.
Expand All @@ -52,12 +57,21 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # 8.2.0
with:
# Pin the uv version: unpinned, setup-uv resolves "latest" by
# fetching a manifest from raw.githubusercontent.com on EVERY job —
# a transient fetch failure fails the whole job (2026-07-28 slice-5
# incident). Pinned, the binary downloads directly; no manifest hop.
version: '0.9.28'
enable-cache: true
cache-dependency-glob: |
pyproject.toml
uv.lock

- name: Set up Python 3.11
run: uv python install 3.11
uses: ./.github/actions/retry
with:
command: uv python install 3.11

- name: Install Python dependencies
uses: ./.github/actions/retry
with:
Expand Down Expand Up @@ -101,11 +115,11 @@ jobs:
npx playwright test --reporter=list
fi
env:
CI: "true"
CI: 'true'
# Ensure no real API keys leak into the test env.
OPENROUTER_API_KEY: ""
OPENAI_API_KEY: ""
NOUS_API_KEY: ""
OPENROUTER_API_KEY: ''
OPENAI_API_KEY: ''
NOUS_API_KEY: ''

# ── Save updated baselines to cache (main only) ───────────────────
- name: Save updated baselines to cache
Expand Down
78 changes: 78 additions & 0 deletions .github/workflows/infographic-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Infographic Check

# Rejects PRs that commit PR-infographic images into the repo.
#
# PR infographics are rendered to an image-provider URL (fal.media) and
# embedded in the PR *description*. The PR body is the archive; the binary
# never belongs in git history.
#
# This has now leaked twice. PR #48261 removed the first batch, PR #54564
# removed a second batch and added `infographic/` to `.gitignore` — but
# `.gitignore` only stops *accidental* `git add`. It does nothing against
# `git add -f`, and it does nothing for a path that does not literally match
# the ignore pattern. Nine more PNGs (~14MB) were committed in the four
# weeks AFTER that rule landed, plus PR #70552 caught an `infograficos/`
# spelling that sidestepped the pattern entirely.
#
# A passive ignore rule cannot enforce a policy. This check can.

on:
workflow_call:
outputs:
review_status:
description: "JSON array of review_status objects for the synthesizer."
value: ${{ jobs.check-no-committed-infographics.outputs.review_status }}

permissions:
contents: read

jobs:
check-no-committed-infographics:
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
review_status: ${{ steps.infographic-check.outputs.review_status }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- id: infographic-check
name: Reject committed PR-infographic images
run: |
# Match on the IMAGE, not on a directory name. Keying this to
# `infographic/` is what let `infograficos/` through in #70552 —
# any localized or typo'd directory would sidestep it again.
# Instead: find tracked raster images whose path contains an
# infographic-ish segment, in any spelling, at any depth.
#
# `docs/assets` and `website/` legitimately hold product imagery
# and are excluded; those are referenced from shipped docs pages.
OFFENDERS=$(git ls-files -z \
| tr '\0' '\n' \
| grep -iE '(^|/)(infograph|infograf)[^/]*/' \
| grep -iE '\.(png|jpe?g|webp|gif)$' \
|| true)

if [ -n "$OFFENDERS" ]; then
COUNT=$(printf '%s\n' "$OFFENDERS" | wc -l | tr -d ' ')
STATUS='[{"source":"committed infographics","results":[{"kind":"action_required","title":"PR infographic committed to the repo","summary":"Infographic images belong in the PR description, never in git.","detail":"","how_to_fix":"Untrack the image and reference the provider URL from the PR body instead:\n```\ngit rm --cached <path-to-image>\n```\nThen put it in the PR description:\n```\n## Infographic\n\n![slug](https://<provider-url>)\n```\n"}]}]'
echo "review_status=${STATUS}" >> "$GITHUB_OUTPUT"
echo ""
echo "::error::${COUNT} PR-infographic image(s) are tracked in git."
echo ""
printf '%s\n' "$OFFENDERS" | sed 's/^/ /'
echo ""
echo "PR infographics are rendered to an image-provider URL and"
echo "embedded in the PR DESCRIPTION. The PR body is the archive —"
echo "the binary never enters git history."
echo ""
echo "This rule has been re-established twice already (#48261,"
echo "#54564) and leaked both times, because .gitignore cannot stop"
echo "'git add -f' or a differently-spelled directory (#70552)."
echo ""
echo "To fix:"
echo " git rm --cached <path> # keeps your local copy"
echo " # then embed the provider URL in the PR description"
exit 1
fi
echo "::notice::No committed PR-infographic images."
echo "review_status=[]" >> "$GITHUB_OUTPUT"
6 changes: 5 additions & 1 deletion .github/workflows/js-autofix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,13 @@ jobs:

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
node-version: 26
cache: npm

- name: grab npm 12
run: |
npm i -g npm@12

# --ignore-scripts: eslint only needs TS sources + eslint packages.
- uses: ./.github/actions/retry
with:
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/js-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,13 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
node-version: 26
cache: npm

- name: grab npm 12
run: |
npm i -g npm@12
- uses: ./.github/actions/retry
with:
command: npm ci --ignore-scripts
Expand Down Expand Up @@ -61,8 +66,13 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
node-version: 26
cache: npm

- name: grab npm 12
run: |
npm i -g npm@12
- uses: ./.github/actions/retry
with:
command: npm ci
Expand Down
Loading
Loading