Align Responses cache affinity across execution and summary calls, preserve required checks and evidence uncertainty, and allow safe deletion of inactive explorations while retaining independent reruns.
Validation: backend suite passed except intentional prompt golden drift, then all 17 transcript tests passed after snapshot refresh; 268 frontend tests and production build passed; Ruff, quality ratchet and core type checks passed.
Localize the web console and persist custom model and capability settings.
Use OpenAI Responses exclusively and move runtime limits into environment configuration.
Bootstrap uv and the virtual environment on Windows, support optional China mirrors,
and package source distributions without environments, build output, or credentials.
Update regression tests and repository quality checks for the new behavior.
Fix queue cancellation, concurrency limits and worker status updates.
Use direct Explorer imports, split the Diagnoser loop into helpers and remove unused tool registration and prompt-builder code.
Correct model caching, endpoint selection and retry handling.
Add execution incidents, action bursts and shared Flash history.
Expose verification and Explorer settings with streamed check results.
Support graceful cancellation, recording recovery and bundled UI resources.
Add CI quality checks and clean up comments and documentation.
- Extract device action execution into artemis/mcp action layer:
typed ActionResult, capability manifest with startup validation,
AdbActuator as the single physical implementation, in-memory
ActionSession (replaces stdio subprocess MCP in validator), and
McpActionExecutor preserving the legacy executor contract.
adb_server keeps its external stdio/SSE surface unchanged and now
reuses the actuator implementation; import-time side effects moved
into configure_stdio_mode().
- Capability-gated prompt assembly (prompt_assembly.py): tool enums and
teaching segments render per available backend tools; full-set output
is byte-identical to the previous static text (locked by tests).
- Admin console task queue: serial worker replaced by a per-device
concurrent dispatcher (ARTEMIS_CONCURRENCY_MODE=global restores
serial semantics), per-session cancellation, strict device binding on
enqueue, unified stdio piping with tee to trace stdout.log, and
shutdown cleanup of all active runs. Fix _pid_exists exception order
so PermissionError is treated as alive.
- mcp_server reliability: spawn watchdog kills runners stuck before
interpreter startup and releases device reservations; task state
reconcile uses psutil liveness, prefers runner-reported pids, and
adds a 45s startup grace to stop false failure reports on Windows;
conversation_id is now optional end-to-end; explicit device_serial is
validated at submission.
- CLI install now writes ~/.claude/rules/artemis.md for Claude Code and
migrates/removes the legacy CLAUDE.md injection block; ~/.claude.json
is never rewritten when it fails to parse.
- Tests: Windows-portable stdio lifecycle and path assertions; new
suites for action layer, prompt assembly, spawn watchdog, and task
reconcile (895 passed, 3 skipped).
- Backend: maintain _step_number_cache in DataEngine and include step_number in all step_updated SSE events (summary, thinking, execution result)
- Admin console: query unassigned trace step_ids in stepless_rows to prevent orphan traces from being lost
- Showcase UI: implement dual-indexed entity deduplication (by step_id and step_number) in extractStepReplayFrames to eliminate phantom ghost steps
- Showcase UI: filter visual screenshot steps before generating sequential 1-based frame numbers, preventing step-4 start and index shift bugs
- Showcase UI: add rawStepNumber and summary properties to StepReplayFrame
- Showcase UI: update FloatingVideoPlayerComponent session reset effect to only reset playback on sessionId change rather than on every stepFrames mutation
- Showcase UI: add stepSeekRequest signal and stepIndex parameter to AgentService.openVideoPlayer
- Unit tests: add Karma and Pytest unit tests verifying step 1 start, dual-indexing, and SSE step_number payloads
- Unified configuration and paths under artemis.config as single source of truth
- Consolidated execution across CLI, SDK, MCP, and Admin Console to default to Artemis Daemon
- Fixed frontend step replay to preserve failure steps with proper sequential numbering
- Implemented task deduplication, debouncing, and multi-device lock isolation
- Added comprehensive end-to-end multi-port integration tests for live phone and emulator
- Implement DevicePool and DeviceExecutionLock concurrency modes (per-device FIFO vs global serialization)
- Extend ArtemisClient SDK and CLI with explicit device targeting and concurrency strategy configuration
- Add server lifecycle management (artemis restart, stop, status) with cross-platform PID discovery
- Update MCP server tools to support multi-device dispatch, trace tagging, and per-device execution
- Enhance Showcase UI with step-by-step visual replay, playback speed controls, and device serial badges
- Add comprehensive unit test coverage and edge-case verification scripts
- UI: Implement dual-mode playback in FloatingVideoPlayer supporting video and step-by-step frame replay with scrub controls and auto-fallback
- Runtime: Prevent asyncio event loop hangs on Darwin and Linux by avoiding psutil.wait_procs on direct child processes
- Task Queue: Add worker exit watchdog and automatic recording recovery for completed or interrupted sessions
- Recording: Add ffmpeg ultrafast transcode fallback, shield recording finalization against cancellation, and handle on-the-fly MP4 conversion
- Docs: Polish README_CN styling and streamline flash runner agent prompt
Roll scrcpy recordings by device rotation and duration, and publish timeline manifests for playback and analysis.
Add seamless segmented playback in the showcase UI and configurable stay-awake strategies for Android automation.