feat: 本地 uv 与托管 Python 环境管理
- 新增 uv 管理:只认程序目录副本或指定路径,支持从科大镜像下载并按 sha256 校验 - uv 环境变量(UV_*)可配置,默认相对程序目录(python / uv-cache),同时注入 uv 调用与任务进程 - 新增托管虚拟环境与 Python 版本管理:用 uv 下载解释器、预创建环境、查看已装包 - 新建任务保存时自动创建 .venv,运行期只校验、不再自动装依赖;镜像只在装包时使用 - 前端改为顶部品牌栏 + 三栏工作台,uv / 镜像源 / 虚拟环境各自独立弹窗 - 发布包构建后去掉工作区继承的低完整性标签 - 修复调度集成测试并发时误取 skipped 运行的问题
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { Brand, Space, Tag, Text } from '@stash/ui'
|
||||
import { fetchHealth } from '../api/client'
|
||||
|
||||
/**
|
||||
* 顶部导航:品牌 + 引擎状态。
|
||||
*
|
||||
* 配置入口都收进任务调度页的三栏卡片里(uv / 镜像源 / 虚拟环境都用弹窗),
|
||||
* 所以这里不再放页面级导航。
|
||||
*/
|
||||
export function AppHeader() {
|
||||
const healthQuery = useQuery({
|
||||
queryKey: ['health'],
|
||||
queryFn: ({ signal }) => fetchHealth(signal),
|
||||
refetchInterval: 30_000,
|
||||
})
|
||||
|
||||
const status = healthQuery.isPending
|
||||
? { tone: 'neutral' as const, label: '检测中' }
|
||||
: healthQuery.isError
|
||||
? { tone: 'danger' as const, label: '引擎离线' }
|
||||
: { tone: 'success' as const, label: '引擎在线' }
|
||||
|
||||
return (
|
||||
<div className="app-header">
|
||||
<div className="app-header-brand">
|
||||
<Brand name="TaskPilot" mark="TP" />
|
||||
<Text className="app-header-tagline" size="xs" tone="muted">
|
||||
本地任务调度 · Windows
|
||||
</Text>
|
||||
</div>
|
||||
|
||||
<Space className="app-header-status" gap="xs" align="center">
|
||||
<Tag tone={status.tone} dot>
|
||||
{status.label}
|
||||
</Tag>
|
||||
<Text size="xs" tone="muted">
|
||||
{healthQuery.data?.version
|
||||
? `Rust 引擎 v${healthQuery.data.version}`
|
||||
: '127.0.0.1:3000'}
|
||||
</Text>
|
||||
</Space>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user