diff --git a/tui-plugins/oc-session-all.js b/tui-plugins/oc-session-all.js index 6e10e18..d2d93ee 100644 --- a/tui-plugins/oc-session-all.js +++ b/tui-plugins/oc-session-all.js @@ -670,7 +670,7 @@ function mmFindDisabled(connected) { async function openModelManager(context) { try { - // 层级状态机:view = list | scope | provider | model | action | find + // 层级状态机:view = list | scope | provider | model | action | find | found let view = "list" let target = null // 当前厂商 {id,name,models} let pendingModel = null @@ -876,7 +876,7 @@ async function openModelManager(context) { } const pick = await context.ui.dialog.select({ title: "已停用/已删除的厂商", - placeholder: "选一个恢复(← 返回上一级)", + placeholder: "选一个进入(← 返回上一级)", options: [ { title: "← 返回上级", value: MM_BACK }, ...disabled.map((d) => ({ @@ -889,9 +889,58 @@ async function openModelManager(context) { view = "list" continue } - mmEnqueue("reset", { provider: pick }) + // 2026-10-20:选中不再直接入队+弹回最外层(用户反馈「点不进去,复原不了」), + // 改为进入该厂商的确认层,由用户明确点「恢复」才入队 + const d = disabled.find((x) => x.id === pick) + if (!d) { + view = "list" + continue + } + target = d + view = "found" + continue + } + + // ── 已停用/已删除厂商 · 恢复确认层 ─────────────────────────────── + if (view === "found") { + const d = target + if (!d) { + view = "list" + continue + } + const status = d.deleted ? "已删除(彻底摘除节点)" : "已停用(models 已清空)" + const pick = await context.ui.dialog.select({ + title: "找回厂商 · " + d.name, + placeholder: status + ",可从出厂集恢复…", + options: [ + { title: "← 返回上级(已停用列表)", value: MM_BACK }, + { + title: "♻️ 恢复该厂商(从出厂集拉回 " + d.models.length + " 个模型)", + value: "__restore__", + }, + { + title: "📋 出厂模型:" + (d.models.length ? d.models.slice(0, 6).join(", ") + (d.models.length > 6 ? " …" : "") : "(无)"), + value: "__info__", + }, + ], + }) + if (!pick || pick === MM_BACK) { + view = "find" + continue + } + if (pick === "__info__") { + try { + context.ui.toast.show({ + message: d.name + " 出厂模型(" + d.models.length + "):" + d.models.join(", ").slice(0, 300), + variant: "info", + duration: 6000, + }) + } catch {} + continue // 停留在本层 + } + mmEnqueue("reset", { provider: d.id }) context.ui.toast.show({ - message: "已入队:恢复 " + pick + "(从出厂集拉回),daemon 写完自动热重载", + message: "已入队:恢复 " + d.name + "(从出厂集拉回),daemon 写完自动热重载", variant: "info", }) view = "list"