Skip to content
View Lipa-1's full-sized avatar

Block or report Lipa-1

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please donโ€™t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this userโ€™s behavior. Learn more about reporting abuse.

Report abuse
Lipa-1/README.md

Hermes Agent WebSocket ๅนณๅฐ้€‚้…ๅ™จ - ๆžถๆž„ไธŽๅฎž็Žฐๆ–‡ๆกฃ

็›ฎๅฝ•

  1. ้กน็›ฎๆฆ‚่ฟฐ
  2. ๆžถๆž„่ฎพ่ฎก2.1 ๆ•ดไฝ“ๆžถๆž„2.2 ็ป„ไปถๅ…ณ็ณป
  3. ๆ–ฐๅขžๅŠŸ่ƒฝ
  4. ๅฎž็Žฐ็ป†่Š‚4.1 WebSocket ้€‚้…ๅ™จๅฎž็Žฐ4.2 ้…็ฝฎ็ณป็ปŸ้›†ๆˆ4.3 ็ฝ‘ๅ…ณ้›†ๆˆ
  5. ๆต‹่ฏ•้ชŒ่ฏ
  6. ไฝฟ็”จๆŒ‡ๅ—
  7. ๆ–‡ไปถๅ˜ๆ›ดๆธ…ๅ•

1. ้กน็›ฎๆฆ‚่ฟฐ

1.1 ่ƒŒๆ™ฏ

ๆœฌ้กน็›ฎๅฐ† WebSocket ไปฃ็†ๅŠŸ่ƒฝ้›†ๆˆๅˆฐ Hermes Agent Gateway ไธญ๏ผŒๅ…่ฎธ Web ๅฎขๆˆท็ซฏ๏ผˆๅฆ‚ๆต่งˆๅ™จใ€่‡ชๅฎšไน‰ๅบ”็”จ๏ผ‰้€š่ฟ‡ WebSocket ๅ่ฎฎไธŽ Hermes Agent ่ฟ›่กŒๅฎžๆ—ถไบคไบ’ใ€‚

1.2 ็›ฎๆ ‡

  • ๆไพ›ๅŸบไบŽ WebSocket ็š„ๅฎžๆ—ถๆถˆๆฏ้€š้“
  • ๆ”ฏๆŒ token ่ฎค่ฏๆœบๅˆถ
  • ้›†ๆˆๅˆฐ็Žฐๆœ‰็š„ Hermes Gateway ๅนณๅฐ้€‚้…ๅ™จ็ณป็ปŸ
  • ๆ”ฏๆŒ่ทจๅนณๅฐๆถˆๆฏ่ทฏ็”ฑ

1.3 ๆ–นๆกˆ้€‰ๆ‹ฉ

้‡‡็”จ ๆ–นๆกˆ3๏ผš้›†ๆˆๅˆฐ Hermes Gateway๏ผŒๅฐ† WebSocket ไฝœไธบไธ€ไธชๆ–ฐ็š„ๅนณๅฐ้€‚้…ๅ™จๅฎž็Žฐใ€‚


2. ๆžถๆž„่ฎพ่ฎก

