Skip to content

feat(memory-proxy): 支持 OpenClaw/Hermes 无 Task 接入与会话自动续接 - #1256

Open
llyb wants to merge 6 commits into
TencentCloud:feat/server_teamfrom
llyb:openclaw_access
Open

feat(memory-proxy): 支持 OpenClaw/Hermes 无 Task 接入与会话自动续接#1256
llyb wants to merge 6 commits into
TencentCloud:feat/server_teamfrom
llyb:openclaw_access

Conversation

@llyb

@llyb llyb commented Sep 3, 2026

Copy link
Copy Markdown

背景

OpenClaw / Hermes 无法响应 Memory Proxy 的交互式 Session 初始化表单,并且部分请求无法稳定携带自定义 Header,导致:

  • 必须预先创建并配置 x-task-id
  • 必须静态维护 x-conversation-id
  • Tool Call 后续请求丢失 Header 时,记忆注入和对话回流可能中断
  • OpenClaw 被错误分流到 Claude Code / CodeBuddy 的交互式状态机

本 PR 增加 OpenClaw Provider Bridge,并调整 Proxy 的 Session 初始化和会话续接逻辑,使 OpenClaw / Hermes 可以通过 team + agent 直接接入。

主要变更

1. OpenClaw Provider Bridge 插件

新增 MemoryProxy/openclaw-provider-bridge

  • 将 OpenClaw 模型请求转发至 Memory Proxy
  • 根据 OpenClaw Agent / Session 动态附加身份 Header
  • 持久化 Agent 映射和 Session 快照
  • 注册 OpenClaw Provider 和模型目录
  • API Key 使用环境变量 SecretRef,不写入 OpenClaw 配置文件
  • 提供插件安装、构建和 Gateway 启动脚本
  • 提供中英文 README 及架构文档

请求路径:

OpenClaw
  -> memory-proxy provider
  -> /openclaw/:instanceId/v1/chat/completions
  -> Memory Proxy
  -> upstream LLM

2. Header-only Session 初始化

新增共享的 Header-only Session 模块,覆盖:

  • openclaw
  • hermes

分流逻辑:

claude-code       -> Claude Code 初始化流程
openclaw/hermes   -> Header-only 初始化流程
其他客户端         -> CodeBuddy/Form 初始化流程

Header-only 客户端仅执行:

  1. 校验 Team、Agent 和可选 Task
  2. 按配置处理身份不匹配
  3. 直接完成 Session 注册或 bypass
  4. 不进入交互式表单状态机

Claude Code 和 CodeBuddy 原有表单初始化流程保持不变。

3. x-task-id 可选化

Session 直接注册条件由:

team + agent + task

调整为:

team + agent

新增配置:

sessionInit:
  taskMissingPolicy: skip

支持以下行为:

输入 taskMissingPolicy 结果
team + agent + 有效 task 任意 注册 Session,并启用 Agent + Task 级资产
team + agent,无 task skip 注册 Session,仅启用 Agent 级资产
team + agent,无 task default 使用 defaultTaskId
team + agent,无 task reject onMismatch 处理
team + agent + 无效 task 任意 判定为 mismatch,按 onMismatch 处理,不会静默忽略

4. Conversation ID 自动管理

新增配置:

autoConversationId:
  enabled: true
  ttlMinutes: 30
  strategy: per-key
  maxEntries: 10000

具体行为:

  • 显式传入的 x-conversation-id 始终优先
  • 缺少 Conversation/Session Header 时自动生成 UUID
  • 后续请求按 API Key 和 Agent Source 续接当前活跃会话
  • 超过 30 分钟无活动后创建新会话
  • 通过容量上限和 LRU 淘汰控制内存增长
  • 支持 per-key-msg 策略,降低多窗口会话误合并风险

Claude Code / CodeBuddy 已有的 SDK Session ID 不受影响。

5. Streaming 对话回流修复

修复客户端提前取消流式响应时,后台 Memory Recorder 无法完成 flush 的问题:

  • 客户端响应流和后台记录流独立消费
  • 客户端停止读取不会取消后台记录
  • Tool Call 模型流及最终回答流均可正常写入 L0
  • 后台记录异常不会影响客户端响应

6. OpenClaw 启动与部署脚本

新增或调整以下脚本:

  • install-openclaw-provider-bridge.sh
  • start-openclaw-stack.sh
  • start-memory-core.sh

其中:

  • start-openclaw-stack.sh 仅负责启动 OpenClaw Gateway
  • 缺少 gateway.mode 时自动设置为 local
  • 插件安装时自动注册 Provider 和模型目录
  • 支持 Windows Git Bash 下的 Docker 配置文件挂载
  • docker run 失败时直接显示原始错误,不再被 No such container 覆盖

向后兼容

  • 显式传入 x-task-id 时,继续绑定指定 Task
  • 显式传入 x-conversation-id 时,继续使用该 Conversation ID
  • Claude Code / CodeBuddy 的既有 Session ID 和表单初始化流程保持不变
  • 可通过 taskMissingPolicy: reject 恢复 Task 必填行为
  • 可通过 autoConversationId.enabled: false 关闭自动会话管理
  • 显式但无效的 x-task-id 仍按 onMismatch 处理

验证结果

自动化测试

MemoryProxy:
  Test Files  7 passed
  Tests       26 passed

OpenClaw Provider Bridge:
  Test Files  1 passed
  Tests       3 passed

OpenClaw 端到端验证

已完成真实 OpenClaw Gateway 验证:

  • 仅配置 Team + Agent 即可完成 Session 注册
  • Agent 级记忆注入成功
  • OpenClaw 不会进入 Claude Code / CodeBuddy 表单状态机
  • 普通流式回答可以写入 L0
  • Tool Call 请求及最终回答均可以完成回流
  • 后续请求可以自动关联已有 Session

关键日志:

[session-init:header-only] -> initialized
[asset-capability] "chat_memory": true
tdai-recorder:write-l0
POST /v3/conversation/add status=200
L0-upsert OK role=user
L0-upsert OK role=assistant

部署验证

在 Windows Git Bash 中重新执行 start-all.sh

tdai-memory-core  healthy
tdai-memory-hub   healthy
tdai-proxy        healthy

健康检查结果:

GET :8420/health -> 200
GET :8424/health -> 200
GET :8096/health -> 200

验收标准

  • OpenClaw / Hermes 仅配置 Team + Agent 即可注册 Session
  • 无 Task 时仅注入 Agent 级记忆和 Skill
  • Tool Call 后续请求丢失额外 Header 时可以继续关联 Session
  • TTL 超时后创建新 Conversation
  • 显式传入四个 Header 的旧配置行为不变
  • 无效 x-task-idonMismatch 处理
  • OpenClaw / Hermes 不进入交互式表单状态机
  • 流式响应取消不会中断后台记忆回流
  • Windows Git Bash 可以正常执行完整启动流程

@Maxwell-Code07

Copy link
Copy Markdown
Collaborator

Thank you so much for your attention and contribution! We will arrange an internal review for this PR shortly, and all feedback will be shared right here in the discussion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants