Commit Graph

434 Commits

Author SHA1 Message Date
ekko c27a12f56c [codex] fix Windows desktop browser packaging (#1219)
* fix windows hermes home fallback

* bundle Hermes desktop browser runtime

* bundle desktop channel dependencies

* avoid matrix e2ee build dependency

* fix windows npm shim execution

* fix bundled agent-browser chrome packaging

* fix agent-browser chrome fallback copy

* fix windows agent-browser home lookup

* copy agent-browser chrome after install

* fix browser output decoding on windows

---------

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-06-01 21:35:26 +08:00
ekko 90929d0bfb add hermes studio cli shim (#1209) 2026-06-01 16:15:50 +08:00
ekko ed905e419d set package version to 0.6.7 (#1208) 2026-06-01 14:38:36 +08:00
ekko 6972717193 hide desktop python subprocesses on login (#1206) 2026-06-01 13:58:00 +08:00
ekko c027df0c6f [codex] fix Windows bridge worker popups (#1203)
* fix windows bridge worker popups

* scope worker hiding to desktop
2026-06-01 13:31:26 +08:00
ekko d2a7c54e9e [codex] fix Windows tray icon size (#1202)
* fix windows tray icon sizing

* use client logo for windows tray
2026-06-01 13:31:06 +08:00
ekko b96bda4834 [codex] fix desktop tray icon and update checks (#1201)
* fix desktop tray icon and update errors

* fix brotlicffi error compatibility

* fix windows installer app shutdown

* fix desktop updater artifact names
2026-06-01 12:49:03 +08:00
ekko 022e18dc8f fix windows desktop terminal popups (#1199) 2026-06-01 12:20:10 +08:00
ekko aa7c1c4fbb fix windows bridge logs and mobile headers (#1198) 2026-06-01 11:58:54 +08:00
VTxyer 3f7242aee8 fix(client): fix mobile layout width overflow on virtual keyboard toggle (#1197) 2026-06-01 11:44:23 +08:00
ekko 15d358f602 fix windows desktop bridge startup (#1196) 2026-06-01 11:30:04 +08:00
ekko 4516502705 add desktop tray and updater support (#1193) 2026-06-01 11:03:18 +08:00
Qiang Han 1fbbfdfad6 fix(context): prefer provider context lengths (#1184) 2026-06-01 09:31:58 +08:00
ekko 8dbf4c7439 Add website download mirrors (#1189) 2026-05-31 20:47:38 +08:00
Qiang Han 48c35c20e8 fix(chat): preserve unsent input draft (#1173)
* fix(chat): preserve unsent input draft

* fix(chat): store drafts by session id
2026-05-31 20:06:18 +08:00
GoldenFishX 7f9427bde5 fix(file-provider): SSHFileProvider 支持自定义端口 (#1181)
之前 SSHFileProvider 的 sshArgs() 方法硬编码使用默认端口 22,
完全忽略 TERMINAL_SSH_PORT 环境变量配置的自定义 SSH 端口。

修复内容:
- TerminalConfig 接口新增 ssh_port 字段
- SSHFileProvider 构造函数新增 port 参数
- sshArgs() 在 this.port 存在时追加 -p <port>
- getSSHEnvVars() 读取 TERMINAL_SSH_PORT 并解析为整数
- createFileProvider() 工厂函数传入 ssh.port

影响范围:所有通过 SSH 后端的文件操作(读/写/列出/删除/重命名/创建目录/复制/上传)
2026-05-31 19:57:14 +08:00
ekko e1027ec5d7 Fix nonblocking preview actions (#1188) 2026-05-31 19:47:04 +08:00
ekko d2b69baf7f Align profiles header height (#1182) 2026-05-31 17:25:26 +08:00
ekko a7be7c0175 bump package versions to 0.6.7 (#1175) 2026-05-31 10:32:53 +08:00
ekko 9d1da73434 update 0.6.7 changelog and provider url handling (#1174) 2026-05-31 10:24:27 +08:00
ekko e5c5f98fbd fix message list session transitions (#1172) 2026-05-31 09:53:58 +08:00
sir1st 96bdf8d1af fix Windows desktop startup readiness (#1167)
* fix desktop startup readiness on windows

* add manual desktop build workflow

* hide Windows desktop server process window

* hide Windows Python bridge worker windows

* use no-window Python for Windows desktop CLI calls

---------

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-31 09:17:49 +08:00
ekko c998a53566 [codex] add MCP tools visibility management (#1170)
* feat(mcp): add tools visibility management

## Features
- Tools visibility modal with 3 modes: All, Include, Exclude
- 'Manage Tools' button on McpServerCard (enabled only when connected)
- 'Fetch Tools List' button to refresh available tools (raw mode)
- Responsive design for mobile (480px), tablet (768px), desktop (1280px)
- i18n translations for 9 languages (zh/en/zh-TW/ja/ko/de/es/fr/pt)

## Technical Details
- Add raw parameter to fetchMcpTools API for unfiltered tools
- Pass raw parameter through controller → bridgeMcpAction → client
- Backend _mcp_tools_list supports raw_mode to skip include/exclude filter
- 28 MCP unit tests pass (23 controller + 5 bridge action)

## Files Changed
- McpManagerView.vue: Tools visibility modal with mode selector
- McpServerCard.vue: Add manage tools button
- mcp.ts (client): Add raw parameter to fetchMcpTools
- mcp.ts (controller): Pass raw parameter to bridge
- mcp.ts (services): Pass raw parameter to client.mcpTools
- client.ts: Add raw parameter to mcpTools
- hermes_bridge.py: Support raw_mode in _mcp_tools_list
- 9 locale files: Add 14 translation keys each
- mcp-controller.test.ts: Add 3 new test cases
- bridge-mcp-action.test.ts: New test file for parameter passing

* Delete projects directory

chore: remove accidentally committed projects/ directory

* fix MCP tools visibility edge cases

* remove MCP docs screenshots

---------

Co-authored-by: Crafter-feng <succeed_happu@163.com>
Co-authored-by: Crafter-feng <37255449+Crafter-feng@users.noreply.github.com>
2026-05-31 09:00:38 +08:00
ekko e45b3a881e add website downloads and deploy workflow (#1165) 2026-05-30 21:35:38 +08:00
ekko 4c3f025b8f skip production data dir creation (#1164) 2026-05-30 20:29:04 +08:00
ekko fc35c74eb3 fix node npm detection (#1163) 2026-05-30 20:19:01 +08:00
sir1st dcbf601e35 fix linux desktop packaging paths (#1162)
Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 20:14:24 +08:00
sir1st ce04b10eee Fix Windows bundled Hermes CLI launcher (#1159)
* Fix Windows bundled Hermes CLI launcher

* Update kanban service tests for Hermes process wrapper

---------

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 18:57:04 +08:00
ekko 046c8d4f8f Fix desktop release artifact uploads (#1158)
* chore: bump version to 0.6.6

* fix desktop release artifact metadata globs
2026-05-30 17:35:41 +08:00
sir1st 12e0b5ebed fix(server): raise body parser limit so avatar upload doesn't 413 (#1149)
Profile avatars are sent to /profiles/:name/avatar as base64 image data
URLs in a JSON body. The handler allows up to 1MB of raw image data,
which is ~1.37MB once base64-encoded — larger than @koa/bodyparser's
default 1mb jsonLimit, so uploads were rejected with HTTP 413 before
reaching the handler.

Set jsonLimit/textLimit to 4mb, leaving the handler's own 1MB raw-size
check as the authoritative limit (now returning a clear 400 instead of
a confusing 413).

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 16:32:46 +08:00
sir1st eea1d1decd fix(auth): use path.dirname for credential dir on Windows (#1148)
Provider auth controllers derived the credential directory with
`authPath.substring(0, authPath.lastIndexOf('/'))`. On Windows paths use
backslashes, so `lastIndexOf('/')` returns -1 and the slice yields an
empty string, making `mkdirSync('')` throw
`ENOENT: no such file or directory, mkdir ''` during OAuth login.

Replace the manual slicing with the cross-platform `path.dirname()` in
codex-auth (auth.json + codex CLI token paths), xai-auth, and nous-auth.

Fixes Codex/xAI/Nous login on Windows.

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 16:31:00 +08:00
ekko f7991572af fix desktop preload build and rename app (#1150)
* fix desktop preload fetch typing

* rename desktop app to Hermes Studio

* rename desktop package to Hermes Studio

* update Hermes Studio desktop icons

* configure desktop signing and app id

* force desktop api calls to local server

* isolate desktop agent bridge ports

* bundle MCP support in desktop Python

* change desktop default port to 8748

* restore webui production port copy
2026-05-30 15:59:52 +08:00
sir1st cbae8e8c3f Add desktop (Electron) packaging and release distribution (#1147)
* Add desktop packaging workflow

* Add desktop package homepage

* Fix desktop default credential prompt

* Suppress default credential prompt on desktop

* Publish desktop artifacts on release; reduce CI to PR smoke test

Add desktop-release.yml triggered on release publish (mirroring
docker-publish.yml) to build all platforms and upload .dmg/.exe/
.AppImage/.deb to the GitHub Release.

Trim build.yml desktop job to a PR-only Linux x64 smoke test, since
release artifacts are now produced by desktop-release.yml. This drops
per-push and macOS/Windows packaging from regular CI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Fix desktop Hermes data home on Windows

---------

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 14:20:04 +08:00
paulocavallari cb410e5007 fix(bridge): preserve text/tool-call ordering to stop split narration (#1145)
When the model interleaves narration text with tool calls within one
turn ("text → tool → more text"), the assistant text was rendered split
across the tool boundary — a word could be cut in half, e.g. the part
before the tool call ending mid-word and the remainder appearing after
the tool card.

Root cause: the agent bridge (`hermes_bridge.py`) accumulated streamed
text in `RunRecord.deltas` and tool/lifecycle events in
`RunRecord.events` as two parallel lists with no relative ordering. On
poll, the aggregated text (`"".join(deltas)`) and the events were
delivered separately, and the Node consumer (`handle-bridge-run.ts`)
processed all `chunk.events` (including `tool.started`) before the
aggregated `chunk.delta`. The real interleaving of text and tool calls
was therefore lost, splitting the text around the tool boundary.

Fix:
- Bridge: `stream_callback` now also appends each text chunk as an
  ordered `stream.delta` event into the same `events` list as
  tool.started/tool.completed, preserving true interleaving. `deltas`
  is still kept for the aggregated `output`/resume snapshot.
- Node: process `stream.delta` events inline within the events loop (in
  true order), and skip the aggregated `chunk.delta` when ordered
  `stream.delta` events were present for that chunk (avoids duplicate
  text). Text-delta handling was extracted into `processBridgeTextDelta`
  and reused by both paths.

Verified end-to-end: narration that calls a tool mid-sentence now
streams and persists as coherent text in the exact order produced, with
no word split across the tool boundary.

Co-authored-by: Paulo Cavallari <paulocavallari@users.noreply.github.com>
2026-05-30 11:49:50 +08:00
ekko 818e7f751f fix chat scroll jitter (#1146) 2026-05-30 11:46:32 +08:00
ekko b015e70b9d [codex] fix MCP management lifecycle (#1144)
* feat(mcp): add MCP server management UI

- Server CRUD: add/edit/remove with YAML/JSON Monaco editor
- raw_config passthrough: zero field loss on edit/toggle
- tool_details embedding: single-request card data (1+N → 1)
- Auto-retry exponential backoff (2s→32s, max 5 retries)
- Route safety guards (hasRoute) for dynamic sidebar
- i18n: 9 languages (de/en/es/fr/ja/ko/pt/zh/zh-TW)
- 19 unit tests + 8 UX browser tests
- 35 files, +2933 lines

* fix mcp management lifecycle

---------

Co-authored-by: Crafter-feng <succeed_happu@163.com>
2026-05-30 11:06:08 +08:00
ekko 675ddb8282 fix profile runtime status loading (#1142) 2026-05-30 09:17:37 +08:00
ekko a1f06b8a42 fix virtual list empty state centering (#1141) 2026-05-30 08:53:06 +08:00
ekko 9643a083d6 fix bridge mcp tool discovery (#1139) 2026-05-30 08:37:02 +08:00
Zhicheng Han 50159060c8 Revert "add merge permission test log (#1131)" (#1132)
This reverts commit 91869ea907.
2026-05-29 16:47:40 +02:00
ekko 91869ea907 add merge permission test log (#1131)
Test console merge.
2026-05-29 16:44:43 +02:00
ekko b5b7d55958 [codex] update coding agents i18n and changelog (#1129)
* update coding agents i18n and changelog

* move virtual scroller to dev dependencies
2026-05-29 21:07:00 +08:00
ekko e3359c671c [codex] 修复 Windows Coding Agents 安装状态检测 (#1126)
* fix windows coding agent status detection

* fix windows coding agents detection and terminal launch

- Fix Claude Code status detection on Windows by prioritizing .cmd files over unix-style scripts when using 'where' command
- Fix command execution logic for .cmd/.bat files to use proper cmd.exe quoting instead of complex cmdQuote function
- Fix native terminal launch on Windows by properly escaping shellCommand in PowerShell Start-Process instead of using empty $args[0]

These changes resolve issues where Claude Code was incorrectly detected as uninstalled on Windows and native terminal launch failed with PowerShell argument errors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix claude code custom model launch

* fix windows filename sanitization for coding agent config paths

- Replace invalid filename characters (< > : " / \ | ? *) with underscores in provider/profile names
- Prevents ENOENT errors when provider names contain Windows-invalid characters like colons
- Fixes issue where 'custom:glm-coding-plan' provider would fail to create config directory on Windows

This change ensures that coding agent configuration paths are valid on all platforms while preserving the semantic meaning of provider names.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* remove stale planning docs

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 20:26:02 +08:00
ekko 9838173365 fix builtin provider flags (#1125) 2026-05-29 19:18:40 +08:00
ekko 285f623d6f [codex] 修复 Coding Agents 的 Codex 启动和代理隔离 (#1123)
* feat: add coding agent install status

* chore: add latest claude opus model preset

* feat: add coding agent config editing

* Add scoped coding agent launch proxy

* Add Codex proxy plan

* fix coding agents codex launch proxy

* fix codex catalog context test

---------

Co-authored-by: Codex <codex@openai.com>
2026-05-29 19:06:54 +08:00
ekko 717f577380 fix group chat agent mentions (#1111) 2026-05-29 09:02:38 +08:00
sir1st 1373b4746b feat(version-check): add HERMES_WEB_UI_DISABLE_UPDATE_CHECK env var (#1105)
Adds an opt-in environment variable to suppress the npm-registry update
check. When set, three things change:

1. checkLatestVersion() returns immediately (no outbound fetch)
2. startVersionCheck() does not arm the 30-minute interval
3. /api/health returns webui_latest='' and webui_update_available=false

Use case: hermes-web-ui is bundled inside a packaged distribution like
a desktop app where the user cannot `npm install -g hermes-web-ui@latest`
to apply an upgrade. The 'update available' prompt is then misleading
(the user would have to wait for the wrapper app to ship a new release),
and the recurring HTTPS call to the npm registry is unnecessary noise.

Set HERMES_WEB_UI_DISABLE_UPDATE_CHECK=true | 1 | on | yes to disable.
The default behavior is unchanged.

Discussed in #1091 — proposed by @EKKOLearnAI.
2026-05-28 22:36:07 +08:00
ekko 14466dfc9f make bridge worker transport configurable (#1106) 2026-05-28 22:33:33 +08:00
ekko 74d0c3509b [codex] try vue virtual scroller for messages (#1103)
* try vue virtual scroller for messages

* hide inactive virtual scroller rows
2026-05-28 21:59:55 +08:00
GoldenFishX 5f5c5faa25 fix(tts): require authentication for TTS endpoints (#1101)
Move TTS routes behind auth middleware and attach JWT to local
proxy requests from the frontend. Previously both /api/hermes/tts
and /api/tts/proxy/audio/speech were publicly accessible without
authentication, allowing unauthenticated callers to consume Edge
TTS resources through the server.

Changes:
- server: move ttsRoutes from public to protected route section
- client: auto-attach JWT when baseUrl is a local path (/...)
  and no external API key is configured
- client: import getApiKey() instead of raw localStorage access
2026-05-28 21:46:31 +08:00