Skip to content

Feature: third-party kernel switch — full user loop (Settings UI + safe active API) #205

Description

@370025263

Problem

算法内核抽象已经有了:~/.xskill/kernels/<id>/、配置里的 kernel.kernel_id / kernel.kernels_path、离线 xskill distill --kernel,以及 OpenEarth 接入 PR #155。用户侧缺的不是「再发明一套装核方式」,而是完整闭环里最后两步:启动后能看见核、能安全切换核。

预期用户闭环:

  1. pip install 第三方 SDK / wheel(与运行 xskill 的同一 Python 环境)
  2. 按该内核自带 README 准备 ~/.xskill/kernels/<id>/(至少 kernel.py、自有 config.yaml;目录名与 KernelMetadata.id 一致)
  3. xskill serve(standalone 或 team server)启动后,平台扫描 kernel.kernels_path
  4. Dashboard 设置页展示:当前启用核、已发现核、可用/不可用及原因
  5. admin 在 UI 切换启用核;失败可读、可回退;成功后说明何时生效

当前缺口:

  • 装包与目录准备可以靠内核 README 完成,但设置页只有整份 config.yaml 编辑器,没有内核区块
  • 换核等于手改 kernel.kernel_id,看不到哪些核已发现、哪些因缺 SDK 不可用
  • feat(kernel): integrate OpenEarth SDK v2 #155 只是把某一个第三方核接进来,不等于平台已经支持用户按需更换任意第三方核
  • Dashboard 已经演进很大(overview / skills / pipeline / traj / users / canary / admin / settings),不能靠整页重做塞进换核

Proposed solution

保留现有目录契约、BaseKernel API 和 KernelCatalog 发现逻辑;平台第一期只做发现、诊断、切换。包安装与目录准备仍留在内核 README。

设计决策

  • 安装边界:不代用户 pip install,也不从 UI 上传 wheel
  • UI 落点:只在现有「设置」页、admin 可见区域上方增加「算法内核」卡片;保留下方整份 config 编辑器作逃生舱。不新增一级导航,不大改其他页
  • 切换写路径:专用 API 只改 kernel.kernel_id(校验目标核 available),不让 UI 为切核去整文件重写 yaml
  • 生效语义:与现有 config hot-reload 口径对齐。切核后返回明确状态;加载失败时不静默空跑,保留旧启用核或降级,并返回可读错误
  • 前端安全改造:纯增量。新卡片独立 DOM / JS;若 API 404(旧 serve)则隐藏卡片、不影响现有设置页
  • 权限:仅 admin。standalone 与 team server 共用同一设置入口

API / CLI 最小面

  • GET /api/v1/dashboard/admin/kernels:复用 KernelCatalog.list(),返回当前 active、各核 available/error/version/source/...
  • POST /api/v1/dashboard/admin/kernels/active:body { "kernel_id": "..." };不可用则 400 + 原因
  • CLI 可并行提供 xskill kernel list/statusxskill kernel use <id> 作运维兜底;第一期以 Dashboard 为用户主路径

前端改动范围

改设置区:展示当前启用核;列表里可用可点「启用」,不可用禁用并展示 error;切换后给出成功、失败原因、是否需重启;文案指向「请按该内核 README 准备目录并 pip install」。

Alternatives considered

  • 只靠改 config.yaml:开发者够用,对终端用户不友好,也难暴露「已装但不可用」
  • Dashboard 代装 pip / 上传 wheel:权限与环境风险高,第一期不做
  • 新开「内核」一级导航或重做设置页:Dashboard 已很大,增量卡片风险更低、可回滚
  • 平台内置并硬编码 OpenEarth:feat(kernel): integrate OpenEarth SDK v2 #155 接通单个核,不能替代可插拔换核
  • 自动从 examples 拷目录:用户应按该核 README 准备;平台不假装完成安装

明确不做(第一期)

  • Dashboard 代装 pip / 上传 wheel / 远程拉包
  • 自动从 examples 拷目录
  • 新开「内核」一级导航或重做设置页
  • 在 overview / pipeline 大面积散落内核控件(overview 只读「当前核」以后再说)
  • 热替换正在执行的 run() 中途(等本轮结束再换绑定即可)

Acceptance

  • 按 OpenEarth(feat(kernel): integrate OpenEarth SDK v2 #155)或 demo kernel README:pip install → 准备目录 → serve → 设置页能看到该核
  • 缺 SDK 时该核显示不可用及原因,不能被启用
  • admin 切换到可用核后配置中 kernel.kernel_id 更新,后续 kernel-host 使用新核;切到坏核被拒绝且旧核仍工作
  • 旧版无 kernels API 时设置页其他功能仍可用

Related

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions