Commit Graph
100 Commits
Author SHA1 Message Date
ekko eca06faaa0 add web ui openrouter attribution (#1057) 2026-05-27 11:21:12 +08:00
ekko 07c4c1ddd5 fix provider base URL env handling (#1054) 2026-05-27 10:41:29 +08:00
ekko a10e171082 Add history import controls (#1053) 2026-05-27 10:05:52 +08:00
ekko 42f7b64ffb update changelog and context default (#1045) 2026-05-26 19:35:48 +08:00
ekko 82680f5c0b fix clarify replay and compression timeout (#1044) 2026-05-26 19:15:22 +08:00
ekko e926a8e2fb fix chat queue promotion (#1042) 2026-05-26 17:39:38 +08:00
ekko b0000b4c38 fix context compressor summary prompt (#1041) 2026-05-26 17:29:19 +08:00
ekko ad1cab277a fix context token resume (#1039) 2026-05-26 16:32:07 +08:00
e686f0277a [codex] scope bridge terminal env refresh to worker startup (#1031)
* fix(bridge): refresh terminal env from profile config on profile switch

Profile switching changes HERMES_HOME but the TERMINAL_* environment
variables (TERMINAL_ENV, TERMINAL_SSH_HOST, etc.) still point to the
root config's terminal settings set at gateway startup.

Add _refresh_terminal_env() that re-reads terminal config from the
active profile's config.yaml and sets the corresponding TERMINAL_* env
vars. Call it in:
- AgentPool.get_or_create(): when creating a session for a profile
- AgentPool._run_chat(): before agent execution, inside _profile_env

Errors are handled gracefully: YAML parse failures log to stderr,
terminal_tool cache invalidation failures are silently ignored, and
missing config files are skipped without error.

* fix(bridge): refresh terminal env in worker profile setup

_set_worker_profile_env() handles broker-spawned worker subprocesses
that are isolated per profile. The worker inherits TERMINAL_* env vars
from the broker (root config), and _profile_env() is a no-op in worker
mode, so terminal config was never refreshed for non-default profiles.

Adding _refresh_terminal_env() here means each worker subprocess reads
its own profile's config.yaml terminal section on startup, solving
profile-isolated terminal backends (e.g. SSH per profile).

* fix bridge terminal env refresh scope

* refresh worker profile env for new agents

* avoid bridge worker restart for channel config

* align config controller bridge restart tests

---------

Co-authored-by: GoldenFish123321 <goldfishx@gmail.com>
Co-authored-by: GoldenFishX <golden_fish@foxmail.com>
2026-05-26 00:15:27 +08:00
ekko 689237f0fd fix job deliver target options (#1026) 2026-05-25 20:04:50 +08:00
ekko badb17cf8e [codex] integrate goal command workflow (#1025)
* feat: integrate goal command workflow

* fix: keep goal done visible

* fix: add goal done slash command

* fix: promote queued message on run start
2026-05-25 19:26:23 +08:00
ekkoandCodex 0eab6a1125 Fix plan command support in web bridge (#1018)
* fix: support plan command in web bridge

* fix: preserve queued bridge messages

* fix: avoid duplicate queued plan messages

* fix: preserve plan command semantics

---------

Co-authored-by: Codex <codex@openai.com>
2026-05-25 15:48:17 +08:00
ekko 6e2e502a75 fix: clean stale pid on stop (#1015) 2026-05-25 13:31:12 +08:00
ekko e1438490b8 docs: update changelog after 0.6.0 (#1014) 2026-05-25 13:06:06 +08:00
ekko d03d5e6ac5 remove auth disabled support (#1013) 2026-05-25 12:49:01 +08:00
ekko 56c6cf3e2d fix profile-aware session history actions (#1011) 2026-05-25 12:32:42 +08:00
ekkoandPaulo Cavallari bbb8b1d536 [codex] fix bridge tool marker flush persistence (#1002)
* fix: don't drop pending tool-call-marker prefix on tool.started/run.done

The `filterBridgeToolCallMarkupDelta` filter holds back any text that
ends in a partial prefix of `[Calling tool:` (i.e. `[`, `[C`, `[Ca`,
..., `[Calling tool`) so it can decide whether the buffered chars are
the start of a tool-call markup block to be hidden, or just regular
text to be released by the next delta.

The bug: that "release on next delta" assumption breaks at TWO points:

1. **On `tool.started`**: the next chunk for this assistant message is
   the tool call itself, NOT a follow-up text delta. Buffered chars
   sit there forever and nothing flushes them — they vanish silently
   from the user-visible stream.

2. **On run completion**: the code did
   `state.bridgePendingToolCallMarkup = undefined` directly, dropping
   any pending chars without forwarding them.

Both cases produce the user-visible symptom of "abrupt cuts in text
right before/after tool calls (terminal, read_file, write_file...)" —
1 to 13 characters disappear at exactly the boundary where the model
was emitting natural prose that happened to end with `[`.

The fix introduces `flushPendingToolCallMarkup(state)` and calls it:

- In the `tool.started` branch BEFORE recording the tool call, so the
  buffered chars are appended to the open assistant message and emitted
  as a normal `message.delta` to the client.
- At run-done BEFORE clearing the buffer, same flush path.

This is a pure recovery patch — no change to the marker detection
logic itself. If the buffer turns out to actually be a real
`[Calling tool: ...]` marker that just hasn't completed yet, that
case is still caught by the existing `markerIdx >= 0` branch in the
filter on the next delta. The only behavioral change is that the
"orphan" cases (text that ends with `[` but never becomes a marker)
are no longer dropped.

* fix bridge marker flush persistence

---------

Co-authored-by: Paulo Cavallari <paulocavallari@users.noreply.github.com>
2026-05-25 11:09:16 +08:00
ekko 9e35d81f48 fix mobile chat run reconnect (#993) 2026-05-25 11:08:54 +08:00
ekko 61b41512d4 [codex] increase login lock threshold (#984)
* increase login ip lock threshold

* show login lock recovery commands
2026-05-24 22:36:21 +08:00
ekko 4176923bac support external skill sources (#981) 2026-05-24 19:47:52 +08:00
ekko 6763721545 fix session links profile filtering (#979) 2026-05-24 19:30:32 +08:00
ekkoandGoldenFish123321 e743c81ad3 [codex] add clarify support with response path tests (#972)
* feat: 新增 clarify(澄清/确认)交互支持

* test clarify response bridge path

---------

Co-authored-by: GoldenFish123321 <golden_fish@foxmail.com>
2026-05-24 18:09:39 +08:00
ekko a7f0a92fe6 fix session profile listing and cli sqlite warning (#971) 2026-05-24 17:54:17 +08:00
ekko f61a1d9454 [codex] fix auth startup and profile model defaults (#966)
* docs release 0.6.0 changelog

* fix auth startup and profile model defaults
2026-05-24 14:00:31 +08:00
ekko 634a622934 [codex] fix media skill profile auth and run events (#965)
* fix media skill profile auth and run events

* test bridge run profile context
2026-05-24 12:52:14 +08:00
ekkoandMaxim Kirilyuk df41d6b051 [codex] Fix profile-aware session deep links (#962)
* feat: add session deep links for chats

* feat: add deep links for history and group chat

* Fix profile-aware session deep links

---------

Co-authored-by: Maxim Kirilyuk <werserk@inbox.ru>
2026-05-24 10:55:55 +08:00
ekkoandCodex 3f16c4a20e Allow bridge sessions to run concurrently (#932)
* Allow bridge sessions to run concurrently

* Stabilize bridge concurrency test

* Set bridge approval timeout to 120 seconds

* harden bridge approval concurrency

---------

Co-authored-by: Codex <codex@openai.com>
2026-05-22 15:52:00 +08:00
ekko 92670e97ee Add Windows Kanban upgrade changelog note (#930) 2026-05-22 12:03:43 +08:00
ekko f0817003b2 Update changelog for 0.5.34 (#929) 2026-05-22 11:12:21 +08:00
ekko f90e79fd2f fix: sync bundled skills across profiles (#926) 2026-05-22 10:41:14 +08:00
ekko 4b759c4d8a cache group chat fixed context usage (#925) 2026-05-22 10:20:39 +08:00
ekko c3538a6b44 fix compression context usage accounting (#924) 2026-05-22 09:46:50 +08:00
ekkoandCodex 254573400d Fix final context and tool status updates (#917)
Co-authored-by: Codex <codex@openai.com>
2026-05-21 23:21:26 +08:00
ekko ff1f471745 Persist custom Hermes models (#913) 2026-05-21 20:55:19 +08:00
ekko 4d89767847 Clean multimodal tool results before storage (#911) 2026-05-21 20:19:06 +08:00
ekkoandCodex 39ead94352 Account for full context tokens in compression (#908)
* Account for full context tokens in compression

* Fix group chat final context updates

---------

Co-authored-by: Codex <codex@openai.com>
2026-05-21 19:40:52 +08:00
ekko b2ec321990 Fix group chat agent connection failures (#900) 2026-05-21 14:54:41 +08:00
ekko 013b4abcbf Update changelog for 0.5.33 (#899) 2026-05-21 14:31:52 +08:00
ekko ab7dd00e8c Fix profile list column parsing (#897) 2026-05-21 14:08:58 +08:00
ekko 3b4e0cec74 Update Nous provider model preset (#896) 2026-05-21 13:20:26 +08:00
ekko dd3320d1ce Fix Windows netstat encoding in agent bridge (#894) 2026-05-21 12:25:38 +08:00
ekko 284d794260 Add skill recommendations page content (#892) 2026-05-21 12:23:08 +08:00
ekko 91f7f2329a prune unused changelog translations (#890) 2026-05-21 11:47:54 +08:00
ekko 529065f023 scope session search by selected profile (#889) 2026-05-21 09:48:31 +08:00
ekko 3612a76735 show chat run errors as agent messages (#887) 2026-05-21 09:05:17 +08:00
ekko 40109e9c42 [codex] fix profile scoped model selection (#881)
* fix profile scoped model selection

* test profile scoped provider refresh
2026-05-20 18:26:01 +08:00
ekko cd77e5ba2e Align i18n locale coverage (#878) 2026-05-20 17:13:32 +08:00
51c3f0c62a [codex] harden recursive skill scan (#876)
* fix: recursive skill scan for nested sub-category directories

The Web UI skill scanner (scanSkillsDir) only checked one level deep:
skills/<category>/<subdir>/SKILL.md. Sub-category containers like
mlops/evaluation/ (which has DESCRIPTION.md + subdirs but no SKILL.md)
were skipped entirely, hiding all 12 nested skills under mlops.

Changes:
- scanSkillsDir: extract collectSkills() recursive helper that depth-first
  searches for SKILL.md at every level under a category directory.
  Directories without SKILL.md but with subdirectories are recursively
  descended into.
- listFiles handler: replace hardcoded join(category, skill) path with
  recursive findSkillDir() search, so nested skill file browsing works
  (e.g., mlops/evaluation/lm-evaluation-harness).

Fixes mlops category showing 1 skill instead of 13. All 20 other
categories verified with zero regression.

* fix: pA handler also needs recursive search for nested skill file content

The readFile_ (pA) handler was constructing direct paths like
skills/category/skill/... which fails for nested sub-category
skills (mlops/evaluation/lm-evaluation-harness). Added fallback
recursive search when direct path returns 404.

Also fixed listFiles (sA) handler to use recursive search for
the same reason - previous fix to dist was not in source TS.

Verified:
- lm-evaluation-harness SKILL.md content: 200 
- vllm SKILL.md: 200 
- huggingface-hub (non-nested): 200 
- reference file in nested skill: 200 

* fix: pA handler also needs recursive search for nested skill file content

The readFile_ (pA) handler was constructing direct paths like
skills/category/skill/... which fails for nested sub-category
skills (mlops/evaluation/lm-evaluation-harness). Added fallback
recursive search when direct path returns 404.

Also fixed listFiles (sA) handler to use recursive search for
the same reason - previous fix to dist was not in source TS.

Verified:
- lm-evaluation-harness SKILL.md content: 200 
- vllm SKILL.md: 200 
- huggingface-hub (non-nested): 200 
- reference file in nested skill: 200 

* harden recursive skill lookup

---------

Co-authored-by: gs <gs@localhost>
Co-authored-by: gutanulaif <gutanulaifa@gmail.com>
2026-05-20 15:38:56 +08:00
ekko 866d243978 update 0.5.31 changelog (#874) 2026-05-20 15:34:09 +08:00
ekko 204058502e add apikey image generation media endpoint (#872) 2026-05-20 15:10:30 +08:00
ekkoandCodex 201330652d fix: raise mobile session drawer overlay (#871)
Co-authored-by: Codex <codex@openai.com>
2026-05-20 15:06:12 +08:00
ekko c90eba226d [codex] add customizable profile avatars (#870)
* add customizable profile avatars

* keep profile avatar visible when sidebar collapses

* simplify collapsed profile avatar styling

* force managed gateway startup in docker

* limit gateway autostart to active profile

* restore all profile gateway autostart

* fix managed gateway runtime detection
2026-05-20 14:15:01 +08:00
ekko 663afb61ff Improve profile runtime controls (#868)
* Improve profile runtime controls

* Restore profile selector test id

* Update profile switch e2e flow
2026-05-20 12:59:34 +08:00
ekko 210b0ee6c2 Harden bridge broker restart (#862) 2026-05-20 10:02:15 +08:00
ekko 0547fd6b6a [codex] Harden context compression history handling (#848)
* Use token threshold for chat compression

* Add compression settings controls

* Use config for chat compression

* Cover protected messages in compression tests

* Remove message-count compression limit

* Harden compression window fallback

* Rebuild stale compression snapshots

* Harden stale compression snapshots

* Update changelog for compression hardening

* Prefer local history session details
2026-05-19 17:58:39 +08:00
ekko 84e343fc22 Add 0.5.30 changelog (#846) 2026-05-19 16:19:56 +08:00
ekkoandCodex 9a9416c99c Fix bridge history, profile models, and Windows gateway handling (#845)
* feat: support profile-aware group chat bridge flows

* feat: route cron jobs through hermes cli

* Fix group chat routing and isolate bridge tests

* Add Grok image-to-video media skill

* Default Grok videos to media directory

* Fix bridge profile fallback and cron repeat clearing

* Refine bridge chat and gateway platform handling

* Filter bridge tool-call text deltas

* Preserve structured bridge chat history

* Prepare beta release build artifacts

* Fix Windows run profile resolution

* Fix Windows path compatibility checks

* Fix profile-scoped model page display

* Hide Windows subprocess windows for jobs and updates

* Hide Windows file backend subprocess windows

* Avoid Windows gateway restart lock conflicts

* Treat Windows gateway lock as running on startup

* Force release Windows gateway lock on restart

* Tighten Windows gateway lock cleanup

* Update chat e2e source expectation

* Bump package version to 0.5.30

---------

Co-authored-by: Codex <codex@openai.com>
2026-05-19 16:09:59 +08:00
ekkoandchenxusheng d2cbce2f13 Adjust outline user item background (#836)
* feat:新增大纲功能

* Adjust outline user item background

---------

Co-authored-by: chenxusheng <chenxusheng@haizhi.com>
2026-05-19 08:25:01 +08:00
ekko bbfd818106 update zai models and sidebar divider (#819) 2026-05-17 20:47:52 +08:00
ekko aff3546677 fix: route fun codex through responses api (#815) 2026-05-17 16:17:32 +08:00
ekko ce5a9bb012 Harden env parsing and writes (#814) 2026-05-17 15:39:31 +08:00
ekko 6516d86dfc Limit run-time model list waiting (#812) 2026-05-17 12:51:23 +08:00
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 bcfc5053c4 Add 0.5.26 changelog (#809) 2026-05-17 10:09:25 +08:00
ekko 53f0301da4 Add Hermes Agent package fallback and xAI OAuth (#808) 2026-05-17 09:45:56 +08:00
ekkoandZhicheng Han 0c2bafc619 [codex] Add local tool trace toggle (#806)
* test: harden tool approval browser contract

* test: cover tool trace display edge cases

* test: cover resumed tool trace edge cases

* feat: hide tool traces by default

* Add local tool trace toggle

---------

Co-authored-by: Zhicheng Han <zhicheng.han@mathematik.uni-goettingen.de>
2026-05-17 09:01:59 +08:00
ekkoandCodex 569ddc28da fix(logs): keep loading state below filters (#802)
Co-authored-by: Codex <codex@openai.com>
2026-05-16 22:49:09 +08:00
ekkoandGaoZzr 840cb6cd9f fix: correct session reset mode options (#800)
* fix: correct session reset mode options

- Change 'hourly' to 'daily' to match gateway SessionResetPolicy
- Add 'none' option (officially supported in CLI setup wizard)
- Add 'modeDaily' and 'modeNone' i18n keys

* fix: add i18n keys for session reset mode fixes (en)

* fix: add i18n keys for session reset mode fixes (zh)

* fix: add i18n keys for session reset mode fixes (de)

* fix: add i18n keys for session reset mode fixes (es)

* fix: add i18n keys for session reset mode fixes (fr)

* fix: add i18n keys for session reset mode fixes (ja)

* fix: add i18n keys for session reset mode fixes (ko)

* fix: add i18n keys for session reset mode fixes (pt)

* fix zh-TW session reset labels

---------

Co-authored-by: GaoZzr <55678517+GaoZzr@users.noreply.github.com>
2026-05-16 21:18:59 +08:00
ekko 048a0ad87e fix mobile terminal drawer sizing (#799) 2026-05-16 21:01:00 +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
ekkoandCodex 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 217b721648 clear stale compression status on run start (#783) 2026-05-16 11:15:29 +08:00
ekko c5380c4ab5 filter empty assistant history (#781) 2026-05-16 11:01:33 +08:00
ekko 24e906998a support windows markdown media paths (#780) 2026-05-16 10:43:51 +08:00
ekko 61c10997fa clarify windows media path prompt (#779) 2026-05-16 10:12:18 +08:00
ekko cf9d0c6008 prepare 0.5.25 changelog (#778) 2026-05-16 09:40:25 +08:00
ekko 07257a8964 [codex] proxy provider model fetches (#777)
* proxy provider model fetches

* add provider model proxy e2e
2026-05-16 08:57:00 +08:00
ekko 3f8461d9eb suppress bridge CLI platform hint (#776) 2026-05-16 08:31:18 +08:00
ekko 8bb71b5592 fix tool approval flow (#773) 2026-05-16 00:11:51 +08:00
ekko 015c698993 replace claude guide with development guidelines (#767) 2026-05-15 19:30:12 +08:00
ekko e0bfa828cb make web ui state directory configurable (#764) 2026-05-15 17:30:27 +08:00
ekko fbb0236af4 Update docs and CLI upgrade notes (#760) 2026-05-15 16:13:51 +08:00
ekko 8196e49478 [codex] Add group chat room reset and clone (#756)
* Add group chat room reset and clone

* Clean npm cache before self update
2026-05-15 15:52:16 +08:00
ekko 94f1061734 align bridge multimodal handling (#755) 2026-05-15 14:47:29 +08:00
ekko 84e98cfb5e fix command compression token estimate (#751) 2026-05-15 14:10:49 +08:00
ekko 3d49f778fb align compression token estimates (#749) 2026-05-15 13:50:27 +08:00
ekko 2dbc3e1c10 chore: update changelog for 0.5.23 (#747) 2026-05-15 13:03:03 +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 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
ekkoandClaude Opus 4.7 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