Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
237 commits
Select commit Hold shift + click to select a range
fe55b77
fix(relay): keep client timeout off managed payloads
bbednarski9 Aug 13, 2026
e514d37
fix(openai): tolerate sparse response objects
bbednarski9 Aug 13, 2026
89c44c0
fix(openai): cover nested sparse response fields
afourniernv Aug 13, 2026
ef9cb96
fix(desktop): re-emit session.info when approvals config changes out …
yoniebans Aug 13, 2026
596ad43
Merge pull request #5 from afourniernv/fix/pr85581-sparse-fields
bbednarski9 Aug 13, 2026
040ee11
fix(desktop): remove invalid get-windows recovery command
helix4u Aug 17, 2026
cc3418e
fix(openai): complete sparse response normalization
afourniernv Aug 17, 2026
94c05d6
Merge pull request #9 from afourniernv/fix/pr85581-completed-sparse-f…
bbednarski9 Aug 17, 2026
97a04ae
fix(desktop): install get-windows binding directly
helix4u Aug 17, 2026
0f5f5a5
Merge main into fix-relay-client-timeout-payload
bbednarski9 Aug 18, 2026
a51337e
Merge main into fix-openai-sparse-response-objects
bbednarski9 Aug 18, 2026
173a644
chore: retrigger checks after main merge
bbednarski9 Aug 18, 2026
a2d0ba3
docs(relay): clarify timeout payload isolation
bbednarski9 Aug 18, 2026
6a843f9
fix(desktop): let Files panel download remote backend files
xxxigm Aug 18, 2026
d28f2ed
test(desktop): cover remote Files panel download action
xxxigm Aug 18, 2026
aa09c8f
Merge pull request #85580 from bbednarski9/codex/fix-relay-client-tim…
jquesnelle Aug 18, 2026
9664e38
Merge pull request #85581 from bbednarski9/codex/fix-openai-sparse-re…
jquesnelle Aug 18, 2026
d8e2386
feat: Capabilities view configures the selected profile on its own ga…
teknium1 Aug 18, 2026
ff3c65f
fmt(js): `npm run fix` on merge (#89375)
hermes-seaeye[bot] Aug 18, 2026
4349cbb
feat: group chats get an editable name and room picture, at creation …
teknium1 Aug 18, 2026
9c0fcce
test(kanban): cover delegated CLI refusal exit status
vadelma-agent Jul 24, 2026
57f1219
test(kanban): bound delegated CLI subprocess test
vadelma-agent Jul 30, 2026
31f62d7
fix(hermes-ink): reset SGR 22 when a style transition drops bold or dim
OutThisLife Aug 18, 2026
d758fdb
fix(desktop): make Bot Mode switches hydrate canonical chats
citizendev9c Aug 18, 2026
ce751ff
fix(desktop): resume cold-opened Bot Chats even before selection sett…
teknium1 Aug 18, 2026
ef5bec0
chore: map contributor citizendev9c
teknium1 Aug 18, 2026
d07be6e
fmt(js): `npm run fix` on merge (#89403)
hermes-seaeye[bot] Aug 18, 2026
fac2b12
test(desktop): require copy control on Bot Mode group chat lines
HarishDarko Aug 18, 2026
6d1e611
feat(desktop): add copy on Bot Mode group chat messages
HarishDarko Aug 18, 2026
56ddc03
fix(desktop): make group-chat message text selectable
lazy-idler Aug 18, 2026
9005ad1
test(desktop): pin selectable-text opt-in on group chat bodies
teknium1 Aug 18, 2026
9d8ae05
chore: map lazy-idler contributor email
teknium1 Aug 18, 2026
182a966
fix(teams-pipeline): resolve Graph transcript notifications to the me…
xxxigm Aug 18, 2026
79c5380
test(teams-pipeline): cover getAllTranscripts meeting-id parsing
xxxigm Aug 18, 2026
db004d1
fix(teams-pipeline): support organizer-scoped meeting lookup (#83422)
kyssta-exe Aug 10, 2026
d03fe2a
fix: detect base64-encoded transcript markers in Graph ids
teknium1 Aug 18, 2026
de213b5
chore: add contributor email mappings for vadelma-agent and tmielika
teknium1 Aug 18, 2026
3a87f87
fix(codex): drop unsupported pro defaults
vadelma-agent Aug 18, 2026
7d780cc
test(codex): cover retained fallback models
vadelma-agent Aug 18, 2026
968853c
fix(skills): preserve document modes during atomic writes
vadelma-agent Aug 13, 2026
f33831e
test(skills): cover security-scan rollback modes
vadelma-agent Aug 14, 2026
66fafeb
test(skills): cover supporting-file patch rollback
vadelma-agent Aug 14, 2026
030687d
test(skills): strengthen mode rollback coverage
vadelma-agent Aug 14, 2026
0b6e2ba
test(skills): cover private supporting-file mode
vadelma-agent Aug 14, 2026
6fccbdc
test(skills): cover umask and explicit skill paths
vadelma-agent Aug 14, 2026
696fef6
fix(skills): keep inspect/install from mixing same-named hub skills
xxxigm Aug 17, 2026
a6ddfa5
test(skills): cover same-name inspect/install provenance mixup
xxxigm Aug 17, 2026
e88d883
refactor: consolidate owner extraction onto _owner_from_payload
kshitijk4poor Aug 18, 2026
a34157c
test(gateway): fix background cleanup fixture
vadelma-agent Jul 26, 2026
c820a5d
docs(teams-pipeline): document fetch --organizer-user-id
teknium1 Aug 18, 2026
93a2fae
fix(desktop): render LaTeX math in file preview
thebizfixer Aug 18, 2026
0fa1212
test(desktop): prove file-preview math renders to KaTeX
thebizfixer Aug 18, 2026
c445cc4
test(desktop): fix lint in file-preview math render test
thebizfixer Aug 18, 2026
6a3ef22
fix(desktop): render math and missing markdown elements in .md file p…
peetteerr Aug 18, 2026
034589f
test(desktop): add behavior tests for .md preview math/table/img/link…
peetteerr Aug 18, 2026
3701435
test(desktop): align preview test comment with math-only normalizer
teknium1 Aug 18, 2026
0093bc0
fix(skills): preserve manifest file mode across atomic rewrites
teknium1 Aug 18, 2026
542e146
feat(desktop): show a hover close button on pane tabs
ethernet8023 Aug 18, 2026
f94cead
fmt(js): `npm run fix` on merge (#89453)
hermes-seaeye[bot] Aug 18, 2026
1c4dc4c
fix(desktop): collapse the docked Bots tab with the sessions sidebar …
ethernet8023 Aug 18, 2026
cb7dd6d
fix(desktop): MEDIA-delivered .md opens in the preview rail, not as a…
teknium1 Aug 18, 2026
ced900a
fix(desktop): file-path links in chat now open through the preview pa…
teknium1 Aug 18, 2026
ae6578a
fix(desktop): route session RPCs to the profile that owns the session…
teknium1 Aug 18, 2026
cc421cb
fix: dashboard console skills commands no longer act on the wrong pro…
teknium1 Aug 18, 2026
47066f5
fix(desktop): normalize hugging multi-line display-math delimiters
whisky0809 Aug 8, 2026
21fc7c5
fix(desktop): shield math spans from the visible-prose rewrites
whisky0809 Aug 8, 2026
edb9f96
fix(desktop): keep escaped dollars from ending a shielded math span
whisky0809 Aug 8, 2026
38b7a40
chore: map whisky0809 contributor email
teknium1 Aug 18, 2026
6a1fb37
fmt(js): `npm run fix` on merge (#89485)
hermes-seaeye[bot] Aug 18, 2026
638b72f
feat(models): add native Ollama catalog semantics
vadelma-agent Aug 9, 2026
fa1bb88
feat(models): propagate native discovery across selectors
vadelma-agent Aug 9, 2026
17405de
feat(acp): preserve native provider catalogs and identities
vadelma-agent Aug 9, 2026
f70e9ab
fix(models): close final provider discovery edge cases
vadelma-agent Aug 9, 2026
7e61bd3
fix(models): preserve discovery provenance and endpoint identity
vadelma-agent Aug 9, 2026
9d2ba6c
fix(acp): isolate custom catalog identities
vadelma-agent Aug 9, 2026
81e8135
fix(models): preserve empty catalog and custom model semantics
vadelma-agent Aug 9, 2026
7fb6b28
fix(models): complete selector parity safeguards
vadelma-agent Aug 9, 2026
4daaf1e
fix(acp): preserve colon-bearing custom provider prefixes
vadelma-agent Aug 9, 2026
015f999
fix(models): persist named custom catalog identity
vadelma-agent Aug 18, 2026
72b7c6c
fix(models): keep discovery sentinels out of the user-facing models m…
teknium1 Aug 18, 2026
73ddf66
feat(desktop): rich plugin OS notifications with deeplink activation
serefyarar Aug 18, 2026
aae9691
fix(desktop): register plugin notify handlers only after guards pass;…
teknium1 Aug 18, 2026
d354af5
feat(desktop): unified Sessions list shows every connected gateway's …
teknium1 Aug 18, 2026
f5ea3fa
fix(commandcode): accept base_url kwarg in fetch_models overrides
greyvito Aug 18, 2026
7072fc4
fix(providers): resolve plugin-registered provider profiles in get_pr…
greyvito Aug 18, 2026
c7d0f6c
fix(providers): honor a custom base_url over models_url in fetch_models
teknium1 Aug 18, 2026
052fe72
fix(providers): plugin-profile fallback skips endpoint-less placehold…
teknium1 Aug 18, 2026
40fccbf
feat(desktop): live-preview themes from the palette highlight
ethernet8023 Aug 18, 2026
1e31061
fix(desktop): read the palette highlight from the cmdk store
ethernet8023 Aug 18, 2026
ae162f7
fix(desktop): clear the theme preview at palette close start
ethernet8023 Aug 18, 2026
72f9e01
fmt(js): `npm run fix` on merge (#89492)
hermes-seaeye[bot] Aug 18, 2026
359e09f
feat(desktop): one-click plugin install via hermes:// deeplinks
serefyarar Aug 18, 2026
19591aa
fmt(js): `npm run fix` on merge (#89501)
hermes-seaeye[bot] Aug 18, 2026
d57f94a
fix(desktop): publish gateway, profile, and connection descriptor ato…
jackulau Aug 13, 2026
d0e0951
fix(desktop): publish the agent activation atomically too
jackulau Aug 16, 2026
20ccf88
fix(desktop): fail the agent switch closed when its descriptor lookup…
jackulau Aug 16, 2026
053eb7a
fix(desktop): publish a gateway switch in one nanostores batch
jackulau Aug 17, 2026
162aa6d
refactor(desktop): wrap the prepareGatewayForAgent signature at the p…
jackulau Aug 17, 2026
4e520f0
fix(desktop): guard the profile publication on its activation result too
jackulau Aug 17, 2026
f0f4f29
docs(desktop): state one fallthrough contract at the agent seam
jackulau Aug 17, 2026
c70e152
fix(tests): goal-verdict tests stop flaking when SessionDB init overr…
teknium1 Aug 18, 2026
b359db7
feat(bot-mode): group chats accept image attachments every responding…
teknium1 Aug 18, 2026
5ce09b3
perf(desktop): Bot Mode wakes paint-first — transcript paint complete…
teknium1 Aug 18, 2026
f8767d1
perf(desktop): durable transcript-tail cache — bot wakes paint at ~0ms
teknium1 Aug 18, 2026
a77ee88
feat: Bot Mode avatars default to deterministic blob faces drawn from…
teknium1 Aug 18, 2026
246477a
fix(gateway): /goal no longer lies when state.db init is slow
ethernet8023 Aug 18, 2026
46d8cf0
fix(gateway): /loop paths warm the SessionDB cache off-loop
ethernet8023 Aug 18, 2026
6e67841
refactor(goals): share one dropped-write warning across managers
ethernet8023 Aug 18, 2026
9d86ac6
test: shrink the goal-DB timing tests to sub-second wall time
teknium1 Aug 18, 2026
97b41f8
feat(bot-mode): group chats accept PDFs, files, and drag & drop
teknium1 Aug 18, 2026
0ee9bc8
fix(agent): give interrupted-turn hidden placeholder a neutral provid…
andrexibiza Aug 18, 2026
693c0e1
chore: remove case-colliding agent@Agents-Mac-mini.local contributor …
andrexibiza Aug 18, 2026
210cdb0
fix(agent): legacy hidden redirect placeholders get the neutral wire …
teknium1 Aug 18, 2026
0c5f195
docs: document one-click plugin install links (hermes://plugin/install)
teknium1 Aug 18, 2026
0cc2677
fix(gateway): persist resume recovery notes
andyst-dev Aug 15, 2026
c69b647
fix(gateway): real user text stays clean in the transcript on resume-…
teknium1 Aug 18, 2026
34d1aed
fix(desktop): hide close affordance on navigation tabs
calvinnwq Aug 18, 2026
4ac938d
feat(desktop): sessions/bots tabs are show/hide chrome — no close ges…
teknium1 Aug 19, 2026
2163f7f
fmt(js): `npm run fix` on merge (#89580)
hermes-seaeye[bot] Aug 19, 2026
f709bd8
fix(aux): translate response_format to output_config.format for anthr…
Soju06 Aug 12, 2026
8f2d61e
fix(aux): translate top-level response_format kwarg on the Anthropic …
ethernet8023 Aug 19, 2026
3c67501
fix(aux): retry once without response_format when a provider rejects it
ethernet8023 Aug 19, 2026
d5a9c2b
feat(nix): home-manager module, shared with the NixOS module
ethernet8023 Aug 12, 2026
1dbe469
refactor(ci): hoist docker detect-changes into the .py file
ethernet8023 Aug 18, 2026
00c3872
feat(ci): add nix flake check as unrequired job
ethernet8023 Aug 18, 2026
1f234a1
fix(nix): let the install-method stamp name a home-manager install
ethernet8023 Aug 19, 2026
bd8b658
feat(clarify): accept a questions batch in the clarify tool core
ethernet8023 Aug 18, 2026
879d6a4
feat(tui_gateway): batch clarify bridge with per-question locks
ethernet8023 Aug 18, 2026
e0d8a2e
feat(desktop): multi-question clarify card with per-question locks
ethernet8023 Aug 18, 2026
a9b8d69
feat(tui): compact multi-question clarify prompt
ethernet8023 Aug 18, 2026
b4526d4
feat(cli): compact multi-question clarify panel
ethernet8023 Aug 18, 2026
86a6865
docs: describe multi-question clarify batches per surface
ethernet8023 Aug 18, 2026
838c469
fix(desktop): merge duplicate batch clarify cards
ethernet8023 Aug 18, 2026
25c6516
feat(desktop): single confirm for the batch clarify card
ethernet8023 Aug 19, 2026
100380b
feat(cli): batch clarify back-navigation and answer visibility
ethernet8023 Aug 19, 2026
96b1778
feat(tui): Tab cycles batch clarify questions directly
ethernet8023 Aug 19, 2026
9a9015d
test(desktop): batch clarify E2E spec and mock trigger
ethernet8023 Aug 19, 2026
d9f98fe
feat(tui): restore the earlier answer when a batch question is re-vis…
ethernet8023 Aug 19, 2026
66bb77c
docs(clarify): advertise the questions batch in the tool description
ethernet8023 Aug 19, 2026
b7bed24
fmt(js): `npm run fix` on merge (#89619)
hermes-seaeye[bot] Aug 19, 2026
74f99af
feat(desktop): agent-applied layout presets — apply_layout joins the …
OutThisLife Aug 19, 2026
23c1c98
fix(desktop): Bots sidebar highlight and Cronjobs tile now follow the…
teknium1 Aug 18, 2026
51013e9
fix(desktop): /goal clear removes the Goal paused card immediately
teknium1 Aug 18, 2026
bdd0a79
fix(goals): /goal resume actually restarts work after budget exhaustion
teknium1 Aug 18, 2026
0b588cb
MCP CIMD auth
rob-maron Aug 11, 2026
5dd1587
fix: never evict pinned CIMD sockets from the callback reservation FIFO
teknium1 Aug 18, 2026
1314a53
refactor(desktop): custom translated context menus across the app
ethernet8023 Aug 19, 2026
0b87929
feat(desktop): browser-bar controls for the address and the page
ethernet8023 Aug 19, 2026
395c70d
fmt(js): `npm run fix` on merge (#89703)
hermes-seaeye[bot] Aug 19, 2026
cb0fd83
feat: Bot Mode blob avatars gain 4 new silhouettes via blobatar 2.0.0
teknium1 Aug 19, 2026
104ec97
fix(bot-mode): group room preview shows the bot handle, not @default
johnsonAyo Aug 18, 2026
00e9a32
fix(desktop): keep Bot Mode routines docked
dokterdok Aug 18, 2026
35078e8
docs: surface Bot Mode in docs landing paths
jaimedhenriques Aug 18, 2026
3809f74
fix(bot-mode): reseed $selectedBot on register so re-enabling never l…
chelsealong Aug 19, 2026
80f080b
fix(bot-mode): highlight selected group chat
enwaiax Aug 18, 2026
af3373f
test: follow-up for salvaged PR #89020 — focused-highlight contract i…
teknium1 Aug 19, 2026
ed47d41
fix(desktop): bot navigation no longer forces the all-profiles sideba…
marketing2981 Aug 19, 2026
d440891
test(desktop): update canonical-chat-identity expectation for salvage…
teknium1 Aug 19, 2026
a6bada2
feat(mcp): per-server oauth.user_agent for token-endpoint requests (#…
teknium1 Aug 19, 2026
589bee9
fix(bot-mode): never resubmit into a still-running stranded group member
pierrenode Aug 18, 2026
8e5f55f
feat(hermes-bots): add a collapsible group activity view
amanning3390 Aug 18, 2026
7245b02
feat(desktop): route REST through registered sources
dokterdok Aug 17, 2026
0ca7443
feat(desktop): switch sources from the Sessions rail
dokterdok Aug 17, 2026
fa73b45
fix(desktop): isolate state across source switches
dokterdok Aug 17, 2026
4ea516b
docs(desktop): explain multi-source session scoping
dokterdok Aug 17, 2026
0ab0ed5
feat(desktop): clarify active and default connections
dokterdok Aug 17, 2026
ccd30f9
feat(desktop): distinguish sources from profiles
dokterdok Aug 17, 2026
2228bc7
feat(desktop): remember the last used source
dokterdok Aug 17, 2026
3095ac5
docs(desktop): clarify connection settings copy
dokterdok Aug 17, 2026
72fc5ab
fix(desktop): use gateway terminology in connection UI
dokterdok Aug 18, 2026
0a36fa7
fix(desktop): keep remote bot identity visible
dokterdok Aug 18, 2026
2c6dcf9
feat(desktop): keep large gateway registries searchable
dokterdok Aug 18, 2026
6e9e120
refactor(desktop): keep gateway details contextual
dokterdok Aug 18, 2026
e999df4
fix(desktop): keep gateway search shortcut local
dokterdok Aug 18, 2026
c41ec9c
refactor(desktop): scope gateway context to Sessions
dokterdok Aug 18, 2026
9ed738f
fix(desktop): stabilize gateway settings interactions
dokterdok Aug 18, 2026
292d0df
fmt(js): `npm run fix` on merge (#89759)
hermes-seaeye[bot] Aug 19, 2026
1190825
fix(bot-mode): DM protocol no longer shell-interpolates message bodies
teknium1 Aug 19, 2026
4903993
test: enforce -q/--query-file exclusivity at parse time
teknium1 Aug 19, 2026
5d3c15a
restore profile switching
jquesnelle Aug 19, 2026
5dc20eb
build(desktop): add driver.js for guided tours
OutThisLife Aug 19, 2026
0181769
feat(desktop): tour engine — highlight and narrate any DOM
OutThisLife Aug 19, 2026
ec69940
feat(desktop): run tours inside the preview pane
OutThisLife Aug 19, 2026
0d572e0
feat(desktop): answer tour.request from the renderer
OutThisLife Aug 19, 2026
23d88c2
feat(tools): tour — let the agent walk a user through the UI
OutThisLife Aug 19, 2026
93b50ea
test+docs(tour): cover the engine and document the API
OutThisLife Aug 19, 2026
98bbfbd
fix(desktop): keep a tour bound to its target across navigation and r…
OutThisLife Aug 19, 2026
d433a45
feat(desktop): give tours a themed spotlight and directional motion
OutThisLife Aug 19, 2026
702d7ba
feat(desktop): name the app's shared surfaces for tours
OutThisLife Aug 19, 2026
f0d0971
feat(desktop): add a dev-only tour demo
OutThisLife Aug 19, 2026
bbd6607
docs(tour): document navigating steps and the handle vocabulary
OutThisLife Aug 19, 2026
d23a487
docs: cover hermes chat --query-file and the file-based Bot Mode DM t…
teknium1 Aug 19, 2026
6cf6ad4
Merge pull request #89620 from NousResearch/bb/agent-tours
OutThisLife Aug 19, 2026
f82f2db
fmt(js): `npm run fix` on merge (#89795)
hermes-seaeye[bot] Aug 19, 2026
7c3c2d1
refactor(desktop): give each chat surface its own turn clock
OutThisLife Aug 19, 2026
ccaa487
fix(desktop): time the gaps a working turn spends producing nothing
OutThisLife Aug 19, 2026
ff8c415
chore(desktop): drop the dev-only tour demo
OutThisLife Aug 19, 2026
443c104
fix(desktop): treat profile=default as this process's own home
OutThisLife Aug 19, 2026
e4771b9
Merge pull request #89808 from NousResearch/bb/turn-activity-timer
OutThisLife Aug 19, 2026
38f79e2
Merge pull request #89798 from NousResearch/bb/tour-demo-remove
OutThisLife Aug 19, 2026
649c206
Merge pull request #85429 from NousResearch/jb/yolo-settings-session-…
yoniebans Aug 19, 2026
0e980e8
fix(desktop): keep mark-all flush with the sessions header actions
OutThisLife Aug 19, 2026
0228988
fix(tool-search): keep GUI surface tools directly available
OutThisLife Aug 19, 2026
c12d296
test(tool-search): cover mixed MCP assembly and the HUD note
OutThisLife Aug 19, 2026
b44871d
Merge pull request #89819 from NousResearch/bb/keep-gui-surface-direct
OutThisLife Aug 19, 2026
2507bc6
fix(desktop): atomic profile-switch publication v2 — fail open, lease…
teknium1 Aug 19, 2026
6907c97
fix(update): don't report success when the Desktop rebuild failed
OutThisLife Aug 19, 2026
b82f8b0
Merge pull request #89257 from xxxigm/fix/desktop-files-panel-remote-…
OutThisLife Aug 19, 2026
0223710
test(desktop): compare get-windows installer path via realpath
OutThisLife Aug 19, 2026
ff3dbed
ci: retrigger workflows after the orchestrator died before scheduling…
OutThisLife Aug 19, 2026
d2433c1
Merge pull request #89838 from NousResearch/bb/update-desktop-rebuild…
OutThisLife Aug 19, 2026
ca4a0c4
Merge pull request #88233 from helix4u/fix/get-windows-recovery-command
OutThisLife Aug 19, 2026
70e818c
Merge pull request #89814 from NousResearch/bb/session-group-icon-fix
OutThisLife Aug 19, 2026
4180c3f
Merge pull request #89623 from NousResearch/fix/tui-focus-regain-atom…
austinpickett Aug 19, 2026
63565fa
fix(desktop): keep auto-speak silent across the stream-id rewrite
OutThisLife Aug 19, 2026
afa4f4c
fix: 7 GitHub-adjacent tests no longer fail on developer machines
teknium1 Aug 19, 2026
c6b680c
fix(image-gen): handle stale OpenRouter model defaults
zhuermu Aug 3, 2026
e6ff4ea
fix(tools-config): widen stale-model picker guard to legacy image and…
teknium1 Aug 19, 2026
ac0a8cd
feat(image-gen): xAI Grok image catalog goes live-driven; grok-imagin…
teknium1 Aug 19, 2026
b154046
chore: map contributor email for zhuermu
teknium1 Aug 19, 2026
0f73adb
chore(ci): touch ci.yml to bust poisoned workflow-parse cache
teknium1 Aug 19, 2026
9162ea6
Revert "chore(ci): touch ci.yml to bust poisoned workflow-parse cache"
teknium1 Aug 19, 2026
ceabb03
feat(image-gen): add Grok Imagine Image 2.0 to the FAL image catalog
teknium1 Aug 16, 2026
a787bfe
fix(desktop): restore profile/agent switching in release builds (nano…
royzhrxy-glitch Aug 19, 2026
5a3410e
chore: map contributor email for salvage attribution
teknium1 Aug 19, 2026
21260c3
fix(gateway): carry the profile in adapter-derived session keys (#88404)
69k4xmdfm2-blip Aug 17, 2026
008d469
fix(xai): forward image_gen.model kwarg to _resolve_model in generate()
srojk34 Jun 30, 2026
9c6ecf2
feat(image-gen): OpenRouter image picker lists every live image-outpu…
teknium1 Aug 19, 2026
ab173e2
ci: force workflow re-parse after zero-job dispatch window
teknium1 Aug 19, 2026
43e67f1
ci: move orchestrator to ci.yaml — ci.yml workflow identity is wedged…
teknium1 Aug 19, 2026
dc77f2c
Revert "ci: force workflow re-parse after zero-job dispatch window"
teknium1 Aug 19, 2026
ac3d7dd
fix(desktop): skill hub installs on non-default profiles no longer 40…
teknium1 Aug 19, 2026
1a19fed
fix(desktop): Bot Mode chats no longer paint blank when switching bet…
teknium1 Aug 19, 2026
13ce0c5
fmt(js): `npm run fix` on merge (#89914)
hermes-seaeye[bot] Aug 19, 2026
25428b1
fix(cli,desktop): report UPDATE_DIVERGED (-2) for forked branches, no…
Aug 17, 2026
1c3ad56
refactor(desktop): centralize UPDATE_DIVERGED sentinel in version-status
Aug 18, 2026
b8a6916
chore: trigger CI re-run after rebase + attribution fix
Aug 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
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .github/actions/detect-changes/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ outputs:
docker_meta:
description: Docker setup and meta files have changed.
value: ${{ steps.classify.outputs.docker_meta }}
docker:
description: Files included in the docker image have changed.
value: ${{ steps.classify.outputs.docker }}
nix:
description: Run `nix flake check` (flake inputs, or any product Python change).
value: ${{ steps.classify.outputs.nix }}
site:
description: Build the Docusaurus docs site.
value: ${{ steps.classify.outputs.site }}
Expand Down
File renamed without changes.
12 changes: 6 additions & 6 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ jobs:
- name: Decide whether to build
id: gate
env:
# python_prod (not python): the image copies installed code, never
# tests/, so tests-only PRs skip the build.
PYTHON_PROD: ${{ steps.classify.outputs.python_prod }}
FRONTEND: ${{ steps.classify.outputs.frontend }}
DOCKER_META: ${{ steps.classify.outputs.docker_meta }}
# The docker lane derives from python_prod (not python: the image
# copies installed code, never tests/, so tests-only PRs skip the
# build), frontend and docker_meta. classify_changes.py owns the
# formula so this gate and the nix lane cannot drift apart.
DOCKER: ${{ steps.classify.outputs.docker }}
run: |
set -euo pipefail
if [ "$PYTHON_PROD" = "true" ] || [ "$FRONTEND" = "true" ] || [ "$DOCKER_META" = "true" ]; then
if [ "$DOCKER" = "true" ]; then
echo "build=true" >> "$GITHUB_OUTPUT"
else
echo "build=false" >> "$GITHUB_OUTPUT"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/label-rerun.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
RUN_INFO=$(gh run list \
--repo "$REPO" \
--commit "$HEAD_SHA" \
--workflow ci.yml \
--workflow ci.yaml \
--limit 1 \
--json databaseId,status \
--jq '.[0] | "\(.databaseId) \(.status)"' 2>/dev/null || true)
Expand Down
117 changes: 117 additions & 0 deletions .github/workflows/nix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: Nix flake check

# Builds every output of the flake: the package, the devShell, and the 21
# checks under nix/checks.nix — module evaluation, option parity, .env
# assembly, service argv, and the rest.
#
# This workflow owns its triggers and ci.yml does not call it, for the reason
# docker.yml gives: a reusable-workflow call holds the caller run in progress
# for the full build, and GitHub refuses `gh run rerun` on a run that is still
# in progress. One slow advisory job in the CI lane blocks every rerun of the
# fast required jobs beside it. A separate run reruns and cancels on its own.

on:
pull_request:
push:
branches: [main]

permissions:
contents: read

# PR runs collapse to the newest commit. A push to main is never cancelled:
# each one saves the store cache that later PRs restore from, so cancelling a
# merge would leave the next PR to build from nothing.
concurrency:
group: nix-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
# A `paths:` filter cannot gate this workflow correctly. The flake packages
# the product, and nine of the checks then run the built binary, so a change
# to hermes_cli/ alone can fail `nix flake check` without touching one file
# under nix/. The `nix` lane therefore follows python_prod as well as the
# flake inputs. On push the classifier fails open and every lane is true.
detect:
name: Detect affected areas
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
nix: ${{ steps.classify.outputs.nix }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Detect affected areas
id: classify
uses: ./.github/actions/detect-changes
with:
github-token: ${{ github.token }}

flake-check:
name: nix flake check
needs: [detect]
if: needs.detect.outputs.nix == 'true'
# The build compiles the package and its whole dependency closure, so this
# is minutes and not seconds when the cache misses.
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Nix
uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
with:
extra_nix_config: |
experimental-features = nix-command flakes
# A store path that does not substitute is a cache miss and not a
# build failure. Build it here instead.
fallback = true
# Each source archive is fetched one time in a run, and not one
# time for each evaluation.
tarball-ttl = 3600

# Restores /nix/store from the GitHub Actions cache. The store holds the
# whole dependency closure, so a hit turns a build of several minutes
# into a short evaluation.
#
# The Magic Nix Cache is not an option here. Its free tier ended in
# February 2025 with the GitHub cache API that it was built on. This
# action uses the current API and needs no account and no secret.
- name: Restore and save the Nix store
uses: nix-community/cache-nix-action@7df957e333c1e5da7721f60227dbba6d06080569 # v7
with:
# The closure changes when the flake inputs change or when the
# dependencies of the project change. The key hashes both, so an
# edit to the source alone keeps the hit.
primary-key: nix-${{ runner.os }}-${{ hashFiles('flake.lock', 'nix/**', 'pyproject.toml', 'uv.lock') }}
# On a miss, restore the newest store for this runner. Most of the
# closure — Python, node, each transitive library — survives a bump
# of the lockfile, so an old store still removes most of the work.
restore-prefixes-first-match: nix-${{ runner.os }}-

# Save from main only. A cache that a PR writes is visible to that
# PR alone and never to another branch, so a save there spends the
# 10 GB quota of the repository and helps no later run. A PR still
# restores: it reads the cache that the merge to main wrote. This is
# the same rule that docker.yml applies to `cache-to`.
save: ${{ github.event_name != 'pull_request' }}

# Collect garbage before the save, so the store stays inside the
# 10 GB quota of the repository. Without a limit the store grows at
# each merge until GitHub removes the entry, and the next PR then
# gets nothing. This number is the size of the store and not the
# size of the compressed archive.
gc-max-store-size-linux: 5G

# Delete the caches that this key replaces. GitHub removes caches by
# least recent use across the whole repository, so a Nix store that
# is never purged pushes out the caches of the other workflows.
purge: true
purge-prefixes: nix-${{ runner.os }}-
purge-created: 0
purge-primary-key: never

- name: nix flake check
# --print-build-logs: a check that fails then prints the assertion
# that failed, and not only the derivation that failed to build.
run: nix flake check --print-build-logs
Loading
Loading