概述
Clawline 是从 OpenClaw 的 generic-channel 插件演变而来的独立项目(153条消息),包含 Web 客户端和小程序客户端。项目经历了命名讨论、组织创建、仓库拆分和代码迁移等阶段。
关键事件
- 2026-03-17: 讨论 generic-channel 插件的重命名,要求从营销角度取有意义的名字
- 2026-03-17: 确定项目名为 “Clawline”
- 2026-03-17: 规划仓库结构,决定不使用 monorepo,拆分为多个仓库
- 2026-03-17: 创建 GitHub 组织
clawline,owner 使用 restry 账号 - 2026-03-17: 客户端仓库命名用 app 风格(client-xxx),体现客户端概念
- 2026-03-20: 迁移 openclaw-generic-channel 插件代码,需要替换所有 generic-channel 引用
- 2026-04-05: 组织建设和插件开发持续进行
仓库结构
- 组织名: clawline
- 风格: 拆分仓库(非 monorepo)
- 客户端: client-web、client-miniprogram
- 核心: clawline 主插件(从 openclaw-generic-channel 迁移)
经验教训
- 项目命名要从营销角度考虑,让一般人也能理解项目意义
- 迁移代码时必须全局替换所有旧名称引用(generic-channel → clawline)
- 使用 GitHub 组织管理相关仓库,便于权限和协作管理
- 拆分仓库比 monorepo 更适合独立发展的子项目
ChannelBot 自动化运维
Clawline-channel 项目配备了专属 Bot ChannelBot,负责自动化项目维护:
- 定时执行工作区巡检,生成结构化维护报告(CONTEXT.md 状态、Git 提交、TypeScript 编译、GitHub Issues)
- 自动更新 CONTEXT.md,补录最新 commit 和任务状态
- 通过
codex-delegate技能启动 Codex 执行长时任务(超时 5 小时) - 追踪开发进度:断点续传(stream resume)、分页历史、自动生成会话标题等功能
近期开发动态(2026-03-18~24)
| 提交 | 内容 |
|---|---|
229d5c9 | feat: paginated history with before cursor + hasMore |
fce268a | feat: auto-generate conversation title |
101c1da | fix: stream state replace vs append |
97e10bb | feat: chat-level stream state (断点续传) |
77e83bc | feat: upload local files to relay server instead of base64 over WebSocket |
595e977 | feat: update monitor.ts with enhanced monitoring logic |
待处理问题
- Agent→User 文件/图片发送可靠性验证(2026-03-21 提出)
- OpenClaw 新版本对插件的影响分析(2026-03-29 提出,要求只分析不行动)
相关主题
- openclaw-config
- mattermost-config
- fries-mac
- research-fries
- channelbot
- webbot
- clawline-client-web
- monitoring-and-cron
OpenClaw SDK 迁移(2026.3.8 → 2026.4.1)
以下信息来源于 webbot 的 Mattermost DM 聊天记录。
版本升级历程
| 日期 | 版本 | 事件 |
|---|---|---|
| 2026-04-01 | 3.8 → 3.28 | Channel 插件 SDK subpath imports 迁移(9 个具体子路径替代根路径) |
| 2026-04-01 | 3.24 → 3.28 | Owl 服务器升级,验证插件兼容性 |
| 2026-04-02 | 3.28 → 4.1 | Owl 升级到最新版,全链路 E2E 验证通过 |
SDK 迁移要点
- Subpath Exports 扩展(44 → 238)— 旧版 deep import 靠 jiti 动态解析,新版正式导出
- ChannelPlugin 新增 5 个可选 adapter:lifecycle、execApprovals、allowlist、bindings、conversationBindings
- Runtime store — 手写 getter/setter 迁移到
createPluginRuntimeStore("clawline") - API 适配 5 处 breaking changes — pairing 加 accountId、dm→direct、typing 回调合并、textChunkLimit 参数改位置、IdentityConfig 去 description
Agent 隔离修复(2026-04-04)
发现并修复了工具调用跨 Agent 泄漏的安全问题:
| 文件 | 改动 |
|---|---|
tool-events.ts | 去掉 broadcast(),改为遍历 getConnectedClients() + sendToClient(),复用 agent 隔离逻辑 |
presence.ts | 同上,避免用户状态跨 agent 泄漏 |
修复后代码中不再有任何 broadcast() 调用,所有事件都走 sendToClient 的 agent 隔离路径。
断点续传审计结论
核心链路健壮:流式断点有 stream-state 内存缓存 + 重连恢复,最终消息无论客户端是否在线都会持久化到 history 文件。唯一极端场景是 gateway 在 message.send 后 100ms 内崩溃(概率极低)。
Gateway 服务端 (admin-new)
以下信息来源于 gatewaybot 的 Mattermost DM 聊天记录(2026-03-17~22)。
Gateway 是 Clawline 的服务端中继组件(clawline/gateway 仓库),由 GatewayBot 开发维护。包含管理后台 admin-new/ 和中继服务 server.js。
管理后台技术栈
| 技术 | 版本/说明 |
|---|---|
| React | 19 |
| Vite | 6 |
| Tailwind CSS | v4 (@tailwindcss/vite) |
| UI 组件库 | shadcn/ui (Radix UI) |
| 图标 | lucide-react |
| 认证 | @logto/react |
| 动画 | framer-motion |
| 通知 | sonner |
认证架构
采用 Logto OAuth2 JWT 全流程认证:
- 前端:
@logto/reactSDK →getAccessToken('https://gateway.clawlines.net/api')获取 JWT - 后端:
jose库 JWKS 验证 JWT(iss: https://logto.dr.restry.cn/oidc,aud: https://gateway.clawlines.net/api) - Fallback:保留 legacy admin token 兼容
数据存储演进
- V1:本地
data/relay-config.json文件存储 - V2:Supabase PostgreSQL(
cl_channels+cl_channel_users表),通过/pg/query端点执行 SQL
REST API
| 接口 | 方法 | 说明 |
|---|---|---|
/api/state | GET | 获取完整状态 |
/api/meta | GET | 公开元数据(无需 auth) |
/api/channels | POST | 创建/更新 channel |
/api/channels/:id | DELETE | 删除 channel |
/api/channels/:id/users | POST | 创建/更新 user |
/api/channels/:id/users/:senderId | DELETE | 删除 user |
部署
关键提交
| Commit | 内容 |
|---|---|
7b27b65 | feat: add admin-new UI with real API integration |
3696159 | feat: OAuth2 JWT 全流程认证 |
87da32b | feat: add Supabase storage backend with /pg/rest/v1 API |
2e5fb54 | fix: UI 审计三轮修复(accessibility + typography + normalize) |
cdc9e24 | docs: add production-grade documentation |