Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
714 commits
Select commit Hold shift + click to select a range
9c013ea
fix(dashboard): follow scroll on implicit active-session resume (#93518)
chelsealong Aug 24, 2026
17f8e24
fix(desktop): bound reconnect awaits so a stuck IPC round-trip can't …
chelsealong Aug 24, 2026
5ef205d
fix(desktop): bound the revalidateConnection() await too (#93454)
chelsealong Aug 24, 2026
e8d5660
fix(desktop): bound the boot and gateway-switch resolveGatewayWsUrl a…
teknium1 Aug 24, 2026
09529af
fix(desktop): group chats no longer crash when a member's connection …
chelsealong Aug 24, 2026
ec013b7
fix(desktop): split strict connection routing from passive roster lookup
chelsealong Aug 24, 2026
c509af6
fix(desktop): sweep group-chat rosters when a connection is removed
teknium1 Aug 24, 2026
725cfe2
fix(desktop): annotate group-chat members already orphaned before hyd…
teknium1 Aug 24, 2026
40ab950
fix(desktop): guard render-reachable route lookups against orphaned rows
teknium1 Aug 24, 2026
b614e26
fix(desktop): isolate a failed lazy syntax-diff import from the works…
chelsealong Aug 24, 2026
73af57a
fix(desktop): prefer the unpacked web dist over the asar-internal ren…
teknium1 Aug 24, 2026
c7f1f4d
fix(desktop): teach the torn-bundle guard to see missing lazy chunks
teknium1 Aug 24, 2026
b373015
fix(terminal): cap watch_patterns notifications over a process's life…
chelsealong Aug 24, 2026
d8d1e18
test(terminal): harden watch_patterns lifetime cap — delivered-only c…
Aug 24, 2026
a87d314
fix(auth): malformed OpenRouter env key no longer shadows valid crede…
teknium1 Aug 24, 2026
c9e2a46
fix(pricing): support Gemini context-tiered rates in pricing snapshot…
teknium1 Aug 24, 2026
06fc941
fix(desktop): stop bot-relay drain loop from redialing a WebSocket pe…
teknium1 Aug 24, 2026
57ece81
fix(desktop): exclude cron sessions from the titlebar unread badge
teknium1 Aug 24, 2026
4d030a3
fix(desktop): stack subsequent preview tiles as tabs instead of new r…
teknium1 Aug 24, 2026
97850af
fix(hindsight): send configured event timestamps
ragingbulld Aug 15, 2026
497d6d5
fix(hindsight): harden event timestamps
ragingbulld Aug 16, 2026
32fb12a
fix(hindsight): let hindsight_retain convey event time via occurred_at
teknium1 Aug 24, 2026
1bee67b
fix(desktop): give keyboard focus a visible affordance where the glob…
teknium1 Aug 24, 2026
a4092cd
fix(desktop): open a branched session in the main workspace, not just…
chelsealong Aug 24, 2026
9fbe3cc
fix(desktop): scope branch-opens-primary to the currently selected se…
chelsealong Aug 24, 2026
2191488
test(desktop): pin auto-speak silence across an Edge TTS fallback id …
chelsealong Aug 24, 2026
ec5e369
Merge pull request #93784 from NousResearch/salv/81234-retry-carrier
teknium1 Aug 24, 2026
6e534df
Merge pull request #93773 from kshitijk4poor/fix/codex-sdk-transform-…
kshitijk4poor Aug 24, 2026
c29c9d1
fix(desktop): hold a per-turn socket lease so group-chat member turns…
teknium1 Aug 24, 2026
85958ab
test: drop unused param in group-turn lease mock (lint)
teknium1 Aug 24, 2026
8e46e2c
Merge pull request #93793 from NousResearch/salv/autospeak-test-93540
teknium1 Aug 24, 2026
9525c0e
fix(desktop-update): use the system default browser for the update shim
lorzl Aug 21, 2026
9a71cb9
feat(gateway): add gateway.ping heartbeat wire contract
100yenadmin Aug 19, 2026
9153be2
feat(shared): heartbeat and socket-generation invalidation in JsonRpc…
100yenadmin Aug 19, 2026
e3f695e
fix(tui): heartbeat and bounded reconnect for silent WebSocket drops
100yenadmin Aug 19, 2026
302085a
fix(cron): surface gateway liveness in cronjob tool results (#87033)
BrunoBza Aug 23, 2026
5843b2f
fix(cron): share liveness helper with CLI and extend it to cronjob list
kshitijk4poor Aug 24, 2026
ddbd928
refactor(cron): parameterize liveness warning plurality, drop fragile…
kshitijk4poor Aug 24, 2026
111d809
refactor(telegram): migrate _await_with_thread_deadline onto agent.de…
kshitijk4poor Aug 24, 2026
e400e00
Merge pull request #93826 from kshitijk4poor/fix/85125-2f-telegram-de…
kshitijk4poor Aug 24, 2026
7dde1b8
fix(mcp): resolve tool-call timeouts via the unified deadline layer (…
kshitijk4poor Aug 24, 2026
11f3ebe
fix(desktop): move the Linux HUD with a native compositor drag
OutThisLife Aug 24, 2026
fab0de1
fix(desktop): debounce and re-verify zoom on Linux Wayland
OutThisLife Aug 24, 2026
b595fcd
fix(desktop): keep the Linux HUD clickable and recoverable
OutThisLife Aug 24, 2026
d467da9
fix(desktop): add a HUD layout reset control
OutThisLife Aug 24, 2026
4fee6f3
docs(desktop): document Linux and Wayland HUD behavior
OutThisLife Aug 24, 2026
81baae6
fix(desktop): polish HUD movement and resizing on X11
howdeploy Aug 24, 2026
057dcdf
Merge pull request #93830 from kshitijk4poor/fix/85125-2g-mcp-timeout…
kshitijk4poor Aug 24, 2026
de07bd5
fix(serve): emit BACKEND_PORT_IN_USE sentinel + exit 75 on port bind …
teknium1 Aug 24, 2026
c0ce747
fix(serve): Windows conflict probe uses SO_EXCLUSIVEADDRUSE (SO_REUSE…
teknium1 Aug 24, 2026
d08f9e1
fix(desktop): never kill a healthy backend on a claim probe failure; …
teknium1 Aug 24, 2026
7e500d2
fix(desktop): float and pin the HUD on Hyprland
OutThisLife Aug 24, 2026
74ad422
fmt(js): `npm run fix` on merge (#94046)
hermes-seaeye[bot] Aug 24, 2026
a0795ac
fix(codex): identify Hermes requests
vignesh-oai Aug 19, 2026
28b758d
feat(desktop): make Cmd/Ctrl+L focus the composer from anywhere
ethernet8023 Aug 24, 2026
d7202d6
refactor(desktop): derive HUD OS behavior from one windowing profile
OutThisLife Aug 24, 2026
652f5d7
fix(desktop): sort HUD windowing imports for eslint
OutThisLife Aug 24, 2026
a251e87
fmt(js): `npm run fix` on merge (#94140)
hermes-seaeye[bot] Aug 24, 2026
8a8f74e
feat(desktop): let the in-app browser hold more than one tab
OutThisLife Aug 24, 2026
84758ed
fix(desktop): hold the typed address in the browser bar until the pag…
OutThisLife Aug 24, 2026
cd29765
refactor(desktop): mint browser tab ids at random rather than by slot
OutThisLife Aug 24, 2026
f3e0cf0
fix(desktop): keep Home new sessions detached from the last project
xxxigm Aug 24, 2026
85a55e2
test(desktop): lock Home new-session detach against stale project cwd
xxxigm Aug 24, 2026
b9eb37e
fmt(js): `npm run fix` on merge (#94176)
hermes-seaeye[bot] Aug 24, 2026
2f33833
fix(mcp): recover poisoned connections + fail fast on dead stdio tran…
kshitijk4poor Aug 24, 2026
547f985
refactor(deadline): consolidate site-local tree-kills onto agent.dead…
kshitijk4poor Aug 24, 2026
9990bcb
fix(terminal): sweep setsid descendants after local timeout group-kil…
kshitijk4poor Aug 24, 2026
ead9d8e
fix(desktop): stop transcript jumps when a turn settles
OutThisLife Aug 23, 2026
e4dac84
fix(desktop): demote unanswered clarify cards on Stop
OutThisLife Aug 24, 2026
dc998a2
fix(desktop): re-arm pending clarify cards in place
OutThisLife Aug 24, 2026
53c4693
fix(desktop): restore pending_clarify snapshots on activate and resume
OutThisLife Aug 24, 2026
a99001c
style(desktop): space sibling restore import for eslint
OutThisLife Aug 24, 2026
c73d721
fix(computer-use): recreate CUA session suspect after MCP timeout (#7…
BlackishGreen33 Aug 24, 2026
8d29a55
Merge pull request #94188 from kshitijk4poor/fix/85125-4d-treekill-co…
kshitijk4poor Aug 24, 2026
2f506c2
fix(lsp): retire clients when the protocol reader exits
fangliquanflq Aug 9, 2026
1420176
fix(lsp): abort diagnostics waits after transport death
fangliquanflq Aug 9, 2026
f14059f
fix(models): OpenRouter :nitro/:floor routing variants no longer reje…
teknium1 Aug 24, 2026
87631bd
feat(tui-gateway): seq-stamped event replay for lossless desktop reco…
kshitijk4poor Aug 24, 2026
c757740
test: drop unused afterEach import (CI eslint)
kshitijk4poor Aug 24, 2026
b106a09
Merge pull request #94219 from kshitijk4poor/feat/gw-event-replay
kshitijk4poor Aug 24, 2026
03b87d6
fmt(js): `npm run fix` on merge (#94230)
hermes-seaeye[bot] Aug 24, 2026
e2e8d7e
fix(web): keyword-align titles of six high-impression docs pages
SHL0MS Aug 24, 2026
ab0d984
Merge pull request #94240 from NousResearch/shl0ms/docs-seo-titles
SHL0MS Aug 24, 2026
786f370
fix(mcp): psutil.pid_exists for stdio children liveness — Windows foo…
kshitijk4poor Aug 24, 2026
457e9b8
fix(terminal): annotate sweep as POSIX-only for the killpg guard lint…
kshitijk4poor Aug 24, 2026
d2a095d
Merge pull request #94184 from kshitijk4poor/fix/85125-3b-mcp-recovery
kshitijk4poor Aug 24, 2026
41447a6
Merge pull request #94187 from kshitijk4poor/fix/85125-4b-terminal-tr…
kshitijk4poor Aug 24, 2026
7ef0e98
test: pin that install-root siblings still get parent-dir hardening
benbarclay Aug 25, 2026
8b48f62
fix: log a warning when parent-dir hardening is skipped for the insta…
benbarclay Aug 25, 2026
98f0e0d
docs: update secure_parent_dir docstring and caller comments for the …
benbarclay Aug 25, 2026
e26e25d
docs: add operator remediation for install dirs locked to 0700 by old…
benbarclay Aug 25, 2026
321d5c7
fix(desktop): stop the HUD frosting the window while a turn runs
OutThisLife Aug 25, 2026
5ef1409
fix(desktop): say why window enumeration failed instead of swallowing it
OutThisLife Aug 25, 2026
93acc22
feat(desktop): add Settings toggle for vibe hearts
Adolanium Aug 12, 2026
b85032f
test(desktop): pin vibe-hearts toggle across the pet-overlay forward …
teknium1 Aug 24, 2026
c86612e
fmt(js): `npm run fix` on merge (#94346)
hermes-seaeye[bot] Aug 25, 2026
a08dfab
Merge pull request #94351 from NousResearch/fix/secure-parent-dir-fol…
benbarclay Aug 25, 2026
e3b5512
fix(desktop): keep modal context menus inside dialogs
helix4u Aug 24, 2026
5400fb8
fix(desktop): stop gating edit-menu Paste on the clipboard probe (#91…
Enough1122 Aug 21, 2026
b637ee0
fix(desktop): keep UI scale across in-page route navigation
skierrz Aug 25, 2026
f8b52e4
test(desktop): cover UI scale across recordless hash routes
OutThisLife Aug 25, 2026
cbc8d18
fix(signal): chunk long cron deliveries instead of truncating
lkz-de Jul 11, 2026
48f69e5
fix(signal): chunk long standalone sends and cover both delivery path…
teknium1 Aug 25, 2026
0484910
feat(terminal): pluggable terminal environment backends via plugin re…
teknium1 Aug 25, 2026
a75ea37
feat: browser snapshots drop LLM summarization — truncate-and-store l…
teknium1 Aug 25, 2026
beb7941
fix(tui-gateway): make WS reconnect replay actually deliver events (f…
teknium1 Aug 25, 2026
7c97343
fmt(js): `npm run fix` on merge (#94410)
hermes-seaeye[bot] Aug 25, 2026
3733e4a
fix: system prompt no longer references tools/skills the session can'…
teknium1 Aug 25, 2026
64a6f42
test: opted-out profile seeding now exercises the essential-only sync…
teknium1 Aug 25, 2026
bc47fcd
fix(tests): e2e group-restart test no longer flakes on cold SessionDB…
teknium1 Aug 25, 2026
b45b028
fix(agent): gate memory provider system_prompt_block on toolset confi…
Enough1122 Aug 7, 2026
8172be0
fix(memory): log when a configured provider's tools are gated off by …
teknium1 Aug 25, 2026
c1b295d
test(desktop): stop the syntax-diff mock factory from leaking unhandl…
teknium1 Aug 25, 2026
bf8b28f
fix(tools): route browser snapshot storage through the symlink-safe w…
pierrenode Aug 14, 2026
d934bbd
fix(agent): race Codex IPv6 and IPv4 connections
nateEc Jul 23, 2026
9cce872
docs: note httpcore pin dependency in _enable_happy_eyeballs
teknium1 Aug 25, 2026
6ce7ab8
feat(browser): make snapshot threshold configurable
Jul 12, 2026
f84f94b
fix(teams): do not call App() when the SDK was never bound
xxxigm Aug 24, 2026
27640c5
test(teams): cover connect when the namespace exists but App is unbound
xxxigm Aug 24, 2026
6c1bfff
fix(telegram): wait for reconnect before failing send as Not connected
xxxigm Aug 24, 2026
fcda325
test(telegram): cover send() waiting for reconnect after a network blip
xxxigm Aug 24, 2026
1fac440
fix(gateway): recover explicit computer-use media paths
helix4u Aug 25, 2026
5908c57
fix(fallback): surface provider transitions and primary recovery
Ailirag Aug 4, 2026
d4f31a8
fix(gateway): resolve session-scoped Docker sandboxes for MEDIA deliv…
quocanh261997 Aug 25, 2026
a15533b
feat(gateway): warn when a Docker sandbox MEDIA path fails translation
quocanh261997 Aug 25, 2026
34041fa
test(gateway): accept session_key kwarg in media resend dedup stubs
quocanh261997 Aug 25, 2026
335c60e
fix(skills): preserve review marks across contexts
zyz619963502zyz Aug 25, 2026
fc4c2f4
fix(memory): migrate OpenViking URIs to the viking://~ home alias
liuhao1024 Aug 22, 2026
7cd43cd
fix(memory): emit explicit-uid OpenViking URIs resolved from system s…
liuhao1024 Aug 22, 2026
5ff03cb
fix(memory): scope OpenViking user cache to connection
ehz0ah Aug 24, 2026
4387e03
fix(memory): keep OpenViking identity operations consistent
ehz0ah Aug 25, 2026
b0cf259
fix: follow-up for salvaged PR #93985 — cache key, snapshot, dead code
kshitijk4poor Aug 25, 2026
a70d2ff
fix(background-review): teach review prompts the enforced read-before…
teknium1 Aug 25, 2026
610e2e0
fix(curator): tell the background reviewer to read before it writes
GuilhermeArtiles Aug 2, 2026
8ad20d0
test(curator): assert the instruction through the delivered prompt, n…
GuilhermeArtiles Aug 2, 2026
760d3af
chore: map contributor email for salvage attribution
teknium1 Aug 25, 2026
bb0d550
fix(gateway): widen computer-use media path repair to sibling surfaces
kshitijk4poor Aug 25, 2026
105999a
refactor(gateway): unify computer-use repair call sites after review
kshitijk4poor Aug 25, 2026
eaf6545
docs(gemini): update to use latest gemini models
markmcd Aug 25, 2026
e503294
chore: map contributor email for salvage attribution
kshitijk4poor Aug 25, 2026
d634b37
refactor(gateway): retire private repair alias per replay_cleanup pre…
kshitijk4poor Aug 25, 2026
c8c3f4c
fix(approval): machine-readable outcome parity on the gateway tails +…
kshitijk4poor Aug 25, 2026
dc3716d
Merge pull request #94536 from kshitijk4poor/salvage/94439-computer-u…
kshitijk4poor Aug 25, 2026
4c1f53b
Merge pull request #94568 from kshitijk4poor/fix/85125-2e-approval-ou…
kshitijk4poor Aug 25, 2026
15f7b72
fix(terminal): persistent Docker containers are profile-scoped, not p…
teknium1 Aug 25, 2026
aeac982
fix(computer_use): route explicit screen capture to get_desktop_state
2ndNatureAI Aug 25, 2026
ce9b9a6
feat(computer_use): guide models from full-screen grabs to interactiv…
teknium1 Aug 25, 2026
0268c0b
chore: map 2ndNatureAI attribution
teknium1 Aug 25, 2026
76e306c
refactor(tools): remove expired BFL FLUX 3 promo core tools (migratio…
teknium1 Aug 25, 2026
1104ffe
feat(memory): opt-in fail-closed pre-compress checkpoint contract (AP…
GottZ Aug 24, 2026
3c31c44
docs(memory): document the pre-compress checkpoint contract
GottZ Aug 24, 2026
70d0b1f
fix(memory): review follow-ups for the pre-compress checkpoint contract
GottZ Aug 24, 2026
8cc379b
fix(memory): bind the checkpoint gate to every compaction authority
GottZ Aug 24, 2026
9e551d2
refactor(memory): renumber checkpoint API — v1 is the implicit histor…
teknium1 Aug 25, 2026
1ee524f
fix(memory): bind the checkpoint gate to post-turn micro-compaction too
teknium1 Aug 25, 2026
7a67bd0
feat(docker): support shared container identities
fangliquanflq Aug 12, 2026
f5200a4
fix(config): declare shared Docker container key
fangliquanflq Aug 12, 2026
82b32f3
feat(terminal): wire shared-container key into profile-scoped resolve…
teknium1 Aug 25, 2026
d736f5d
fix(docker): digest-suffix shared-container identity labels so distin…
teknium1 Aug 25, 2026
90fd9a8
feat(mcp): add Cloudflare's official API MCP server to the catalog
teknium1 Jul 20, 2026
53015d3
feat(mcp): pin ?codemode=false so tool_search sees the full endpoint …
teknium1 Jul 20, 2026
3a1a3a1
feat(mcp): curated exclude list for cloudflare + glob tool filters + …
teknium1 Jul 20, 2026
753f362
feat(mcp): add 34 official vendor-hosted remote MCP servers to the ca…
teknium1 Aug 25, 2026
3e570dd
refine(mcp): drop github, perplexity, telnyx, exa, parallel-search fr…
teknium1 Aug 25, 2026
99f5aec
feat(mcp): add Better Stack and Railway remote MCPs (OAuth+DCR, live-…
teknium1 Aug 25, 2026
9a37325
feat(mcp): add 18 more live-verified remote MCPs from the final sweep
teknium1 Aug 25, 2026
88369af
refine(mcp): debloat the catalog batch — vendor-doc tool audit applie…
teknium1 Aug 25, 2026
054cba2
fix(mcp): review findings — reinstall no longer clobbers user exclude…
teknium1 Aug 25, 2026
164e25a
test(mcp-catalog): actually exercise the exfil-shaped-manifest rejection
GottZ Aug 25, 2026
fb1ec36
fix(mcp): treat tools.include: [] as an explicit empty whitelist
GottZ Aug 25, 2026
01177ed
fix(mcp-catalog): don't announce a probe on the exclude-mode install …
GottZ Aug 25, 2026
965689d
fix(mcp-catalog): failed probe keeps the prior tool filter instead of…
GottZ Aug 25, 2026
45b35f9
fix(mcp): tool-selection UIs stay in exclude mode instead of freezing…
teknium1 Aug 25, 2026
04603fc
feat(web): TTL result caching for web_search + web_extract
teknium1 Aug 25, 2026
8adef09
fix(web): extract cache serves only after policy + provider gates; re…
teknium1 Aug 25, 2026
f0381ee
fix(web): never cache local development URLs in the extract cache
teknium1 Aug 25, 2026
ba9fc55
feat(web): cache_exempt_hosts — always-live fetches for staging/tunne…
teknium1 Aug 25, 2026
1bbb6e5
docs(skill): troubleshoot stale web_extract pages — cache carveouts +…
teknium1 Aug 25, 2026
cbd8de8
fix(gateway): bind session cwd for the live system-prompt rebuild
ethernet8023 Aug 18, 2026
90ee446
fix(desktop): translate sidebar recents_profile through SSH aliases
OutThisLife Aug 25, 2026
02c7ae9
fix(desktop): route session list REST through the active profile
OutThisLife Aug 25, 2026
0c47cd5
fix(cli): scope TUI npm-install check to the ui-tui workspace closure
PRATHAMESH75 Jul 18, 2026
a96bad8
fix(cli): scope TUI npm-install closure to all selected workspaces
PRATHAMESH75 Jul 19, 2026
4d66def
fix(tui): prevent spurious npm install on every launch
qazasdsdqaza Jun 25, 2026
def7bdc
fix(cli): don't re-run npm install on every TUI launch with npm>=10 r…
andyst-dev Aug 12, 2026
76d8f87
fix(cli): reconcile scoped-closure and reduced-lockfile freshness checks
teknium1 Aug 25, 2026
52bcfb4
chore: map contributor email for attribution gate
teknium1 Aug 25, 2026
4032a15
refactor(prompt): remove the ~1.2K-token Nous Subscription block from…
teknium1 Aug 25, 2026
5b82658
Merge pull request #90129 from rroverin/fix/nvidia-nim-tool-message-n…
jquesnelle Aug 25, 2026
9de5460
feat(cron): acked failure signatures stop re-pinging — durable incide…
teknium1 Aug 25, 2026
bee489d
fix(update): restart a booted-out launchd gateway instead of silently…
jeff-mettel Aug 23, 2026
6a6e16f
feat(desktop): OS-keychain encryption for stored secrets is now opt-i…
teknium1 Aug 25, 2026
a87e883
style(desktop): sort secret-storage-policy import per perfectionist lint
teknium1 Aug 25, 2026
7c5c994
fix(teams): request supported transcript content format
helix4u Aug 25, 2026
b9513f2
feat(desktop): let a pane prefix the zone tab menu
OutThisLife Aug 25, 2026
26777a4
feat(desktop): open a Browser tab in the default browser from its con…
OutThisLife Aug 25, 2026
36f1423
fix(update): gateway-only concurrent instances no longer abort hermes…
damadorPL Aug 25, 2026
56f94fa
feat(mcp-catalog): add Grafana Cloud MCP server
cedricziel Aug 23, 2026
95668f5
fix(mcp): Atlassian catalog entry no longer 404s + Grafana defensive …
teknium1 Aug 25, 2026
62b2d78
fix(tool-search): bridge batch barrier, listing truncation, source in…
alt-glitch Aug 25, 2026
a608799
feat(desktop): give the in-app Browser its own OS window
OutThisLife Aug 25, 2026
e8df401
feat(desktop): hide the docked Browser tab while it is popped out
OutThisLife Aug 25, 2026
30b042e
fix(desktop): clear the JS/TS check failures on the Browser pop-out
OutThisLife Aug 25, 2026
eeb391d
feat(desktop): add --setup-tcc-identity to keep macOS TCC grants acro…
criptogus Aug 3, 2026
28f2ea8
fix(desktop): make --setup-tcc-identity produce a VALID signing ident…
teknium1 Aug 25, 2026
936a6ea
fix(desktop): scope Cronjobs pane to the roster-clicked bot when the …
Finn763 Aug 25, 2026
6b25e4e
docs(browser): put Browser Use Cloud first
MagMueller Aug 25, 2026
648361e
chore: map contributor email
MagMueller Aug 25, 2026
4a0b277
docs(browser): call Browserbase the alternative
MagMueller Aug 25, 2026
a837c7a
fix(desktop): coerce bot RPC rejections for React 19 error formatting
686f6c61 Aug 25, 2026
961635c
fix(desktop): copy unsafe RPC rejections instead of mutating name
686f6c61 Aug 25, 2026
37a8c10
fix(desktop): stop the edit composer's timers from outliving it
jackulau Aug 22, 2026
fab931f
docs(desktop): name the timer drain in the effect that performs it
jackulau Aug 22, 2026
b73e057
fix(hermes-bots): stop New Cronjob dialog crash when the owner is a r…
zhangfei1231231-sketch Aug 25, 2026
9033545
test: pin CreateRoutineDialog owner-object label resolution (follow-u…
teknium1 Aug 25, 2026
1a5ca62
fmt(js): `npm run fix` on merge (#95114)
hermes-seaeye[bot] Aug 25, 2026
250faa6
fix(desktop): keep the Cronjobs pane subscribed to roster hydration
BrunoBza Aug 25, 2026
e455e4a
feat(tool-search): multi-query search, batched describe, Snowball ste…
alt-glitch Aug 23, 2026
1e86a26
fix(tool-search): preserve exact and per-query ranking semantics
alt-glitch Aug 23, 2026
b09f617
fix(tool-describe): separate missing and direct names
alt-glitch Aug 23, 2026
e35a7bd
perf(tool-search): cache stems and bound result metadata
alt-glitch Aug 23, 2026
3b06574
refactor(tool-search): keep batch caps internal
alt-glitch Aug 23, 2026
a667ab6
fix(livetest): render multi-query bridge calls
alt-glitch Aug 23, 2026
6d37f2b
test(tool-search): exercise stemmer in parallel
alt-glitch Aug 23, 2026
00305ae
test(tool-search): kill the shared-stemmer mutant with cache-missing …
alt-glitch Aug 23, 2026
a935154
test(tool-search): make salvage-seam tests order- and stem-robust
teknium1 Aug 25, 2026
0c23bf1
fix(update): defer interactive CUA installs on Windows
royalaid Aug 24, 2026
f751a8c
fix(update): also defer the missing-binary CUA install on Windows
teknium1 Aug 25, 2026
8e263d7
fix(redact): mask secrets in Python mapping reprs
RFingAdam Jul 25, 2026
861ecc6
fix(redact): widen repr-field key class to mixed-case credential suff…
teknium1 Aug 23, 2026
f7a0067
chore: map contributor email for #71370 salvage
teknium1 Aug 23, 2026
1e916a4
feat(agent): sanitize Hermes-specific fingerprints in Anthropic OAuth…
RFingAdam Aug 23, 2026
6c73090
feat(kanban): PR-evidence completion guard + stuck-unassigned-ready d…
RFingAdam Aug 23, 2026
1baff25
Add opt-in "Extended rounds" for Bot Mode group-chat rooms (#1)
RFingAdam Aug 23, 2026
e69666e
feat(desktop/hermes-bots): per-room build/decide/standing Bot Mode pr…
RFingAdam Aug 23, 2026
be4f9e3
feat(skills): add discernment-nudge optional skill (Anthropic upstrea…
teknium1 Aug 22, 2026
eece043
feat(skills): add auteur optional skill — cinematic web design with e…
teknium1 Aug 22, 2026
41a3df2
fix(auth): serialize Anthropic OAuth refresh across processes
Aug 26, 2026
ebb1aae
feat(desktop/hermes-bots): autonomous work loop for group-chat rooms
RFingAdam Aug 26, 2026
4c036e6
fix(desktop/hermes-bots): repair identifiers dropped by the upstream …
RFingAdam Aug 26, 2026
3329c98
feat(desktop/hermes-bots): estimated-token ceiling per room drive
RFingAdam Aug 26, 2026
06210a8
fix(approval): stop reporting an approval timeout as a user refusal
RFingAdam Aug 26, 2026
88d7292
feat(desktop/hermes-bots): per-thread assignment so bots stay in thei…
RFingAdam Aug 26, 2026
98d5744
feat(gateway,desktop): report the route that actually served a session
RFingAdam Aug 26, 2026
08b74f9
feat(desktop/hermes-bots): per-member status so a room says what need…
RFingAdam Aug 26, 2026
eb94cc5
ci: retrigger checks (prior run stuck queued 15h+, cancelled)
RFingAdam Aug 26, 2026
a2a3415
chore: map contributor emails (fixes CI check-attribution)
RFingAdam Aug 26, 2026
843b65a
ci: retrigger (3 jobs stuck queued 51min, cancelled)
RFingAdam Aug 26, 2026
310266e
ci: downgrade large-runner SKUs to standard (unavailable on personal …
RFingAdam Aug 26, 2026
31c2337
ci: bump Python test suite timeout 30->60min (standard runner has far…
RFingAdam Aug 26, 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
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
matrix:
include:
- arch: amd64
runner: ubuntu-latest-32-core
runner: ubuntu-latest
platform: linux/amd64
cache-from: type=gha,scope=docker-amd64
cache-to: type=gha,mode=max,scope=docker-amd64
Expand Down Expand Up @@ -190,7 +190,7 @@ jobs:
matrix:
include:
- arch: amd64
runner: ubuntu-latest-32-core
runner: ubuntu-latest
platform: linux/amd64
cache-from: type=gha,scope=docker-amd64
cache-to: type=gha,mode=max,scope=docker-amd64
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
# This job builds the renderer and the electron bundle, then drives a real
# Electron app under xvfb. vite, tsc and the Playwright workers all scale
# with the core count.
runs-on: ubuntu-latest-32-core
runs-on: ubuntu-latest
timeout-minutes: 20
outputs:
review_status: ${{ steps.review-status.outputs.review_status }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/js-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
#
# One larger runner installs one time. vitest, tsc and eslint each size
# their own worker pool from the core count.
runs-on: ubuntu-latest-32-core
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
# takes minutes and not seconds when the cache misses. `nix flake check`
# builds 21 checks, and --max-jobs defaults to the core count. It uses the
# wider runner with no more configuration.
runs-on: ubuntu-latest-32-core
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout code
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/rust-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
# cargo builds codegen units and test binaries in parallel across the
# cores. This lane also builds the crate from the start when Cargo.toml
# changes.
runs-on: ubuntu-latest-32-core
runs-on: ubuntu-latest
timeout-minutes: 30
defaults:
run:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/tests-os.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
runner: macos-latest
marker: macos_only
- name: Windows-only tests
runner: windows-latest-32-core
runner: windows-latest
marker: windows_only
steps:
- name: Checkout code
Expand Down
20 changes: 11 additions & 9 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@ concurrency:
jobs:
test:
name: Run tests
# One 96-core runner for the whole suite. There is no slicing. Slicing
# existed to spread the suite over 4-core runners. It cost a matrix job, a
# duration cache, a per-slice artifact and a merge job to do it.
#
# 96 cores clear the floor that the slowest single test file sets (about
# 82s). A second slice divides work that is already at that floor, and
# adds a second setup.
runs-on: ubuntu-latest-96-core
timeout-minutes: 30
# Was tuned for one 96-core runner (see prior comment: no slicing, 96
# cores clear the 82s single-file floor). ubuntu-latest-96-core isn't
# available on this personal GitHub account (confirmed 2026-08-26: gh
# api users/RFingAdam/actions/hosted-runners -> 404), so this now runs
# on standard ubuntu-latest (2-4 cores) instead. Far less parallelism ->
# the original 30min budget isn't enough (observed: still in_progress
# and cancelled at the 30min mark on a real run). Bumped generously
# rather than tuned tight, since a standard runner's real core count/
# noisy-neighbor variance isn't something to chase precisely.
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/venv/
/venv.old/
/venv.stale.runtime-*/
/bin/
/.hermes-runtime/
/_pycache/
*.pyc*
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ RUN uv pip install --no-cache-dir --no-deps -e "."
USER root
RUN mkdir -p /opt/hermes/bin && \
cp /opt/hermes/docker/hermes-exec-shim.sh /opt/hermes/bin/hermes && \
chmod 0755 /opt/hermes/bin/hermes && \
chmod 0755 /opt/hermes /opt/hermes/bin/hermes && \
printf 'docker\n' > /opt/hermes/.install_method
# The ``.install_method`` stamp is baked next to the running code (the install
# tree), NOT into $HERMES_HOME. $HERMES_HOME (/opt/data) is a shared data
Expand Down
16 changes: 12 additions & 4 deletions acp_adapter/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,21 +39,27 @@ def _permission_option_supports_kind(kind: str) -> bool:


def _build_permission_options(
*, allow_permanent: bool, smart_denied: bool = False,
*, allow_permanent: bool, allow_session: bool = True,
smart_denied: bool = False,
) -> list[PermissionOption]:
"""Return ACP options that match Hermes approval semantics."""
# A gate that re-asks every time (allow_session=False, e.g. protected
# agent-instruction writes) collapses to the same two options as a
# Smart DENY override — the editor must not offer a scope Hermes
# discards, or every subsequent write re-prompts (#81887).
once_only = smart_denied or not allow_session
options = [PermissionOption(
option_id="allow_once", kind="allow_once", name="Allow once",
)]
if not smart_denied:
if not once_only:
options.append(PermissionOption(
option_id="allow_session",
# ACP has no session-scoped kind, so use the closest persistent
# hint while keeping Hermes semantics in the option id.
kind="allow_always",
name="Allow for session",
))
if allow_permanent and not smart_denied:
if allow_permanent and not once_only:
options.append(
PermissionOption(
option_id="allow_always",
Expand All @@ -62,7 +68,7 @@ def _build_permission_options(
),
)
options.append(PermissionOption(option_id="deny", kind="reject_once", name="Deny"))
if not smart_denied and _permission_option_supports_kind("reject_always"):
if not once_only and _permission_option_supports_kind("reject_always"):
options.append(
PermissionOption(
option_id="deny_always",
Expand Down Expand Up @@ -132,13 +138,15 @@ def _callback(
description: str,
*,
allow_permanent: bool = True,
allow_session: bool = True,
smart_denied: bool = False,
**_: object,
) -> str:
from agent.async_utils import safe_schedule_threadsafe

options = _build_permission_options(
allow_permanent=allow_permanent,
allow_session=allow_session,
smart_denied=smart_denied,
)

Expand Down
48 changes: 47 additions & 1 deletion agent/agent_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,30 @@ def _normalize_run_budget_seconds(value) -> Optional[float]:
return seconds


def _refuse_checkpoint_required_on_codex_app_server(
checkpoint_required: bool, api_mode: Optional[str]
) -> None:
"""Fail closed at init when the checkpoint gate cannot be honored.

The codex app-server owns its thread and compacts it without a truthful
pre-compaction transcript boundary (in "native" auto-compaction mode —
the default — Hermes never even initiates the compaction), so no
pre-compress checkpoint can be guaranteed on this API mode. Refusing here
keeps a turn from ever reaching a codex-owned compaction boundary; the
compress_context() guard alone cannot cover native turns that bypass
Hermes compression entirely.
"""
if checkpoint_required and api_mode == "codex_app_server":
raise RuntimeError(
"BLOCKED_MISSING_PREREQUISITE: compression.checkpoint_required "
"is incompatible with the codex_app_server API mode: the codex "
"agent compacts its own thread without a truthful pre-compaction "
"transcript boundary, so a required pre-compress checkpoint "
"cannot be guaranteed. Disable compression.checkpoint_required "
"or use a non-app-server API mode."
)


def init_agent(
agent,
base_url: str = None,
Expand Down Expand Up @@ -1318,7 +1342,9 @@ def init_agent(
client_kwargs["default_headers"] = _ra()._qwen_portal_headers()
elif base_url_host_matches(effective_base, "chatgpt.com"):
from agent.auxiliary_client import _codex_cloudflare_headers
client_kwargs["default_headers"] = _codex_cloudflare_headers(api_key)
client_kwargs["default_headers"] = _codex_cloudflare_headers(
api_key, base_url=effective_base,
)
elif base_url_host_matches(effective_base, "x.ai"):
from tools.xai_http import hermes_xai_default_headers

Expand Down Expand Up @@ -2243,6 +2269,12 @@ def _parse_prune_int(raw, default):
compression_threshold_tokens = None
except (TypeError, ValueError):
compression_threshold_tokens = None
compression_checkpoint_required = is_truthy_value(
_compression_cfg.get("checkpoint_required"), default=False
)
_refuse_checkpoint_required_on_codex_app_server(
compression_checkpoint_required, getattr(agent, "api_mode", None)
)
# In-place compaction: when True, compress_context() rewrites the message
# list + rebuilds the system prompt WITHOUT rotating the session id (no
# parent_session_id chain, no `name #N` renumber). See #38763 and
Expand Down Expand Up @@ -2767,6 +2799,19 @@ def _parse_prune_int(raw, default):
agent.compression_in_place = compression_in_place
# Apply micro-compaction settings to the compressor (feature is opt-in)
_cc = getattr(agent, "context_compressor", None)
# compression.checkpoint_required: micro-compaction is a lossy rewrite
# authority too — it absorbs the oldest uncompacted exchanges into a
# rolling summary post-turn, with no pre-compress checkpoint hook in its
# path. Suppress it while the gate is armed so the checkpoint-aware
# batch compressor stays the only lossy authority (mirrors the
# server-side native-compaction suppression in native_compaction.py).
if compression_checkpoint_required and compression_micro_compact:
logger.warning(
"compression.checkpoint_required is enabled: post-turn "
"micro-compaction is disabled for this agent so every lossy "
"rewrite passes through the checkpoint-gated compressor."
)
compression_micro_compact = False
if _cc is not None and hasattr(_cc, "_micro_compact_enabled"):
_cc._micro_compact_enabled = compression_micro_compact
if _cc is not None and hasattr(_cc, "_micro_compact_every_n_turns"):
Expand All @@ -2775,6 +2820,7 @@ def _parse_prune_int(raw, default):
_cc._micro_compact_defrag_threshold_tokens = (
compression_micro_compact_defrag_tokens
)
agent.compression_checkpoint_required = compression_checkpoint_required
agent.codex_app_server_auto_compaction = codex_app_server_auto_compaction
agent.codex_responses_native_compaction = codex_responses_native_compaction
agent.codex_responses_compact_threshold = codex_responses_compact_threshold
Expand Down
Loading
Loading