2.1 ๆ•ดไฝ“ๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Hermes Agent Gateway                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚  Platform    โ”‚    โ”‚  Platform    โ”‚    โ”‚   WebSocket         โ”‚  โ”‚
โ”‚  โ”‚  Adapters    โ”‚    โ”‚  Adapters    โ”‚    โ”‚   Platform Adapter   โ”‚  โ”‚
โ”‚  โ”‚  (Telegram,  โ”‚    โ”‚  (Discord,   โ”‚    โ”‚                      โ”‚  โ”‚
โ”‚  โ”‚   Slack,     โ”‚    โ”‚   WhatsApp,  โ”‚    โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚
โ”‚  โ”‚   ...)       โ”‚    โ”‚   ...)       โ”‚    โ”‚  โ”‚ WebSocket       โ”‚ โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚  โ”‚   Server        โ”‚ โ”‚  โ”‚
โ”‚         โ”‚                   โ”‚             โ”‚  โ”‚  (aiohttp)     โ”‚ โ”‚  โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”ค                 โ”‚ โ”‚  โ”‚
โ”‚                                           โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚  โ”‚
โ”‚                                           โ”‚  โ”‚  โ”‚ Client     โ”‚ โ”‚ โ”‚  โ”‚
โ”‚                                           โ”‚  โ”‚  โ”‚ Manager    โ”‚ โ”‚ โ”‚  โ”‚
โ”‚                                           โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚  โ”‚
โ”‚                                           โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚
โ”‚                                           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                              โ”‚                                     โ”‚
โ”‚                              โ–ผ                                     โ”‚
โ”‚                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                              โ”‚
โ”‚                   โ”‚  Message Router โ”‚                              โ”‚
โ”‚                   โ”‚  (็ปŸไธ€ๆถˆๆฏ่ทฏ็”ฑ)   โ”‚                              โ”‚
โ”‚                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                              โ”‚
โ”‚                            โ–ผ                                       โ”‚
โ”‚                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                              โ”‚
โ”‚                   โ”‚  Session Store  โ”‚                              โ”‚
โ”‚                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Web Clients                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”‚
โ”‚  โ”‚  Browser     โ”‚  โ”‚  Custom App  โ”‚  โ”‚  IoT Device  โ”‚             โ”‚
โ”‚  โ”‚  WebSocket   โ”‚  โ”‚  WebSocket   โ”‚  โ”‚  WebSocket   โ”‚             โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.2 ็ป„ไปถๅ…ณ็ณป

็ป„ไปถ ่Œ่ดฃ ็Šถๆ€
WebSocketAdapter ๅนณๅฐ้€‚้…ๅ™จไธป็ฑป๏ผŒ็ฎก็† WebSocket ๆœๅŠกๅ™จ็”Ÿๅ‘ฝๅ‘จๆœŸ ๆ–ฐๅขž
WebSocketClient ๅฎขๆˆท็ซฏ่ฟžๆŽฅๅฐ่ฃ…๏ผŒๅค„็†ๅ•ไธช่ฟžๆŽฅ็š„็Šถๆ€็ฎก็† ๆ–ฐๅขž
GatewayRunner ็ฝ‘ๅ…ณ่ฟ่กŒๅ™จ๏ผŒๅ่ฐƒๆ‰€ๆœ‰ๅนณๅฐ้€‚้…ๅ™จ ไฟฎๆ”น
GatewayConfig ็ฝ‘ๅ…ณ้…็ฝฎ็ณป็ปŸ๏ผŒ็ฎก็†ๅนณๅฐ้…็ฝฎ ไฟฎๆ”น
Platform ๅนณๅฐๆžšไธพ๏ผŒๅฎšไน‰ๆ”ฏๆŒ็š„ๆถˆๆฏๅนณๅฐ ไฟฎๆ”น

2.3 ๆ•ฐๆฎๆต

ๅฎขๆˆท็ซฏๆถˆๆฏ โ†’ WebSocket Server โ†’ WebSocketAdapter โ†’ Message Router โ†’ Agent
                                                           โ”‚
Agent ๅ“ๅบ” โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. ๆ–ฐๅขžๅŠŸ่ƒฝ

3.1 ๆ ธๅฟƒๅŠŸ่ƒฝ

ๅŠŸ่ƒฝ ๆ่ฟฐ ๅฎž็Žฐๆ–นๅผ
WebSocket ๆœๅŠกๅ™จ ๅŸบไบŽ aiohttp ็š„ WebSocket ๆœๅŠก aiohttp.web.Application
Token ่ฎค่ฏ ่ฟžๆŽฅๆ—ถ็š„ token ้ชŒ่ฏๆœบๅˆถ URL ๅ‚ๆ•ฐ + ็Žฏๅขƒๅ˜้‡
ๅฎขๆˆท็ซฏ็ฎก็† ่ฟžๆŽฅ็Šถๆ€ใ€ๆถˆๆฏ่ฎกๆ•ฐใ€้€Ÿ็އ้™ๅˆถ WebSocketClient ็ฑป
ๆถˆๆฏ่ทฏ็”ฑ ้›†ๆˆๅˆฐ Gateway ๆถˆๆฏ่ทฏ็”ฑ็ณป็ปŸ BasePlatformAdapter ็ปงๆ‰ฟ
ๅฅๅบทๆฃ€ๆŸฅ HTTP ๅฅๅบทๆฃ€ๆŸฅ็ซฏ็‚น /health ่ทฏ็”ฑ
่ทจๅนณๅฐๆถˆๆฏๆŠ•้€’ ๆ”ฏๆŒๅ‘ๅ…ถไป–ๅนณๅฐๅ‘้€ๆถˆๆฏ gateway_runner ๅผ•็”จ

3.2 ๅฎ‰ๅ…จ็‰นๆ€ง

็‰นๆ€ง ๅฎž็Žฐ
Token ่ฎค่ฏ ๆ‰€ๆœ‰่ฟžๆŽฅๅฟ…้กปๆบๅธฆๆœ‰ๆ•ˆ token
้€Ÿ็އ้™ๅˆถ ๆฏๅˆ†้’Ÿๆœ€ๅคš 60 ๆกๆถˆๆฏ
่ฟžๆŽฅ้™ๅˆถ ๆœ€ๅคงๅนถๅ‘่ฟžๆŽฅๆ•ฐๅฏ้…็ฝฎ
่ฟžๆŽฅ่ถ…ๆ—ถ 5 ๅˆ†้’Ÿๆ— ๆดปๅŠจ่‡ชๅŠจๆ–ญๅผ€

3.3 ้…็ฝฎๅ‚ๆ•ฐ

ๅ‚ๆ•ฐ ็ฑปๅž‹ ้ป˜่ฎคๅ€ผ ่ฏดๆ˜Ž
host string 127.0.0.1 ็ป‘ๅฎšๅœฐๅ€
port int 8765 ็ป‘ๅฎš็ซฏๅฃ
token string - ่ฎค่ฏไปค็‰Œ
max_connections int 10 ๆœ€ๅคง่ฟžๆŽฅๆ•ฐ

4. ๅฎž็Žฐ็ป†่Š‚

4.1 WebSocket ้€‚้…ๅ™จๅฎž็Žฐ

ๆ–‡ไปถ: gateway/platforms/websocket.py

4.1.1 ็ฑป็ป“ๆž„

class WebSocketAdapter(BasePlatformAdapter):
    """WebSocket ๅนณๅฐ้€‚้…ๅ™จ"""

    def __init__(self, config: PlatformConfig):
        # ๅˆๅง‹ๅŒ–้…็ฝฎๅ‚ๆ•ฐ
        self._host = config.extra.get("host", "127.0.0.1")
        self._port = config.extra.get("port", 8765)
        self._token = config.extra.get("token", "") or os.getenv("WEBSOCKET_TOKEN", "")
        self._max_connections = config.extra.get("max_connections", 10)
        self._clients: Dict[str, WebSocketClient] = {}

4.1.2 ๆ ธๅฟƒๆ–นๆณ•

ๆ–นๆณ• ๅŠŸ่ƒฝ
connect() ๅฏๅŠจ WebSocket ๆœๅŠกๅ™จ
disconnect() ๅœๆญขๆœๅŠกๅ™จๅนถๆ–ญๅผ€ๆ‰€ๆœ‰่ฟžๆŽฅ
send() ๅ‘ๆŒ‡ๅฎšๅฎขๆˆท็ซฏๅ‘้€ๆถˆๆฏ
get_chat_info() ่Žทๅ–ไผš่ฏไฟกๆฏ
_handle_websocket() WebSocket ่ฟžๆŽฅๅค„็†ๅ็จ‹
_authenticate() Token ่ฎค่ฏ้ชŒ่ฏ

4.1.3 ๅฎขๆˆท็ซฏ็ฎก็†

class WebSocketClient:
    """ๅ•ไธช WebSocket ๅฎขๆˆท็ซฏ็š„็Šถๆ€็ฎก็†"""
    client_id: str          # ๅฎขๆˆท็ซฏๅ”ฏไธ€ๆ ‡่ฏ†
    connected_at: float     # ่ฟžๆŽฅๆ—ถ้—ด
    last_message_at: float  # ๆœ€ๅŽๆถˆๆฏๆ—ถ้—ด
    authenticated: bool     # ่ฎค่ฏ็Šถๆ€
    rate_counts: list       # ้€Ÿ็އ้™ๅˆถ่ฎกๆ•ฐๅ™จ

