feat: release 2.1.0 with optional Flash final AI review

Default Flash final review to off and persist the setting across the UI,
MCP, SDK and queued tasks. Keep execution separate from test verdicts.

Bundle UI fonts and licenses to remove Google Fonts from startup builds.
Align backend/frontend versions and document installation and upgrades.
This commit is contained in:
chenmingxuan committed 2026-10-23 12:36:56 +08:00
1 parent b584dae80a
commit 83bcfd54d5
52 files changed
+898 -33

No files matched your search

+3 -1
View File
@@ -119,7 +119,9 @@ async def settle_flash_outcome(
)
else:
result = CaseTestResult(
status="inconclusive", reason="已关闭最终检查,未进行测试结果验收。"
status="inconclusive",
reason="执行完成 · 未做 AI 判定。已关闭 Flash 最终 AI 分析与判定,执行记录和报告仍保留。",
verification_skipped=True,
)
outcome = RunOutcome(
+8
View File
@@ -735,6 +735,10 @@ class MemoryConfig(BaseModel):
class FlashProfileConfig(BaseModel):
"""Configuration options specific to the ⚡ Flash execution profile (FlashRunner/ReactiveRunner)."""
final_check_enabled: bool = Field(
default=False,
description="Run the independent AI analysis and verdict after Flash execution ends.",
)
max_turns: int = Field(
default=0,
ge=0,
@@ -1017,6 +1021,10 @@ class AgentGlobalConfig(BaseModel):
if out_env is not None:
data.setdefault("outputter", {})["enabled"] = out_env
flash_check_env = _parse_bool("ARTEMIS_FLASH_FINAL_CHECK_ENABLED")
if flash_check_env is not None:
data.setdefault("flash", {})["final_check_enabled"] = flash_check_env
vid_rec_env = _parse_bool("ARTEMIS_VIDEO_RECORDING_ENABLED") or _parse_bool(
"ARTEMIS_WITH_VIDEO_RECORDING_TOOLS"
)
+1
View File
@@ -131,6 +131,7 @@ class Settings(BaseSettings):
# Worker-only override, applied after the user's JSON recording defaults.
ARTEMIS_TASK_RECORDING_CONFIG: dict = Field(default_factory=dict)
ARTEMIS_OUTPUTTER_ENABLED: bool = True
ARTEMIS_FLASH_FINAL_CHECK_ENABLED: bool = False
ARTEMIS_STEP_SUMMARIZER_ENABLED: bool = True
ARTEMIS_SCREENSHOT_LIMIT_ENABLED: bool = True
# Consecutive Pro responses without a valid tool call before failing the task.
+1
View File
@@ -48,6 +48,7 @@
"max_long_edge": 2048
},
"flash": {
"final_check_enabled": "${env:ARTEMIS_FLASH_FINAL_CHECK_ENABLED:-false}",
"max_turns": 0,
"explorer_mode": "flash",
"step_summarizer": {
+5
View File
@@ -5,11 +5,16 @@ from pathlib import Path
from typing import Literal
from pydantic import BaseModel, Field, ValidationError
from pydantic.json_schema import SkipJsonSchema
from artemis.config import TRACES_PATH
class CaseTestResult(BaseModel):
# Host metadata, not part of the model's verdict schema. Old results omit it.
verification_skipped: SkipJsonSchema[bool] = Field(
default=False, exclude_if=lambda value: not value
)
status: Literal["passed", "failed", "inconclusive", "blocked"] = Field(
description="Judge the system under test against the user's expectations. A correctly executed inspection that reveals an expectation mismatch is failed, even if the executor completed and reported the mismatch correctly."
)
+5 -1
View File
@@ -1261,7 +1261,11 @@ class Agent:
record_video_enabled=self._config.record_video_enabled,
disable_checker=self._config.disable_checker,
disable_midway_checks=self._config.disable_midway_checks,
disable_final_check=self._config.disable_final_check,
disable_final_check=self._config.disable_final_check
or (
(task.request.profile or "").lower() == "flash"
and not self._config.flash.final_check_enabled
),
checker_max_iterations=self._config.checker_max_iterations,
final_check_max_attempts=self._config.final_check_max_attempts,
checkpoint_max_repairs=self._config.checkpoint_max_repairs,