Clawline — 03-21晚 V2规划与存储架构¶
产品方向澄清¶
Dad 的核心决策:Clawline 是独立新频道,与 Mattermost 无关;聊天 UI 面向 OpenClaw 生态能力整合。
这个决策明确了 Clawline 的独立定位,不是依附于其他 IM 平台的插件,而是 OpenClaw 生态的核心入口。
规划目标清单¶
- 展示当前代理技能、模型、思考程度、reason 等
- 跨 Agent 搜索
- Dashboard 汇总每日对话
- 文件信息入口
- 输入框上方固定技能/上下文入口
- slash 命令支持技能
IndexedDB 存储架构决策¶
为什么选择 IndexedDB?¶
Dad 决策:先不改协议,直接把聊天数据保存在本地做搜索。
Bot 选型:本地 IndexedDB
选型理由: - 0 协议改动:纯客户端实现,无需修改 Gateway/Channel - 跨 Agent 搜索:支持跨 agent、跨会话的消息检索 - 容量适配:比 localStorage 更适合消息量增长场景
Phase 1:消息存储迁移¶
Bot 架构方案:
- 新建 services/messageDB.ts 统一消息存储
- 替换 ChatRoom/ChatList/Search 的消息读写逻辑
迁移结果: - 39 条消息从 localStorage 迁移到 IndexedDB - 历史消息、预览、搜索均正常运行
Dad 关切:是否需要更新 channel 插件? Bot 结论:Phase 1 纯客户端改动,插件无需更新
Phase 2:功能扩展¶
Bot 执行:
- Search 页面增强(支持全文检索)
- FileGallery 文件管理器
- 输入框上方技能栏
- AgentContextViewer 组件
协议依赖说明:
- agent.context.get 需要 channel 插件支持
- 未更新插件时,前端只会显示 loading/空态
- 这体现了客户端与插件的渐进式协作模式
Channel 插件扩展¶
Codex 初版审查¶
Codex 提交到 clawline/channel,commit 2edd81a。
Dad 决策:要求 Bot 自己审查,确认是否与 roadmap 匹配。
Bot 自改内容¶
审查后的调整:
- monitor.ts:把 TOOLS.md / HEARTBEAT.md 纳入上下文文件列表
- send.ts:thinking indicator 增加 agentId
- sendMessageGeneric:若 meta.model 缺失但有 agentId,自动补 model
结论:插件需要更新时,只需 Dad 拉取对应 commit 部署即可。这种"客户端先行,插件跟进"的模式为后续开发提供了灵活性。
技能与上下文入口设计¶
Dad 的交互要求¶
- 技能/上下文不要单独占一条
- 应固定在输入框上方快捷命令行最左边
- 不参与会话历史
- 内容自动更新
Bot 实现方案¶
- 将"技能(数量)"和"上下文"按钮固定在快捷命令行最左侧
- slash menu 中加入技能分区,使用
/use <skillName>形式
技能扫描根因修复¶
发现问题:仅扫描 ~/.openclaw/skills 不够
技能目录规则:
~/.openclaw/skills/ # 全局技能
~/.openclaw/workspace-{agentId}/skills/ # 工作区技能
~/.codex/skills/ # Codex 技能
即使 agent.json 无 workspace 字段,也可由 agentId 推导目录。
媒体消息接收问题¶
问题根因¶
message.send / history.sync 处理时只读取 content,忽略 mediaUrl / contentType / mimeType。
Bot 分析结论¶
- 客户端渲染链路需补媒体字段
- relay server 是纯透传,不解析包体
- 若远程地址客户端不可达,需考虑 base64 或共享存储方案
Dad 追问:是否需要更新插件? Bot 结论:当前"发图片/收图片"修复主要是前端侧,不一定需要插件更新。
这个结论体现了 Clawline 架构的设计哲学:前端尽可能自主处理,减少对后端的依赖。
为什么这个晚上是战略转折点?¶
1. 产品定位最终确立¶
从"可能是 Mattermost 插件"到"独立的 OpenClaw 生态入口",产品方向彻底明确。
2. 存储架构奠基¶
IndexedDB 的引入为跨 Agent 搜索、消息持久化、离线支持奠定了技术基础。
3. 前后端协作模式确立¶
"客户端先行,插件跟进"的渐进式开发模式,为快速迭代提供了灵活性。
4. 技能集成路径清晰¶
从技能目录规则到 slash 命令入口,技能系统的集成方案在这个晚上基本确定。
技术架构总结¶
┌─────────────────────────────────────────────┐
│ Web Client │
├─────────────────────────────────────────────┤
│ IndexedDB (消息存储) │
│ ├── 跨 Agent 搜索 │
│ ├── 历史消息缓存 │
│ └── 离线支持基础 │
├─────────────────────────────────────────────┤
│ 技能系统 │
│ ├── 全局技能 (~/.openclaw/skills/) │
│ ├── 工作区技能 (workspace-{agentId}/) │
│ └── slash 命令入口 (/use <skill>) │
├─────────────────────────────────────────────┤
│ 上下文查看器 │
│ └── agent.context.get (需插件支持) │
└─────────────────────────────────────────────┘