NousResearch/hermes-agent
LINE adapter inbound image message type mapping
Cluster 38235 · gateway. Data as of
Nothing open on GitHub. Fix merged in #39485 on 5 Jun 2026. Check it covers your case.
The short answer
0open issues
0open PRs
3items grouped
- Known?
- Yes. 3 related items grouped here, 1 issue already closed.
- Fix event
- A fix was merged to main in PR #39485. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
unresolved. That is separate from the fix event. - Still open
- Nothing open on GitHub.
These issues and pull requests concern a bug where the LINE adapter incorrectly parses or classifies inbound image messages, and the associated fixes to map LINE message types to the correct internal MessageType.
Open issues0
Open PRs0
Fixes on record
-
#39485 fix(line): map inbound message types to the correct MessageType
files:
plugins/platforms/line/adapter.py,tests/gateway/test_line_plugin.pyShow the diff
-
plugins/platforms/line/adapter.py@@ -133,6 +133,21 @@ LINE_IMAGE_MAX_BYTES = 10 * 1024 * 1024 # 10 MB per LINE docs LINE_AV_MAX_BYTES = 200 * 1024 * 1024 # 200 MB for voice/video +# Map LINE webhook message types to the normalized MessageType the gateway +# routes on. LINE has no separate "voice" type — audio messages are recorded +# voice clips, so they map to VOICE (which the gateway sends through STT), +# mirroring how Telegram/WhatsApp classify voice notes. Anything unknown +# falls back to TEXT. +_LINE_MESSAGE_TYPES = { + "text": MessageType.TEXT, + "image": MessageType.PHOTO, + "video": MessageType.VIDEO, + "audio": MessageType.VOICE, + "file": MessageType.DOCUMENT, + "location": MessageType.LOCATION, + "sticker": MessageType.STICKER, +} + # A 1×1 transparent PNG used as fallback video preview thumbnail when no # explicit preview is supplied — LINE requires ``previewImageUrl`` for # video messages. Sourced from the Python stdlib (no Pillow dependency). @@ -968,7 +983,7 @@ async def _handle_message_event(self, event: Dict[str, Any]) -> None: event_obj = MessageEvent( text=text, - message_type=MessageType.TEXT if msg_type == "text" else MessageType.IMAGE, + message_type=_LINE_MESSAGE_TYPES.get(msg_type, MessageType.TEXT), source=source_obj, raw_message=event, message_id=message_id, -
tests/gateway/test_line_plugin.py@@ -641,3 +641,36 @@ def test_get_chat_info_infers_type_from_prefix(self, monkeypatch): assert asyncio.run(ad.get_chat_info("U123"))["type"] == "dm" assert asyncio.run(ad.get_chat_info("C123"))["type"] == "group" assert asyncio.run(ad.get_chat_info("R123"))["type"] == "channel" + + +# --------------------------------------------------------------------------- +# 9. Inbound message-type classification +# --------------------------------------------------------------------------- + +class TestMessageTypeMapping: + """LINE webhook message types must map to the right normalized + MessageType so the gateway routes media correctly (e.g. voice → STT, + files → document handling). Regression guard for the old code that + referenced the non-existent ``MessageType.IMAGE`` and collapsed every + non-text message onto a single type.""" + + def test_image_event_not_attributeerror_regression(self): + # The bug: MessageType.IMAGE doesn't exist on the enum. + MessageType = _line.MessageType + assert not hasattr(MessageType, "IMAGE") + + def test_every_line_type_maps_to_correct_enum(self): + MessageType = _line.MessageType + mapping = _line._LINE_MESSAGE_TYPES + assert mapping["text"] == MessageType.TEXT + assert mapping["image"] == MessageType.PHOTO + assert mapping["video"] == MessageType.VIDEO + # LINE has no separate voice type — audio clips are voice notes. + assert mapping["audio"] == MessageType.VOICE + assert mapping["file"] == MessageType.DOCUMENT + assert mapping["location"] == MessageType.LOCATION + assert mapping["sticker"] == MessageType.STICKER + + def test_unknown_type_falls_back_to_text(self): + MessageType = _line.MessageType + assert _line._LINE_MESSAGE_TYPES.get("flex", MessageType.TEXT) == MessageType.TEXT
-
1 PR closed without merging
From the close comments: merged via another change 1
-
#38528 fix(line): classify image messages as photos · merged via another change →
7309f3b,#39485
Closed issues · 1
- Closed#38235[Bug]: LINE adapter can't parse image messages
How this cluster was grouped
-
Link evidence (
structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference. -
Pairwise link density
0.67: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the LabAt a glance
- Subsystem
- gateway
- Merged PRs
- #39485
- Closed issues
- 1
- Attempts
- 1 PR closed without merging
- Fix link checked
- 5 Jun 2026