feat: add guided exploration and share user-started MCP backend

This commit is contained in:
chenmingxuan committed 2026-10-16 18:32:46 +08:00
1 parent f86db1ced6
commit ee256ad7ce
144 files changed
+8625 -2075

No files matched your search

+16 -2
View File
@@ -143,7 +143,7 @@ async def mobile_workspace(include_devices: bool = True) -> dict:
@mcp.tool()
async def mobile_config(
section: Literal["model", "capabilities", "reports"] = "model",
section: Literal["model", "capabilities", "reports", "exploration"] = "model",
changes: dict[str, Any] | None = None,
persist_defaults: bool = False,
) -> dict:
@@ -163,6 +163,8 @@ async def mobile_config(
worker_cleanup_timeout_seconds (30), adb_auto_connect (true),
adb_discovery_interval_seconds (10), adb_discovery_timeout_seconds (5).
reports: formats=['docx','xlsx'] (at least one).
exploration: model (default gpt-6.1-sol), reasoning_effort (high), timeout_seconds
(1800 active seconds), demonstration_timeout_seconds (900), demonstration_warning_seconds (60).
API keys are never accepted or returned: use the Web UI or .env for credentials.
Saving settings does not change an already running task. Flash/Pro are execution
profiles, not model names. Model retries do not repeat device test cases.
@@ -171,6 +173,16 @@ async def mobile_config(
"model": ("/api/system/model-settings", MODEL_FIELDS),
"capabilities": ("/api/system/capability-settings", CAPABILITY_FIELDS),
"reports": ("/api/automation/preferences", {"formats"}),
"exploration": (
"/api/explorations/settings",
{
"model",
"reasoning_effort",
"timeout_seconds",
"demonstration_timeout_seconds",
"demonstration_warning_seconds",
},
),
}[section]
if changes is not None:
if not persist_defaults:
@@ -182,7 +194,9 @@ async def mobile_config(
return current
payload = {key: value for key, value in current.items() if key in allowed}
payload.update(changes)
return await _request("PUT" if section == "reports" else "POST", route, json=payload)
return await _request(
"PUT" if section in {"reports", "exploration"} else "POST", route, json=payload
)
@mcp.tool()