Commit Graph

42 Commits

Author SHA1 Message Date
mo 5eb1b94138 feat(workflow): add orchestration v2 (#2073)
* chore: initialize upstream-based workflow orchestration v2 draft

* feat(workflow): validate declarative edge orchestration

* feat(workflow): evaluate edge conditions safely

* feat(workflow): support declarative condition operators

* feat(workflow): evaluate edge route decisions

* feat(workflow): skip unmatched success branches

* feat(workflow): route failed node outcomes

* feat(workflow): validate node join mode

* feat(workflow): support all and any joins

* feat(workflow): schedule nodes on completion

* feat(workflow): store append-only edge evidence

* feat(workflow): persist edge decisions fail closed

* feat(workflow): expose edge evidence in run history

* feat(workflow): validate bounded feedback edges

* feat(workflow): compile single-entry natural loops

* feat(workflow): validate laminar nested loops

* feat(workflow): fail closed during graph preflight

* feat(workflow): preflight reruns and freeze loops

* feat(workflow): identify loop execution instances

* feat(workflow): execute bounded top-level loops

* feat(workflow): audit conditional loop exits

* feat(workflow): record loop iteration limits

* feat(workflow): identify edge iteration evidence

* feat(workflow): audit loop forward edges

* feat(workflow): persist loop epoch evidence

* feat(workflow): expose loop epochs in run history

* feat(workflow): record failed loop epochs

* feat(workflow): audit canceled loop epochs

* feat(workflow): audit loop agent timeouts

* feat(workflow): gate loop executions on approval

* feat(workflow): enforce run execution budget

* feat(workflow): enforce loop run deadline

* feat(workflow): bound loop approval waits

* feat(workflow): enforce DAG run deadline

* feat(workflow): enforce rerun deadline

* feat(workflow): guard rerun execution budget

* feat(workflow): run one downstream node after loop exit

* feat(workflow): dispatch persisted loop exit targets

* feat(workflow): honor conditional routing inside loop bodies

* feat(workflow): continue through post-loop DAGs

* feat(workflow): route post-loop failures

* feat(workflow): add secure definition portability

* feat(workflow): expose portability client API

* feat(workflow): add import and export controls

* feat(workflow): execute disjoint and nested loops

* feat(workflow): edit edge orchestration from canvas

* feat(workflow): show execution evidence in run history

* feat(workflow): edit node join policy

* feat(workflow): create connected nodes atomically

* test(workflow): cover orchestration canvas in browser

* refactor(workflow): unify laminar loop runtime

* fix(workflow): bind approvals to executions

* test(workflow): verify canvas interactions in browser

* feat(workflow): enforce execution identity policies

* feat(workflow): harden lifecycle recovery

* refactor(workflow): share fresh and rerun schedulers

* feat(workflow): harden orchestration evidence and portability

* fix(workflow): close final acceptance and canvas gaps

* test(workflow): add disposable live acceptance

* fix(workflow): migrate legacy execution evidence

* refactor(workflow): use icons for import and export

* refactor(workflow): use ctrl-z for canvas undo

* refactor(workflow): restore profile-default agent context

* fix(workflow): strip legacy policy from edge node copies

* feat(workflow): guide ordinary users through routing

* refactor(workflow): move field help into tooltips

* feat(workflow): validate typed condition values

* feat(chat): align maximum reasoning effort

* test(workflow): isolate manager SQLite runtime

Keep the WorkflowManager suite on a disposable SQLite directory so coverage workers cannot race the shared test-runtime database. Production and development database paths are unchanged.

* fix(workflow): keep Hermes API mode profile-owned

* fix(workflow): make imports portable across environments

Strip source runtime bindings from exports and legacy imports while keeping capability and skill checks at execution time. Address runtime subscription, feedback routing, approval cancellation, durable Session evidence, SQLite index migration, and compact evidence rendering.

* fix(bridge): reject unsupported reasoning effort

Keep Hermes API mode profile-owned while restoring explicit failure when the runtime cannot parse or apply a requested reasoning effort.

* test(workflow): use writable Session fixture workspace

* fix(workflow): align import export icon semantics

* feat(workflow): make execution details user friendly

* fix workflow replay and presentation regressions

---------

Co-authored-by: Lux <wangw9475@agent.qq.com>
Co-authored-by: ekko <fqsy1416@gmail.com>
2026-07-15 08:52:17 +08:00
ekko f0399f4c11 feat: add durable Ekko Agent memory (#2057)
* add Ekko Agent chained memory

* harden Ekko agent provider integrations

* add model-driven Ekko memory review

* fix: harden Ekko memory summaries
2026-07-13 12:44:39 +08:00
ekko 8e8c6a3f4b add ESP32-C3 v2 firmware (#2044) 2026-07-12 08:47:35 +08:00
Zhicheng Han 904130de32 [codex] 拆分 Group Chat 房间工作区绑定 (#1980)
* Add group chat room workspace binding

* fix group chat workspace modal width

---------

Co-authored-by: ekko <fqsy1416@gmail.com>
2026-07-08 09:00:51 +08:00
牧濑红莉栖(BOT) 0bfa9d2ed4 fix(coding-agent): 持久化会话 API 模式 (#1944)
* fix(coding-agent): persist API mode per session

* docs(chat-chain): document coding agent API mode persistence

---------

Co-authored-by: x1051445024 <你的GitHub注册邮箱>
2026-07-06 08:17:49 +08:00
ekko 023d24e64b isolate esp32 c3 v1 firmware (#1943) 2026-07-05 16:36:03 +08:00
ekko f2677aef9c [codex] Add Journey learning graph view (#1912)
* Add Journey learning graph view

* Localize Journey labels
2026-07-03 12:19:58 +08:00
ekko 6f6f0ad0bd bump Hermes Agent runtime to 0.18.0 (#1888) 2026-07-02 08:21:59 +08:00
ekko 96c6406daf add mcu audio prompts and ota safeguards (#1849) 2026-06-30 14:31:05 +08:00
ekko 54b885ba4d fix desktop browser runtime resolution (#1765) 2026-06-24 17:08:08 +08:00
ekko 49979e23e7 Pin Windows runtime Chrome version (#1764) 2026-06-24 16:35:37 +08:00
ekko 640e644942 guard desktop runtime patch integrity (#1761) 2026-06-24 15:03:50 +08:00
ekko ab575e7bc4 fix browser runtime output helper patch (#1760) 2026-06-24 14:33:30 +08:00
ekko 7f3ef127ec package esp32 firmware artifact (#1744) 2026-06-23 10:50:56 +08:00
ekko 8a9b7b6c5d [codex] fix mcu active device login (#1668)
* fix mcu active device login

* add mcu relay voice support
2026-06-19 12:42:25 +08:00
ekko 83e37bac02 feat: add outbound relay and MCU login flow (#1580)
* add global agent chat relay

* add model run MCP auth

* avoid codex prompt inflation

* guide codex to use hermes lan tools

* truncate long tool call previews

* write codex MCP env inline

* log codex developer prompt

* remove codex prompt debug logging

* fix codex chat tool history

* log codex chat proxy requests

* write codex proxy debug to server log

* log codex upstream tool requests

* expand codex mcp namespaces for custom providers

* remove codex proxy debug logging

* add hermes mcp openapi relay

* fix: improve mcp docs and chat run cleanup

* feat: add mcu relay login flow

* fix ci test expectations

* fix group chat deeplink e2e expectation

---------

Co-authored-by: Codex <codex@openai.com>
2026-06-16 09:16:26 +08:00
ekko 1bbcccd5d7 rename repository to hermes-studio (#1552) 2026-06-14 16:56:52 +08:00
ekko 3ab875998b [codex] Improve write gate and desktop startup UX (#1496)
* Split Hermes bridge Python modules

* Add Hermes write gate controls

* Adjust approval prompt width

* Improve write gate and desktop startup UX

* Fix bridge runtime patch sync

---------

Co-authored-by: Codex <codex@openai.com>
2026-06-11 20:21:13 +08:00
ekko 9e63c29e8a [codex] fix desktop update shutdown handling (#1462)
* fix desktop update shutdown handling

* use cloudflare latest update feed

* add github fallback for desktop update feed
2026-06-10 09:50:28 +08:00
ekko e74e4560f4 adjust release latest workflow policy (#1457) 2026-06-10 08:26:08 +08:00
ekko 954bccedb8 Revert "sync desktop artifacts to r2 (#1362)" (#1363)
This reverts commit 5d9782eafe.
2026-06-06 14:18:06 +08:00
ekko 5d9782eafe sync desktop artifacts to r2 (#1362) 2026-06-06 13:41:09 +08:00
ekko 6af2a0e204 split chat chain change logs into fragments 2026-06-05 10:47:00 +08:00
ekko 594bb2950c fix mac update manifest repair flow (#1305) 2026-06-04 09:04:46 +08:00
ekko b1bcec177a document chat chain harness (#1274) 2026-06-03 13:19:06 +08:00
sir1st 00ea452310 Codex/pr 1217 (#1226)
* bundle node and windows git runtimes

* split desktop runtime into release package

* fix desktop runtime packaging ci

* embed desktop runtime release tag

* show desktop runtime download progress

* fix desktop runtime release handling

* refactor desktop runtime version config

* fix desktop package license

---------

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
Co-authored-by: ekko <fqsy1416@gmail.com>
2026-06-02 08:55:17 +08:00
ekko c27a12f56c [codex] fix Windows desktop browser packaging (#1219)
* fix windows hermes home fallback

* bundle Hermes desktop browser runtime

* bundle desktop channel dependencies

* avoid matrix e2ee build dependency

* fix windows npm shim execution

* fix bundled agent-browser chrome packaging

* fix agent-browser chrome fallback copy

* fix windows agent-browser home lookup

* copy agent-browser chrome after install

* fix browser output decoding on windows

---------

Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-06-01 21:35:26 +08:00
sir1st dcbf601e35 fix linux desktop packaging paths (#1162)
Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 20:14:24 +08:00
sir1st 46bd7d0420 relax desktop release artifact harness check (#1161)
Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 19:49:08 +08:00
sir1st 6da5cd605a Add repository harness for coding agents (#1157)
Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
2026-05-30 18:57:22 +08:00
ekko e988ce62f2 remove setup script docs (#1140) 2026-05-30 08:49:15 +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 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
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 99f9dcb2fe feat: add automatic OpenAPI documentation generation (#445)
* feat: add automatic OpenAPI documentation generation

Added script to auto-generate OpenAPI spec from existing Koa routes:
- Scans route files and extracts endpoint definitions
- Generates proper OpenAPI 3.0 specification
- No code changes or decorators required
- Preserves existing code structure

Usage: npm run openapi:generate

Generated 51 endpoints across 13 tags.

* feat: enhance OpenAPI generator with all endpoints

Enhanced the auto-generation script to capture all API endpoints:
- Added support for inline function handlers
- Captured group-chat endpoints
- Added proxy endpoints for upstream API forwarding
- Added WebSocket terminal endpoint
- Added SSE chat streaming endpoint
- Increased coverage from 51 to 94 endpoints
- Added 24 comprehensive tags for all features

Generated OpenAPI spec now includes:
- All HTTP REST endpoints
- Proxy wildcards for /api/hermes/* and /v1/*
- WebSocket terminal connection
- Server-Sent Events for chat streaming
2026-05-04 20:30:04 +08:00
ekko 0051092216 fix: improve model list layout in ProviderCard (#311)
* fix: add LongCat provider, OpenRouter free models, model list in cards

- Add longcat to PROVIDER_ENV_MAP and PROVIDER_PRESETS
- Add freeOnly param to fetchProviderModels, use for OpenRouter
- Show model list in ProviderCard with count
- Fix qq.ts import.meta.url → __dirname for CJS compat
- Add zh/en i18n keys for model count display

* fix: improve model list layout in ProviderCard

- Change models-list from max-height to fixed height (100px)
- Add align-content: flex-start to prevent vertical spacing
- Optimize gap to 4px vertical, 6px horizontal
- Fix model-tag height to 20px to prevent background stretching
- Use inline-flex for better tag alignment

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

---------

Co-authored-by: idle888 <546806917@qq.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 20:48:21 +08:00
ekko ba72264542 feat: group chat session lifecycle, typing recovery, mention highlighting (#186)
* feat: restore group chat system with Socket.IO and SQLite persistence

- GroupChatServer: Socket.IO server with room management, message history, typing indicators
- SQLite storage for rooms, messages, and agent configuration
- AgentClients: manages AI agent connections via socket.io-client, forwards @mentions to Hermes gateway
- REST API: room CRUD, agent management, invite codes
- Agent auto-restoration on server restart
- Tests for all REST endpoints

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

* docs: add context-engine design document for group chat compression

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

* fix: handle special-character session search

* fix: keep unicode dotted session search on quoted FTS path

* feat: add context engine and group chat frontend UI

- Context engine: three-zone compression (head/tail/summary) with LLM
  summarization, incremental updates, TTL cache, and graceful degradation
- Frontend: group chat page with Socket.IO client, room sidebar, message
  list, agent/member display, create/join-by-code modals
- Integration: wire context engine into agent-clients before /v1/runs
- Refactor ChatStorage to use global DB (getDb/ensureTable) with gc_ prefix
- Add i18n keys for group chat to all 8 locales
- Add sidebar nav entry and router for group chat page

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

* fix: remove leftover main branch code from merge conflict resolution

The `isNumericQuery`, `hasUnsafeChars`, and `runLikeContentSearch` functions
no longer exist — they were replaced by HEAD's `shouldUseLiteralContentSearch`
and `runLiteralContentSearch`. This dead code block caused a TypeScript
compile error after the merge.

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

* fix: install missing socket.io dep and type ack params

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

* fix: enable WebSocket proxy and fix socket.io transport for group chat

- Add ws: true to Vite proxy config so WebSocket upgrade requests
  are forwarded to the backend
- Allow both polling and websocket transports on server and client
  (polling as fallback when WebSocket upgrade fails through proxy)

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

* fix: separate socket.io path from REST routes for group chat

socket.io was mounted at /api/hermes/group-chat which intercepted all
REST requests to /api/hermes/group-chat/rooms etc, returning
"Transport unknown". Changed socket.io path to /api/hermes/group-chat/ws
to avoid conflicts.

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

* feat: improve group chat UI, agent management, and socket.io reliability

- Redesign GroupChatPanel with Naive UI, stacked agent avatars, and popover management
- Match GroupChatInput style with single chat input, add IME composition handling
- Add agent add/remove per room with profile selection and duplicate prevention
- Use @multiavatar for SVG avatar generation with caching
- Decouple joinRoom from socket.io, use REST API for data loading
- Switch socket.io to default path with /group-chat namespace to avoid proxy conflicts
- Restore agent connections after server is listening
- Add getRoomDetail REST endpoint and duplicate agent prevention (409)

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

* feat: server-side @mention routing with context compression status and queue

- Move @mention detection from agent socket listeners to server-side processMentions()
- Add per-room processing lock to block mention dispatch during compression
- Queue mentions during processing, drain only the latest when ready
- Emit context_status events (compressing/replying/ready) to room via Socket.IO
- Frontend displays compression status indicator above input
- Token-based compression trigger (100k threshold) with CJK-aware estimation
- Fix compressor type errors (countTokens parameter type)

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

* feat: improve group chat profile handling and session sync

Refine group chat room/session behavior with per-room compression controls, sidebar updates, and better stale session cleanup so multi-profile group chat state stays consistent.

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

* feat: group chat improvements — session lifecycle, typing recovery, mention highlighting

- Fix cross-profile session deletion with deferred delete queue
- Move saveSessionProfile to after gateway response confirmation
- Replace all console.log with logger in group-chat modules
- Add server-side typing/context_status state tracking for room rejoin
- Fix @ mention popup position to follow cursor
- Add @ mention highlighting (blue) in chat message content
- Fix mention regex to match all occurrences after HTML tags
- Enable esbuild minify and treeShaking
- Move @multiavatar/multiavatar to devDependencies
- Add i18n keys for group chat features
- Update tests for new functionality

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

* chore: bump version to 0.4.5 and move @multiavatar to devDependencies

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Zhicheng Han <zhicheng.han@mathematik.uni-goettingen.de>
2026-04-24 20:41:14 +08:00
ekko 477af66232 fix: auth bypass, SPA serving, and provider improvements (#97)
* feat(chat): polish syntax highlighting and tool payload rendering (#94)

* [verified] feat(chat): polish syntax highlighting and tool payload rendering

* [verified] fix(chat): tighten large tool payload rendering

* docs: update data volume path in Docker docs

Align documentation with docker-compose.yml change:
hermes-web-ui-data -> hermes-web-ui, /app/dist/data -> /root/.hermes-web-ui

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

* refactor: bundle server build and restructure service modules

- Add build-server.mjs script for standalone server compilation
- Add logger service with structured output
- Restructure auth, gateway-manager, hermes-cli, hermes services
- Update docker-compose volume mount path
- Update tsconfig and entry point for bundled server

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

* refactor: separate controllers from routes and centralize route registration

- Extract business logic from route handlers into controllers/
- Add centralized route registry in routes/index.ts with public/auth/protected layers
- Replace global auth whitelist with sequential middleware registration
- Extract shared helpers to services/config-helpers.ts
- Allow custom provider name to be user-editable in ProviderFormModal
- Deduplicate custom providers by poolKey instead of base_url in getAvailable

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

* fix: auth bypass via path case, SPA serving, and provider improvements

- Fix auth bypass: path case-insensitive check for /api, /v1, /upload
- Fix SPA returning 401: skip auth for non-API paths (static files)
- Fix profile switch: use local loading state instead of shared store ref
- Auto-append /v1 to base_url when fetching models (frontend + backend)
- Guard .env writing to built-in providers only
- Add builtin field to provider presets, enable base_url input in form
- Print auth token to console on startup (pino only writes to file)

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

---------

Co-authored-by: Zhicheng Han <43314240+hanzckernel@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 12:35:48 +08:00
ekko 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
ekko 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
ekko 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
ekko 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