Files
chenmingxuan 2ddec53954
CI / Python 3.12 / ubuntu-latest (push) Canceled after 0s
CI / Python 3.12 / windows-latest (push) Canceled after 0s
CI / Frontend tests and production build (push) Canceled after 0s
CI / Build and smoke-test Python packages (push) Canceled after 0s
feat: add Chinese UI, Responses models, and mirrored Windows setup
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.
2026-09-22 19:16:17 +08:00

140 lines
4.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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,
)