quash-mcp 0.2.6__tar.gz → 0.2.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of quash-mcp might be problematic. Click here for more details.

Files changed (26) hide show
  1. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/PKG-INFO +1 -1
  2. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/pyproject.toml +1 -1
  3. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/device/state_capture.py +4 -2
  4. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/execute_v3.py +15 -0
  5. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/.gitignore +0 -0
  6. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/README.md +0 -0
  7. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/SETUP_CLAUDE_CODE.md +0 -0
  8. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/__init__.py +0 -0
  9. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/__main__.py +0 -0
  10. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/backend_client.py +0 -0
  11. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/device/__init__.py +0 -0
  12. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/device/adb_tools.py +0 -0
  13. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/device/portal.py +0 -0
  14. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/server.py +0 -0
  15. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/state.py +0 -0
  16. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/__init__.py +0 -0
  17. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/build.py +0 -0
  18. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/build_old.py +0 -0
  19. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/configure.py +0 -0
  20. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/connect.py +0 -0
  21. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/execute.py +0 -0
  22. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/execute_v2_backup.py +0 -0
  23. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/runsuite.py +0 -0
  24. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/quash_mcp/tools/usage.py +0 -0
  25. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/test_backend_integration.py +0 -0
  26. {quash_mcp-0.2.6 → quash_mcp-0.2.8}/test_tools_loading.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quash-mcp
3
- Version: 0.2.6
3
+ Version: 0.2.8
4
4
  Summary: Model Context Protocol server for Quash - AI-powered mobile automation agent
5
5
  Project-URL: Homepage, https://quashbugs.com
6
6
  Project-URL: Repository, https://github.com/quash/quash-mcp
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "quash-mcp"
3
- version = "0.2.6"
3
+ version = "0.2.8"
4
4
  description = "Model Context Protocol server for Quash - AI-powered mobile automation agent"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -50,12 +50,14 @@ def get_accessibility_tree(serial: str, tcp_port: int = 8080) -> str:
50
50
  local_port = device.forward_port(tcp_port)
51
51
 
52
52
  response = requests.get(
53
- f"http://localhost:{local_port}/get_a11y_tree",
53
+ f"http://localhost:{local_port}/a11y_tree",
54
54
  timeout=10
55
55
  )
56
56
 
57
57
  if response.status_code == 200:
58
- return response.text
58
+ # Portal returns JSON with the tree
59
+ data = response.json()
60
+ return data.get("a11y_tree", "<hierarchy></hierarchy>")
59
61
  else:
60
62
  logger.warning(f"Failed to get accessibility tree: HTTP {response.status_code}")
61
63
  return "<hierarchy></hierarchy>"
@@ -187,6 +187,11 @@ async def execute_v3(
187
187
  if not config["vision"]:
188
188
  screenshot_bytes = None
189
189
 
190
+ # DEBUG: Log UI state
191
+ a11y_preview = ui_state_dict.get("a11y_tree", "")[:150]
192
+ log_progress(f"📱 UI State captured - A11y tree preview: {a11y_preview}...")
193
+ log_progress(f"📷 Screenshot: {'Present' if screenshot_bytes else 'None'}")
194
+
190
195
  except Exception as e:
191
196
  log_progress(f"⚠️ Warning: Failed to capture device state: {e}")
192
197
  ui_state_dict = {
@@ -235,6 +240,16 @@ async def execute_v3(
235
240
  code = action.get("code")
236
241
  reasoning = action.get("reasoning")
237
242
 
243
+ # DEBUG: Log full backend response
244
+ log_progress(f"\n📋 DEBUG - Backend Response:")
245
+ log_progress(f" - Action type: {action_type}")
246
+ log_progress(f" - Completed: {step_result.get('completed', False)}")
247
+ log_progress(f" - Success: {step_result.get('success', None)}")
248
+ log_progress(f" - Code present: {bool(code)}")
249
+ if code:
250
+ log_progress(f" - Code: {code[:100]}..." if len(code) > 100 else f" - Code: {code}")
251
+ log_progress(f" - Assistant response: {step_result.get('assistant_response', '')[:200]}...\n")
252
+
238
253
  # Log reasoning
239
254
  if reasoning:
240
255
  log_progress(f"🤔 Reasoning: {reasoning}")
File without changes
File without changes
File without changes
File without changes