 7418andClaude Opus 4.6
|
243724a765
|
feat: 飞书(Feishu/Lark)Bridge 适配器 + 发布 v0.25.0
新增飞书 IM 通道,通过 @larksuiteoapi/node-sdk WSClient 接收消息、REST Client 发送回复。
适配器核心 (feishu-adapter.ts):
- WSClient 长连接接收 im.message.receive_v1 事件
- 消息去重 (message_id LRU 1000)、授权校验、群聊策略 (open/allowlist/disabled)
- @提及检测 (bot open_id/user_id/union_id 匹配)
- 图片/文件/音频/视频/富文本(post) 下载 → base64 FileAttachment
- Typing 指示器 (Openclaw 方案: emoji reaction)
- /perm 文本命令处理权限审批
渲染策略 (markdown/feishu.ts):
- 代码块/表格 → schema 2.0 interactive card (markdown 元素)
- 纯文本 → post (md tag), 支持粗体/斜体/行内代码/链接
- 权限卡片 → schema 2.0 card + /perm 文本命令 (无按钮, 见下方决策)
- 每层降级: card → post → text
关键决策 — 权限交互无按钮:
- 飞书 card.action.trigger 回调需 HTTP webhook, WSClient 不支持
- schema 2.0 不支持 action 标签 (错误码 200861)
- schema 1.0 按钮可渲染但点击报 200340 (无 webhook 端点)
- Openclaw 用 http.createServer + Lark.adaptDefault 解决, CodePilot 桌面端无公网端点
- 最终方案: 格式化卡片 + /perm 文本命令, 用户复制发送即可审批
其他变更:
- permission-broker.ts: permissionRequestId 去重 (30s TTL)
- telegram-bot.ts: bridge 模式互斥 (globalThis 标志)
- bridge-manager.ts: 飞书渲染分发 (deliverResponse feishu 分支)
- UI: FeishuBridgeSection 设置页 + 侧边栏入口 + 通道开关
- i18n: 中英文飞书配置文案
- 交接文档: bridge-system.md 更新飞书架构、数据流、6 项设计决策
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-04 19:03:13 +08:00 |
|
 7418andClaude Opus 4.6
|
b1a043a995
|
feat: Telegram 流式预览(sendMessageDraft)+ 出站渲染解耦 + 投递容错
Bridge 新增"边生成边显示"能力,利用 Telegram Bot API 9.5 的
sendMessageDraft 在私聊中以草稿形式流式展示 Claude 生成进度。
架构上抽象为通道级可选能力,便于后续扩展到其他 IM。
types.ts
- 新增 PreviewCapabilities、StreamingPreviewState 接口
channel-adapter.ts
- BaseChannelAdapter 新增三个可选方法:
getPreviewCapabilities / sendPreview / endPreview
- sendPreview 返回 'sent'|'skip'|'degrade' 三态,
区分瞬时失败(跳过)和永久失败(降级)
telegram-utils.ts
- 新增 sendMessageDraft() API 封装(plain text,截断到 4096)
telegram-adapter.ts
- 实现 getPreviewCapabilities: 开关检查 + 私聊/群聊检测 + 降级状态
- 实现 sendPreview: 调 sendMessageDraft,400/404 永久降级,429 仅跳过
- 实现 endPreview: 空操作
- stop() 清空 previewDegraded Set
conversation-engine.ts
- 新增 OnPartialText 回调类型
- processMessage / consumeStream 透传 onPartialText 参数
- 使用独立 previewText 变量(只累积、不因 tool_use 清零),
避免预览文本在工具调用后回退/抖动
bridge-manager.ts
- 流式预览状态机:generateDraftId / getStreamConfig / flushPreview
节流闭包(间隔+最小增量+trailing-edge timer),finally 清理
- flushPreview 仅在 'degrade' 时降级,'skip'/网络错误不降级
- 新增 deliverResponse() 按 channelType 分发渲染:
Telegram → markdownToTelegramChunks + deliverRendered
其他 IM → deliver() 纯文本(内部自动分块)
解除 handleMessage 对 Telegram 渲染的硬编码依赖
delivery-layer.ts
- deliverRendered: chunk 失败后继续投递剩余 chunk(不中断),
追发截断提示通知用户,返回 ok:false 标识不完整投递
- deliver: 保持原有 fail-fast 行为(短消息无需跳过)
route.ts (bridge/settings)
- BRIDGE_SETTING_KEYS 白名单追加 5 个流式配置项
docs/handover/bridge-system.md
- 更新目录结构、数据流、设计决策(#12 流式预览)、设置项表
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-03 23:20:47 +08:00 |
|
 7418andClaude Opus 4.6
|
38e7c96daa
|
feat: Telegram Bridge 出站消息 Markdown 渲染
新增三层 Markdown → Telegram HTML 渲染管线:
markdown/ir.ts — markdown-it 解析 Markdown 为中间表示 (MarkdownIR)
- 支持 bold/italic/strikethrough/code/code_block/blockquote/links/lists/headings/tables/hr
- 表格使用 code-block 模式渲染为 ASCII 表格(<pre> 保留对齐)
- HTML 内联 <br> 标签转换为换行符
markdown/render.ts — 通用标记渲染器
- boundary tracking + LIFO stack 处理嵌套样式
markdown/telegram.ts — Telegram 专用渲染器
- 样式映射到 Telegram HTML 标签 (b/i/s/code/pre+code/blockquote/a)
- 文件引用保护:README.md/main.go 等不被误识别为 URL
- render-first 分片:按渲染后 HTML 长度分片,超限时按比例重分割
delivery-layer.ts — 新增 deliverRendered() 接收预渲染 chunks
- HTML + plain text 双通道,解析失败自动降级纯文本
- sendWithRetry 支持 plainFallback 参数
bridge-manager.ts — Claude 回复改用 markdownToTelegramChunks + deliverRendered
- 命令响应和错误消息保持 escapeHtml + deliver
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-02 14:38:12 +08:00 |
|
 7418andClaude Opus 4.6
|
8526b58d59
|
docs: 更新 bridge 交接文档 — 图片接收能力
- 目录结构增加 telegram-media.ts
- 数据流图补充图片/相册处理路径
- 设计决策 #2 补充连续水位推进机制
- 新增决策 #9(图片接收)和 #10(DB 格式统一)
- 设置项表增加 image_enabled 和 max_image_size
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-02 13:06:48 +08:00 |
|
 7418andClaude Opus 4.6
|
6209c865fd
|
refactor: 整理 docs 目录结构
- docs/handover/ — 交接文档(架构、设计决策)
- docs/research/ — 调研文档(技术方案、可行性分析)
- 各目录添加 README.md 索引,要求 AI 增删文件时更新索引
- CLAUDE.md 更新文档路径引用
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-01 09:41:14 +08:00 |
|