feat: introduce MCP server, cross-platform runtime, and Showcase UI reorganization
- Showcase UI Reorganization: * Move web UI dashboard from root directory into apps/showcase_ui/ for cleaner project structure * Add 'artemis ui' CLI command (artemis/interfaces/cli/commands/ui.py) and launcher scripts for the interactive showcase console - Standalone MCP Server & Notifiers (mcp_server/): * Implement dedicated MCP server package with mobile automation tools (device_state, inspect_trace, task_manager, task_runner) * Add multi-channel notifiers (AgentAPI, Desktop notifications, Webhooks, File output, and Composite routing) * Introduce background task runner and trace store for autonomous mobile execution monitoring - Cross-Platform Runtime & Toolchain Support: * Add artemis/platform/ with OS-specific implementations for Linux, macOS (Darwin), and Windows * Add artemis/runtime/supervisor.py for resilient process and agent runtime supervision * Add artemis/toolchain/ with dependency resolution and SDK descriptors * Add cross-platform launcher scripts (start.sh, start.bat) and installer scripts (scripts/install_deps.*) - Core Enhancements & Diagnostics: * Enhance coordinate normalization, OCR API fallback, and perception pipeline * Add credential validation (credentials_validator.py) and system diagnostics * Update bilingual documentation (README.md, README_CN.md) and architecture diagrams - Test Suite Expansion: * Add integration tests for cloud gateway, remote ADB, and Artemis login * Add unit tests covering core diagnostics, platform detection, toolchain, credentials validator, optional OCR, and MCP tools
This commit is contained in:
1 parent
78e478f502
commit
9a5aaf99b7
249 files changed
+37226
-9339
No files matched your search
@@ -15,6 +15,7 @@
|
||||
"""Server and cloud proxy commands (artemis server)."""
|
||||
|
||||
import http.server
|
||||
import os
|
||||
import socketserver
|
||||
import subprocess
|
||||
import time
|
||||
@@ -50,7 +51,7 @@ def get_identity_token() -> str:
|
||||
|
||||
|
||||
class CloudRunProxyHandler(http.server.BaseHTTPRequestHandler):
|
||||
target_url: str = "https://artemis-cloud-brain-971929466682.us-central1.run.app"
|
||||
target_url: str = os.getenv("ARTEMIS_CLOUD_URL", "http://127.0.0.1:8000")
|
||||
|
||||
def log_message(self, format, *args):
|
||||
logger.info(f"[{self.log_date_time_string()}] {format % args}")
|
||||
@@ -81,7 +82,9 @@ class CloudRunProxyHandler(http.server.BaseHTTPRequestHandler):
|
||||
token = get_identity_token()
|
||||
if token:
|
||||
headers["Authorization"] = f"Bearer {token}"
|
||||
headers["X-Artemis-Token"] = "alice-token"
|
||||
tenant_token = os.getenv("ARTEMIS_TENANT_TOKEN")
|
||||
if tenant_token:
|
||||
headers["X-Artemis-Token"] = tenant_token
|
||||
|
||||
content_length = int(self.headers.get("Content-Length", 0))
|
||||
body = self.rfile.read(content_length) if content_length > 0 else None
|
||||
@@ -119,8 +122,10 @@ def web_proxy_command(
|
||||
port: Annotated[int, typer.Option("--port", "-p", help="Local port to bind.")] = 8080,
|
||||
target: Annotated[
|
||||
str,
|
||||
typer.Option("--target", "-t", help="Target Cloud Run URL."),
|
||||
] = "https://artemis-cloud-brain-971929466682.us-central1.run.app",
|
||||
typer.Option(
|
||||
"--target", "-t", help="Target Artemis Cloud URL.", envvar="ARTEMIS_CLOUD_URL"
|
||||
),
|
||||
] = "http://127.0.0.1:8000",
|
||||
) -> None:
|
||||
"""Start the local authenticated proxy for ARTEMIS Cloud Web Dashboard."""
|
||||
CloudRunProxyHandler.target_url = target
|
||||
|
||||
Reference in new issue
Block a user