4.2 ้…็ฝฎ็ณป็ปŸ้›†ๆˆ

ๆ–‡ไปถ: gateway/config.py

4.2.1 Platform ๆžšไธพๆ‰ฉๅฑ•

class Platform(Enum):
    # ... ๅ…ถไป–ๅนณๅฐ ...
    WEBSOCKET = "websocket"  # ๆ–ฐๅขž

4.2.2 ่ฟžๆŽฅๆฃ€ๆŸฅๅ™จ

_PLATFORM_CONNECTED_CHECKERS = {
    # ... ๅ…ถไป–ๅนณๅฐ ...
    Platform.WEBSOCKET: lambda cfg: bool(
        cfg.token or cfg.extra.get("token") or os.getenv("WEBSOCKET_TOKEN")
    ),
}

4.3 ็ฝ‘ๅ…ณ้›†ๆˆ

ๆ–‡ไปถ: gateway/run.py

4.3.1 ้€‚้…ๅ™จๅทฅๅŽ‚

def _create_adapter(self, platform: Platform, config: Any) -> Optional[BasePlatformAdapter]:
    # ... ๅ…ถไป–ๅนณๅฐๅค„็† ...
    elif platform == Platform.WEBSOCKET:
        from gateway.platforms.websocket import WebSocketAdapter, check_websocket_requirements
        if not check_websocket_requirements():
            logger.warning("WebSocket: aiohttp not installed")
            return None
        adapter = WebSocketAdapter(config)
        adapter.gateway_runner = self  # ็”จไบŽ่ทจๅนณๅฐๆถˆๆฏๆŠ•้€’
        return adapter

4.3.2 ๆŽˆๆƒ้…็ฝฎ

# WebSocket ๅนณๅฐๅ…ๆŽˆๆƒ๏ผˆ้€š่ฟ‡ token ่‡ช่กŒ่ฎค่ฏ๏ผ‰
if source.platform in {Platform.HOMEASSISTANT, Platform.WEBHOOK, Platform.WEBSOCKET}:
    return True

# ๆŽˆๆƒๆ˜ ๅฐ„
platform_env_map = {
    # ... ๅ…ถไป–ๅนณๅฐ ...
    Platform.WEBSOCKET: "WEBSOCKET_ALLOWED_USERS",
}

5. ๆต‹่ฏ•้ชŒ่ฏ

5.1 ๆต‹่ฏ•่„šๆœฌ

ๆ–‡ไปถ: test_websocket.py

ๆต‹่ฏ•ๅŠŸ่ƒฝ

ๆต‹่ฏ•้กน ่ฏดๆ˜Ž
ๅฅๅบทๆฃ€ๆŸฅ ้ชŒ่ฏๆœๅŠกๅ™จๆ˜ฏๅฆๆญฃๅธธ่ฟ่กŒ
่ฟžๆŽฅๆต‹่ฏ• ๅปบ็ซ‹ WebSocket ่ฟžๆŽฅ
่ฎค่ฏๆต‹่ฏ• ้ชŒ่ฏ token ่ฎค่ฏ
ๆถˆๆฏๆต‹่ฏ• ๅ‘้€/ๆŽฅๆ”ถๆถˆๆฏ

ๆต‹่ฏ•็ป“ๆžœ

โœ… WebSocket server is healthy:
   Status: ok
   Platform: websocket
   Clients: 0/10

โœ… Connected successfully!
๐Ÿ“ก Connection confirmed
   Client ID: 1778810189796-1
   Authenticated: True

๐Ÿ“ Pong received
๐Ÿค– Hermes response received
โœ… Test completed!

5.2 ้ชŒ่ฏๆ–นๆณ•

# ๅฏๅŠจ็ฝ‘ๅ…ณ
$env:HERMES_HOME="C:\Users\a\Desktop\hermes-agent-main\hermes-agent-main\.hermes"
$env:WEBSOCKET_TOKEN="my-secret-token"
python -c "from hermes_cli.gateway import run_gateway; run_gateway(verbose=2)"

# ๆต‹่ฏ•่ฟžๆŽฅ
python test_websocket.py my-secret-token

6. ไฝฟ็”จๆŒ‡ๅ—

6.1 ้…็ฝฎๆ–นๅผ

