Files
lobe-chat/apps/cli
LiJian 47b6f3503a feat(hermes): implement hermes agent chain logic (#15189)
*  feat(hermes): implement hermes agent chain logic

Replace the broken HTTP gateway approach with direct CLI spawn (matching
openclaw's architecture). Hermes chat -q --quiet outputs session_id +
response to stdout — we capture it and relay via sendAutoNotify/sendDoneSignal,
no buildNotifyProtocol injection needed.

- heteroTask (CLI): spawn hermes chat -q --quiet [--resume <id>], capture
  stdout, persist session_id to ~/.lobehub/hermes-sessions.json per topicId,
  kill concurrent same-topic tasks by PID before spawning
- GatewayConnectionCtr (desktop): mirror CLI logic, store hermes session IDs
  in-memory hermesSessionMap, remove unused HTTP gateway helpers
- getAgentProfile: implement hermes profile fetch via `hermes profile list`
  + SOUL.md description parsing
- checkPlatformCapability: fix hermes check to use `hermes --version`
  instead of non-existent HTTP /health endpoint

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

* 🐛 fix(hermes): fix CodeQL incomplete sanitization and tilde path expansion

- readHermesSoulDescription: loop comment-stripping regex until stable to
  prevent residual `<!--` from malformed/nested sequences (CodeQL High)
- getHermesProfilePath: expand leading `~` via os.homedir() before fs.join
  in case hermes profile show returns a tilde-prefixed path (CLI + desktop)

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

* 🐛 fix(hermes): strip residual angle brackets to satisfy CodeQL sanitization check

After stripping HTML comments, add .replaceAll(/[<>]/g, '') inside the
loop to ensure no partial `<!--` delimiters survive, resolving the CodeQL
'Incomplete multi-character sanitization' High warning.

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

*  feat(platform-agent): enable Hermes + add Amp/OpenCode as coming-soon platforms

- Enable Hermes in CreatePlatformAgent (remove from COMING_SOON_PLATFORMS)
- Add Amp and OpenCode to REMOTE_HETEROGENEOUS_AGENT_CONFIGS (coming-soon disabled)
- Extend RemoteHeterogeneousAgentType and HeterogeneousProviderConfig.type
- Use isRemoteHeterogeneousType() in HeterogeneousAgentStatusCard to future-proof
  remote agent detection guard (removes hardcoded openclaw/hermes check)
- Export isRemoteHeterogeneousType from heterogeneous-agents/client entrypoint
- Broaden agentType to string in device-gateway-client (AgentRunRequestMessage,
  dispatchAgentRun) so new remote types pass without package updates
- Add i18n keys for amp/opencode platform descriptions (en-US, zh-CN)

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

* 🐛 fix(test): add isRemoteHeterogeneousType to heterogeneous-agents/client mock

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 14:09:21 +08:00
..
2026-05-01 14:45:28 +08:00
2026-04-16 18:39:18 +08:00

@lobehub/cli

LobeHub command-line interface.

Local Development

Task Command
Run in dev mode bun run dev -- <command>
Build the CLI bun run build
Link lh/lobe/lobehub into your shell bun run cli:link
Remove the global link bun run cli:unlink
  • bun run build only generates dist/index.js.
  • To make lh available in your shell, run bun run cli:link.
  • After linking, if your shell still cannot find lh, run rehash in zsh.

Custom Server URL

By default the CLI connects to https://app.lobehub.com. To point it at a different server (e.g. a local instance):

Method Command Persistence
Environment variable LOBEHUB_SERVER=http://localhost:4000 bun run dev -- <command> Current command only
Login flag lh login --server http://localhost:4000 Saved to ~/.lobehub/settings.json

Priority: LOBEHUB_SERVER env var > settings.json > default official URL.

Shell Completion

Install completion for a linked CLI

Shell Command
zsh source <(lh completion zsh)
bash source <(lh completion bash)

Use completion during local development

Shell Command
zsh source <(bun src/index.ts completion zsh)
bash source <(bun src/index.ts completion bash)
  • Completion is context-aware. For example, lh agent <Tab> shows agent subcommands instead of top-level commands.
  • If you update completion logic locally, re-run the corresponding source <(...) command to reload it in the current shell session.
  • Completion only registers shell functions. It does not install the lh binary by itself.

Quick Check

which lh
lh --help
lh agent <TAB>