Commit Graph

367 Commits

Author SHA1 Message Date
ekko 48dcaee6c2 feat: add bridge session commands (#743) 2026-05-15 12:04:03 +08:00
ekko 13fad02db8 [codex] fix bridge state db sync (#740)
* fix bridge session db flush cursor

* fix bridge state db result sync
2026-05-15 10:31:26 +08:00
ekko da067a5a78 refactor chat run socket (#739) 2026-05-15 10:08:52 +08:00
Leo_yang 6add32feff fix: remove gateway startup debug log (#732)
Co-authored-by: Leo_yang <Harukaon@users.noreply.github.com>
2026-05-14 23:36:52 +08:00
Leo_yang 4d3b5097ce feat: add clear visible models selection (#733)
* feat: add clear visible models selection

* fix: complete visible models translations

---------

Co-authored-by: Harukaon <18928954435+Harukaon@users.noreply.github.com>
Co-authored-by: Harukaon <Harukaon@users.noreply.github.com>
2026-05-14 23:36:07 +08:00
ekko 7da934fe8b revert: remove i18n lazy loading and highlight.js selective import (#736)
Revert the dynamic import() for i18n locales and highlight.js core+
registration from #696. Dynamic imports create separate chunk files
that cause 404 errors for users after updating when the browser still
references old chunk hashes.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 23:32:33 +08:00
ekko e5e44fd7e2 feat: auto-switch to default profile before gateway startup (#734)
When starting gateways, automatically switch to 'default' profile if
current profile is not 'default'. This ensures consistent gateway startup
behavior and prevents port conflicts from different profile configurations.

Changes:
- Check current profile before starting gateways
- Execute 'hermes profile use default' if needed
- Wait 2 seconds for profile switch to take effect
- Update internal GatewayManager state
- Add detailed logging for the switching process
2026-05-14 23:11:22 +08:00
ekko acf5184d5f Remove website QQ QR code (#730) 2026-05-14 22:04:08 +08:00
ekko 50de4eb857 fix bridge agent init compatibility (#727) 2026-05-14 21:21:26 +08:00
ekko d0f1e7d1f2 Fix bridge compression history handling (#726)
* feat(bridge): refactor compression to use DB history and add structured logging

- Extract buildDbHistory() to share message loading between buildCompressedHistory and forceCompressBridgeHistory
- forceCompressBridgeHistory now reads from local DB instead of using Python-provided messages, ensuring consistency with api_server path
- Pass sessionId to compressor for snapshot-aware compression
- Add force_compress flag to bridge chat requests
- Add bridgeLogger structured logging for compression lifecycle
- Simplify schemas, session-sync, and providers

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

* fix bridge compression history handling

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 21:02:59 +08:00
memeflyfly 7420f7aad5 feat(chat): add custom drag-resize handle on input top border (#725)
* feat(chat): add custom drag-resize handle on input top border

* fix(chat): skip auto-resize when user has manually set height via drag handle
2026-05-14 21:02:44 +08:00
Teven Feng d551b2d6db fix: pass default headers to agent bridge (#711) 2026-05-14 15:52:42 +08:00
memeflyfly bb83ac7d9e feat(settings): add debounce to NInputNumber in Memory/Agent/Session settings (#718) 2026-05-14 15:47:17 +08:00
rqbbss e6f403b787 fix: preserve newlines in chat message markdown rendering (#714) 2026-05-14 15:38:26 +08:00
ekko bd6c4dc82e fix: restore Hermes session history listing (#716) v0.5.22 2026-05-14 15:23:19 +08:00
Butter Rice Cake of Gemini f6df0fecfa perf: 优化体积,highlight.js按需导入与i18n按需加载 (#696)
* perf: 优化打包体积,highlight.js按需导入与i18n按需加载

1. highlight.js: 从全量导入改为 core + 注册27种常用语言,减少约500~800KB
2. i18n: 只同步加载en语言包,其他8种语言改为异步加载,首屏减少约350~400KB
3. 使用vue-i18n的setLocaleMessage API动态注册语言包
4. 新增switchLocale函数统一处理语言切换
5. 同步更新相关测试文件的mock路径和API适配

* 修复类型断言
2026-05-14 12:39:36 +08:00
Salvia AI 1b4733e755 feat(tts): add zh-TW and zh-HK Edge TTS voice options (#705)
- Add 3 Taiwanese Mandarin voices (小晨, 小宇, 云哲)
- Add 3 Hong Kong Cantonese voices (希雅, 希文, 文龙)
- Voices are from edge-tts --list-voices official catalog
v0.5.21
2026-05-14 12:07:49 +08:00
ekko 9b243cab36 [codex] fix self update restart (#707)
* fix: make self update restart reliably

* chore: clarify update success message
2026-05-14 12:06:39 +08:00
ekko b2a80808e3 fix: comment out pending session delete operations in group chat (#703)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
v0.5.20
2026-05-14 10:34:10 +08:00
ekko 47ff859c7c chore: add 0.5.20 changelog and remove old entries (#702)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 10:32:24 +08:00
ekko 9fa3ad6ee8 fix: pass HERMES_HOME to plugins Python bridge (#701)
Fixes #689

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 10:14:54 +08:00
ekko 7c87ba51da feat: add Ollama Cloud provider preset (#700)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 09:43:14 +08:00
ekko 9170e11715 fix: SkillsUsage 页面样式修复与 API server skill usage 统计 (#698)
* Reapply "feat: 新增 Skills Usage 监控统计与图表 (#668)" (#670)

This reverts commit 91de3b12a1.

* fix: count API-server skill usage

* fix: align SkillsUsageView header with other pages and update sidebar icon

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

---------

Co-authored-by: Zhicheng Han <zhicheng.han@mathematik.uni-goettingen.de>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 09:28:51 +08:00
ekko eae7195ba8 Update CLI chat session bridge (#697)
* feat: add CLI chat sessions with Python agent bridge

Introduce a new CLI chat mode that connects Web UI directly to Hermes
Agent's AIAgent via a Python bridge subprocess and Socket.IO, bypassing
the API Server /v1/responses path. Supports streaming, slash commands
(/new, /undo, /retry, /branch, /compress, /save, /title), interrupt,
and steer.

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

* feat: update CLI chat session bridge

* fix: extend agent bridge startup timeouts

* docs: update bridge chat session design

* feat: align bridge compression and provider registry

* chore: bump version to 0.5.20

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 09:03:57 +08:00
ekko e0fcc0040b fix: parse .env and SOUL.md fields from hermes profile show output (#669)
The regex `^(\w[\w\s]*?)` could not match keys containing dots (`.env`,
`SOUL.md`), so `hasEnv` and `hasSoulMd` were always `undefined` → false.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 07:52:34 +08:00
ekko 91de3b12a1 Revert "feat: 新增 Skills Usage 监控统计与图表 (#668)" (#670)
This reverts commit ce08d2b05a.
2026-05-13 07:51:29 +08:00
Zhicheng Han ce08d2b05a feat: 新增 Skills Usage 监控统计与图表 (#668)
* feat: add skills usage monitoring

* fix: localize Skills Usage page copy

* fix: keep Skills Usage labels compact
2026-05-13 07:43:25 +08:00
Zhicheng Han c2068302c3 feat: enhance usage analytics dashboard (#666)
- visualize input, output, and cache token segments in usage charts
- add usage period selector for 7d, 30d, 90d, and 365d
- guard usage stats against stale overlapping period requests
- normalize blank model usage into unknown buckets
- add client and server coverage for usage analytics behavior
2026-05-13 07:41:49 +08:00
Zhicheng Han 57cdf87bef Kanban:补齐看板事件、链接与批量操作闭环 (#634)
* feat(kanban): add board-scoped event stream bridge

* test(kanban): align event refresh expectation

* feat(kanban): add links and partial bulk bridge

* test(kanban): align links bulk refresh expectation

* fix(kanban): treat mutation stderr as failed
2026-05-13 07:32:38 +08:00
ekko 44d1b13741 fix: enhance gateway logging for Windows dev restart debugging (#665)
Add comprehensive debug logging throughout the gateway lifecycle to
help troubleshoot nodemon restart issues on Windows, where SIGTERM
is used instead of SIGUSR2.

Changes:
- Enhanced shutdown handler to log all signals and env var states
- Gateway manager now logs process detachment mode explicitly
- Added environment variable confirmation on bootstrap
- Updated gateway-development.md with new debug logs and troubleshooting steps

Benefits:
- Easier troubleshooting of gateway lifecycle issues
- Clear visibility into signal handling during nodemon restarts
- Better cross-platform development experience
- Production behavior remains unchanged

Testing:
-  Windows: Gateways persist across nodemon restarts
-  macOS/Linux: Existing SIGUSR2 behavior preserved
-  Production: Default shutdown cleanup unchanged
-  Backward compatibility: No breaking changes

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 22:03:28 +08:00
ekko 5bd1475a83 fix: preserve gateways across dev restarts (#662) 2026-05-12 21:35:17 +08:00
ekko ebb166abee fix: skip gateway shutdown during dev restarts (#661)
Set HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN=0 in nodemon.json so
nodemon restarts don't kill running gateways. Production behavior
unchanged (stops owned gateways by default).

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 21:17:40 +08:00
luSkyl 8b291d7a48 test: fix windows path isolation (#659) 2026-05-12 20:56:04 +08:00
ekko 8b57c4a278 fix: improve gateway PID recovery and port detection (#660)
- Refactor port detection into reusable getListeningPids/killListeningPids
- Add ss command fallback when lsof is unavailable
- Extract readPidFile for cleaner PID file reading
- Remove unnecessary PowerShell candidate from Windows shell detection
- Add PID validity check in gateway_state.json fallback (Number.isFinite + > 0)

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 20:53:21 +08:00
luSkyl c987448f01 fix: harden windows gateway liveness (#658) 2026-05-12 20:44:34 +08:00
ekko b9b99042a0 refactor(docker): merge two-container setup into single container (#657)
* refactor(docker): merge two-container setup into single container

The Web UI already manages the Hermes Agent gateway lifecycle internally
via GatewayManager (spawn hermes gateway run --replace), making the
separate hermes-agent container redundant. The Dockerfile is built on
the hermes-agent base image, so all CLI tooling is already included.

- Remove hermes-agent service and shared volume from docker-compose.yml
- Remove gateway port mapping (8642-8670) — internal-only now
- Update docs/docker.md, README.md, README_zh.md for single-container setup

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

* docs: remove version tag from image references

Use ekkoye8888/hermes-web-ui instead of ekkoye8888/hermes-web-ui:latest
to avoid pinning a specific version in documentation.

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

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 19:01:24 +08:00
xisoul 66111db7f1 fix: guard model selector search against null values (#654)
Co-authored-by: xisoul <xisoul@local>
2026-05-12 18:42:53 +08:00
ekko 96866f36e5 fix: emit tool.started immediately on function_call and add duration to tool.completed (#647)
- Emit tool.started on response.output_item.added instead of .done
- Track startedAt timestamp for each tool call to calculate duration
- Include duration (2 decimal places) and error status in tool.completed
- Fix response.completed fallback to emit tool.started before tool.completed
- Update website license from MIT to BSL-1.1

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 12:08:12 +08:00
Rivera Todd 13061f8880 fix(docker): resolve gateway startup failure in Docker container (#645)
Two issues prevented the gateway from starting in docker-compose:

1. gateway-manager used 'hermes-agent' as default host when running inside
   a container, causing startAll() to skip gateway startup (remote host
   guard) and proxy requests to an unreachable hostname. Changed to use
   GATEWAY_HOST env var with fallback to '127.0.0.1' so the webui container
   manages its own gateway via the shared hermes binary.

2. hermes refuses to run as root inside the official Docker image. The
   hermes-webui container overrides the entrypoint (bypassing the privilege-
   drop script), so the node process runs as root. Added
   HERMES_ALLOW_ROOT_GATEWAY=1 to docker-compose.yml to allow this.
v0.5.18
2026-05-12 10:23:56 +08:00
ekko 73b919e07c fix: skip model API requests when no auth token is present (#643)
Prevents infinite retry loop on /api/hermes/available-models when
accessing the app without a token, which triggers server-side 429
rate limiting. Both loadModels() and fetchProviders() now bail out
early if hasApiKey() returns false.

Closes #606

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 10:19:14 +08:00
Zhicheng Han c36b320e18 fix: prompt reload for stale Web UI bundle (#641) 2026-05-12 09:03:07 +08:00
ekko f78fb2da90 fix: add windowsHide to child_process calls to prevent terminal popup on Windows (#637)
- copilot-models.ts: add windowsHide to `gh auth token` call
- file-provider.ts: add shared execOpts with windowsHide for all
  docker/ssh/singularity calls

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
v0.5.17
2026-05-11 23:00:09 +08:00
ekko e6a0f5b6f2 fix: sync zh-TW locale with zh (add model alias and visibility keys) (#635)
Add missing keys: removeCustomModel, aliasEdit/Title/Placeholder/etc
(10 alias keys), and visibilitySelectOne to match zh.ts.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 22:33:34 +08:00
Zhicheng Han b8be47d8d6 feat(models): 增加模型显示名重命名 (#614)
* feat(models): add WUI model display aliases

Persist display-only model aliases in Web UI app config, surface them in the model selector/search, and keep canonical model IDs for Hermes calls.

* fix(models): improve WUI model alias editing

* fix(models): clarify unlisted model picker

* fix(models): scope aliases to providers
2026-05-11 22:18:13 +08:00
ekko 7b781b4f42 chore: update 0.5.17 changelog with all merged PRs since 0.5.16 (#633)
Expand changelog from 5 to 25 entries covering all changes:
comic theme, kanban parity, model visibility, TTS settings,
Windows/Termux compat, YAML parsing, gateway ownership, etc.

Also backfill zh-TW locale with missing keys (changelog, model
visibility, TTS rate/pitch).

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 22:15:41 +08:00
memeflyfly a68b9bf01f feat: add Edge TTS rate/pitch sliders to voice settings (#629)
Add speed (rate) and pitch controls for Edge TTS provider:
- Frontend: speedToEdgeRate()/hzToEdgePitch() helpers + UI sliders
- Backend: rate/pitch passthrough in OpenaiTtsRequest and controller
- i18n: add edgeRate/edgePitch keys across all 8 languages
- Rate: 0.5x-2.0x slider, Pitch: -20Hz to +20Hz slider
2026-05-11 21:56:11 +08:00
Zhicheng Han 5e608ea338 fix: recognize Codex credential-pool auth (#617) 2026-05-11 21:36:43 +08:00
Zhicheng Han 7907bbbf61 fix: clear provider auth entries on delete (#616) 2026-05-11 21:30:05 +08:00
Zhicheng Han 6ff1c18ee2 Kanban:补齐任务操作链路,明确能力边界 (#615)
* [verified] fix(kanban): harden WUI parity bridge

- Align board slug normalization with canonical underscore/lowercase/64-char rules
- Validate malformed Kanban action bodies before CLI shell-out
- Narrow task log no-log handling and expose phase-1 capabilities
- Extend client/server regression coverage for parity actions

* fix(kanban): guard archived task detail actions

---------

Co-authored-by: ekko <152005280+EKKOLearnAI@users.noreply.github.com>
2026-05-11 21:26:24 +08:00
Zhicheng Han 3a1893d401 Models:支持在 Web UI 里管理可见模型 (#613)
* feat(models): add WUI model visibility filter

Store provider model visibility in Web UI app config and filter the WUI model picker/model page without rewriting Hermes CLI config or canonical model IDs.

* fix(models): sync sidebar after visibility changes
2026-05-11 21:24:45 +08:00