้…็ฝฎๆ–‡ไปถ: .hermes/config.yaml

platforms:
  websocket:
    enabled: true
    extra:
      host: "127.0.0.1"
      port: 8765
      token: "my-secret-token"
      max_connections: 10

็Žฏๅขƒๅ˜้‡ๆ–นๅผ:

$env:WEBSOCKET_TOKEN="my-secret-token"

6.2 ่ฟžๆŽฅๆ–นๅผ

WebSocket URL:

ws://127.0.0.1:8765/ws?token=my-secret-token

ๅฅๅบทๆฃ€ๆŸฅ:

http://127.0.0.1:8765/health

6.3 ๆถˆๆฏๆ ผๅผ

ๅฎขๆˆท็ซฏๅ‘้€:

{
  "type": "message",
  "content": "Hello, Hermes!",
  "session_id": "optional-session-id"
}

ๆœๅŠก็ซฏๅ“ๅบ”:

{
  "type": "response",
  "content": "Hi there!",
  "session_id": "session-id"
}

7. ๆ–‡ไปถๅ˜ๆ›ดๆธ…ๅ•

7.1 ๆ–ฐๅขžๆ–‡ไปถ

ๆ–‡ไปถ ่ทฏๅพ„ ่ฏดๆ˜Ž
websocket.py gateway/platforms/websocket.py WebSocket ๅนณๅฐ้€‚้…ๅ™จ
test_websocket.py test_websocket.py ๆต‹่ฏ•่„šๆœฌ
config.yaml .hermes/config.yaml ๆต‹่ฏ•้…็ฝฎๆ–‡ไปถ
WEBSOCKET_PLATFORM_DOCUMENTATION.md WEBSOCKET_PLATFORM_DOCUMENTATION.md ๆœฌๆ–‡ๆกฃ

7.2 ไฟฎๆ”นๆ–‡ไปถ

ๆ–‡ไปถ ่ทฏๅพ„ ไฟฎๆ”นๅ†…ๅฎน
config.py gateway/config.py ๆทปๅŠ  Platform.WEBSOCKET ๆžšไธพ
config.py gateway/config.py ๆทปๅŠ ่ฟžๆŽฅๆฃ€ๆŸฅๅ™จ
run.py gateway/run.py ๆทปๅŠ ้€‚้…ๅ™จๅทฅๅŽ‚้€ป่พ‘
run.py gateway/run.py ๆทปๅŠ ๆŽˆๆƒ้…็ฝฎ

7.3 ๆŠ€ๆœฏๆ ˆ

ๆŠ€ๆœฏ ็‰ˆๆœฌ ็”จ้€”
Python 3.11+ ไธป่ฏญ่จ€
aiohttp ^3.9 WebSocket ๆœๅŠกๅ™จ
Hermes Agent - ๅŸบ็ก€ๆก†ๆžถ

้™„ๅฝ•๏ผšๅฏๅŠจๅ‘ฝไปคๆฑ‡ๆ€ป

# ๅผ€ๅ‘็ŽฏๅขƒๅฏๅŠจ
cd C:\Users\a\Desktop\hermes-agent-main\hermes-agent-main
$env:HERMES_HOME="C:\Users\a\Desktop\hermes-agent-main\hermes-agent-main\.hermes"
python -c "from hermes_cli.gateway import run_gateway; run_gateway(verbose=2)"

# ็”Ÿไบง็ŽฏๅขƒๅฏๅŠจ๏ผˆไฝฟ็”จ้ป˜่ฎค HERMES_HOME๏ผ‰
python -c "from hermes_cli.gateway import run_gateway; run_gateway()"

# ๆต‹่ฏ• WebSocket ่ฟžๆŽฅ
python test_websocket.py <your-token>

ๆ–‡ๆกฃ็‰ˆๆœฌ: v1.0ๅˆ›ๅปบๆ—ฅๆœŸ: 2026-05-15ไฝœ่€…: Hermes Agent Development Team

Popular repositories Loading

  1. Lipa-1 Lipa-1 Public

    Config files for my GitHub profile.

    Python

  2. reader reader Public

    Forked from jina-ai/reader

    Convert any URL to an LLM-friendly input with a simple prefix https://r.jina.ai/

    TypeScript