- 新增 uv 管理:只认程序目录副本或指定路径,支持从科大镜像下载并按 sha256 校验 - uv 环境变量(UV_*)可配置,默认相对程序目录(python / uv-cache),同时注入 uv 调用与任务进程 - 新增托管虚拟环境与 Python 版本管理:用 uv 下载解释器、预创建环境、查看已装包 - 新建任务保存时自动创建 .venv,运行期只校验、不再自动装依赖;镜像只在装包时使用 - 前端改为顶部品牌栏 + 三栏工作台,uv / 镜像源 / 虚拟环境各自独立弹窗 - 发布包构建后去掉工作区继承的低完整性标签 - 修复调度集成测试并发时误取 skipped 运行的问题
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
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>
|
|
)
|
|
}
|