Commit Graph
100 Commits
Author SHA1 Message Date
ekko f372d0a905 Scope kanban and usage profile reads 2026-05-24 10:11:03 +08:00
ekko be2089e423 Scope channel settings to request profile 2026-05-24 10:11:03 +08:00
ekko 4f8bda9836 Test provider API key profile scoping 2026-05-24 10:11:03 +08:00
ekko 65a984c31a Fix provider management profile scoping 2026-05-24 10:11:03 +08:00
ekko 5bdaa0987a Fix mobile tool preview overflow 2026-05-24 10:11:03 +08:00
ekko 3f6a25d8f1 Add user-scoped Hermes profile access 2026-05-24 10:11:03 +08:00
ekko 56e7716302 Bump 0.5.35 and harden CPU monitoring fallback 2026-05-23 10:47:30 +08:00
ekko f5846521e0 Add 0.5.35 changelog 2026-05-23 10:47:30 +08:00
ekko 4092962db3 fix performance monitor worker blocking 2026-05-23 09:53:04 +08:00
ekko 8c4c6d6681 fix performance monitor worker blocking 2026-05-23 09:53:04 +08:00
ekko c184519c5d add bridge performance monitoring 2026-05-23 09:09:54 +08:00
ekko 4223014e0c polish file preview drawer 2026-05-22 19:11:04 +08:00
ekkoandClaude Sonnet 4.6 a1c5798e65 chore: bump version to 0.5.12
Update package.json version from 0.5.11 to 0.5.12 for the upcoming release.

Changes in this release:
- Batch session deletion (checkbox multi-select, select all, batch delete)
- Visual context length editor (click to edit with custom limits)
- Fix group chat mention keyboard selection (custom dropdown)
- Chat completion sound (auto-play toggle)
- Improved chat message display (filter empty messages)
- Improved update mechanism (dynamic path resolution for Homebrew support)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 16:43:28 +08:00
ekkoandClaude Sonnet 4.6 e6af126f9f fix: remove @ symbol from changelog entries to avoid vue-i18n parse errors
The @ symbol is a special character in vue-i18n (used for linked formats).
Removing it from all changelog entries fixes:
- Chinese: @mention → mention
- English: @mention → mention
- All other languages: @mention → mention

This resolves the SyntaxError in message compilation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 16:42:29 +08:00
ekkoandClaude Sonnet 4.6 1de704b486 fix: escape single quotes in French changelog entries
Fix PARSE_ERROR in fr.ts by properly escaping single quotes in:
- d'édition → d\'édition
- l'affichage → l\'affichage
- l'assistant → l\'assistant

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 16:40:46 +08:00
ekkoandClaude Sonnet 4.6 146454a6cc chore: add changelog for v0.5.12
Add v0.5.12 changelog entry with 6 major improvements:
- Batch session deletion (checkbox multi-select, select all, batch delete)
- Visual context length editor (click to edit with custom limits)
- Fix group chat @mention keyboard selection (custom dropdown)
- Chat completion sound (auto-play toggle)
- Improved chat message display (filter empty messages, better compression)
- Improved update mechanism (dynamic path resolution for Homebrew support)

