Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
240 commits
Select commit Hold shift + click to select a range
932c913
page history session messages (#1099)
EKKOLearnAI May 28, 2026
e89c192
fix session bottom scroll alignment (#1100)
EKKOLearnAI May 28, 2026
5f5c5fa
fix(tts): require authentication for TTS endpoints (#1101)
GoldenFish123321 May 28, 2026
74d0c35
[codex] try vue virtual scroller for messages (#1103)
EKKOLearnAI May 28, 2026
14466df
make bridge worker transport configurable (#1106)
EKKOLearnAI May 28, 2026
1373b47
feat(version-check): add HERMES_WEB_UI_DISABLE_UPDATE_CHECK env var (…
sir1st May 28, 2026
717f577
fix group chat agent mentions (#1111)
EKKOLearnAI May 29, 2026
285f623
[codex] 修复 Coding Agents 的 Codex 启动和代理隔离 (#1123)
EKKOLearnAI May 29, 2026
9838173
fix builtin provider flags (#1125)
EKKOLearnAI May 29, 2026
e3359c6
[codex] 修复 Windows Coding Agents 安装状态检测 (#1126)
EKKOLearnAI May 29, 2026
b5b7d55
[codex] update coding agents i18n and changelog (#1129)
EKKOLearnAI May 29, 2026
91869ea
add merge permission test log (#1131)
EKKOLearnAI May 29, 2026
5015906
Revert "add merge permission test log (#1131)" (#1132)
hanzckernel May 29, 2026
9643a08
fix bridge mcp tool discovery (#1139)
EKKOLearnAI May 30, 2026
e988ce6
remove setup script docs (#1140)
EKKOLearnAI May 30, 2026
a1f06b8
fix virtual list empty state centering (#1141)
EKKOLearnAI May 30, 2026
675ddb8
fix profile runtime status loading (#1142)
EKKOLearnAI May 30, 2026
b015e70
[codex] fix MCP management lifecycle (#1144)
EKKOLearnAI May 30, 2026
818e7f7
fix chat scroll jitter (#1146)
EKKOLearnAI May 30, 2026
cb410e5
fix(bridge): preserve text/tool-call ordering to stop split narration…
paulocavallari May 30, 2026
cbae8e8
Add desktop (Electron) packaging and release distribution (#1147)
sir1st May 30, 2026
f799157
fix desktop preload build and rename app (#1150)
EKKOLearnAI May 30, 2026
eea1d1d
fix(auth): use path.dirname for credential dir on Windows (#1148)
sir1st May 30, 2026
12e0b5e
fix(server): raise body parser limit so avatar upload doesn't 413 (#1…
sir1st May 30, 2026
7f944a4
Fix desktop release artifact globs (#1155)
sir1st May 30, 2026
046c8d4
Fix desktop release artifact uploads (#1158)
EKKOLearnAI May 30, 2026
ce04b10
Fix Windows bundled Hermes CLI launcher (#1159)
sir1st May 30, 2026
6da5cd6
Add repository harness for coding agents (#1157)
sir1st May 30, 2026
877bb16
Skip macOS signing when certificates are absent (#1160)
sir1st May 30, 2026
46bd7d0
relax desktop release artifact harness check (#1161)
sir1st May 30, 2026
dcbf601
fix linux desktop packaging paths (#1162)
sir1st May 30, 2026
fc35c74
fix node npm detection (#1163)
EKKOLearnAI May 30, 2026
4c3f025
skip production data dir creation (#1164)
EKKOLearnAI May 30, 2026
e45b3a8
add website downloads and deploy workflow (#1165)
EKKOLearnAI May 30, 2026
9df79c3
fix website deploy without rsync (#1166)
EKKOLearnAI May 30, 2026
c998a53
[codex] add MCP tools visibility management (#1170)
EKKOLearnAI May 31, 2026
96bdf8d
fix Windows desktop startup readiness (#1167)
sir1st May 31, 2026
e5c5f98
fix message list session transitions (#1172)
EKKOLearnAI May 31, 2026
9d1da73
update 0.6.7 changelog and provider url handling (#1174)
EKKOLearnAI May 31, 2026
a7be7c0
bump package versions to 0.6.7 (#1175)
EKKOLearnAI May 31, 2026
98d877a
Sequence website deploy after desktop release (#1176)
EKKOLearnAI May 31, 2026
d2b69ba
Align profiles header height (#1182)
EKKOLearnAI May 31, 2026
e1027ec
Fix nonblocking preview actions (#1188)
EKKOLearnAI May 31, 2026
7f9427b
fix(file-provider): SSHFileProvider 支持自定义端口 (#1181)
GoldenFish123321 May 31, 2026
48c35c2
fix(chat): preserve unsent input draft (#1173)
qiontoo May 31, 2026
8dbf4c7
Add website download mirrors (#1189)
EKKOLearnAI May 31, 2026
1fbbfdf
fix(context): prefer provider context lengths (#1184)
qiontoo Jun 1, 2026
4516502
add desktop tray and updater support (#1193)
EKKOLearnAI Jun 1, 2026
15d358f
fix windows desktop bridge startup (#1196)
EKKOLearnAI Jun 1, 2026
3f7242a
fix(client): fix mobile layout width overflow on virtual keyboard tog…
vtxyer Jun 1, 2026
aa7c1c4
fix windows bridge logs and mobile headers (#1198)
EKKOLearnAI Jun 1, 2026
022e18d
fix windows desktop terminal popups (#1199)
EKKOLearnAI Jun 1, 2026
b96bda4
[codex] fix desktop tray icon and update checks (#1201)
EKKOLearnAI Jun 1, 2026
d2a7c54
[codex] fix Windows tray icon size (#1202)
EKKOLearnAI Jun 1, 2026
c027df0
[codex] fix Windows bridge worker popups (#1203)
EKKOLearnAI Jun 1, 2026
6972717
hide desktop python subprocesses on login (#1206)
EKKOLearnAI Jun 1, 2026
ed905e4
set package version to 0.6.7 (#1208)
EKKOLearnAI Jun 1, 2026
90929d0
add hermes studio cli shim (#1209)
EKKOLearnAI Jun 1, 2026
c27a12f
[codex] fix Windows desktop browser packaging (#1219)
EKKOLearnAI Jun 1, 2026
0835732
remove PR desktop smoke test (#1221)
EKKOLearnAI Jun 1, 2026
7440da9
fix mac desktop signing file limit (#1222)
EKKOLearnAI Jun 1, 2026
00ea452
Codex/pr 1217 (#1226)
sir1st Jun 2, 2026
1acfb64
fix runtime workflow checkout ref (#1231)
EKKOLearnAI Jun 2, 2026
7aa483f
Fix desktop runtime cold start handling (#1233)
EKKOLearnAI Jun 2, 2026
b00ada4
fix provider auth profile scoping (#1236)
EKKOLearnAI Jun 2, 2026
a0d6c98
[codex] fix gateway startup compatibility (#1237)
EKKOLearnAI Jun 2, 2026
59d7df1
[codex] fix desktop update check rate limit (#1239)
EKKOLearnAI Jun 2, 2026
6792a45
update Hermes Studio branding and speech pause (#1240)
EKKOLearnAI Jun 2, 2026
349667b
[codex] update changelog through 0.6.9 and add Russian locale (#1244)
EKKOLearnAI Jun 2, 2026
dd03bea
[codex] disable runtime build on release publish (#1245)
EKKOLearnAI Jun 2, 2026
8acff12
[codex] Add runtime download source selection (#1246)
EKKOLearnAI Jun 2, 2026
cdd4430
Avoid exposing Git Unix tools on desktop PATH (#1252)
EKKOLearnAI Jun 2, 2026
39323e0
fix desktop runtime cache path (#1253)
EKKOLearnAI Jun 2, 2026
b359b03
[codex] fix Windows Hermes Studio CLI launch (#1255)
EKKOLearnAI Jun 2, 2026
efca285
fix(memory): allow empty content when saving my notes (#1195)
Andy365-365 Jun 2, 2026
fd2b42a
feat: add workspace text file previews (#1262)
hanzckernel Jun 3, 2026
e664845
[codex] add auxiliary model compression settings (#1263)
EKKOLearnAI Jun 3, 2026
b7fdc91
fix desktop runtime archive extraction (#1264)
EKKOLearnAI Jun 3, 2026
98bdc25
route apikey.fun providers to presets (#1266)
EKKOLearnAI Jun 3, 2026
2f1686d
Sync bridge approval allowlist (#1272)
EKKOLearnAI Jun 3, 2026
91bb68d
Feat: user avatar upload and group-chat avatar sync (#1273)
EKKOLearnAI Jun 3, 2026
b1bcec1
document chat chain harness (#1274)
EKKOLearnAI Jun 3, 2026
dc52625
[codex] add provider model cache refresh action (#1280)
EKKOLearnAI Jun 3, 2026
9461a44
[codex] fix desktop runtime startup robustness (#1284)
EKKOLearnAI Jun 3, 2026
1d19be2
prepare 0.6.10 changelog (#1285)
EKKOLearnAI Jun 3, 2026
594bb29
fix mac update manifest repair flow (#1305)
EKKOLearnAI Jun 4, 2026
ae38921
feat: add taskID & parent taskID to kanban task pannel (#1279)
IceCapriccio Jun 4, 2026
f9b2205
优化工具结果中的 diff 展示 (#1289)
hanzckernel Jun 4, 2026
b569320
feat: reflect session title in browser tab (#1296)
werserk Jun 4, 2026
fe9cd83
Add Hermes native session title sync (#1306)
EKKOLearnAI Jun 4, 2026
cbb2b5c
[codex] Document startup opt-out env flags (#1307)
EKKOLearnAI Jun 4, 2026
f978a5b
fix(i18n): localize workspace folder picker text (#1311)
onaries Jun 4, 2026
32a386a
Update OpenRouter attribution title (#1312)
EKKOLearnAI Jun 4, 2026
f0783e4
[codex] fix shutdown bridge cleanup timing (#1320)
EKKOLearnAI Jun 4, 2026
397e4de
fix bridge abort timeout handling (#1326)
EKKOLearnAI Jun 4, 2026
07c7287
fix windows gateway startup recovery (#1327)
EKKOLearnAI Jun 4, 2026
b6054e6
[codex] add skill import delete profile coverage (#1341)
EKKOLearnAI Jun 5, 2026
4f29cec
Revert "[codex] add skill import delete profile coverage (#1341)"
EKKOLearnAI Jun 5, 2026
85905ff
feat(skills): add import/delete with auto-refresh and path display
Jun 3, 2026
acced4f
feat(skills): 外部目录管理、按 sourcePath 分组,并修复 PR #1288 的 review
Jun 4, 2026
fa23de0
test profile-scoped skill import delete
EKKOLearnAI Jun 5, 2026
89770d2
make skill actions icon only on mobile
EKKOLearnAI Jun 5, 2026
eb315b2
fix mobile skill action icon spacing
EKKOLearnAI Jun 5, 2026
cf3b853
fix: harden chat tool payload rendering
hanzckernel Jun 3, 2026
2940f2b
docs: record chat payload chain change
hanzckernel Jun 3, 2026
f252460
fix(chat): merge reasoning across tool cycles into single assistant m…
SpikeJulia Jun 4, 2026
982b76e
fix(chat): preserve tool boundaries while merging reasoning
EKKOLearnAI Jun 5, 2026
537ba83
fix: rejoin group chat room after reconnect
hanzckernel Jun 4, 2026
49b6ec6
avoid bridge worker startup on resume
EKKOLearnAI Jun 5, 2026
7f8b767
record pr number in chat session docs
EKKOLearnAI Jun 5, 2026
4987c28
fix: harden web ui origin policy and security headers
hanzckernel Jun 4, 2026
23462e1
docs: record chat chain origin policy impact
hanzckernel Jun 4, 2026
6af2a0e
split chat chain change logs into fragments
EKKOLearnAI Jun 5, 2026
ea208b4
migrate existing chat chain logs to fragments
EKKOLearnAI Jun 5, 2026
fc3833a
migrate origin policy chat chain log
EKKOLearnAI Jun 5, 2026
600c1f2
fix chat scroll lock and desktop fade
EKKOLearnAI Jun 5, 2026
110e2c6
record pr number for chat scroll fix
EKKOLearnAI Jun 5, 2026
9da7134
tune chat bottom follow timing
EKKOLearnAI Jun 5, 2026
ccb9353
lock chat auto follow on user scroll
EKKOLearnAI Jun 5, 2026
a94b7b4
tighten chat auto follow threshold
EKKOLearnAI Jun 5, 2026
770c4c7
fix dev terminal websocket proxy
EKKOLearnAI Jun 5, 2026
3a345a2
feat: add LAN device discovery
EKKOLearnAI Jun 5, 2026
efebd66
feat: add device approval workflow
EKKOLearnAI Jun 5, 2026
70fc6d1
fix: separate LAN discovery from device pairing
EKKOLearnAI Jun 5, 2026
4cdab05
fix: preserve device public key for pairing signatures
EKKOLearnAI Jun 5, 2026
4b7649b
fix: handle duplicate device pairing requests
EKKOLearnAI Jun 5, 2026
90b9177
fix: sync device pairing status on refresh
EKKOLearnAI Jun 5, 2026
2ae4621
feat: show device request history
EKKOLearnAI Jun 5, 2026
63fb3b1
feat: add LAN peer socket manager
EKKOLearnAI Jun 5, 2026
834ce65
fix: revoke device access when deleting request history
EKKOLearnAI Jun 5, 2026
3346c21
fix: hard delete device request records
EKKOLearnAI Jun 5, 2026
3527b54
fix: purge deleted device relation records
EKKOLearnAI Jun 5, 2026
02e842d
feat: reconnect LAN peer client sockets
EKKOLearnAI Jun 5, 2026
fd42ccb
feat: expose LAN peer tools over MCP
EKKOLearnAI Jun 5, 2026
798595d
feat: add desktop MCP command shim
EKKOLearnAI Jun 5, 2026
b10dd61
feat: inject bundled MCP server on startup
EKKOLearnAI Jun 5, 2026
6de28fa
fix: respect desktop MCP port environment
EKKOLearnAI Jun 5, 2026
5a59ee1
fix: pass Web UI home to bundled MCP
EKKOLearnAI Jun 5, 2026
a12903c
fix: allow local MCP device calls with server token
EKKOLearnAI Jun 5, 2026
09ae5cd
fix: allow local MCP peer connection listing
EKKOLearnAI Jun 5, 2026
d005397
fix: add MCP CLI help output
EKKOLearnAI Jun 5, 2026
3f4322c
fix: harden LAN peer discovery and connect
EKKOLearnAI Jun 5, 2026
021e58a
fix: persist outbound pairing requests
EKKOLearnAI Jun 5, 2026
c7809c1
fix execute code approval memory
EKKOLearnAI Jun 6, 2026
318d28b
fix chat fade under reduced motion
EKKOLearnAI Jun 6, 2026
46e2692
limit lan peer terminal sessions
EKKOLearnAI Jun 6, 2026
794cac7
add lan peer terminal list tool
EKKOLearnAI Jun 6, 2026
3df4ee8
test server token loopback guard
EKKOLearnAI Jun 6, 2026
c219ef0
fix: filter gateway autostart profiles
hanzckernel Jun 4, 2026
af8e250
fix: expose gateway autostart config setting
hanzckernel Jun 5, 2026
de819a1
use profile multiselect for gateway autostart
EKKOLearnAI Jun 6, 2026
66f0ad5
hide exclude list in gateway whitelist mode
EKKOLearnAI Jun 6, 2026
9cad64c
test gateway autostart profile selects
EKKOLearnAI Jun 6, 2026
dcbad34
接入统一后端 TTS 合成和 MiMo 音色复刻 (#1353)
hanzckernel Jun 6, 2026
280d5cc
fix devices page header layout (#1357)
EKKOLearnAI Jun 6, 2026
871f8d9
[codex] Fix chat initial bottom scroll (#1356)
EKKOLearnAI Jun 6, 2026
9215672
prepare 0.6.11 changelog (#1359)
EKKOLearnAI Jun 6, 2026
bfa0c53
fix skill usage stats source (#1360)
EKKOLearnAI Jun 6, 2026
5d9782e
sync desktop artifacts to r2 (#1362)
EKKOLearnAI Jun 6, 2026
954bcce
Revert "sync desktop artifacts to r2 (#1362)" (#1363)
EKKOLearnAI Jun 6, 2026
7b10bdf
[codex] fix group chat mentions after resize (#1368)
EKKOLearnAI Jun 6, 2026
a148330
add LAN pairing HTTP fallback (#1369)
EKKOLearnAI Jun 6, 2026
4451855
update Chinese sidebar labels (#1374)
EKKOLearnAI Jun 6, 2026
fa63562
[codex] refine sidebar logout username (#1383)
EKKOLearnAI Jun 7, 2026
c2aa577
fix: make studio mcp autoinject path independent (#1375)
hanzckernel Jun 7, 2026
77c06a7
fix file list column alignment (#1376)
hanzckernel Jun 7, 2026
4a7ace0
fix(markdown): inline 渲染本地 audio links (#1377)
hanzckernel Jun 7, 2026
9bb9c38
remove unwired busy input setting (#1379)
hanzckernel Jun 7, 2026
efff9c4
Add manual remote device pairing (#1384)
EKKOLearnAI Jun 7, 2026
185b510
fix: 避免临时 Studio MCP 自动注入反复触发 reload (#1391)
hanzckernel Jun 8, 2026
808aec7
fix: protect bundled skill injection conflicts (#1392)
hanzckernel Jun 8, 2026
4689815
fix(agent-bridge): 暴露运行时 readiness 到 health 和 chat (#1393)
hanzckernel Jun 8, 2026
f6364d6
fix legacy usage updated_at inserts (#1401)
EKKOLearnAI Jun 8, 2026
7a2f078
feat: add STT provider infrastructure (#1396)
hanzckernel Jun 8, 2026
11ed7fc
Merge voice provider stack into main
EKKOLearnAI Jun 8, 2026
c52e2c2
[codex] add coding agent chat sessions (#1410)
EKKOLearnAI Jun 8, 2026
92ec6d1
fix: TTS朗读时保留小数点,修复金额读取错误 (#1404) (#1405)
Andy365-365 Jun 8, 2026
85b496d
[codex] fix Codex tool final text (#1413)
EKKOLearnAI Jun 8, 2026
e6c23ab
feat(chat): add per-session reasoning effort selector (#1417)
paulocavallari Jun 9, 2026
a81c7af
Expand Kanban web UI parity (#1418)
sir1st Jun 9, 2026
ca60378
[codex] add Atlas Cloud provider preset (#1424)
EKKOLearnAI Jun 9, 2026
1d8089f
fix(server): parse file delete request bodies (#1420)
qdivan Jun 9, 2026
1196598
hide reasoning effort for coding agents (#1425)
EKKOLearnAI Jun 9, 2026
db4956b
[codex] add runtime active version release packaging (#1427)
EKKOLearnAI Jun 9, 2026
d020fff
add website version manifest (#1428)
EKKOLearnAI Jun 9, 2026
1034313
[codex] allow manual website version inputs (#1429)
EKKOLearnAI Jun 9, 2026
72a070f
add runtime version management (#1431)
EKKOLearnAI Jun 9, 2026
fcea2f6
[codex] update website webui versions (#1433)
EKKOLearnAI Jun 9, 2026
be4678b
[codex] show version management only in desktop (#1434)
EKKOLearnAI Jun 9, 2026
0e556ba
fix windows coding agent launch (#1439)
EKKOLearnAI Jun 9, 2026
66bb286
[codex] fix Windows coding agent command errors (#1440)
EKKOLearnAI Jun 9, 2026
087314e
fix coding agent reasoning and queue overlay (#1443)
EKKOLearnAI Jun 9, 2026
498bbeb
fix(server): pass profile to cron job commands (#1432)
qdivan Jun 9, 2026
4cb6fed
fix(server): parse multipart upload metadata safely (#1435)
qdivan Jun 9, 2026
f87b31f
fix(client): handle raw percent signs in download URLs (#1436)
qdivan Jun 9, 2026
9c7b5f4
fix(client): include active profile in group chat uploads (#1437)
qdivan Jun 9, 2026
5a4e64a
fix chat code block wrapping (#1445)
EKKOLearnAI Jun 9, 2026
371b5d3
fix(providers): add qwen3.7-plus to Alibaba Coding Plan (#1449)
qdivan Jun 9, 2026
b2de33a
add frontend changelog for 0.6.12 (#1446)
EKKOLearnAI Jun 9, 2026
3e2f998
[codex] fix Claude Code root permission launch (#1451)
EKKOLearnAI Jun 9, 2026
c7a1441
[codex] fix mobile chat message overflow (#1452)
EKKOLearnAI Jun 9, 2026
be9363c
fix(server): sync bridge result tail on errors (#1447)
qdivan Jun 9, 2026
c15719a
fix(client): guard browser speech synthesis usage (#1448)
qdivan Jun 9, 2026
65aee5d
fix(files): allow literal dots in validated paths (#1453)
qdivan Jun 9, 2026
fc1949f
fix(skills): reject malformed import filename encoding (#1454)
qdivan Jun 9, 2026
e74e456
adjust release latest workflow policy (#1457)
EKKOLearnAI Jun 10, 2026
9e63c29
[codex] fix desktop update shutdown handling (#1462)
EKKOLearnAI Jun 10, 2026
5d66ebc
docs: refresh README product overview (#1463)
EKKOLearnAI Jun 10, 2026
03003ad
docs: remove Atlas Cloud README promotion (#1464)
EKKOLearnAI Jun 10, 2026
ae5a887
docs: remove unused Atlas Cloud logo (#1465)
EKKOLearnAI Jun 10, 2026
cede4b9
chore: prepare 0.6.13 release notes (#1467)
EKKOLearnAI Jun 10, 2026
34a1256
Redesign website landing page (#1471)
EKKOLearnAI Jun 10, 2026
29d9362
Force website light theme (#1473)
EKKOLearnAI Jun 10, 2026
651bc60
Add Hermes Studio manual docs page (#1475)
thursdaycapital Jun 10, 2026
70ef9e6
feat: add completion notifications (#1477)
EKKOLearnAI Jun 10, 2026
73fba4b
fix(profiles): reject reserved rename targets (#1478)
qdivan Jun 10, 2026
a5842bd
feat: add custom desktop title bar (#1480)
EKKOLearnAI Jun 10, 2026
755a50f
feat: add workspace folder actions (#1484)
EKKOLearnAI Jun 11, 2026
8ddda8a
fix linux deb desktop launch path (#1485)
EKKOLearnAI Jun 11, 2026
c290d77
remove legacy gateway manager cleanup (#1486)
EKKOLearnAI Jun 11, 2026
f122fa1
avoid bridge reattach checks for coding agent resumes (#1487)
EKKOLearnAI Jun 11, 2026
464ce15
fix group chat agent and member identity (#1491)
EKKOLearnAI Jun 11, 2026
d82a00c
fix static asset compression (#1492)
EKKOLearnAI Jun 11, 2026
3f1a10d
secure device pairing requests (#1493)
EKKOLearnAI Jun 11, 2026
ce173ce
fix desktop coding agent path detection (#1495)
sir1st Jun 11, 2026
3ab8759
[codex] Improve write gate and desktop startup UX (#1496)
EKKOLearnAI Jun 11, 2026
36d6f78
[codex] update runtime version management (#1499)
EKKOLearnAI Jun 11, 2026
cab4210
fix write approval settings runtime support (#1501)
EKKOLearnAI Jun 11, 2026
e7475c4
fix: strip models/ prefix from Gemini model IDs to prevent 404 (#1510)
CrunchyShark944 Jun 12, 2026
841d8e3
[codex] redesign chat sidebars (#1518)
EKKOLearnAI Jun 12, 2026
936db02
[codex] tune chat history loading controls (#1527)
EKKOLearnAI Jun 13, 2026
395582f
fix(update): avoid blocking install during self-update (#1521)
qdivan Jun 13, 2026
d6b2c8f
add claude and gemini oauth providers (#1528)
EKKOLearnAI Jun 13, 2026
16e6e90
add skill command picker (#1530)
EKKOLearnAI Jun 13, 2026
c1731bf
[codex] Refresh thinking indicator (#1531)
EKKOLearnAI Jun 13, 2026
b47809c
add model selector refresh button to reload config.yaml changes (#1524)
nimengbo Jun 13, 2026
33b4303
fix thinking toolbar layout (#1532)
EKKOLearnAI Jun 13, 2026
32a0aaa
fix: auxiliary model editor freeze (#1529)
Andy365-365 Jun 13, 2026
a57c033
fix(group-chat): show warning when adding agent without selecting a room
Andy365-365 Jun 17, 2026
9a1bf43
docs: add chat chain change fragment for group chat add agent fix (#1…
Andy365-365 Jun 17, 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
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@v4
Expand All @@ -36,6 +38,9 @@ jobs:
npm ci --ignore-scripts
npm rebuild node-pty

- name: Check repository harness
run: npm run harness:check

- name: Test with coverage
run: npm run test:coverage

Expand Down
111 changes: 111 additions & 0 deletions .github/workflows/desktop-mac-update-manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Repair macOS Update Manifest

on:
workflow_dispatch:
inputs:
tag:
description: "Existing release tag to update (e.g. v0.6.11)"
required: true
type: string

permissions:
contents: write

concurrency:
group: desktop-mac-update-manifest-${{ github.event.inputs.tag }}
cancel-in-progress: false

jobs:
repair:
name: Generate and upload latest-mac.yml
runs-on: ubuntu-22.04
steps:
- name: Download macOS release assets
shell: bash
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.event.inputs.tag }}
run: |
set -euo pipefail
mkdir -p /tmp/hermes-mac-assets
gh release download "$TAG" --repo "$GITHUB_REPOSITORY" --pattern 'Hermes.Studio-*-arm64.zip' --dir /tmp/hermes-mac-assets
gh release download "$TAG" --repo "$GITHUB_REPOSITORY" --pattern 'Hermes.Studio-*-arm64.dmg' --dir /tmp/hermes-mac-assets
gh release download "$TAG" --repo "$GITHUB_REPOSITORY" --pattern 'Hermes.Studio-*-x64.zip' --dir /tmp/hermes-mac-assets
gh release download "$TAG" --repo "$GITHUB_REPOSITORY" --pattern 'Hermes.Studio-*-x64.dmg' --dir /tmp/hermes-mac-assets
ls -lh /tmp/hermes-mac-assets

- name: Generate merged latest-mac.yml
shell: bash
run: |
set -euo pipefail
node <<'NODE'
const { createHash } = require('node:crypto')
const { readdirSync, readFileSync, statSync, writeFileSync } = require('node:fs')
const { join } = require('node:path')

const dir = '/tmp/hermes-mac-assets'
const names = readdirSync(dir)
const byKey = new Map()
let version = null

for (const name of names) {
const match = /^Hermes\.Studio-(.+)-(arm64|x64)\.(zip|dmg)$/.exec(name)
if (!match) continue
if (version && version !== match[1]) {
throw new Error(`Mixed macOS asset versions: ${version} and ${match[1]}`)
}
version = match[1]
byKey.set(`${match[2]}.${match[3]}`, name)
}

if (!version) throw new Error('No macOS release assets found')

const order = ['arm64.zip', 'arm64.dmg', 'x64.zip', 'x64.dmg']
const missing = order.filter(key => !byKey.has(key))
if (missing.length > 0) {
throw new Error(`Missing macOS release assets: ${missing.join(', ')}`)
}

const entries = order.map(key => {
const name = byKey.get(key)
const file = join(dir, name)
return {
url: name,
sha512: createHash('sha512').update(readFileSync(file)).digest('base64'),
size: statSync(file).size,
}
})

const head = entries[0]
const lines = [`version: ${version}`, 'files:']
for (const entry of entries) {
lines.push(` - url: ${entry.url}`)
lines.push(` sha512: ${entry.sha512}`)
lines.push(` size: ${entry.size}`)
}
lines.push(`path: ${head.url}`)
lines.push(`sha512: ${head.sha512}`)
lines.push(`releaseDate: '${new Date().toISOString()}'`)
writeFileSync('/tmp/latest-mac.yml', `${lines.join('\n')}\n`)
NODE
cat /tmp/latest-mac.yml

- name: Upload merged macOS update manifest to release
shell: bash
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.event.inputs.tag }}
run: |
set -euo pipefail
gh release upload "$TAG" /tmp/latest-mac.yml --repo "$GITHUB_REPOSITORY" --clobber

asset_url="$(gh release view "$TAG" --repo "$GITHUB_REPOSITORY" --json assets --jq '.assets[] | select(.name == "latest-mac.yml") | .apiUrl')"
if [ -z "$asset_url" ]; then
echo "Uploaded latest-mac.yml was not found on release ${TAG}" >&2
exit 1
fi
curl -fsSL \
-H "Accept: application/octet-stream" \
-H "Authorization: Bearer ${GH_TOKEN}" \
"$asset_url" > /tmp/latest-mac-uploaded.yml
diff -u /tmp/latest-mac.yml /tmp/latest-mac-uploaded.yml
Loading
Loading