Skip to content
Closed
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
e74f44d
ci(windows): desktop install/update e2e - published installer to this…
ethernet8023 Aug 10, 2026
f5cd0b7
ci(windows): install test tools under RUNNER_TEMP - untracked dirs in…
ethernet8023 Aug 10, 2026
b685efe
fix(windows-e2e): AHK helper wedged on invalid stdout handle before c…
ethernet8023 Aug 11, 2026
746aca2
fix(windows-e2e): button images matched a dev build, not the publishe…
ethernet8023 Aug 11, 2026
931a9e9
fix(windows-e2e): raise the installer window before each ImageSearch …
ethernet8023 Aug 11, 2026
5e6eab0
fix(windows-e2e): fall back to PixelSearch for the Install button
ethernet8023 Aug 11, 2026
f4243c0
fix(windows-e2e): PixelSearch scan band clipped the blue title, not t…
ethernet8023 Aug 11, 2026
9149003
fix(windows-e2e): pre-seed managed uv - astral receipt hijacks UV_INS…
ethernet8023 Aug 11, 2026
7b3f197
fix(windows-e2e): AHK loop killed a healthy install on its own flawed…
ethernet8023 Aug 11, 2026
caf0e6a
ci(windows-e2e): capture a lossless welcome-screen PNG before the AHK…
ethernet8023 Aug 11, 2026
cba4816
ci(windows-e2e): TEMP - stop after the welcome screenshot, skip the A…
ethernet8023 Aug 11, 2026
455016b
ci(windows-e2e): poll for a rendered UI before the welcome screenshot…
ethernet8023 Aug 11, 2026
bde4b59
fix(windows-e2e): screen-native button crop, ImageSearch only - Pixel…
ethernet8023 Aug 11, 2026
bdb1b53
ci(windows-e2e): 45-min handoff deadline + uv debug tracing - diagnos…
ethernet8023 Aug 11, 2026
e3d22b5
fix(update): drain uv/pip stderr - undrained pipe deadlocked windows …
ethernet8023 Aug 11, 2026
f6f9f89
ci(windows-e2e): drop RUST_LOG from the update leg - it manufactured …
ethernet8023 Aug 11, 2026
e64853a
ci(windows): desktop install + update E2E on a real Windows runner
teknium1 Aug 11, 2026
f7f7d2f
fix(ci): runner.temp is not a valid context in job-level env
teknium1 Aug 11, 2026
82f48a2
ci(temp): trigger the Windows E2E on this branch for pre-merge valida…
teknium1 Aug 11, 2026
3aea978
fix(e2e): redirect via GIT_CONFIG_GLOBAL, not GIT_CONFIG_COUNT env co…
teknium1 Aug 11, 2026
3e265f4
ci: drop the temporary pre-merge branch trigger
teknium1 Aug 11, 2026
381cc65
ci(windows): REAL-flow GUI E2E — website setup.exe, headed clicks, GU…
teknium1 Aug 11, 2026
af7b3d3
fix(e2e): AHK driver died on first Log() — no-console stdout write th…
teknium1 Aug 11, 2026
100abc9
fix(e2e): re-capture install-button template + fix phantom window geo…
teknium1 Aug 11, 2026
60493c9
fix(e2e): re-capture launch-button template + correct fallback fraction
teknium1 Aug 11, 2026
f95506e
fix(e2e): don't require installer pin to be an ancestor of CURRENT
teknium1 Aug 11, 2026
f835484
fix(e2e): pure-ASCII PowerShell/AHK (PS 5.1 parser choke on non-ASCII)
teknium1 Aug 11, 2026
256c9b3
fix(e2e): resolve @playwright/test via Node, not a hoist-blind path c…
teknium1 Aug 11, 2026
31b9728
fix(e2e): dismiss onboarding before opening Settings in the update dr…
teknium1 Aug 11, 2026
7ffc26e
fix(e2e): detect update hand-off via marker file, not Playwright clos…
teknium1 Aug 11, 2026
a263a7c
fix(e2e): allow time for the release->CURRENT desktop rebuild + tail …
teknium1 Aug 11, 2026
cf26924
fix(e2e): pre-set .skip_upstream_prompt so the fork-only input() can'…
teknium1 Aug 11, 2026
0ce3d18
ci(windows): GUI E2E fully green — foreground relaunched window, drop…
teknium1 Aug 11, 2026
1f81c63
ci(windows-e2e): retire the AHK-only axis - superseded by desktop-win…
ethernet8023 Aug 11, 2026
3fedcbc
ci(temp): branch push trigger for pre-merge validation of the windows…
ethernet8023 Aug 11, 2026
27636cf
ci(windows-e2e): slot the GUI flow in as the windows-desktop route - …
ethernet8023 Aug 11, 2026
2a906ac
fix(windows-e2e): stage OLD as the served main - the published instal…
ethernet8023 Aug 11, 2026
e8bdb69
fix(windows-e2e): 'auto' sentinel for install-ref - powershell -File …
ethernet8023 Aug 11, 2026
71281c2
fix(windows-e2e): parenthesize the tag-list split - -split bound as a…
ethernet8023 Aug 11, 2026
005fc5a
ci(windows-e2e): ffmpeg screen recording across both GUI phases
ethernet8023 Aug 11, 2026
77c3a39
ci(windows-e2e): install ffmpeg - not preinstalled on windows-latest,…
ethernet8023 Aug 11, 2026
1bf0a1c
ci(install-e2e): generate every install/update combination - one job …
ethernet8023 Aug 11, 2026
5a31a14
ci(install-e2e): native per-combo skips via a reusable skip workflow
ethernet8023 Aug 11, 2026
83d009a
ci(install-e2e): nest the graph per starting tag; skips live where th…
ethernet8023 Aug 11, 2026
3eec049
ci(windows-e2e): static inner job name - github renders name expressi…
ethernet8023 Aug 11, 2026
6d94678
ci(install-e2e): jobs own their skips - generator is pure expansion
ethernet8023 Aug 11, 2026
5521d32
ci(windows-e2e): probe the starting tag for apps/desktop - pre-deskto…
ethernet8023 Aug 11, 2026
6515f81
ci(install-e2e): hardcode combination jobs in the primary workflow - …
ethernet8023 Aug 11, 2026
83e9f88
ci(install-e2e): per-leg names are just the transition; tag capabilit…
ethernet8023 Aug 11, 2026
4e88616
ci(install-e2e): leg names carry everything - os, method pair, tag tr…
ethernet8023 Aug 11, 2026
1c60bdc
ci(install-e2e): back to the generator - workflows stay generic, name…
ethernet8023 Aug 11, 2026
17dea59
ci(install-e2e): generator drops runtime validation for jsdoc type un…
ethernet8023 Aug 11, 2026
6d7ba86
ci(install-e2e): collapse the method vocabulary - 3 install ids, inst…
ethernet8023 Aug 11, 2026
e6e056f
ci(windows-e2e): step names carry the actual install-ref
ethernet8023 Aug 12, 2026
718722a
test(install): installer-script e2e driver - git redirect, no sandbox
ethernet8023 Aug 12, 2026
ea4cd37
ci(install-e2e): retire the bubblewrap sandbox - git redirect everywh…
ethernet8023 Aug 12, 2026
7a562a2
test(install): windows installer-script e2e - irm | iex arm goes live
ethernet8023 Aug 12, 2026
ae3a822
ci(windows-e2e): driver installs its own pinned @playwright/test - ne…
ethernet8023 Aug 12, 2026
dc23cbb
ci(windows-e2e): stderr chatter is not failure - EAP=Continue around …
ethernet8023 Aug 12, 2026
cde3b4f
fix some names
ethernet8023 Aug 12, 2026
80a0a19
ci(install-e2e): plan chart on the run summary - combination x tag ma…
ethernet8023 Aug 12, 2026
db969ce
ci(install-e2e): result chart on the run summary - conclusions per co…
ethernet8023 Aug 12, 2026
8e6f6d8
ci(install-e2e): result chart on the run summary - conclusions per co…
ethernet8023 Aug 12, 2026
31d9588
ci(install-e2e): full installer transcripts in the job log, folded in…
ethernet8023 Aug 12, 2026
3cd6636
fix(install-e2e): stray paren broke the generator - every node invoca…
ethernet8023 Aug 12, 2026
a64b5f5
test(install-e2e): smoke hermes desktop --build-only between install …
ethernet8023 Aug 12, 2026
1af2093
test(install-e2e): split app-update into open-app-update + hermes-des…
ethernet8023 Aug 12, 2026
2395234
test(install-e2e): installer-script+desktop is its own install and up…
ethernet8023 Aug 12, 2026
cdaf0cf
ci(install-e2e): one screen-recording mechanism on every runner, Xvfb…
ethernet8023 Aug 12, 2026
0f903e1
test(install-e2e): hermes-desktop-app-update goes live on the script …
ethernet8023 Aug 12, 2026
11f00b8
fix(install-e2e): installer_supports lied under pipefail - buffer the…
ethernet8023 Aug 12, 2026
adf7d55
ci(install-e2e): windows composes install x update - one driver, one job
ethernet8023 Aug 12, 2026
2b39b88
test(install-e2e): macos desktop-installer arm - the published dmg, d…
ethernet8023 Aug 12, 2026
f4c4c17
maybe make macos screencap work?
ethernet8023 Aug 12, 2026
368164d
git shims for fork detection disablement
ethernet8023 Aug 12, 2026
6fd7f05
fix macos screen record
ethernet8023 Aug 12, 2026
4578b5d
ci(install-e2e): result chart says WHY a cell skipped
ethernet8023 Aug 12, 2026
6e139b2
fix(windows-e2e): pin the driver's git to git.exe - never through its…
ethernet8023 Aug 12, 2026
fd02bd8
refactor(desktop-e2e): one mock inference server in tests-js/scripts
ethernet8023 Aug 12, 2026
7721b26
fix(install-e2e): boot the app-update legs against a REAL configured …
ethernet8023 Aug 12, 2026
1ae3961
fix ssh redirgithub
ethernet8023 Aug 12, 2026
9080999
hog the pool
ethernet8023 Aug 12, 2026
05ffab9
feat(install-e2e): playback.html leg player - zip in, video + time-sy…
ethernet8023 Aug 12, 2026
e138cb5
feat(install-e2e): hook the leg player into the results table
ethernet8023 Aug 12, 2026
41e9fee
default to 2 tags
ethernet8023 Aug 12, 2026
08d9f27
fix(install-e2e): results chart 📼 links against real artifact names
ethernet8023 Aug 13, 2026
cd667de
fix(install-e2e): windows transcripts were empty; player gets #zip= h…
ethernet8023 Aug 14, 2026
91ba108
fix(install-e2e): wait longer for init
ethernet8023 Aug 14, 2026
4bc6bfe
feat(playback): ALL·merged tab - every log on one video-synced timeline
ethernet8023 Aug 14, 2026
4c3ee59
feat(playback): ansi n styles
ethernet8023 Aug 14, 2026
7807f54
fix(install-e2e): one time base for every transcript in a leg
ethernet8023 Aug 14, 2026
2bd1355
style(install-e2e): export TS_BASE so shellcheck sees the use
ethernet8023 Aug 14, 2026
cd91102
3 default job
ethernet8023 Aug 14, 2026
08f6a6d
fix(install-e2e): REPO_DIR -> REPO_ROOT in macos dmg driver self-check
yoniebans Aug 17, 2026
f0e3bcd
fix(install-e2e): reach Settings through the late-mounting onboarding…
yoniebans Aug 25, 2026
c26bbe5
fix(install-e2e): force 100% zoom before driving the app
yoniebans Aug 25, 2026
227f7ca
fix(install-e2e): nudge Check now until Update now appears
yoniebans Aug 25, 2026
3f78edd
feat(install-e2e): verify the update by relaunching the app; bounded …
yoniebans Aug 25, 2026
29203d0
chore(install-e2e): dump hit-test stack and titlebar geometry when se…
yoniebans Aug 25, 2026
15ebb81
fix(install-e2e): drive the dmg bootstrap GUI so the macos desktop-in…
yoniebans Aug 31, 2026
d18ad46
feat(install-e2e): cover non-app update methods after a dmg install
yoniebans Sep 1, 2026
b7043f7
feat(install-e2e): cover Setup.exe re-run as a windows update method
yoniebans Sep 1, 2026
bf75c52
docs(install-e2e): retire stale TODO prose now every driver arm exists
yoniebans Sep 1, 2026
2f25c07
perf(install-e2e): 60-minute job caps; 35-minute updater wait
yoniebans Sep 1, 2026
848bea4
perf(install-e2e): fail the updater wait after 12 minutes without pro…
yoniebans Sep 1, 2026
b5527f5
fix(install-e2e): treat an unreadable checkout as no updater progress
yoniebans Sep 1, 2026
d19038e
Merge upstream main (b81383ec21) into the install-e2e suite branch
yoniebans Sep 1, 2026
530b443
revert(install-e2e): drop the 12-minute no-progress tripwire
yoniebans Sep 2, 2026
558d76c
Merge upstream main (afc3d9d34c): refresh before review
yoniebans Sep 2, 2026
a3e7d6a
fix(install-e2e): review findings — input hygiene, chart ranking, cos…
yoniebans Sep 2, 2026
cd39b35
fix(install-e2e): round-2 review — decimal-only tag-count, honest cos…
yoniebans Sep 2, 2026
49a5c44
fix(install-e2e): review follow-ups — harness needle, per-matrix cap …
yoniebans Sep 3, 2026
3ccebf2
test(install-e2e): collect install-side logs before the post-update s…
ethernet8023 Sep 3, 2026
382b5de
test(install-e2e): snapshot install-side state before post-update smo…
ethernet8023 Sep 3, 2026
05a18c1
Merge upstream main (2afd17a9d722): post-simplify-codebase refactor
yoniebans Sep 5, 2026
1819e50
docs(update): scope the stderr-merge comments to legacy hand-offs
yoniebans Sep 5, 2026
94779d5
Merge upstream/main into ethie/desktop-update-tests
ethernet8023 Sep 5, 2026
c5ce06b
test(install): verify installer progress survives the CLI extraction
ethernet8023 Sep 5, 2026
a3eef50
test(managed-uv): use native Windows fixtures and isolated stamps
ethernet8023 Sep 5, 2026
aef539b
fix(install-e2e): persist input zoom across window lifecycle events
ethernet8023 Sep 6, 2026
184b2ae
fix(install-e2e): await zoom IPC outside Playwright's predicate
ethernet8023 Sep 6, 2026
cfe8d15
docs(install-e2e): align platform routes and dispatch costs
ethernet8023 Sep 6, 2026
7cfe82a
fix(install-e2e): handle startup zoom restore and legacy Unicode output
ethernet8023 Sep 6, 2026
cf9d341
fix(install-e2e): verify input readiness and tolerate transient windows
ethernet8023 Sep 6, 2026
8e5cf54
docs(install-e2e): mark evidence-backed historical upgrade failures
ethernet8023 Sep 6, 2026
425dcf7
fix(install-e2e): prevent detached updater fork prompts
ethernet8023 Sep 6, 2026
49bf392
feat(install-e2e): classify exact known failures with report footnotes
ethernet8023 Sep 6, 2026
5f10ff4
test(install-e2e): resolve report module from the test URL
ethernet8023 Sep 6, 2026
d7edc23
fix(install-e2e): classify native GUI driver failures by exit status
ethernet8023 Sep 6, 2026
1c8b4d5
fix(install-e2e): stage classified receipts at an artifact-safe path
ethernet8023 Sep 7, 2026
499edee
test(install-e2e): trace early updater exits and marker owner
ethernet8023 Sep 7, 2026
86110e8
fix(install-e2e): wait for Electron close before driver exit
ethernet8023 Sep 7, 2026
39b5ea6
test(install-e2e): capture native Playwright handoff teardown
ethernet8023 Sep 7, 2026
03a6ae0
fix(install-e2e): release inherited pipes after launcher exit
ethernet8023 Sep 7, 2026
692ef32
test(install-e2e): remove tracing after verified July handoff fix
ethernet8023 Sep 7, 2026
0cd1c4c
fix(install-e2e): dispatchEvent fallback when the picker click point …
yoniebans Sep 7, 2026
32ed206
Merge upstream main (fc8d15d7797c): freshen before PR push
yoniebans Sep 7, 2026
fa77f75
docs(install-e2e): mechanism-only comment on the dispatchEvent fallback
yoniebans Sep 7, 2026
15860df
Merge ethie's suite hardening; her input preparation supersedes the d…
yoniebans Sep 7, 2026
866332b
fix(relay): authorize send_message targets and surface egress decline…
benbarclay Sep 8, 2026
6f68394
feat(cli): add scoped bounded subagent dock state and controls
teknium1 Sep 8, 2026
84100ef
feat(cli): show live dock and full-screen subagent controls above com…
teknium1 Sep 8, 2026
8842d48
fix(cli): keep monitor controls pinned and resize chrome isolated
teknium1 Sep 8, 2026
4c8d380
test(cli): synchronize monitor inputs on rendered frames
teknium1 Sep 8, 2026
8b01df9
feat: expose session-scoped subagent roster and live tail RPCs
teknium1 Sep 8, 2026
2a908d7
feat(tui): dock live subagent roster above composer
teknium1 Sep 8, 2026
f3a9ca0
feat(tui): inspect live tails and steer from full-height agent roster
teknium1 Sep 8, 2026
1ae7389
fix(tui): keep agent controls visible on narrow terminals
teknium1 Sep 8, 2026
8e4b4e0
fix(tui): follow newest transcript output in tail view
teknium1 Sep 8, 2026
1c55bc9
fix(tui): count children rather than async completion units
teknium1 Sep 8, 2026
19ee48b
docs(tui): describe live agent dock and controls
teknium1 Sep 8, 2026
092ed67
feat(desktop): surface live subagent work above each composer
teknium1 Sep 8, 2026
98aa270
feat(desktop): steer and stop subagents through their parent owner
teknium1 Sep 8, 2026
fd3932c
fix(desktop): preserve scoped steering drafts and worker timer origins
teknium1 Sep 8, 2026
23fa4ae
docs: explain live subagent monitoring across chat surfaces
teknium1 Sep 8, 2026
4cd4f39
test: isolate missing first-party import guard fixture
teknium1 Sep 8, 2026
d99a63b
fix: yield subagent monitor to incoming CLI prompts
teknium1 Sep 8, 2026
30be948
fix: keep Ink agent progress monotonic across snapshot hydration
teknium1 Sep 8, 2026
8a7b6ff
fix: preserve newer Ink controls when status hydration arrives late
teknium1 Sep 8, 2026
924c5de
fix: scope subagent stops and publish authoritative live progress
teknium1 Sep 8, 2026
9756997
feat(desktop): hydrate scoped subagents and read extended live transc…
teknium1 Sep 8, 2026
7befa11
fix: retain subagent control after live session reattachment
teknium1 Sep 8, 2026
c2a0a18
fix(desktop): align subagent hydration with owned roster contract
teknium1 Sep 8, 2026
8a23f14
fix: keep classic subagent dock compact and skin-colored
teknium1 Sep 8, 2026
a0fa236
fix: retain worker tool activity in narrow classic monitor
teknium1 Sep 8, 2026
4aad9b1
fix: distinguish the live agent dock with a themed surface
teknium1 Sep 8, 2026
3669e17
fix: keep the compact agent dock passive
teknium1 Sep 8, 2026
b3e5c43
test: exercise dock fills with terminal color enabled
teknium1 Sep 8, 2026
fb5715c
fix: preserve subagent controls across attached session peers
teknium1 Sep 8, 2026
7ee5289
fmt(js): `npm run fix` on merge (#105729)
hermes-seaeye[bot] Sep 8, 2026
04b88a4
fmt(js): `npm run fix` on merge (#105732)
hermes-seaeye[bot] Sep 8, 2026
dec10c9
fix(desktop): keep task status card opaque on scroll
lesterlxt Jul 22, 2026
3dcf0de
test(desktop): adapt status-card regression to current router
teknium1 Sep 8, 2026
f3ccab1
test: define passive one-line subagent dock contract
teknium1 Sep 8, 2026
34e539e
feat: collapse Classic CLI subagent dock with F7
teknium1 Sep 8, 2026
f7fe32b
feat: add compact Ink agent dock and Enter live tail
teknium1 Sep 8, 2026
0a3b7fd
fix: preserve Ink composer cursor across agent monitors
teknium1 Sep 8, 2026
3863d13
docs: describe one-line docks and consistent transcript controls
teknium1 Sep 8, 2026
d4d4ecf
fmt(js): `npm run fix` on merge (#105739)
hermes-seaeye[bot] Sep 8, 2026
9e04818
fix: make review workers recognizable in live subagent viewers
teknium1 Sep 8, 2026
ee84ccd
test: align gateway review acknowledgement with shared formatter
teknium1 Sep 8, 2026
b4d7cf7
fix(browser): real-profile auth mirror hangs forever on a locked dest…
benbarclay Sep 8, 2026
58d6d52
fix(browser): bound auth backups without replacing live SQLite files
teknium1 Sep 8, 2026
13fb5e1
test(browser): migrate pinned-profile fixtures to real SQLite
teknium1 Sep 8, 2026
8aa219e
fix(desktop): expose plugin installation from settings
unsupportedpastels Sep 6, 2026
bc1d1a2
docs(delegation): update shipped defaults (250 iterations, 10 concurr…
notwitcheer Sep 8, 2026
08ffadc
docs(sessions): fix tip box that still says auto-prune ships disabled
notwitcheer Sep 8, 2026
0268b70
docs(code-execution): document the session kernel, reset, and stdout …
notwitcheer Sep 8, 2026
7ae4acf
docs(mcp): surface device-code login in the remote/headless hosts sec…
notwitcheer Sep 8, 2026
f77dbc2
docs(bot-mode): state that same-gateway Group Chats keep running afte…
notwitcheer Sep 8, 2026
fb3446a
docs: eight small accuracy fixes from open type/docs issues
notwitcheer Sep 8, 2026
77a5457
feat: organize desktop sessions by gateway and profile
teknium1 Sep 8, 2026
6909604
fix(desktop): reuse saved Cloud gateways from Settings
teknium1 Sep 8, 2026
f6449ec
docs: explain gateway session groups and saved Cloud switching
teknium1 Sep 8, 2026
a529ecf
feat(desktop): nest profile sessions under gateway sections
teknium1 Sep 8, 2026
9a3f1dc
fmt(js): `npm run fix` on merge (#105818)
hermes-seaeye[bot] Sep 8, 2026
b3399c1
fmt(js): `npm run fix` on merge (#105823)
hermes-seaeye[bot] Sep 8, 2026
63ec22e
fix: correct two stale comments/docs strings left out of the docs batch
kshitijk4poor Sep 8, 2026
a25967b
test: keep Desktop pane-focus setup outside cold imports
teknium1 Sep 8, 2026
c8aa560
Merge pull request #101420 from ethernet8023/ethie/desktop-update-tests
ethernet8023 Sep 8, 2026
59d1336
chore: map ckomma contributor email
kshitijk4poor Sep 8, 2026
748e684
fix(gateway): provision linger for system-service users
JoaoMarcos44 Sep 8, 2026
be9c2bd
fix(cron): derive the user bus env per probe and scoped spawn
Sep 8, 2026
4c4845f
fix(gateway): order the system unit after the target user's manager
kshitijk4poor Sep 8, 2026
6f11a32
refactor(gateway): wait on the target user's bus socket, not the gene…
kshitijk4poor Sep 8, 2026
abd83ab
fix(skills): make RSS and Reddit reading optional
teknium1 Sep 8, 2026
b2aa855
fix(cli): open subagent monitor with the TUI Ctrl+T shortcut
teknium1 Sep 8, 2026
9b0d75c
fix: gateway ordering test runs without root access
teknium1 Sep 8, 2026
ad08688
fix(bot-mode): derive group clarify/approval attention from $groupCla…
sprmn24 Sep 2, 2026
613ec20
fix(bot-mode): keep pending group attention bound to its live room
teknium1 Sep 8, 2026
e1c8764
fix: fence retired group member failure cues
teknium1 Sep 8, 2026
f9993d5
refactor: extract group member phases and roster presentation
teknium1 Sep 8, 2026
960dee7
fix(desktop): Hide tabs works on the sessions sidebar
Sep 8, 2026
be4bd24
fix(desktop): take Import session off the sidebar nav
Sep 8, 2026
3c0a84f
chore: map MacBook-Air contributor email
Sep 8, 2026
acbe72e
fix: keep Bot Mode pet selection rings inside the gallery
teknium1 Sep 8, 2026
9d661c2
fix(prompt): keep memory guidance within available tools
teknium1 Sep 8, 2026
19cd839
fix(compression): keep lean tails lean after auxiliary feasibility
teknium1 Sep 8, 2026
9d66e76
feat(desktop): let users order Group Chat rooms
teknium1 Sep 8, 2026
aa83c6d
fix: hide inactive grouping options from delegation schema
teknium1 Sep 8, 2026
ab6f4c5
fix(desktop): show the focused bot's working think pose
Adolanium Sep 8, 2026
78afbc3
fix(desktop): load property card guidance only on demand
teknium1 Sep 8, 2026
22488b8
fix(cli): keep monitor repaints safe during prompt handoff
teknium1 Sep 8, 2026
bc952a7
fix: integrate group attention with room ordering and working avatars
teknium1 Sep 8, 2026
f03ed94
Merge pull request #105960 from NousResearch/fix/group-attention-salvage
teknium1 Sep 8, 2026
e9bb6e8
fmt(js): `npm run fix` on merge (#106039)
hermes-seaeye[bot] Sep 8, 2026
c076d65
fmt(js): `npm run fix` on merge (#106065)
hermes-seaeye[bot] Sep 8, 2026
ed6671d
test(desktop): retire model catalog fixture jobs at teardown
teknium1 Sep 8, 2026
7568fb6
fix(desktop): let subagent header collapse roster and details
unsupportedpastels Sep 8, 2026
7777f8c
feat: add GPT Image 2.5 generation and editing to OpenAI provider
teknium1 Sep 8, 2026
b1f003e
feat: add FAL GPT Image 2.5 generation and editing selections
teknium1 Sep 8, 2026
1175ac4
feat(desktop): default glass to 29% tint on the sidebar
Sep 8, 2026
608b97c
docs(desktop): document sidebar glass defaults
Sep 8, 2026
258b351
fix(desktop): keep background reports behind bounded disclosures
Sep 8, 2026
e7eaff6
docs(desktop): explain background report disclosures
Sep 8, 2026
facb9eb
fix: trim computer use tool schema guidance
teknium1 Sep 8, 2026
cb38c76
fix(gateway): resolve quota footer conflicts with upstream main
sfire123 Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions .github/actions/e2e-screen-record/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: E2E screen recording
description: >
One screen-recording mechanism for every install-e2e runner. mode=start
installs what the OS needs (ffmpeg everywhere; Xvfb on headless linux),
starts the recorder, and exports DISPLAY for later steps. mode=stop
finalizes the recording and fails on a zero-frame file. A missing ffmpeg
is a hard error - a graceful skip makes the missing tool invisible and
the artifact silently loses its recording.

inputs:
mode:
description: start | stop
required: true
output:
description: Path of the recording (mkv).
required: true

runs:
using: composite
steps:
# ---- setup + start ------------------------------------------------------
- name: Install ffmpeg + Xvfb (linux)
if: inputs.mode == 'start' && runner.os == 'Linux'
shell: bash
run: |
set -euo pipefail
if ! command -v ffmpeg >/dev/null 2>&1 || ! command -v Xvfb >/dev/null 2>&1; then
sudo apt-get update -qq
sudo apt-get install -y -qq --no-install-recommends ffmpeg xvfb
fi

- name: Start Xvfb (linux, headless)
if: inputs.mode == 'start' && runner.os == 'Linux'
shell: bash
run: |
set -euo pipefail
# A dedicated display rather than xvfb-run-wrapping each command, so
# ONE display serves both the app under test and the recorder.
if [ -z "${DISPLAY:-}" ]; then
Xvfb :99 -screen 0 1920x1080x24 &
echo "$!" > "$RUNNER_TEMP/xvfb.pid"
echo "DISPLAY=:99" >> "$GITHUB_ENV"
export DISPLAY=:99
fi
# Wait until the display accepts connections; xdpyinfo may not be
# installed, so probe with the X socket.
for _ in $(seq 1 50); do
[ -S "/tmp/.X11-unix/X99" ] && break
sleep 0.2
done
[ -S "/tmp/.X11-unix/X99" ] || { echo "Xvfb :99 did not come up" >&2; exit 1; }

- name: Verify ffmpeg (macos)
if: inputs.mode == 'start' && runner.os == 'macOS'
shell: bash
run: |
set -euo pipefail
# Do not trust "preinstalled" claims - verify, install on miss.
command -v ffmpeg >/dev/null 2>&1 || brew install --quiet ffmpeg

# until new runner image is published by github, we have to hack on screen record approvals
# see https://github.com/actions/runner-images/issues/14474 - as of this hermes agent commit,
# it's merged but the image isn't updated.
approvalsPlist="$HOME/Library/Group Containers/group.com.apple.replayd/ScreenCaptureApprovals.plist"
mkdir -p "$(dirname "$approvalsPlist")"
defaults write "$approvalsPlist" "/opt/hca/hosted-compute-agent" -date "3024-01-01 00:00:00 +0000"
killall cfprefsd 2>/dev/null || true

- name: Restore cached ffmpeg (windows)
if: inputs.mode == 'start' && runner.os == 'Windows'
id: ffmpeg-cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
with:
path: ${{ runner.temp }}\test-bins\ffmpeg
key: e2e-ffmpeg-${{ runner.os }}-v1

- name: Install ffmpeg (windows)
if: inputs.mode == 'start' && runner.os == 'Windows' && steps.ffmpeg-cache.outputs.cache-hit != 'true'
shell: pwsh
run: |
$bins = "$env:RUNNER_TEMP\test-bins\ffmpeg"
New-Item -ItemType Directory -Path $bins -Force | Out-Null
winget install -e --id Gyan.FFmpeg --silent --accept-source-agreements --accept-package-agreements --disable-interactivity --location "$env:RUNNER_TEMP\ffmpeg_dir"
Copy-Item -Path "$env:RUNNER_TEMP\ffmpeg_dir\*\*" -Destination $bins -Recurse -Force

- name: Add ffmpeg to PATH (windows)
if: inputs.mode == 'start' && runner.os == 'Windows'
shell: pwsh
run: Add-Content -Path $env:GITHUB_PATH -Value "$env:RUNNER_TEMP\test-bins\ffmpeg\bin"

- name: Start recording (posix)
if: inputs.mode == 'start' && runner.os != 'Windows'
shell: bash
run: bash "$GITHUB_ACTION_PATH/../../../tests/install/e2e-assets/record-start.sh" '${{ inputs.output }}'

- name: Start recording (windows)
if: inputs.mode == 'start' && runner.os == 'Windows'
shell: powershell
run: powershell -NoProfile -ExecutionPolicy Bypass -File "$env:GITHUB_ACTION_PATH\..\..\..\tests\install\e2e-assets\record-start.ps1" -OutFile "${{ inputs.output }}"

# ---- stop ---------------------------------------------------------------
- name: Stop recording (posix)
if: inputs.mode == 'stop' && runner.os != 'Windows'
shell: bash
run: bash "$GITHUB_ACTION_PATH/../../../tests/install/e2e-assets/record-stop.sh" '${{ inputs.output }}'

- name: Stop recording (windows)
if: inputs.mode == 'stop' && runner.os == 'Windows'
shell: powershell
run: powershell -NoProfile -ExecutionPolicy Bypass -File "$env:GITHUB_ACTION_PATH\..\..\..\tests\install\e2e-assets\record-stop.ps1" -OutFile "${{ inputs.output }}"
162 changes: 162 additions & 0 deletions .github/workflows/install-e2e-macos-run.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
# Reusable runner for ONE macOS install/update combination.
#
# Two driver arms, one runs per dispatch (the other natively skips):
#
# e2e (script arms) tests/install/installer-script-e2e.sh - the
# OS-agnostic git-redirect driver shared with
# linux. installer-script(+desktop) installs,
# script/updater/hermes-desktop-app-update
# updates.
# gui-e2e (desktop arm) tests/install/macos-desktop-e2e.sh - the
# published Hermes-Setup.dmg, mounted and run,
# then the app driven by Playwright for the
# app-update methods.
#
# Method pairs without a driver arm yet NATIVELY SKIP (grey check, no
# runner): the capability knowledge lives here, next to the drivers.

name: install-e2e macos leg

on:
workflow_call:
inputs:
install-method:
description: 'How OLD gets installed. Supported: installer-script, installer-script+desktop (curl | bash one-liner, optionally with --include-desktop) and desktop-installer@latest (the published Hermes-Setup.dmg).'
required: true
type: string
update-method:
description: 'How the install updates to HEAD. Script installs support hermes-update / installer-script / installer-script+desktop / hermes-desktop-app-update; dmg installs support open-app-update / hermes-desktop-app-update.'
required: true
type: string
install-ref:
description: 'What to install before updating: a branch, a tag, or a SHA reachable from main.'
required: false
type: string
default: refs/heads/main
tag-has-desktop:
description: "Whether install-ref ships the desktop app (apps/desktop). The caller annotates this from the tag's own tree; desktop-method legs from pre-desktop releases natively skip."
required: false
type: boolean
default: true
leg-id:
description: 'Artifact-safe matrix leg id (from generate-e2e-matrix.mjs legId). Names this leg''s logs + player artifacts so the report job can link a row to its zip.'
required: true
type: string
dmg-url:
description: 'Bootstrap dmg to install OLD with. Default: the latest published one — what a user downloads today.'
required: false
type: string
default: https://hermes-assets.nousresearch.com/Hermes-Setup.dmg
timeout-minutes:
description: 'Job timeout. App-update legs do a full Electron build.'
required: false
type: number
default: 60

permissions:
contents: read

jobs:
# ---- arm 1: script installs (the shared OS-agnostic driver) --------------
e2e:
name: install & update
if: >-
(inputs.install-method == 'installer-script'
|| (inputs.install-method == 'installer-script+desktop' && inputs.tag-has-desktop))
&& (contains(fromJSON('["hermes-update", "installer-script"]'), inputs.update-method)
|| (contains(fromJSON('["installer-script+desktop", "hermes-desktop-app-update"]'), inputs.update-method) && inputs.tag-has-desktop))
uses: ./.github/workflows/install-e2e-run.yml
with:
install-method: ${{ inputs.install-method }}
update-method: ${{ inputs.update-method }}
install-ref: ${{ inputs.install-ref }}
tag-has-desktop: ${{ inputs.tag-has-desktop }}
leg-id: ${{ inputs.leg-id }}
runner: macos-latest
timeout-minutes: ${{ inputs.timeout-minutes }}

# ---- arm 2: the published dmg, then Playwright drives the app ------------
gui-e2e:
# Short static name on purpose: name expressions render UNEXPANDED on
# skipped jobs.
name: Hermes-Setup.dmg
if: >-
inputs.install-method == 'desktop-installer@latest' && inputs.tag-has-desktop
&& contains(fromJSON('["open-app-update", "hermes-desktop-app-update", "hermes-update", "installer-script", "installer-script+desktop"]'), inputs.update-method)
runs-on: macos-latest
timeout-minutes: ${{ inputs.timeout-minutes }}

steps:
# Full history: the driver bare-clones this checkout as the repo the
# installer/updater talk to.
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0

- name: Start screen recording
uses: ./.github/actions/e2e-screen-record
with:
mode: start
output: ${{ runner.temp }}/e2e-logs/recording.mkv

- name: Stage serve repo (main -> ${{ inputs.install-ref }})
run: |
set -euo pipefail
tests/install/macos-desktop-e2e.sh --phase stage \
--update-method '${{ inputs.update-method }}' \
--install-ref '${{ inputs.install-ref }}' \
--dmg-url '${{ inputs.dmg-url }}'
env:
HERMES_E2E_LOG_DIR: ${{ runner.temp }}/e2e-logs

- name: Install ${{ inputs.install-ref }} via Hermes-Setup.dmg
run: |
set -euo pipefail
tests/install/macos-desktop-e2e.sh --phase install \
--update-method '${{ inputs.update-method }}' \
--install-ref '${{ inputs.install-ref }}' \
--dmg-url '${{ inputs.dmg-url }}'
env:
HERMES_E2E_LOG_DIR: ${{ runner.temp }}/e2e-logs

- name: Update ${{ inputs.install-ref }} -> HEAD (${{ inputs.update-method }})
run: |
set -euo pipefail
tests/install/macos-desktop-e2e.sh --phase update \
--update-method '${{ inputs.update-method }}' \
--install-ref '${{ inputs.install-ref }}' \
--dmg-url '${{ inputs.dmg-url }}'
env:
HERMES_E2E_LOG_DIR: ${{ runner.temp }}/e2e-logs

- name: Stop screen recording
if: always()
uses: ./.github/actions/e2e-screen-record
with:
mode: stop
output: ${{ runner.temp }}/e2e-logs/recording.mkv

- name: Remux recording for browser playback
if: always()
run: |
set -euo pipefail
if [ -f "${{ runner.temp }}/e2e-logs/recording.mkv" ]; then
ffmpeg -y -hide_banner -loglevel error -i "${{ runner.temp }}/e2e-logs/recording.mkv" \
-c copy "${{ runner.temp }}/e2e-logs/recording.mp4"
fi

# Artifact names cannot contain '/'; install-ref may be a full ref.
- name: Build artifact name
id: artifact
if: always()
run: |
echo "name=install-e2e-logs-${{ inputs.leg-id }}" >> "$GITHUB_OUTPUT"

- name: Upload logs
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ steps.artifact.outputs.name }}
path: ${{ runner.temp }}/e2e-logs
retention-days: 14
if-no-files-found: ignore
Loading