Commit Graph

73 Commits

Author SHA1 Message Date
ekko 5e8f8bd4a1 Add session-level bridge model settings (#811) 2026-05-17 12:20:53 +08:00
ekko fa035f348e Fix Windows local file download paths (#810) 2026-05-17 11:09:28 +08:00
ekko 53f0301da4 Add Hermes Agent package fallback and xAI OAuth (#808) 2026-05-17 09:45:56 +08:00
luSkyl 8571a7d0ac Explain gateway stopped states with Web UI diagnostics (#663)
* feat: add gateway diagnostics to Web UI status

* fix: improve gateway diagnostics mobile layout
2026-05-16 21:24:48 +08:00
ekko f7556e6204 fix plugin discovery python env (#798) 2026-05-16 20:58:44 +08:00
ekko 8357c8ed84 Fix bridge profile environment isolation (#796) 2026-05-16 20:27:23 +08:00
ekko 7d7c8b7321 fix(cli): make port detection portable (#789)
Co-authored-by: Codex <codex@openai.com>
2026-05-16 15:44:50 +08:00
ekko db0c23bf5e [codex] add QQBot and DingTalk channel settings (#787)
* add qqbot and dingtalk channel settings

* remove history session context menu
2026-05-16 13:54:38 +08:00
ekko 67723d9315 [codex] add locked file updates for config writes (#785)
* add locked file updates for config writes

* add glm vision turbo preset
2026-05-16 13:11:59 +08:00
ekko c5380c4ab5 filter empty assistant history (#781) 2026-05-16 11:01:33 +08:00
ekko e0bfa828cb make web ui state directory configurable (#764) 2026-05-15 17:30:27 +08:00
ekko 3d49f778fb align compression token estimates (#749) 2026-05-15 13:50:27 +08:00
ekko f6a6c1c228 fix: reserve web ui port for gateways (#746) 2026-05-15 12:52:45 +08:00
ekko 876aa9ee83 fix: isolate gateway profile environment (#745) 2026-05-15 12:44:36 +08:00
ekko 48dcaee6c2 feat: add bridge session commands (#743) 2026-05-15 12:04:03 +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
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 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
luSkyl 8b291d7a48 test: fix windows path isolation (#659) 2026-05-12 20:56:04 +08:00
luSkyl c987448f01 fix: harden windows gateway liveness (#658) 2026-05-12 20:44: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
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
Zhicheng Han 9c5fe1ec7d fix: initialize session sync test schema (#618) 2026-05-11 21:14:05 +08:00
Zhicheng Han e0e4096605 fix(kanban): include archived tasks in board counts (#619) 2026-05-11 21:09:58 +08:00
Zhicheng Han 0d14afe9b4 fix: harden web ui self-update restart (#552) 2026-05-10 20:18:52 +08:00
Zhicheng Han 838791a740 修复 WUI Kanban 看板选择与隔离 (#594)
* fix: add explicit kanban board selection

* fix: tighten kanban board counts and management
2026-05-10 19:58:44 +08:00
Zhicheng Han 89f0127da6 新增只读 Hermes 插件页 (#592)
* feat: add read-only plugins page

* fix: align plugins page i18n and header
2026-05-10 19:50:39 +08:00
ekko 739c65a4df fix: prevent assistant message merging across tool calls (#593)
Remove run.text accumulator and insertResponseTextOnce that caused
text blocks before and after tool calls to be concatenated into a
single message. Now response.output_text.done only sets finish_reason
without overwriting delta-accumulated content.

- Remove run.text, textInserted from ResponseRunState
- Remove insertResponseTextOnce method
- output_text.done only marks finish_reason='stop' on last message
- response.completed no longer calls insertResponseTextOnce
- Add 7 tests covering flush, abort, and multi-block text separation

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 08:46:12 +08:00
ekko 9045f2a987 Revert "修复审批请求在聊天中无提示且无法响应 (#467)" (#553)
This reverts commit 56c7b59eaf.
2026-05-09 08:36:13 +08:00
Zhicheng Han 56c7b59eaf 修复审批请求在聊天中无提示且无法响应 (#467)
* fix: support run approval prompts in chat

* fix(chat): render approval prompts

* fix(chat): dedupe approval pattern labels

* chore: sync approval flow with current main

- update Hermes Agent approval support guidance to PR #21899
- initialize Hermes table schemas in session-sync tests
2026-05-08 16:59:36 +02:00
ekko 51fde26797 refactor remove upstream env dependency (#551) 2026-05-08 20:46:22 +08:00
ekko 39acd3574a fix wsl default listen host (#542) 2026-05-08 15:47:03 +08:00
ekko e55792acbb [codex] fix kanban session matching (#538)
* fix kanban session matching

* tighten kanban task session lookup

* remove favicon svg
2026-05-08 13:53:40 +08:00
ekko b0e03ae838 add hermes kanban board (#534) 2026-05-08 11:32:47 +08:00
ekko 173307ef28 feat: add session export with full and compressed modes (#507)
Add export functionality that allows users to download session data
as JSON or plain text, with optional LLM-based context compression
for long conversations. Includes UI controls in chat panel, session
list, and history view, plus i18n strings for all 8 locales.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 13:49:57 +08:00
ekko 5df8734495 fix: resolve test failures related to v0.5.12 changes (#491)
* fix: update tests for new batch delete and update mechanism changes

**sessions-routes.test.ts:**
- Add missing batchRemove mock to controller mock
- Fix "No batchRemove export defined" error

**update-controller.test.ts:**
- Update test to expect direct npm/npm.cmd calls instead of dirname(process.execPath)
- Update timeout from 120000 to 10 * 60 * 1000 (10 minutes)
- Update spawn path check to use dynamic global prefix (expect.any)

Tests now match the refactored update mechanism that uses npm prefix -g
for reliable path resolution.

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

* test: add speechSynthesis mock to message-item-highlight tests

* test: fix all failing tests

- Add approvals mock to session-settings test
- Fix NSwitch stub to properly emit events
- Update usage stats test expectations for new field structure
- Mock getDb in model-context tests to avoid database lock errors
- Add speechSynthesis API mock to message-item-highlight tests

Related to v0.5.12 feature changes

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 21:37:13 +08:00
tw19880217-creator d13423b9dd Fix IPv6 listen default (#470)
Co-authored-by: KK <kk@KKs-Mac-Studio.local>
2026-05-06 15:24:34 +08:00
Zhicheng Han 0209372a6d Fix custom provider context resolution (#468)
Co-authored-by: ekko <152005280+EKKOLearnAI@users.noreply.github.com>
2026-05-06 15:16:44 +08:00
Zhicheng Han 9ba0ba5185 fix: show cron scheduler history without output artifacts (#463) 2026-05-06 07:44:53 +08:00
ekko 969c7c0e1a feat: add robust LLM JSON parser and fix Group Chat schema (#388)
Add robust LLM JSON parsing utilities to handle unreliable model output:
- Parse tool arguments with tolerance for Python format (single quotes, trailing commas)
- Extract text from Anthropic-style content arrays in streaming events
- Normalize tool_result content to string format per Hermes spec
- Parse message.delta and run.completed output to avoid displaying JSON strings

Fix Group Chat database schema errors:
- Add id column as PRIMARY KEY to gc_room_agents and gc_room_members tables
- Change from composite primary keys to single-column id keys
- Update tests to match new schema structure

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 08:58:14 +08:00
ekko acf4e225e6 feat: rewrite database schema synchronization with automatic recovery (#379)
Complete rewrite of the Hermes SQLite database schema synchronization mechanism
with comprehensive error handling, automatic recovery, and full test coverage.

## Database Schema Synchronization
- **Unified sync mechanism**: Single `syncTable()` function handles all schema changes
- **Automatic column sync**: Adds missing columns and removes extra columns
- **Table rebuilding**: Automatically rebuilds tables when primary keys or types change
- **Data preservation**: Preserves data during schema changes when compatible
- **Index management**: Creates and removes indexes as needed

## Error Recovery & Reliability
- **Automatic backup**: Backs up corrupted database before recovery
- **Retry limiting**: Prevents infinite loops with retry limit
- **Duplicate prevention**: Avoids multiple backup files
- **Safe file operations**: Uses copy+delete instead of rename for safety

## Composite Primary Keys
- Fixed GC_ROOM_AGENTS and GC_ROOM_MEMBERS with proper composite primary keys
- Prevents duplicate entries while allowing same roomId with different agentId/userId

## Test Coverage
- **10 new integration tests** for schema synchronization (tests/server/schema-sync.test.ts)
- **3 updated tests** for Hermes schemas (tests/server/hermes-schemas.test.ts)
- All 327 tests passing (47 test files, 325 passed, 2 skipped)

## Bug Fixes
- Fixed module import issues (unified ES6 imports, removed mixed require())
- Fixed mock issues in sessions routes tests
- Fixed i18n coverage test to handle newly added keys
- Fixed profiles store test to match current implementation

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 19:48:46 +08:00
ekko a948eee4b9 test: fix failing tests for mocks and API return types (#366)
* fix(chat): isolate concurrent session events by refactoring WebSocket event handling

Refactored the WebSocket event handling mechanism to use global listeners with session-specific event routing instead of per-session listeners. This prevents event cross-talk when multiple chat sessions run concurrently.

Key changes:
- Client: Added sessionEventHandlers Map to route events to appropriate sessions
- Client: Registered global listeners once per socket connection
- Server: Extracted message processing logic into handleMessage method
- Server: Improved Hermes session ID tracking with dedicated Map
- Server: Added replaceByHermesSessionId for targeted message replacement

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

* test: fix failing tests for mocks and API return types

- Fixed sessions-routes.test.ts: added missing setWorkspace and listWorkspaceFolders mocks
- Fixed usage-store.test.ts: removed test for non-existent initUsageStore function
- Fixed profiles-store.test.ts: corrected createProfile API return type to { success: true }
- Fixed syntax error in usageStatsMock (ctx.body: → ctx.body =)

All tests now pass (314 passed | 2 skipped).

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 08:24:57 +08:00
Zhicheng Han 7f01fdf56e fix: clean up cron job edit payloads (#364)
x找我下,跟你聊聊
2026-05-01 08:12:53 +08:00
Zhicheng Han dac9006b3e fix: align usage analytics with Hermes state db (#350) 2026-04-30 19:46:31 +08:00