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.
140 lines
4.6 KiB
Python
140 lines
4.6 KiB
Python
# Copyright 2026 Google LLC
|
||
#
|
||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
# you may not use this file except in compliance with the License.
|
||
# You may obtain a copy of the License at
|
||
#
|
||
# http://www.apache.org/licenses/LICENSE-2.0
|
||
#
|
||
# Unless required by applicable law or agreed to in writing, software
|
||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
# See the License for the specific language governing permissions and
|
||
# limitations under the License.
|
||
|
||
"""Toolchain and Video Recording Auxiliary Probe."""
|
||
|
||
from artemis.core.diagnostics.probes.base import BaseProbe
|
||
from artemis.core.diagnostics.schema import (
|
||
ProbeAction,
|
||
ProbeCategory,
|
||
ProbeResult,
|
||
ProbeStatus,
|
||
)
|
||
from artemis.platform import OSType, platform
|
||
from artemis.toolchain import toolchain
|
||
|
||
|
||
class ToolchainProbe(BaseProbe):
|
||
"""Probe checking required multimedia and video recording toolchains (ffmpeg, scrcpy)."""
|
||
|
||
@property
|
||
def probe_id(self) -> str:
|
||
return "toolchain"
|
||
|
||
@property
|
||
def category(self) -> ProbeCategory:
|
||
return ProbeCategory.TOOLCHAIN
|
||
|
||
@property
|
||
def is_blocker(self) -> bool:
|
||
return False
|
||
|
||
async def probe(self) -> ProbeResult:
|
||
ffmpeg_path = toolchain.resolve("ffmpeg")
|
||
scrcpy_path = toolchain.resolve("scrcpy")
|
||
|
||
tools_installed = []
|
||
tools_missing = []
|
||
if ffmpeg_path:
|
||
tools_installed.append("FFmpeg")
|
||
else:
|
||
tools_missing.append("FFmpeg")
|
||
|
||
if scrcpy_path:
|
||
tools_installed.append("scrcpy")
|
||
else:
|
||
tools_missing.append("scrcpy")
|
||
|
||
metadata = {
|
||
"ffmpeg": ffmpeg_path is not None,
|
||
"scrcpy": scrcpy_path is not None,
|
||
"ffmpeg_path": ffmpeg_path,
|
||
"scrcpy_path": scrcpy_path,
|
||
"tools_installed": tools_installed,
|
||
"tools_missing": tools_missing,
|
||
}
|
||
|
||
if ffmpeg_path and scrcpy_path:
|
||
return ProbeResult(
|
||
id=self.probe_id,
|
||
category=self.category,
|
||
title="Video Recording Toolchain",
|
||
status=ProbeStatus.PASS,
|
||
is_blocker=self.is_blocker,
|
||
summary="录屏工具已就绪(FFmpeg + scrcpy)",
|
||
description=f"FFmpeg ({ffmpeg_path}) and scrcpy ({scrcpy_path}) are available. Live stream and high-speed video replays are active.",
|
||
metadata=metadata,
|
||
actions=[
|
||
ProbeAction(
|
||
action_type="hint",
|
||
label="Toolchain Active",
|
||
payload="FFmpeg and scrcpy are installed and active.",
|
||
)
|
||
],
|
||
)
|
||
|
||
missing_str = " & ".join(tools_missing)
|
||
actions = []
|
||
|
||
if platform.os_type == OSType.WINDOWS:
|
||
actions.append(
|
||
ProbeAction(
|
||
action_type="command",
|
||
label="Install via WinGet",
|
||
payload="winget install Gyan.FFmpeg Genymobile.scrcpy",
|
||
)
|
||
)
|
||
actions.append(
|
||
ProbeAction(
|
||
action_type="command",
|
||
label="Run PowerShell Setup",
|
||
payload="powershell -ExecutionPolicy Bypass -File scripts/install_deps.ps1",
|
||
)
|
||
)
|
||
elif platform.os_type == OSType.MACOS:
|
||
actions.append(
|
||
ProbeAction(
|
||
action_type="command",
|
||
label="Install via Homebrew",
|
||
payload="brew install ffmpeg scrcpy",
|
||
)
|
||
)
|
||
else:
|
||
actions.append(
|
||
ProbeAction(
|
||
action_type="command",
|
||
label="Install on Linux",
|
||
payload="sudo apt-get install -y ffmpeg scrcpy",
|
||
)
|
||
)
|
||
actions.append(
|
||
ProbeAction(
|
||
action_type="command",
|
||
label="One-Click Install Script",
|
||
payload="bash scripts/install_deps.sh",
|
||
)
|
||
)
|
||
|
||
return ProbeResult(
|
||
id=self.probe_id,
|
||
category=self.category,
|
||
title="Video Recording Toolchain",
|
||
status=ProbeStatus.FAIL,
|
||
is_blocker=self.is_blocker,
|
||
summary=f"缺少 {missing_str}",
|
||
description=f"Video toolchain is required for screen streaming and test replay recording. Missing: {missing_str}.",
|
||
metadata=metadata,
|
||
actions=actions,
|
||
)
|