feat: prepare 2.2.0 with UI and execution fixes

Add dark theme, richer Markdown and readable plugin results.
Improve Android input evidence, response integrity and diagnostics.
Unify lifecycle, guidance receipts and evidence sources across clients.
Keep direct action dispatch without an added AI quota approval layer.
Align version metadata at 2.2.0 and bundle Helper 1.2.2.

Validation: 3063 backend tests before the version bump; 44 after.
Frontend: 317 tests and production build passed.
This commit is contained in:
chenmingxuan committed 2026-10-26 00:44:13 +08:00
1 parent 83bcfd54d5
commit fac4ccb760
146 files changed
+5689 -2033

No files matched your search

@@ -180,6 +180,37 @@ def test_old_checker_config_does_not_enable_flash_review(monkeypatch, tmp_path):
assert load_agent_config(path).flash.final_check_enabled is False
@pytest.mark.parametrize("enabled", [True, False])
def test_saved_flash_switch_reaches_next_worker_without_restarting(
isolated_settings, monkeypatch, enabled
):
from apps.admin_console.services.execution_config import execution_config
from apps.admin_console.services.task_queue_service import TaskQueueService
monkeypatch.setattr("artemis.exploration.store.explorations.run", lambda _sid: None)
monkeypatch.setattr("apps.admin_console.services.automation_store.store.job", lambda _sid: None)
monkeypatch.setenv("ARTEMIS_FLASH_FINAL_CHECK_ENABLED", str(not enabled).lower())
running = {"profile": "flash", "goal": "already running", "session_id": "running-review"}
running["execution_config"] = execution_config(running)
queued = {"profile": "flash", "goal": "queued", "session_id": "queued-review"}
queued["execution_config"] = execution_config(queued)
service.save_capability_settings(service.CapabilitySettings(flash_final_check_enabled=enabled))
# The real queue refreshes pending snapshots just before starting their worker.
queued["execution_config"] = execution_config(queued)
for item, expected in ((running, not enabled), (queued, enabled)):
_cmd, env = TaskQueueService._build_worker_invocation(
item,
item["session_id"],
item["session_id"],
item["goal"],
"flash",
TaskQueueService._task_target(item),
)
assert env["ARTEMIS_FLASH_FINAL_CHECK_ENABLED"] == str(expected).lower()
assert load_agent_config().pro.checker.final_check is True
def test_screenshot_json_can_override_environment(monkeypatch, tmp_path):
config_path = tmp_path / "artemis.jsonc"
config_path.write_text(