aiduPOP⚕爱嘟泡波卡 — Hermes Agent 飞书泡波卡
水晶与蓝宝石理念——够简洁,够透明,够美
不只是卡片 — 是对话本身。
简洁不是少放东西,而是每一个元素都有存在的理由;
透明不是打印日志,而是让你看清 AI 每一步在想什么;
美不是装饰,而是信息该在的位置,刚好在那里。
中文 | 📖 English
aiduPOP 是什么?
aiduPOP⚕爱嘟泡波卡是 Hermes Agent 的飞书泡波卡插件 —— 让 AI 的回答和思考过程在飞书里实时、清晰、优雅地呈现。
基于 Aowen-Nowor 的 hermes-lark-streaming v1.6.0 构建,aiduPOP 在其之上做了一套完整的水晶化改造:
| 层级 | 做什么 | 核心特性 |
|---|---|---|
| ⚡ 即时 | 第一个 token 就见卡片 | 无「正在输入」提示,无「回复:」狗皮膏药 |
| 🎨 水晶 | 每个元素都有理由 | Answer 在上、Panel 在下,footer 默认清空 |
| 🚦 状态 | 一眼看清结果 | 绿色完成 / 红色中止 / 黄色报错,颜色编码 |
| 🔍 透明 | 看清 AI 每一步 | 可展开面板:思考轮次、工具调用、时间戳 |
| 🃏 交互 | 卡片里直接回答 | 原生 Cardsuit 2.0 clarify 选项卡 + 回调 |
| 🛡️ 韧性 | 失败不掉回纯文本 | Phase 2 原子回滚补救、卡片重建自动重试 |
Crystal — 爱嘟宝石系列的第一颗 💎
架构
┌──────────────────────────────────────────────────┐
│ aiduPOP⚕爱嘟泡波卡 │
│ Lark (Feishu) Cardsuit 2.0 Streaming │
├──────────────────────────────────────────────────┤
│ cardkit/ → 卡片渲染引擎(元素、模板) │
│ controller/ → 线性控制器 + card_id 追踪 │
│ patching/ → 爱嘟定制(模型显示、Phase 2) │
│ state/ → 流式状态机 │
│ flush/ → 节流刷新与批量更新 │
│ feishu/ → 飞书 API 客户端 │
├──────────────────────────────────────────────────┤
│ Hermes Agent 插件钩子(platform_registry) │
│ aiduMEM 持久记忆(消除上下文焦虑) │
└──────────────────────────────────────────────────┘
🖼️ 效果展示
1. 即时响应
没有「正在输入...」提示,没有「回复:...」狗皮膏药。 泡波卡即时出现,从第一个 token 开始实时渲染。没有飞书的 UI 噪音,只有纯粹的对话。
2. 完成状态 — 绿色面板
Answer 在上,Panel 在下。 绿色边框的面板一目了然:模型名称、思考轮次、工具调用、耗时。简洁、美观、信息明确。由 aiduMEM 持久记忆加持,消除上下文焦虑。面板支持完全自定义。
3. 中止/报错状态 — 红色面板
颜色编码状态。 当生成被中止或出错时,面板边框自动变色 — 红色=中止,黄色=报错。一眼就知道状态,无需阅读小字。
4. 展开面板 — 完整追踪
点击展开。 查看完整的推理追踪 — 每一轮思考、每一次工具调用,附带时间戳。透明是设计原则。没有隐藏的魔法,没有多余的 footer。只在你需要时,提供你需要的信息。
5. Clarify — 交互式选项卡(Cardkit 2.0)
原生飞书 Cardkit 2.0 集成。 当 AI 需要澄清时,直接在对话中呈现交互式选项卡。从下拉菜单选择或输入答案 — 无需切换上下文。
6. Clarify — 回调与继续
无缝回调。 选择完成后,Agent 收到回调并继续工作。Clarify 卡片更新显示你的选择和确认徽章。简洁、快速、原生。
🚀 快速开始
前置要求
- Hermes Agent 已安装
- 飞书(Lark)机器人已配置
- Python 3.10+
安装
方式一 · pip(两个包名等价,装的是同一份代码):
pip install aidupop # 爱嘟家族品牌名
pip install hermes-lark-streaming # 上游规范名
两者都提供同一个可导入包 hermes_lark_streaming,版本号同步发布。
方式二 · 作为 Hermes 目录插件:
git clone https://github.com/monkey2jack/aiduPOP.git
cp -r aiduPOP ~/.hermes/plugins/hermes-lark-streaming
hermes gateway restart
方式三 · Docker(GHCR):
docker pull ghcr.io/monkey2jack/aidupop:latest
配置
插件使用与上游 hermes-lark-streaming 相同的配置。爱嘟定制部分详见 docs/CUSTOMIZATIONS.md。
PC / 手机端差异化字号
可在 Hermes 的 config.yaml 中按角色设置单一字号,或分别设置 PC、手机和旧客户端兜底字号:
hermes_lark_streaming:
text_sizes:
body:
default: normal
pc: normal
mobile: large
panel: notation
notice:
default: notation
pc: notation
mobile: normal
body:AI 回答正文panel:思考、工具调用和底部统计面板notice:折叠等提示信息- 每个角色既可直接填写一个字号,也可填写
default/pc/mobile设备映射 - 未配置时保持 aiduPOP 现有
normal_v2/notation视觉,不影响老用户 - 修改后执行
/aowen config reload或重启 Hermes 网关
可配置字号严格使用飞书 CardKit 官方枚举,包括 normal、notation、small、x-small、medium、large、x-large 及官方标题字号。normal_v2 只作为 aiduPOP 未配置时的历史默认保留,不用于新配置。无效角色、设备字段或字号会明确报错,不会静默生成异常卡片。
版本号唯一来源是 plugin.yaml 的 version 字段,setup.py / __init__.py 动态读取,不会出现多处版本不一致。
🔧 定制说明
相对上游 v1.6.0 的完整定制清单详见 docs/CUSTOMIZATIONS.md,版本演进见 docs/CHANGELOG.md。
核心特性
- 🎨 水晶设计 — 简洁美观,没有多余元素
- ⚡ 即时响应 — 没有「正在输入」提示,卡片即时出现
- 🚦 颜色编码面板 — 绿色(完成)、红色(中止)、黄色(报错)
- 🔍 透明追踪 — 可展开面板,显示完整推理和工具调用
- 🤔 aiduMEM 集成 — 持久记忆消除上下文焦虑
- 🃏 Cardsuit 2.0 — 原生飞书交互式 clarify 卡片
- 🛡️ Phase 2 保护 — API 失败时自动回滚补救
- 📊 模型显示 — 稳定的模型名称显示,不会闪烁
📦 项目结构
aiduPOP/
├── cardkit/ # 卡片渲染引擎
├── controller/ # 线性控制器 & card_id 追踪
├── patching/ # 爱嘟定制(模型显示、Phase 2)
├── state/ # 流式状态机
├── flush/ # 节流刷新
├── feishu/ # 飞书 API 客户端
├── config/ # 配置解析
├── assets/ # 截图 & 静态资源
├── tests/ # 测试套件
├── plugin.yaml # 插件配置(版本唯一来源)
└── ...
🤝 贡献
欢迎贡献!请查看 CONTRIBUTING.md 了解贡献指南。
📄 许可证
本项目基于 MIT 许可证 — 详见 LICENSE。
🙏 致谢
- 上游:Aowen-Nowor/hermes-lark-streaming v1.6.0
- 作者:敖文大佬
- 框架:Hermes Agent by Nous Research
- 定制:aidu
用 💕 制作 by aidu
CHANGELOG
v2.1.3 (2026-08-14)
- 🐛 Hermes CLI 导入死锁根治 (P0): 修复在 Hermes Agent 启动时,
model_tools模块级导入与后台插件发现线程之间的 Pythonimport_lock死锁。将apply_patches()从同步调用改为异步守护线程延迟执行,彻底消除hermesCLI 终端启动卡死问题。 - 🏷️ 飞书品牌表述统一: 中文名称统一为“Hermes爱嘟飞书流式卡片”,英文品牌文案统一使用 “Lark (Feishu)”。
- 📱 设备差异化字号 (Issue #4): 支持通过
hermes_lark_streaming.text_sizes配置 PC 与手机端差异化字号。
v2.1.2 (2026-08-07)
这是 本次的补丁版本,英文名称与卡片视觉保持不变。
- 修复长任务在 Phase 2 / Phase 3 增量更新时可能先于最终安全网触发飞书
300305元素超限的问题;所有面板路径统一预留回答与 loading 元素预算,并在发送前裁剪早期推理/工具记录。 - 修复 24,000 字以上回答调用未导入
_split_long_text导致的隐藏NameError。 - 修复 message/anchor 双键导致的活动会话重复计数和跨话题错误封卡,并为过期 Clarify 卡片恢复 Hermes 原生回退路径。
- 恢复表格扫描兼容接口,收口测试包名、异步任务清理与 885 项回归测试。
- 加固发布链路:候选代码先测试后推送,Docker 发布前强制通过关键静态检查与测试。
完整版本历史见 docs/CHANGELOG.md。
v2.1.0 (2026-08-05)
- 🛡️ Markdown 防爆引擎: 吸收并融合贝氏卡片的高级安全降级机制,彻底根治飞书卡片
300314(格式错误) 与200860(卡片过载) 的死穴。 - 📊 无损表格降级 (Compact Mode): 当卡片中 Markdown 表格数量超出飞书单卡限制 (最大 5-20 个) 时,不再粗暴转为代码块,而是无损压扁为带有黑体子标题和字段列表的
Table N · Row M形式,彻底杜绝复杂表格引发的崩溃。 - ✂️ 智能长文断层保护: 当内容超过飞书安全红线 (24KB+) 触发截断时,算法将智能回退至段落或闭合符边缘,严密保护 Markdown 代码块围栏 (
```) 以及行内变量 (` `),坚决杜绝代码块“腰斩”与排版错乱。 - 💎 aiduPOP 核心守护: 所有截断与降级拦截均在底层 (
md.py与linear_mixin.py的最后一公里) 进行,0 侵入,0 UI 改变,完美保持 aiduPOP 定制的_model_cache及 (⚕️💭🛠️⏱) 原生布局。
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_lark_streaming-2.1.3.tar.gz.
File metadata
- Download URL: hermes_lark_streaming-2.1.3.tar.gz
- Upload date:
- Size: 263.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9435e9dbb631b28c3f29befd790088ce91e1743d5364bbb3a473e4a51df8d494
|
|
| MD5 |
766908a41fb6775be74b930e602482bc
|
|
| BLAKE2b-256 |
71a0c10fe5e4991e3a16e6fa0fb7e02921de624bd600ab23664cfaac5bcf0cf9
|
File details
Details for the file hermes_lark_streaming-2.1.3-py3-none-any.whl.
File metadata
- Download URL: hermes_lark_streaming-2.1.3-py3-none-any.whl
- Upload date:
- Size: 135.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd48ffe8be288ca4267cfa6635a0814b4822c82b82bd9d1d456b0e79141f57d2
|
|
| MD5 |
33e78658aaee776bbac11d8fc3f9df95
|
|
| BLAKE2b-256 |
02db1dea554ad6594876c12924924c5d8528ae7d36e496f0a0ff75701f0833e0
|