Claude Code commited on
Commit
1a08408
·
1 Parent(s): 9191e07

Claude Code: Fix A2A communication - remove non-existent think_async() call

Browse files

- Fixed /a2a/jsonrpc endpoint: removed call to non-existent brain_minimal.think_async()
- Fixed /hello endpoint: removed call to non-existent brain_minimal.think_async()
- Now using handle_brain_response() from error_handlers for proper message processing
- A2A endpoint now correctly extracts message text and processes through brain
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Files changed (1) hide show
  1. app.py +27 -39
app.py CHANGED
@@ -69,12 +69,14 @@ async def hello():
69
  # Import directly since .openclaw is in sys.path after openclaw import
70
  import openclaw # Trigger sys.path setup
71
  from agents import brain_minimal
72
- brain = brain_minimal
73
 
74
- # Try to use brain
75
- result = await brain.think_async("Hello") if hasattr(brain, 'think_async') else None
76
- if result:
 
77
  return {"message": result, "brain": "active"}
 
 
78
  except ImportError:
79
  # Brain module not available - survival mode
80
  return {"message": "Brain offline. Cain is in survival mode."}
@@ -82,9 +84,6 @@ async def hello():
82
  # Brain exists but failed - survival mode
83
  return {"message": f"Brain error: {e}. Cain is in survival mode."}
84
 
85
- # Fallback: Brain imported but didn't respond
86
- return {"message": "Hello World from Cain!", "brain": "fallback"}
87
-
88
  @app.get("/metrics")
89
  async def metrics():
90
  """System metrics with psutil fallback values."""
@@ -159,10 +158,6 @@ async def a2a_jsonrpc(request: Request):
159
 
160
  # Handle message/send method
161
  if method == "message/send":
162
- # Lazy load brain for processing
163
- import openclaw # Sets up sys.path
164
- from agents import brain_minimal
165
-
166
  message = params.get("message", {})
167
  message_text = ""
168
  for part in message.get("parts", []):
@@ -170,38 +165,31 @@ async def a2a_jsonrpc(request: Request):
170
  message_text = part.get("text", "")
171
  break
172
 
173
- # Process the message through brain
 
174
  try:
175
- response = await brain_minimal.think_async(message_text) if hasattr(brain_minimal, 'think_async') else None
176
- if not response:
177
- response = f"Cain received: {message_text}"
178
-
179
- # Build A2A JSON-RPC response
180
- return {
181
- "jsonrpc": "2.0",
182
- "id": msg_id,
183
- "result": {
184
- "status": {
185
- "state": "completed",
186
- "message": {
187
- "parts": [{"type": "text", "text": response}]
188
- }
189
- }
190
- }
191
- }
192
- except Exception as e:
193
- return {
194
- "jsonrpc": "2.0",
195
- "id": msg_id,
196
- "result": {
197
- "status": {
198
- "state": "failed",
199
- "message": {
200
- "parts": [{"type": "text", "text": f"Error: {str(e)}"}]
201
- }
202
  }
203
  }
204
  }
 
205
 
206
  # Unknown method
207
  return JSONResponse(
 
69
  # Import directly since .openclaw is in sys.path after openclaw import
70
  import openclaw # Trigger sys.path setup
71
  from agents import brain_minimal
 
72
 
73
+ # Try to use brain via the response handler
74
+ from error_handlers import handle_brain_response
75
+ result = handle_brain_response("Hello")
76
+ if result and not result.startswith("Error:") and not result.startswith("Brain"):
77
  return {"message": result, "brain": "active"}
78
+ else:
79
+ return {"message": "Hello World from Cain!", "brain": "fallback"}
80
  except ImportError:
81
  # Brain module not available - survival mode
82
  return {"message": "Brain offline. Cain is in survival mode."}
 
84
  # Brain exists but failed - survival mode
85
  return {"message": f"Brain error: {e}. Cain is in survival mode."}
86
 
 
 
 
87
  @app.get("/metrics")
88
  async def metrics():
89
  """System metrics with psutil fallback values."""
 
158
 
159
  # Handle message/send method
160
  if method == "message/send":
 
 
 
 
161
  message = params.get("message", {})
162
  message_text = ""
163
  for part in message.get("parts", []):
 
165
  message_text = part.get("text", "")
166
  break
167
 
168
+ # Process the message - use brain for response if available
169
+ response = None
170
  try:
171
+ import openclaw # Sets up sys.path
172
+ from agents import brain_minimal
173
+ from error_handlers import handle_brain_response
174
+
175
+ # Use the brain response handler for proper processing
176
+ response = handle_brain_response(message_text)
177
+ except Exception as brain_error:
178
+ response = f"Cain received: {message_text}"
179
+
180
+ # Build A2A JSON-RPC response
181
+ return {
182
+ "jsonrpc": "2.0",
183
+ "id": msg_id,
184
+ "result": {
185
+ "status": {
186
+ "state": "completed",
187
+ "message": {
188
+ "parts": [{"type": "text", "text": response}]
 
 
 
 
 
 
 
 
 
189
  }
190
  }
191
  }
192
+ }
193
 
194
  # Unknown method
195
  return JSONResponse(