feat(tools): add OpenClaw remote agent tool integration

- Detect x-openclaw flag in OpenAPI schema and init dedicated config
- Implement multimodal input/output (image download, compress, base64)
- Add OpenClaw connection test and status validation in tool service
- Fix auth_config token check to support both api_key and bearer_token
- Inject runtime context (user_id, conversation_id, files) in chat services
This commit is contained in:
miao
2026-04-07 10:35:14 +08:00
parent 460c86cd94
commit e298b38de9
4 changed files with 467 additions and 6 deletions

View File

@@ -165,7 +165,18 @@ class AppChatService:
multimodal_service = MultimodalService(self.db, model_info)
processed_files = await multimodal_service.process_files(files)
logger.info(f"处理了 {len(processed_files)} 个文件")
#============为 OpenClaw 工具注入会话session======
# 为 OpenClaw 工具注入运行时上下文
for t in tools:
if hasattr(t, 'tool_instance') and hasattr(t.tool_instance, '_is_openclaw'):
if t.tool_instance._is_openclaw:
t.tool_instance._user_id = user_id or "anonymous"
t.tool_instance._conversation_id = (
str(conversation_id) if conversation_id else None)
# 注入用户上传的文件
if processed_files:
t.tool_instance._uploaded_files = processed_files
#============为 OpenClaw 工具注入会话session======
# 调用 Agent支持多模态
result = await agent.chat(
message=message,
@@ -413,6 +424,17 @@ class AppChatService:
processed_files = await multimodal_service.process_files(files)
logger.info(f"处理了 {len(processed_files)} 个文件")
#============为 OpenClaw 工具注入运行时上下文======
for t in tools:
if hasattr(t, 'tool_instance') and hasattr(t.tool_instance, '_is_openclaw'):
if t.tool_instance._is_openclaw:
t.tool_instance._user_id = user_id or "anonymous"
t.tool_instance._conversation_id = (
str(conversation_id) if conversation_id else None)
if processed_files:
t.tool_instance._uploaded_files = processed_files
#============为 OpenClaw 工具注入运行时上下文结束======
# 流式调用 Agent支持多模态同时并行启动 TTS
full_content = ""
full_reasoning = ""