概述

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)

提交内容
229d5c9feat: paginated history with before cursor + hasMore
fce268afeat: auto-generate conversation title
101c1dafix: stream state replace vs append
97e10bbfeat: chat-level stream state (断点续传)
77e83bcfeat: upload local files to relay server instead of base64 over WebSocket
595e977feat: update monitor.ts with enhanced monitoring logic

待处理问题

  • Agent→User 文件/图片发送可靠性验证(2026-03-21 提出)
  • OpenClaw 新版本对插件的影响分析(2026-03-29 提出,要求只分析不行动)

相关主题

OpenClaw SDK 迁移(2026.3.8 → 2026.4.1)

以下信息来源于 webbot 的 Mattermost DM 聊天记录。

版本升级历程

日期版本事件
2026-04-013.8 → 3.28Channel 插件 SDK subpath imports 迁移(9 个具体子路径替代根路径)
2026-04-013.24 → 3.28Owl 服务器升级,验证插件兼容性
2026-04-023.28 → 4.1Owl 升级到最新版,全链路 E2E 验证通过

SDK 迁移要点

  1. Subpath Exports 扩展(44 → 238)— 旧版 deep import 靠 jiti 动态解析,新版正式导出
  2. ChannelPlugin 新增 5 个可选 adapter:lifecycle、execApprovals、allowlist、bindings、conversationBindings
  3. Runtime store — 手写 getter/setter 迁移到 createPluginRuntimeStore("clawline")
  4. 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

管理后台技术栈

技术版本/说明
React19
Vite6
Tailwind CSSv4 (@tailwindcss/vite)
UI 组件库shadcn/ui (Radix UI)
图标lucide-react
认证@logto/react
动画framer-motion
通知sonner

认证架构

采用 Logto OAuth2 JWT 全流程认证:

  • 前端@logto/react SDK → getAccessToken('https://gateway.clawlines.net/api') 获取 JWT
  • 后端jose 库 JWKS 验证 JWT(iss: https://logto.dr.restry.cn/oidcaud: https://gateway.clawlines.net/api
  • Fallback:保留 legacy admin token 兼容

数据存储演进

  1. V1:本地 data/relay-config.json 文件存储
  2. V2:Supabase PostgreSQL(cl_channels + cl_channel_users 表),通过 /pg/query 端点执行 SQL

REST API

接口方法说明
/api/stateGET获取完整状态
/api/metaGET公开元数据(无需 auth)
/api/channelsPOST创建/更新 channel
/api/channels/:idDELETE删除 channel
/api/channels/:id/usersPOST创建/更新 user
/api/channels/:id/users/:senderIdDELETE删除 user

部署

关键提交

Commit内容
7b27b65feat: add admin-new UI with real API integration
3696159feat: OAuth2 JWT 全流程认证
87da32bfeat: add Supabase storage backend with /pg/rest/v1 API
2e5fb54fix: UI 审计三轮修复(accessibility + typography + normalize)
cdc9e24docs: add production-grade documentation