feat: 编辑器实时探测并显示已关联虚拟环境

fix: 按系统 ANSI 代码页解码子进程输出,修复中文日志乱码
This commit is contained in:
2026-10-24 22:30:10 +08:00
parent 23565b40a4
commit dd7612bc74
20 changed files with 1508 additions and 48 deletions
+32
View File
@@ -14,6 +14,9 @@ use utoipa::{OpenApi, ToSchema};
use crate::{
cron::{self, CronPreviewRequest, CronPreviewResponse},
error::{ApiError, ApiJson, ApiResult, ErrorResponse},
python_env::{
self, InterpreterKind, VenvProbeRequest, VenvProbeResponse, VenvProbeStatus, VenvSource,
},
runs::{
model::{LogChunkResponse, TaskRunListResponse, TaskRunResponse},
routes::{
@@ -107,6 +110,25 @@ pub async fn preview_cron(
Ok(Json(preview))
}
#[utoipa::path(
post,
path = "/api/v1/python/venv",
tag = "system",
request_body = VenvProbeRequest,
responses(
(status = 200, description = "Detected Python virtual environment", body = VenvProbeResponse),
(status = 400, description = "Invalid venv probe request", body = ErrorResponse)
)
)]
pub async fn probe_python_venv(
ApiJson(request): ApiJson<VenvProbeRequest>,
) -> ApiResult<Json<VenvProbeResponse>> {
tokio::task::spawn_blocking(move || python_env::probe_venv(&request))
.await
.map(Json)
.map_err(ApiError::internal)
}
#[derive(OpenApi)]
#[openapi(
info(
@@ -118,6 +140,7 @@ pub async fn preview_cron(
health,
session,
preview_cron,
probe_python_venv,
list_tasks,
create_task,
get_task,
@@ -138,6 +161,11 @@ pub async fn preview_cron(
SessionResponse,
CronPreviewRequest,
CronPreviewResponse,
VenvProbeRequest,
VenvProbeResponse,
VenvProbeStatus,
VenvSource,
InterpreterKind,
ErrorResponse,
TaskActionType,
HttpMethod,
@@ -183,6 +211,10 @@ pub fn router(state: AppState) -> Router {
.route("/api/v1/health", get(health))
.route("/api/v1/session", get(session))
.route("/api/v1/cron/preview", axum::routing::post(preview_cron))
.route(
"/api/v1/python/venv",
axum::routing::post(probe_python_venv),
)
.route("/api/v1/openapi.json", get(openapi_json))
.merge(crate::tasks::routes::router())
.merge(crate::runs::routes::router())