Commit Graph
8 Commits
Author SHA1 Message Date
BonyFish dc1e369f89 fix: remove webui-side writer to avoid conflict with agent
The .usage.json file is owned by hermes-agent (tools/skill_usage.py).
This change removes the webui-side increment logic to avoid:

1. File ownership conflict - both writing to same file
2. Schema mismatch - agent uses ISO strings, webui used floats
3. Concurrency issues - agent uses fcntl locks, webui had no locking
4. Double-counting - agent already increments counters server-side

Changes:
- api/skill_usage.py: keep only read_skill_usage(), remove increment functions
- api/streaming.py: remove skill usage counter hook
- api/routes.py: adapt response to pass through agent's format as-is,
  with defensive coercion for None values and metadata preservation
- tests/test_skill_usage.py: remove increment tests (17→7 cases)
2026-05-27 20:57:32 +08:00
BonyFish 9141a55ae0 fix test error 2026-05-27 15:05:47 +08:00
BonyFish 3a676b704a feat: add skill usage counter to insights page
- Add api/skill_usage.py for .usage.json read/write with atomic updates
- Track skill_view (view_count), skill_manage (use_count), skill_patch
  (patch_count) invocations per SSE stream completion
- Add GET /api/skills/usage endpoint returning per-skill usage stats
- Render Skill Usage card in Insights panel after LLM Wiki card
- Add i18n keys for en, zh, zh-Hant, ja, it locales
- Add 17 tests covering read/increment logic, API route, and streaming hook
2026-05-27 14:44:28 +08:00
BonyFish ea3d4ec0b3 feat(cron): dynamic delivery options from API instead of hardcoded select
Replace the hardcoded 4-option deliver dropdown (local/discord/telegram/slack)
with a dynamic select populated from a new GET /api/crons/delivery-options
endpoint that reads _KNOWN_DELIVERY_PLATFORMS from hermes-agent.

Key changes:
- Add GET /api/crons/delivery-options endpoint returning all known platforms
- Frontend loads options asynchronously on first cron form open, with caching
- Enable deliver editing for existing jobs (was previously disabled)
- Include deliver in update payload when editing cron jobs
- Fallback to local-only if API unavailable
- Custom deliver values (e.g. feishu:oc_xxx) shown with * suffix
- Add cron_deliver_custom i18n key to all 12 locales
- Add 5 integration tests for the new endpoint
2026-05-27 10:58:49 +08:00
BonyFish f87e32d0c7 fix: add i18n support to settings conversation page action buttons
- Add data-i18n attributes to JSON, Import tooltip, and Clear button
- Reuse existing 'clear' and 'import' i18n keys for button labels
- Add 'export_session_json', 'export_session_json_tooltip',
  'import_session_json_tooltip', 'clear_conversation_btn_tooltip'
  keys to all 11 locales (en, it, ja, ru, es, de, zh, zh-Hant, pt, ko, fr)
2026-05-16 14:57:01 +08:00
BonyFish b48e44a24a Add tests for list-format custom_providers.models
Covers 9 scenarios: plain string list, dict list, unnamed provider,
mixed formats, dedup, empty list, fallback keys, @-prefix routing,
and mixed list/dict items from multiple providers.
2026-05-16 05:43:09 +00:00
BonyFish f82a763dfb fix: support list format for custom_providers.models in model dropdown
The get_available_models() function only handled dict-format models
(`{model_id: {}}`) for custom_providers entries, silently dropping
models specified as YAML lists (`[model1, model2]`) or list of dicts
(`[{id: ..., label: ...}]`).

This caused users who define their custom providers with list-format
model declarations to see zero or incomplete model entries in both
Settings → Preferences → Default Model dropdown and the chat
interface model picker.

The fix adds an `elif isinstance(_cp_models_dict, list)` branch with
support for three list sub-formats:
  - Plain string list: `models: [m1, m2]`
  - Dict list: `models: [{id: m1, label: ...}]`
  - Mixed: `models: [m1, {id: m2}]`

Refs: hermes-agent issue where YAML list models were invisible
2026-05-16 05:43:09 +00:00
BonyFish 9593380899 fix: add i18n support to settings sidebar menu items
Adds data-i18n attributes to all settings sidebar menu items
(Conversation, Appearance, Preferences, Plugins, System) so they
respect the user's selected locale.

Also adds missing settings_tab_plugins key to English locale.
2026-05-16 13:09:09 +08:00