hermes - 💡(How to fix) Fix [Feature] Native Feishu CardKit Streaming: consolidate best-in-class implementations

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

There are two actively-maintained community implementations solving the Feishu CardKit streaming gap (Issue #16084). This issue proposes the Hermes team consider adopting the best features from both into core.

Error Message

  • Table overflow protection (auto-truncates >5 tables to avoid Feishu 11310 error)

Root Cause

There are two actively-maintained community implementations solving the Feishu CardKit streaming gap (Issue #16084). This issue proposes the Hermes team consider adopting the best features from both into core.

Fix Action

Fix / Workaround

1. baileyh8/hermes-feishu-streaming-card (V3.4.2)

  • Architecture: Sidecar-only (independent process, HTTP POST /events)
  • Strengths:
    • Process isolation — sidecar crash does not affect Hermes
    • Multi-profile in-process support (V3.3.0+)
    • Multi-bot routing by chat_id with fallback/default bot (V3.2.0+)
    • Fixes #31: concurrent PATCH sequence race causing content rollback/missing chars
    • Table overflow protection (auto-truncates >5 tables to avoid Feishu 11310 error)
    • DeepSeek `` tag filtering
  • Weaknesses:
    • No image resolution (markdown image → Feishu img_key)
    • No cron card delivery
    • No /stop interrupt handling
    • No multi-language (zh/en) support
    • Deployment complexity (clone + pip + config + sidecar start)

2. Aowen-Nower/hermes-lark-streaming (v0.9.0, fork of Cheerwhy/hermes-lark-streaming)

  • Architecture: In-process monkey patching (no sidecar, hermes plugins install one-liner)
  • Strengths:
    • Zero-deployment sidecar — pure plugin, survives Hermes restart
    • Markdown image → Feishu img_key automatic resolution & re-upload
    • Cron result card delivery (preserves Markdown rendering)
    • /stop interrupt: shows interrupted card, opens new session cleanly
    • Linear mode: auto-splits long cards at Feishu's 200-element limit
    • Multi-language (zh/en) auto-detection from Feishu client locale
    • threading.local() fallback for contextvars cross-thread propagation
  • Weaknesses:
    • No multi-profile / multi-bot support
    • No process isolation (in-process)
    • No concurrent PATCH handling
FeatureSource
CardKit v2.0 streaming APIBoth
Concurrent PATCH serialization + sequence lockingbaileyh8 #31 fix
Multi-profile supportbaileyh8 V3.3.0+
Multi-bot routing by chat_idbaileyh8 V3.2.0+
Markdown image → img_key resolutionAowen
Cron card deliveryAowen
/stop interrupt handlingAowen
Linear mode card splitting (200-element limit)Aowen
Multi-language zh/en auto-switchAowen
Table overflow protectionbaileyh8
DeepSeek `` tag filteringbaileyh8
RAW_BUFFERClick to expand / collapse

Summary

There are two actively-maintained community implementations solving the Feishu CardKit streaming gap (Issue #16084). This issue proposes the Hermes team consider adopting the best features from both into core.

Background

  • Issue #16084: im.v1.message.update falls back to "edited" badge, 50 QPM limit, full re-render — community consensus is CardKit streaming API is the right solution.
  • Issue #17852: Two projects have shipped E2E-tested CardKit streaming in production.

Comparing the two active implementations

1. baileyh8/hermes-feishu-streaming-card (V3.4.2)

  • Architecture: Sidecar-only (independent process, HTTP POST /events)
  • Strengths:
    • Process isolation — sidecar crash does not affect Hermes
    • Multi-profile in-process support (V3.3.0+)
    • Multi-bot routing by chat_id with fallback/default bot (V3.2.0+)
    • Fixes #31: concurrent PATCH sequence race causing content rollback/missing chars
    • Table overflow protection (auto-truncates >5 tables to avoid Feishu 11310 error)
    • DeepSeek `` tag filtering
  • Weaknesses:
    • No image resolution (markdown image → Feishu img_key)
    • No cron card delivery
    • No /stop interrupt handling
    • No multi-language (zh/en) support
    • Deployment complexity (clone + pip + config + sidecar start)

2. Aowen-Nower/hermes-lark-streaming (v0.9.0, fork of Cheerwhy/hermes-lark-streaming)

  • Architecture: In-process monkey patching (no sidecar, hermes plugins install one-liner)
  • Strengths:
    • Zero-deployment sidecar — pure plugin, survives Hermes restart
    • Markdown image → Feishu img_key automatic resolution & re-upload
    • Cron result card delivery (preserves Markdown rendering)
    • /stop interrupt: shows interrupted card, opens new session cleanly
    • Linear mode: auto-splits long cards at Feishu's 200-element limit
    • Multi-language (zh/en) auto-detection from Feishu client locale
    • threading.local() fallback for contextvars cross-thread propagation
  • Weaknesses:
    • No multi-profile / multi-bot support
    • No process isolation (in-process)
    • No concurrent PATCH handling

Recommended consolidation

The ideal native implementation would combine:

FeatureSource
CardKit v2.0 streaming APIBoth
Concurrent PATCH serialization + sequence lockingbaileyh8 #31 fix
Multi-profile supportbaileyh8 V3.3.0+
Multi-bot routing by chat_idbaileyh8 V3.2.0+
Markdown image → img_key resolutionAowen
Cron card deliveryAowen
/stop interrupt handlingAowen
Linear mode card splitting (200-element limit)Aowen
Multi-language zh/en auto-switchAowen
Table overflow protectionbaileyh8
DeepSeek `` tag filteringbaileyh8

References

Ask

Would the Hermes team consider either:

  1. Adopting the consolidated approach into core (gateway/platforms/feishu.py), or
  2. Officially endorsing one implementation as the recommended plugin for Feishu CardKit streaming?

Either would give the Feishu user base a first-class streaming card experience and close the long-standing gap described in #16084.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING