feat: add vision and extension management to WebUI

This commit is contained in:
luckyyzh
2026-08-03 05:06:34 +08:00
parent dd47c3628d
commit e79485bf4c
16 changed files with 7612 additions and 3180 deletions
+18
View File
@@ -103,3 +103,21 @@ export interface PluginsResponse {
diagnostics: PluginDiagnostic[];
projectResourcesLoaded: boolean;
}
export type ExtensionScope = "global" | "project" | "builtin";
export type ExtensionStatus = "enabled" | "disabled" | "blocked";
export interface ExtensionInfo {
name: string;
path: string;
relativePath: string;
source: string;
scope: ExtensionScope;
status: ExtensionStatus;
}
export interface ExtensionsResponse {
extensions: ExtensionInfo[];
diagnostics: PluginDiagnostic[];
projectResourcesLoaded: boolean;
}
+35 -1
View File
@@ -11,6 +11,8 @@ export const enLocale: LocalePlugin = {
"common.mcp": "MCP",
"common.skills": "Skills",
"common.plugins": "Plugins",
"common.extensions": "Extensions",
"common.vision": "Vision",
"sidebar.hide": "Hide sidebar",
"sidebar.show": "Show sidebar",
"theme.light": "Switch to light mode",
@@ -43,7 +45,7 @@ export const enLocale: LocalePlugin = {
"session.output": "Output",
"session.cacheRead": "Cache Read",
"session.cacheWrite": "Cache Write",
"session.cacheHitRate": "Cache Hit Rate",
"session.cacheHitRate": "Cache Hit Rate (Main Session)",
"session.cost": "Cost",
"session.context": "Context",
"session.copy": "Copy {value}",
@@ -259,6 +261,25 @@ export const enLocale: LocalePlugin = {
"mcp.noServers": "No MCP servers configured",
"mcp.selectServer": "Select a server to edit",
"mcp.restartHint": "Saved changes apply after restarting pi (or /reload).",
"vision.title": "Vision config",
"vision.loading": "Loading…",
"vision.backend.ollama": "Local Ollama",
"vision.backend.ollamaHint": "Free and private — needs a local Ollama with a vision model pulled",
"vision.backend.openai": "OpenAI-compatible API",
"vision.backend.openaiHint": "Any OpenAI-compatible vision endpoint (cloud or self-hosted)",
"vision.ollama.host": "Ollama address",
"vision.ollama.hostPlaceholder": "e.g. http://localhost:11434",
"vision.ollama.model": "Vision model",
"vision.ollama.modelPlaceholder": "e.g. qwen3-vl:8b",
"vision.openai.baseUrl": "Base URL",
"vision.openai.baseUrlPlaceholder": "e.g. https://api.openai.com/v1",
"vision.openai.apiKey": "API Key",
"vision.openai.model": "Model",
"vision.openai.modelPlaceholder": "e.g. gpt-4o-mini / glm-4.5v",
"vision.effective": "Saved config takes effect on the next image request — no restart needed. Uploaded images are auto-transcribed into text for text-only main models (e.g. DeepSeek).",
"vision.loadFailed": "Failed to load / save config",
"vision.save": "Save",
"vision.saved": "Saved — takes effect on the next image request",
"i18n.close": "Close",
"i18n.copy": "Copy",
"i18n.copied": "Copied",
@@ -389,6 +410,19 @@ export const enLocale: LocalePlugin = {
"i18n.configuredVersion": "configured {version}",
"i18n.extensions": "Extensions",
"i18n.prompts": "Prompts",
"extensions.app": "App",
"extensions.project": "Project",
"extensions.builtin": "Built-in",
"extensions.enabled": "enabled",
"extensions.disabled": "disabled",
"extensions.blocked": "blocked",
"extensions.total": "extensions",
"extensions.status": "Status",
"extensions.source": "Source",
"extensions.path": "Path",
"extensions.noExtensions": "No direct extensions found",
"extensions.projectResourcesBlocked": "Project extensions are blocked until this project is trusted.",
"extensions.diagnostics": "diagnostics",
"i18n.themes": "Themes",
"i18n.resourceCount": "{count} {label}",
"i18n.extensionShort": "ext",
+35 -1
View File
@@ -11,6 +11,8 @@ export const zhCNLocale: LocalePlugin = {
"common.mcp": "MCP",
"common.skills": "技能",
"common.plugins": "插件",
"common.extensions": "扩展",
"common.vision": "视觉",
"sidebar.hide": "隐藏侧边栏",
"sidebar.show": "显示侧边栏",
"theme.light": "切换到浅色模式",
@@ -43,7 +45,7 @@ export const zhCNLocale: LocalePlugin = {
"session.output": "输出",
"session.cacheRead": "缓存读取",
"session.cacheWrite": "缓存写入",
"session.cacheHitRate": "缓存命中率",
"session.cacheHitRate": "缓存命中率(主会话)",
"session.cost": "费用",
"session.context": "上下文",
"session.copy": "复制{value}",
@@ -259,6 +261,25 @@ export const zhCNLocale: LocalePlugin = {
"mcp.noServers": "未配置 MCP 服务器",
"mcp.selectServer": "选择一个服务器进行编辑",
"mcp.restartHint": "保存的更改在重启 pi(或 /reload)后生效。",
"vision.title": "视觉配置",
"vision.loading": "加载中…",
"vision.backend.ollama": "本地 Ollama",
"vision.backend.ollamaHint": "免费、私密——本机 Ollama 需已拉取视觉模型",
"vision.backend.openai": "OpenAI 兼容 API",
"vision.backend.openaiHint": "任意 OpenAI 兼容的视觉端点(云端或自托管)",
"vision.ollama.host": "Ollama 地址",
"vision.ollama.hostPlaceholder": "如 http://localhost:11434",
"vision.ollama.model": "视觉模型",
"vision.ollama.modelPlaceholder": "如 qwen3-vl:8b",
"vision.openai.baseUrl": "接口地址",
"vision.openai.baseUrlPlaceholder": "如 https://api.openai.com/v1",
"vision.openai.apiKey": "API 密钥",
"vision.openai.model": "模型",
"vision.openai.modelPlaceholder": "如 gpt-4o-mini / glm-4.5v",
"vision.effective": "保存后下次识图请求立即生效,无需重启。上传图片会自动转录为文本,供纯文本主模型(如 DeepSeek)使用。",
"vision.loadFailed": "配置加载/保存失败",
"vision.save": "保存",
"vision.saved": "已保存——下次识图请求生效",
"i18n.close": "关闭",
"i18n.copy": "复制",
"i18n.copied": "已复制",
@@ -389,6 +410,19 @@ export const zhCNLocale: LocalePlugin = {
"i18n.configuredVersion": "已配置 {version}",
"i18n.extensions": "扩展",
"i18n.prompts": "提示词",
"extensions.app": "应用",
"extensions.project": "项目",
"extensions.builtin": "内置",
"extensions.enabled": "已启用",
"extensions.disabled": "已禁用",
"extensions.blocked": "已阻止",
"extensions.total": "个扩展",
"extensions.status": "状态",
"extensions.source": "来源",
"extensions.path": "路径",
"extensions.noExtensions": "未找到直接扩展",
"extensions.projectResourcesBlocked": "项目尚未受信任,项目扩展已被阻止。",
"extensions.diagnostics": "条诊断信息",
"i18n.themes": "主题",
"i18n.resourceCount": "{count}{label}",
"i18n.extensionShort": "扩展",