Full i18n support across all 8 languages (zh, en, de, es, fr, ja, ko, pt).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 16:39:46 +08:00
ekko 25a8ae2f88 fix: correct malformed JSON in OpenAPI spec (#437)
Fixes #437
- Remove extra closing brace in 8 Group Chat API $ref responses
- Remove duplicate "components" entry
- Validate JSON structure with jq

The file now passes `jq empty` validation.
2026-05-04 20:13:25 +08:00
ekkoandClaude Opus 4.6 89e386593c ci: update Node.js version to 23 in build workflow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 20:11:17 +08:00
ekkoandClaude Opus 4.6 521a9edb86 ci: add PR build check workflow and PR template
- Add build.yml workflow that runs npm run build on PRs to main/dev
- Add PR template with summary, type, changes, test plan sections
- Required by branch protection rules on main

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 20:05:50 +08:00
ekkoandClaude Opus 4.6 8ad0723b00 docs: update Docker deployment guide and compose config
- Update docker-compose.yml: use hermes-agent internal hostname for UPSTREAM,
  expose ports 8642-8670, add server data volume mapping
- Rewrite docs/docker.md with pre-built image usage, env var table,
  data persistence (token location), port mapping, and common operations
- Update README.md and README_zh.md Docker section with pre-built image
  instructions and token location

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 19:55:31 +08:00
ekkoandClaude Opus 4.6 4b306c3caa fix: only trigger Docker build on main branch and add server data volume mapping
- Workflow trigger branches reduced to main only (dev can use manual dispatch)
- Add server data volume mapping to persist Koa auth token

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 19:17:06 +08:00
ekkoandClaude Opus 4.6 ef39a69d11 fix: clean up workflow trigger branches
Remove personal branch names (dev-custom, my-custom), keep only main and dev.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 19:01:04 +08:00
ekko f4aee59e39 Merge branch 'dev' 2026-04-20 15:22:05 +08:00
ekkoandClaude Opus 4.6 f3a980bb2e fix: patch auth bypass via case-sensitive path matching (#77)
- Normalize request path to lowercase before auth check to prevent
  bypassing authentication with uppercase paths like /API/hermes/sessions
- Auto-restart server after in-page update via detached hermes-web-ui restart

Closes #77

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 15:21:47 +08:00
ekko 5430d02787 Merge branch 'dev' 2026-04-20 12:16:07 +08:00
ekkoandClaude Opus 4.6 eb6c2dc9f6 fix: resolve Chinese filename garbling on upload and page update failure (#72, #71)
- Fix multipart upload parsing to use Buffer operations instead of latin1
  string conversion, preserving multi-byte characters in filenames (#72)
- Support RFC 5987 filename* encoding for cross-platform compatibility
- Fix in-page update by running npm install directly instead of CLI command
  that kills the server process before response is sent (#71)
- Add no-cache header to version check to avoid stale latest version
- Change version check interval from 4 hours to 1 hour

Closes #72, Closes #71

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 12:15:47 +08:00
ekko 47ccb751f4 Merge branch 'dev' 2026-04-19 23:41:07 +08:00
ekkoandClaude Opus 4.6 5d16d56d9f docs: add fallback comment for star history chart rate limiting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 23:41:01 +08:00
ekko cea7a17913 Merge branch 'dev' 2026-04-19 23:36:37 +08:00
ekkoandClaude Opus 4.6 717549bc85 docs: update README with multi-profile, gateway, provider management and star history
- Add active session indicator and latest-message sorting to AI Chat
- Expand Model Management with provider CRUD and Codex OAuth
- Add Multi-Profile & Gateway section
- Add Model Settings to Settings section
- Add Star History chart to both EN and ZH READMEs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 23:36:28 +08:00
ekko f96e94c44c Merge branch 'dev' 2026-04-19 23:32:09 +08:00
ekkoandClaude Opus 4.6 d3817556ac feat: sort sessions by latest message time instead of creation time
Use `last_active` from SQLite (max message timestamp) for accurate
sorting, with fallback chain: last_active → ended_at → started_at.
CLI mode lacks last_active so falls back to ended_at.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 23:32:01 +08:00
ekkoandClaude Opus 4.6 969e56b45e fix: restore selected session highlight alongside live indicator
The PR changed `.active` class to bind on `isSessionLive()`, which
removed the visual selection state when clicking a non-live session.
Split into two classes: `.active` for selection, `.live` for streaming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 23:13:34 +08:00
ekko 72f238703d Merge branch 'codex/active-session-live-state' into dev 2026-04-19 22:52:41 +08:00
ekko 5b9c1aa77f Merge branch 'dev' 2026-04-19 20:59:39 +08:00
ekkoandClaude Opus 4.6 562261d13f feat: multi-gateway profile support, provider management overhaul, and model settings tab
- Profile-aware proxy: inject API key from profile-specific .env, route requests via X-Hermes-Profile header
- Remove auth.json dependency: built-in providers use .env, custom providers use config.yaml
- Add allProviders field to available-models response with all hardcoded provider catalogs
- Add Models tab in Settings for editing provider API keys (built-in → .env, custom → config.yaml)
- Add PUT /api/config/providers/:poolKey for updating provider credentials
- ProviderFormModal uses backend allProviders for preset dropdown
- Gateway log format support: parse both agent and gateway log formats
- Add webui server.log to log viewer with log rotation at 3MB
- Fix provider delete loading state and OAuth provider cleanup
- Setup script: require Node.js 23+, auto-upgrade if version too low

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 20:59:25 +08:00
ekkoandClaude Opus 4.6 e7e4c386c3 chore: bump version to 0.3.6 and fix unused import
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 15:07:59 +08:00
ekkoandClaude Opus 4.6 8a4ab2d69d fix: provider-aware model selection to prevent cross-provider conflicts
When multiple providers share the same model name, the selector now
uses both model ID and provider as the unique identifier instead of
model name alone. Backend returns default_provider alongside default
model, and model switching sends provider to the config.

Fixes #52

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 15:05:05 +08:00
ekkoandClaude Opus 4.6 b4f809d8b5 fix: improve chat scroll behavior and dark mode readability
- Smart auto-scroll: only follow SSE stream when user is near bottom (200px threshold), scroll once on send/switch session
- Brighten dark mode text colors (primary #e0→#f0, secondary #a0→#c0, muted #66→#88)
- Fix tool-call panel height to match thinking video (120px→213px)
- Fix tool-call item background invisible in dark mode
- Fix gateway start button using hardcoded dark color

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 10:46:33 +08:00
ekkoandClaude Opus 4.6 4f923da490 feat: replace ModelSelector dropdown with modal picker
NSelect dropdown is unusable with providers that have hundreds of models.
Replaced with a modal dialog featuring search filter, collapsible provider
groups, and click-to-select.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 22:08:34 +08:00
ekkoandClaude Opus 4.6 aa34b02b09 chore: bump version to 0.3.5
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 14:34:50 +08:00
ekko 07d36297d6 Merge remote-tracking branch 'origin/main' into feat/multi-gateway 2026-04-18 14:33:04 +08:00
ekkoandClaude Opus 4.6 27051dcb32 feat: profile-aware cache isolation and UX improvements
- Fix chat store cache keys to include profile name, prevent data leaking between profiles
- Defer cache hydration to after profile load to avoid race condition
- Remove collapsible sidebar feature (not needed)
- Remove confirmation dialog on profile switch (direct reload)
- Auto-start gateway when creating new profile
- Clear profile-specific localStorage cache on profile delete (safe prefix matching)
- Clean up unused imports in SettingsView

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 14:32:54 +08:00
ekko 17f0cdc1de Merge branch 'pr-44' into feat/multi-gateway
# Conflicts:
#	packages/client/src/components/layout/AppSidebar.vue
2026-04-18 13:12:42 +08:00
ekko b9e0aefec3 Merge branch 'pr-43' into feat/multi-gateway 2026-04-18 13:09:21 +08:00
ekkoandClaude Opus 4.6 4b6de351bd feat: add multi-gateway management with auto port detection
- Add GatewayManager for multi-profile gateway lifecycle management
- Auto-detect running gateways on startup via PID + health check
- Port conflict detection: check managed gateways, allocated ports, and
  system-level port availability (TCP bind test)
- Two-phase startup: sequential port resolution, parallel process launch
- Use `gateway start/restart` on normal systems, `gateway run --replace`
  on WSL/Docker
- Wait for health check before returning start/stop responses
- Add Gateways page with card-based layout showing profile status
- Reorganize sidebar navigation into collapsible groups
- Hide API server settings (now auto-managed by GatewayManager)
- Profile switch reloads page; Ctrl+C no longer stops gateways
- Remove redundant ensureApiServerConfig from index.ts and profiles.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 13:07:12 +08:00
ekkoandClaude Opus 4.6 7264eabfe2 Merge dev into main
- fix: avoid full session export in session list (#38)
- fix: fallback title from preview when session has no explicit title
- fix: use dynamic import for node:sqlite with Node version guard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 09:35:03 +08:00
ekkoandClaude Opus 4.6 35481e452d fix: use dynamic import for node:sqlite with Node version guard
Replace static top-level import with runtime version check and dynamic
import() so Node < 22.5 gracefully falls back to CLI path instead of
crashing at module load time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 09:34:59 +08:00
ekkoandClaude Opus 4.6 fd7071b75d fix: fallback title from preview when session has no explicit title
SQLite path was returning null title for sessions without an explicit
title, while the CLI path derives it from the first user message.
Now uses the preview (first user message content) as title fallback,
matching the original CLI behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 08:53:45 +08:00
ekkoandClaude Opus 4.6 7e84c56c20 fix: avoid full session export in session list (#38)
Read lightweight session summaries directly from state.db via node:sqlite
instead of exporting full transcripts through hermes CLI. Falls back to
CLI path if sqlite query fails. Includes title fallback from preview when
no explicit title is set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 08:53:38 +08:00
ekko d6661c0325 Merge branch 'dev' 2026-04-18 08:29:51 +08:00
ekkoandClaude Opus 4.6 4dc3b3cd56 chore: add MIT LICENSE file
Closes #39

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 08:27:40 +08:00
ekkoandClaude Opus 4.6 d40c224196 feat: add GitHub link to sidebar footer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 23:29:24 +08:00
ekko bf726a9ec0 Merge branch 'dev' 2026-04-17 23:14:28 +08:00
ekkoandClaude Opus 4.6 9979871550 feat: add Codex OAuth login and fix channel config display
- Add OpenAI Codex Device Code Flow login (backend polling + frontend modal)
- Codex provider integrated into preset dropdown (hides URL/API key fields)
- Sync provider model catalogs with Hermes system
- Fix channel config not displaying on first visit (wait for data load)
- Fix sidebar model list not refreshing after adding provider
- Add autocomplete="off" to API key input to prevent browser autofill

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 23:11:57 +08:00
ekkoandClaude Opus 4.6 26bb821e29 feat: support manual model input and sync provider catalogs
- Allow manual model name input when adding custom providers (NSelect tag mode)
- Sync provider model catalogs with Hermes _PROVIDER_MODELS
- Add new providers: kimi-coding-cn, moonshot, arcee
- Fix provider key naming to match Hermes (kilo→kilocode, vercel→ai-gateway, etc.)
- Ensure custom_providers from config.yaml always appear in available-models
- Append configured default model to model list if not in catalog
- Fix provider deletion with case-insensitive key matching
- Add selectOrInput i18n key to all 8 locales

Closes #24

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 22:05:06 +08:00
ekkoandClaude Opus 4.6 4d98209d13 Merge branch 'dev' into main — v0.3.2
- fix: use deep merge for config updates to prevent nested field loss
- fix: save config inputs on blur instead of every keystroke
- fix: job edit schedule format error (#25)
- chore: add engines requirement (node >= 20)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 17:50:47 +08:00
ekkoandClaude Opus 4.6 ca3fea4d0e chore: add engines requirement (node >= 20) and bump version to 0.3.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 17:50:28 +08:00
ekkoandClaude Opus 4.6 b290b755c9 fix: use deep merge for config updates and save inputs on blur
- Backend: replace shallow merge with recursive deepMerge in PUT /api/hermes/config
  to prevent nested config fields from being lost when updating partial values
- Frontend: switch all NInput fields to default-value + @change (save on blur)
  instead of :value + @update:value (save on every keystroke) in both
  PlatformSettings.vue and SettingsView.vue api_server tab
- Remove unused debounce logic and dead changeKey function

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 17:43:54 +08:00
ekkoandClaude Opus 4.6 3d2b1c5e47 fix: job edit schedule format error and refactor services directory
- Fix #25: job update sends schedule as plain string but upstream expects
  { kind, expr, display } object, causing "'str' object has no attribute 'get'"
- Move hermes-cli.ts, hermes.ts, hermes-profile.ts into services/hermes/
  for multi-agent namespacing consistency
- Fix ts-node Set spread compatibility in filesystem.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 16:48:24 +08:00
ekkoandClaude Opus 4.6 9a0b50f370 fix: add MiniMax highspeed variants and deduplicate model list
- Add MiniMax-M2.7/M2.5/M2.1/M2 -highspeed variants for both
  international and China providers (#17)
- Deduplicate models in /available-models response to fix
  repeated entries when using Copilot or other providers (#18)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 12:04:20 +08:00
ekkoandClaude Opus 4.6 dcb477594b feat: add 6 new locales (ja, ko, fr, es, de, pt) and UI polish
- Add Japanese, Korean, French, Spanish, German, Portuguese translations
- Improve session active state visibility in both themes
- Static language labels in LanguageSwitch component
- Dark theme: lighten chat input background for better contrast
- Fix system theme listener not toggling back to light

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 09:09:50 +08:00
ekkoandClaude Opus 4.6 16e07bcc9b feat: dark theme polish — fix sidebar layout, update button, chat input & theme switching
- Fix sidebar footer layout: separate update button from version row
- Replace custom update-hint with NButton for proper dark mode support
- Darken chat input background in dark theme for better contrast
- Fix system theme listener always applying dark mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 08:37:57 +08:00
ekko 6df7cada04 Merge branch 'feat/dark-theme' into dev 2026-04-17 08:13:30 +08:00
ekkoandClaude Opus 4.6 a54a89d521 fix: update video assets and sidebar dark background color
Replace video assets with processed versions, update sidebar logo
dark background to #393939, restore streaming indicator with
theme-aware video switching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 23:43:54 +08:00
ekkoandClaude Opus 4.6 b5aeb876b8 feat: add dark theme support with CSS custom properties and Naive UI integration
Implement runtime theme switching using CSS custom properties delegated through SCSS variables, with light/dark/system modes, FOUC prevention, sidebar toggle, and settings selector. Add theme-aware video assets for sidebar and chat thinking indicator.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 23:13:04 +08:00
ekkoandClaude Opus 4.6 076a7c2a38 feat: add Vitest testing framework, fix proxy auth stripping and 401 handling
- Set up Vitest with jsdom for client tests, node for server tests
- Add tests for auth service, proxy handler, API client, and profiles store
- Strip Authorization header in proxy to prevent web-ui token leaking to gateway
- Distinguish local BFF vs proxied gateway 401s to avoid false logouts
- Remove unused hero.png asset

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:24:09 +08:00
ekko b8d121ed79 Merge branch 'dev'
# Conflicts:
#	package.json
2026-04-16 15:21:24 +08:00
ekkoandClaude Opus 4.6 26423984d1 fix: profile import file upload, startup health check, sidebar scroll, node-pty fallback
- Change profile import from server path input to browser file upload (multipart)
- Fix startup script to wait for health check before opening browser
- Add overflow scroll with hidden scrollbar to sidebar nav
- Graceful degradation when node-pty fails to load (WSL compatibility)
- Remove rename button from profile cards
- Restrict profile name input to English letters, numbers, hyphens
- Use raw.githubusercontent.com URLs in README setup script

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:19:05 +08:00
ekkoandClaude Opus 4.6 99a47cf1ad feat: profile-aware routes, provider sync, channel settings improvements
- Add hermes-profile.ts for dynamic profile path resolution (all backend
  routes now read from active profile directory instead of hardcoded ~/.hermes/)
- Add profile switcher dropdown in sidebar, reload page on switch
- Sync PROVIDER_PRESETS with Hermes CLI (fix keys: kimi-coding→kimi-for-coding,
  kilocode→kilo, ai-gateway→vercel, opencode-zen→opencode; remove moonshot)
- Sync PROVIDER_ENV_MAP with Hermes models.dev + overlays (correct env var names)
- Add gateway restart after adding model provider
- Don't write GLM_BASE_URL/KIMI_BASE_URL for zai/kimi (let Hermes auto-detect)
- Write API keys to .env and credential_pool for all providers
- Built-in providers skip custom_providers in config.yaml
- Add debounce + per-field loading state for channel settings inputs
- Run hermes setup --reset for profiles without config.yaml
- Create empty .env for new profiles (not copied from default)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 13:51:42 +08:00
ekkoandClaude Opus 4.6 014168864f fix: always overwrite api_server config on startup
Simplify ensureApiServerConfig to unconditionally write default
platforms.api_server values, preventing missing config issues.

Bump version to 0.2.7.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:59:18 +08:00
ekkoandClaude Opus 4.6 293f36ecac fix: always overwrite api_server config on startup
Simplify ensureApiServerConfig to unconditionally write default
platforms.api_server values, preventing missing config issues.

Bump version to 0.2.7.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:54:58 +08:00
ekkoandClaude Opus 4.6 04b80a616e feat: add profile management page with full CRUD UI
- Add frontend API layer, Pinia store, and 5 components (ProfileCard, ProfilesPanel, ProfileCreateModal, ProfileRenameModal, ProfileImportModal)
- Add ProfilesView page with card grid layout and expandable details
- Modify export endpoint to stream file as browser download instead of returning server path
- Add sidebar nav entry, router route, and i18n translations (en/zh)
- Support create, rename, delete, switch (with gateway restart), export, and import profiles

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:40:25 +08:00
ekkoandClaude Opus 4.6 57ef171dda docs: add openapi.json specification
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 08:39:53 +08:00
ekkoandClaude Opus 4.6 351c861777 refactor: restructure project for multi-agent extensibility
- Migrate source to packages/client and packages/server directories
- Namespace all Hermes-specific code under hermes/ subdirectories
  (api/hermes/, components/hermes/, views/hermes/, stores/hermes/)
- Add hermes.* route names and /hermes/* path prefixes
- Upgrade @koa/router to v15, adapt path-to-regexp v8 syntax
- Fix proxy path rewriting: /api/hermes/v1/* → /v1/*, /api/hermes/* → /api/*
- Fix frontend API paths to match backend /api/hermes/* routes
- Fix WebSocket terminal path to /api/hermes/terminal
- Add proxyMiddleware for reliable unmatched route proxying
- Add profiles route module and hermes-cli profile commands
- Update CLAUDE.md development guide with new architecture
- Add Chinese README (README_zh.md)
- Add Web Terminal feature to README

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 08:38:18 +08:00
ekkoandClaude Opus 4.6 4917242dca fix: add auth to /upload endpoint to resolve 401 on file attachment
Fixes #10

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 19:29:44 +08:00
ekkoandClaude Opus 4.6 71c7f25f4b feat: add web terminal, improve README, fix node-pty and i18n issues
- Add web terminal view with xterm.js and node-pty WebSocket backend
- Rewrite README with badges, feature table, mobile demo video
- Add package keywords and improved description for npm/GitHub SEO
- Fix node-pty spawn-helper missing execute permission after npm install -g
- Auto-fix node-pty permissions on CLI startup
- Fix duplicate 'error' key in en.ts and zh.ts i18n files
- Remove nested NSpin in PlatformSettings (causes invisible loading spinner)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 16:36:04 +08:00
ekkoandClaude Opus 4.6 d258875cef feat: support concurrent session streaming, persist active session, and improve 401 handling
- Refactor streaming to use Map<string, AbortController> for multi-session concurrency
- SSE callbacks capture session ID in closure, no cross-session interference
- messages is now computed from activeSession, no manual sync needed
- Persist active session ID to localStorage, restore on reload
- Auto-expand session group when restoring saved session
- Clear auth key and redirect to login on 401 (skip if already on login page)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 11:00:47 +08:00
ekkoandClaude Opus 4.6 2faa6fb95c chore: bump version to 0.2.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:29:36 +08:00
ekkoandClaude Opus 4.6 9eaaa4270d fix: resolve streaming messages splitting into individual bubbles
Simplify addMessage/updateMessage to only write to messages.value,
add syncMessagesToSession() to copy messages back on session switch
and stream completion. Also fix mobile viewport, session list overlay,
hamburger logo, and various responsive improvements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:28:53 +08:00
ekko f3927e2990 Merge branch 'dev' into feat/mobile 2026-04-15 09:16:19 +08:00
ekkoandClaude Opus 4.6 62e0d6fbed fix: pass auth token via query param for SSE EventSource
EventSource API doesn't support custom headers, so pass token as
?token= query parameter. Server auth middleware now accepts token
from both Authorization header and query param.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 09:13:27 +08:00
ekkoandClaude Opus 4.6 9556db2f90 feat: add mobile responsiveness support
- Hamburger menu + drawer sidebar for mobile navigation
- Auto-collapse chat session list on mobile
- Responsive grids, modals, forms, and settings
- Touch-friendly nav items (44px targets)
- Skills page sidebar toggle on mobile
- Memory sections stack vertically on mobile

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 09:12:54 +08:00
ekkoandClaude Opus 4.6 29f19ddb30 fix: unify page header styles across all views
- Extract shared .page-header and .header-title to global.scss
- Standardize padding to 21px 20px matching sidebar logo height
- Fix Usage page layout to flex column with standard header
- Fix Logs page header CSS selector after class rename
- Normalize button sizes to small across all headers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 08:50:10 +08:00
ekkoandClaude Opus 4.6 66cc9a6f1e fix: generate token on start, include token in URL, reset api_server config
- Pre-generate auth token before server start and pass via AUTH_TOKEN env var
- Append token to startup URL for auto-login
- Reset api_server config values to defaults on startup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 08:28:36 +08:00
ekkoandClaude Opus 4.6 1f45254dd0 feat: add token auth, login page, skill toggle, and route restructure
- Add token-based authentication with auto-generated token stored in server/data/.token
- Add login page with URL token auto-fill support
- Add route guards requiring auth for all pages except login
- Restructure routes: / for login, /chat for conversations
- Add skill enable/disable toggle via config.yaml skills.disabled
- Unify logo to /logo.png across sidebar, login, messages, and empty state
- Hide sidebar on login page, prevent flash with router.isReady()
- Fix session export JSON parse error when CLI returns non-JSON output
- Display token in CLI on server start

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 21:48:53 +08:00
ekko be4624b8b4 Merge branch 'dev' into feat/official-api 2026-04-14 20:19:30 +08:00
ekkoandClaude Opus 4.6 c0f1453c62 fix: graceful shutdown for nodemon restart to prevent EADDRINUSE
- Add unified shutdown handler for SIGUSR2/SIGINT/SIGTERM
- Add uncaughtException/unhandledRejection handlers
- Use --signal SIGTERM in nodemon config

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 20:17:12 +08:00
ekkoandClaude Opus 4.6 456a7effd0 docs: add official API integration TODO checklist
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 19:01:42 +08:00
ekkoandClaude Opus 4.6 2487e147ab fix: prevent Windows terminal popups with windowsHide option
Add windowsHide: true to all spawn/execFile calls in bin and server code
to prevent new console windows from appearing on Windows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 17:17:15 +08:00
ekkoandClaude Opus 4.6 9dd5fca9f9 feat: add usage statistics page, CLI improvements, and UI enhancements
- Add Usage Stats page with token breakdown, model distribution, and 30-day trend
- Pass through cache/cost token fields in BFF (cache_read/write_tokens, reasoning_tokens, actual_cost_usd)
- Add CLI commands: -v/--version, -h/--help, update/upgrade with auto-restart
- Auto-open browser on startup, auto-kill port conflicts (cross-platform)
- Validate all api_server config fields on startup (enabled, host, port, key, cors_origins)
- Add streaming thinking video animation with tool calls panel
- Add context token usage display (used / total) in chat header
- Sidebar: white logo area with shadow, dance video beside logo (canvas seamless loop)
- Fix sidebar nav scroll (app-main overflow-y: auto)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:48:58 +08:00
ekkoandClaude Opus 4.6 f8fc64ff5c fix: remove set -e from setup script to prevent early exit
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 10:26:35 +08:00
ekkoandClaude Opus 4.6 8f8cf629bb feat: WSL support, js-yaml migration, and stability improvements
- PID/log files moved to ~/.hermes-web-ui/ for WSL compatibility
- Replace all regex YAML parsing with js-yaml in filesystem.ts
- Auto-detect WSL and use hermes gateway run for background startup
- Stop command: SIGTERM with SIGKILL fallback, clean stale PIDs
- Setup script: auto-install Node.js and hermes-web-ui

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 10:22:29 +08:00
ekkoandClaude Opus 4.6 60056e771a feat: auto-install hermes-web-ui via npm in setup script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 09:04:54 +08:00
ekkoandClaude Opus 4.6 91e5f637dc feat: add environment setup script for auto-detecting and installing Node.js
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 09:02:49 +08:00
ekkoandClaude Opus 4.6 e19b532e47 chore: bump version to 0.2.0-beta.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 20:53:05 +08:00
ekkoandClaude Opus 4.6 0ff04758b6 feat: add gateway auto-start on boot and real health detection
- Auto-detect gateway connectivity on server startup, start gateway if not running
- Fix /health endpoint to actually check gateway reachability instead of just CLI version
- Fix MiniMax CN base_url from /anthropic to /v1
- Frontend connection status now reflects real gateway state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 20:08:32 +08:00
ekkoandClaude Opus 4.6 f22a497115 fix: add missing axios dependency and bump version to 0.1.9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 16:59:17 +08:00
ekkoandClaude Opus 4.6 94329adc4f fix: remove duplicate sourceLabel declaration in ChatPanel
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 15:30:08 +08:00
ekko f828c73a23 Merge branch 'dev' 2026-04-13 15:28:21 +08:00