feat: add official Codex skill and harden task execution

Install and update artemis-use with task diagnostics and plugin guidance. Preserve cross-device file receipts, review canonical reports, guard stage transitions and reduce small history summaries. Improve exploration lifecycle, request recovery and browser live connections.
This commit is contained in:
chenmingxuan committed 2026-10-18 14:18:37 +08:00
1 parent 2328a4df0c
commit e1ea099592
128 files changed
+4944 -700

No files matched your search

+14 -1
View File
@@ -10,6 +10,8 @@ from mcp_server.tools.automation import _id, _request
async def mobile_exploration(
action: Literal[
"list",
"deletion_preview",
"delete",
"get",
"create",
"start",
@@ -33,9 +35,12 @@ async def mobile_exploration(
demonstration_id: str | None = None,
after: int = 0,
version: int | None = None,
user_confirmed: bool = False,
) -> Any:
"""Explore ONE complex test with user guidance and produce a reusable case.
deletion_preview lists affected conversation runs; delete requires user_confirmed=true
after the user requests deletion. Independent validation runs are preserved.
Read-only list/get/case never execute tasks. create stores {goal,config?,task_config?};
start/continue explicitly enqueue or resume Pro exploration. Independent defaults:
gpt-6.1-sol/high, 1800 active seconds; timeout pauses, never fails by itself.
@@ -49,11 +54,19 @@ async def mobile_exploration(
poll get.generations for completion. validate payload={version,profile,task_config?}
explicitly runs the saved version in Flash/Pro; batch additionally accepts name and
creates a DRAFT batch, never starts it. Exploration pass and rerun pass are separate.
Use stable request_id for every mutation except pause/stop, reusing it on transport
Use stable request_id for every mutation except pause/stop/delete, reusing it on transport
retries. No API keys; configure secrets in the Web UI. mobile_config(section='exploration')
controls non-secret defaults. After errors call mobile_diagnose before resubmitting.
"""
base = "/api/explorations"
if action in {"deletion_preview", "delete"}:
path = f"{base}/{_id(exploration_id)}"
if action == "deletion_preview":
return await _request("GET", path + "/deletion-preview")
if not user_confirmed:
raise ValueError("删除探索需要用户明确要求;先用 deletion_preview 核对影响范围")
return await _request("DELETE", path)
if action in {"list", "get", "case"}:
if payload or request_id:
raise ValueError("查询不接受写入内容")