Merge remote-tracking branch 'upstream/main' into fix/oidc-cross-system-login

This commit is contained in:
Your Name 2026-06-09 09:13:48 +08:00
commit 60d82e6a9b
27 changed files with 70 additions and 182 deletions

View File

@ -24,6 +24,8 @@
Yuxi is an LLM-powered platform for building knowledge-base and knowledge-graph agents. It unifies **RAG retrieval**, **Milvus-backed in-knowledge-base graphs**, and **LangGraph multi-agent orchestration** into a single multi-tenant workspace: administrators configure knowledge bases, models, and permissions, while users chat — in a ChatGPT-like interface — with agents that can mount Skills, MCPs, sub-agents, and sandbox tools, and receive answers with cited sources, graph-based reasoning, and deliverable artifacts.
Navigation: [Introduction](https://xerrors.github.io/Yuxi/) [Quick Start](https://xerrors.github.io/Yuxi/intro/quick-start) [Roadmap](https://xerrors.github.io/Yuxi/develop-guides/roadmap); for the latest updates, see the [changelog](https://xerrors.github.io/Yuxi/develop-guides/changelog).
## Core Features
- 🤖 **Agent development** — Built on LangGraph, with sub-agents (SubAgents), Skills, MCPs, Tools, and middleware; long-running tasks run asynchronously on a background worker, backed by a sandbox file system for persisting, previewing, and downloading tool artifacts.
@ -52,7 +54,7 @@ Yuxi is an LLM-powered platform for building knowledge-base and knowledge-graph
**1. Clone and initialize**
```bash
git clone --branch v0.7.0.beta2 --depth 1 https://github.com/xerrors/Yuxi.git
git clone --branch v0.7.0.beta3 --depth 1 https://github.com/xerrors/Yuxi.git
cd Yuxi
# Linux/macOS

109
README.md
View File

@ -7,31 +7,25 @@
[![](https://img.shields.io/github/issues/xerrors/Yuxi?color=F48D73)](https://github.com/xerrors/Yuxi/issues)
[![License](https://img.shields.io/github/license/bitcookies/winrar-keygen.svg?logo=github)](https://github.com/xerrors/Yuxi/blob/main/LICENSE)
[![DeepWiki](https://img.shields.io/badge/DeepWiki-blue.svg)](https://deepwiki.com/xerrors/Yuxi)
[![demo](https://img.shields.io/badge/demo-00A1D6.svg?style=flat&logo=bilibili&logoColor=white)](https://www.bilibili.com/video/BV1TZEx6NEit/)
<a href="https://trendshift.io/repositories/24335" target="_blank"><img src="https://trendshift.io/api/badge/repositories/24335" alt="xerrors%2FYuxi | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
[[文档]](https://xerrors.github.io/Yuxi) · [[English]](README.en.md)
[[项目文档]](https://xerrors.github.io/Yuxi) · [[English]](README.en.md)
</div>
![arch](https://xerrors.oss-cn-shanghai.aliyuncs.com/github/arch.png)
**图由 GPT-Image-2 生成*
## 简介
语析Yuxi是一个基于大模型的智能知识库与知识图谱智能体开发平台。它把 **RAG 检索**、**Milvus 知识库内知识图谱** 与 **LangGraph 多智能体编排** 整合进统一的多租户工作台:管理员配置知识库、模型与权限,用户在类 ChatGPT 的界面中与可挂载 Skills、MCP、子智能体和沙盒工具的智能体对话并获得带引用来源、知识图谱推理与可交付产物的回答。
## 核心特性
导航:[项目介绍](https://xerrors.github.io/Yuxi/) [快速开始](https://xerrors.github.io/Yuxi/intro/quick-start) [开发路线图](https://xerrors.github.io/Yuxi/develop-guides/roadmap);最新开发动态,详见 [changelog](https://xerrors.github.io/Yuxi/develop-guides/changelog)。
- 🤖 **智能体开发** —— 基于 LangGraph 构建支持子智能体SubAgents、Skills、MCP、Tools 与中间件机制;长耗时任务由后台 worker 异步执行,配套沙盒文件系统支持工具产物落盘、预览与下载。
- 📚 **知识库RAG** —— 多格式文档解析MinerU / PaddleX / OCR可配置 Embedding 与 Rerank 模型,支持知识库评估与 PDF / 图片在线预览,检索来源回填到对话引用。
- 🕸️ **知识图谱** —— 在 Milvus 知识库内构建、展示和检索实体关系图谱,并与 chunk 检索结果融合参与智能体推理。
- 🏢 **多租户与权限** —— 用户 / 部门级权限管理,模型供应商统一配置,支持 API Key 认证供外部系统集成调用。
- ⚙️ **平台与工程化** —— Vue + FastAPI 架构,开箱即用的 Docker Compose 部署支持暗黑模式、LITE 轻量启动与生产级编排。
![image-20260606190609377](https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260606235615139.png)
## 技术栈
@ -42,56 +36,6 @@
| 存储 | PostgreSQL · Redis · MinIO · Milvus · Neo4j |
| 文档解析 | MinerU · PaddleX · RapidOCR |
| 部署 | Docker Compose |
![image-20260606190609377](https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260606235615139.png)
## 最新动态
<details>
<summary>[2026/06] v0.7.0 开发中(重要不兼容变更)</summary>
**重大变更**
- **模型配置收敛**:移除旧版 v1 模型配置与 Ollama 支持,运行时统一使用 `provider_id:model_id` 与独立 provider 模块,自定义 provider 迁移到数据库
- **智能体运行时收敛**:用户可见的 `AgentConfig` 收敛为数据库持久化的一级 `Agent`,新增 `/api/agent` 管理与运行接口,前端只提交 `agent_id`
- **知识库能力收敛**:以 Yuxi 的知识库增强图谱构建、展示、检索链路替换历史 LightRAG 集成,并移除 Upload 类型;知识库类型收敛为单个类型与只读连接器(**Dify**、**Notion**),减少历史集成带来的兼容性问题
- **Skill 安装与权限收敛**:以 `source_type / share_config / enabled` 表达来源、生效范围与启用状态;内置 Skill 启动自动入库并默认全局启用,上传/远程统一改为「解析草稿 → 确认安装」
详见 [changelog](docs/develop-guides/changelog.md)。
</details>
<details>
<summary>[2026/04/01] v0.6.0 版本发布</summary>
详见 [changelog](docs/develop-guides/changelog.md)
</details>
<details>
<summary>[2026/03/01] v0.5.0 版本发布</summary>
详见 [changelog](docs/develop-guides/changelog.md)
</details>
<details>
<summary>[2025/12/19] v0.4.0 版本发布</summary>
详见 [changelog](docs/develop-guides/changelog.md)
</details>
<details>
<summary>[2025/11/05] v0.3.0 版本发布</summary>
详见 [changelog](docs/develop-guides/changelog.md)
</details>
## 快速开始
**前置要求**:已安装 [Docker](https://docs.docker.com/get-docker/) 与 Docker Compose并准备至少一个兼容 OpenAI 接口的大模型 API。
@ -99,7 +43,7 @@
**1. 克隆代码并初始化**
```bash
git clone --branch v0.7.0.beta2 --depth 1 https://github.com/xerrors/Yuxi.git
git clone --branch v0.7.0.beta3 --depth 1 https://github.com/xerrors/Yuxi.git
cd Yuxi
# Linux/macOS
@ -121,49 +65,6 @@ docker compose up --build
> 💡 不需要知识库 / 知识图谱等重依赖时,可使用 `make up-lite` 以 LITE 轻量模式启动,加快冷启动速度。更多部署说明见 [项目文档](https://xerrors.github.io/Yuxi)。
## 示例与演示
<table>
<tr>
<td align="center">
<img src="https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260604203514048.png" width="100%" alt="对话工作台"/>
<br/>
<strong>对话工作台</strong>
</td>
<td align="center">
<img src="https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260604203704426.png" width="100%" alt="沙盒文件系统"/>
<br/>
<strong>沙盒文件系统</strong>
</td>
</tr>
<tr>
<td align="center">
<img src="https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260604205342546.png" width="100%" alt="Agentic RAG"/>
<br/>
<strong>Agentic RAG</strong>
</td>
<td align="center">
<img src="https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260604204056298.png" width="100%" alt="知识图谱"/>
<br/>
<strong>知识图谱</strong>
</td>
</tr>
<tr>
<td align="center">
<img src="https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260604210111977.png" width="100%" alt="检索评估"/>
<br/>
<strong>检索评估</strong>
</td>
<td align="center">
<img src="https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260604205611168.png" width="100%" alt="多知识源接入"/>
<br/>
<strong>多知识源接入</strong>
</td>
</tr>
</table>
## 致谢
本项目参考并引用了以下优秀开源项目,在此致以诚挚的感谢:

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "yuxi"
version = "0.7.0.beta2"
version = "0.7.0.beta3"
description = "Yuxi 智能知识库与知识图谱平台核心后端包"
readme = "README.md"
requires-python = ">=3.12,<3.14"

View File

@ -5264,7 +5264,7 @@ wheels = [
[[package]]
name = "yuxi"
version = "0.7.0.beta2"
version = "0.7.0.beta3"
source = { editable = "." }
dependencies = [
{ name = "agent-sandbox" },

View File

@ -6,6 +6,10 @@ from yuxi.utils import get_docker_safe_url
from yuxi.utils.logging_config import logger
def _requires_non_streaming_tool_calls(provider_id: str, model_id: str) -> bool:
return provider_id.startswith("siliconflow")
def load_chat_model(fully_specified_name: str, **kwargs) -> BaseChatModel:
if not fully_specified_name:
raise ValueError("model spec 不能为空")
@ -47,10 +51,14 @@ def load_chat_model(fully_specified_name: str, **kwargs) -> BaseChatModel:
from langchain_openai import ChatOpenAI
openai_kwargs = dict(kwargs)
if _requires_non_streaming_tool_calls(info.provider_id, info.model_id):
openai_kwargs.setdefault("disable_streaming", "tool_calling")
return ChatOpenAI(
model=info.model_id,
api_key=SecretStr(api_key),
base_url=base_url,
stream_usage=True,
**kwargs,
**openai_kwargs,
)

View File

@ -24,12 +24,6 @@ BUILTIN_PROVIDERS: list[dict[str, Any]] = [
# "api_key_env": "GEMINI_API_KEY",
# "models_endpoint": "https://generativelanguage.googleapis.com/v1beta/models",
# },
# {
# "provider_id": "lmstudio",
# "display_name": "LM Studio",
# "base_url": "http://localhost:1234/v1",
# "models_endpoint": "http://localhost:1234/v1/models",
# },
{
"provider_id": "deepseek",
"display_name": "DeepSeek",

View File

@ -33,7 +33,7 @@ class ModelInfo:
# 运行时配置
api_key: str
base_url: str
provider_type: str # openai / anthropic / gemini / openrouter / lmstudio
provider_type: str # openai / anthropic / gemini / openrouter
# 可选配置
headers: dict[str, str] = field(default_factory=dict)

View File

@ -20,7 +20,7 @@ from yuxi.storage.postgres.models_business import ModelProvider
VALID_MODEL_TYPES = {"chat", "embedding", "rerank"}
VALID_MODEL_SOURCES = {"manual", "remote"}
VALID_PROVIDER_TYPES = {"openai", "anthropic", "gemini", "openrouter", "lmstudio"}
VALID_PROVIDER_TYPES = {"openai", "anthropic", "gemini", "openrouter"}
_PROVIDER_ID_RE = re.compile(r"^[a-zA-Z0-9][a-zA-Z0-9_-]{1,99}$")

View File

@ -231,7 +231,7 @@ def _message_chunk_yuxi_events(
"type": "tool_call_delta",
"message_id": message_id,
"tool_call_id": tool_call_chunk.get("id"),
"name": tool_call_chunk.get("name"),
"name": tool_call_chunk.get("name") or None,
"args_delta": args_delta,
"index": tool_call_chunk.get("index") if tool_call_chunk.get("index") is not None else 0,
**route,
@ -377,7 +377,7 @@ async def _save_ai_message(
for tc in tool_calls_data:
await conv_repo.add_tool_call(
message_id=ai_msg.id,
tool_name=tc.get("name", "unknown"),
tool_name=tc.get("name") or "unknown",
tool_input=tc.get("args", {}),
status="pending",
langgraph_tool_call_id=tc.get("id"),

View File

@ -1,6 +1,6 @@
[project]
name = "yuxi-workspace"
version = "0.7.0.beta2"
version = "0.7.0.beta3"
description = "基于大模型的智能知识库与知识图谱智能体开发平台,融合了 RAG 技术与知识图谱技术,基于 LangGraph v1 + Vue.js + FastAPI + LightRAG 架构构建"
readme = "README.md"
requires-python = ">=3.12,<3.14"

View File

@ -5489,7 +5489,7 @@ wheels = [
[[package]]
name = "yuxi"
version = "0.7.0.beta2"
version = "0.7.0.beta3"
source = { editable = "package" }
dependencies = [
{ name = "agent-sandbox" },
@ -5646,7 +5646,7 @@ requires-dist = [
[[package]]
name = "yuxi-workspace"
version = "0.7.0.beta2"
version = "0.7.0.beta3"
source = { virtual = "." }
dependencies = [
{ name = "arq" },

View File

@ -30,7 +30,7 @@ services:
build:
context: .
dockerfile: docker/api.Dockerfile
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta3}
container_name: api-prod
working_dir: /app
networks:
@ -68,7 +68,7 @@ services:
build:
context: .
dockerfile: docker/api.Dockerfile
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta3}
container_name: worker-prod
working_dir: /app
networks:
@ -145,7 +145,7 @@ services:
context: .
dockerfile: docker/web.Dockerfile
target: production
image: yuxi-web:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-web:${YUXI_VERSION:-0.7.0.beta3}
container_name: web-prod
ports:
- "80:80"

View File

@ -38,7 +38,7 @@ services:
build:
context: .
dockerfile: docker/api.Dockerfile
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta3}
container_name: api-dev
working_dir: /app
volumes:
@ -86,7 +86,7 @@ services:
build:
context: .
dockerfile: docker/api.Dockerfile
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-api:${YUXI_VERSION:-0.7.0.beta3}
container_name: worker-dev
working_dir: /app
volumes:
@ -125,7 +125,7 @@ services:
build:
context: ./docker/sandbox_provisioner
dockerfile: Dockerfile
image: yuxi-sandbox-provisioner:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-sandbox-provisioner:${YUXI_VERSION:-0.7.0.beta3}
container_name: sandbox-provisioner
volumes:
- ./docker/volumes/yuxi:/app/saves
@ -179,7 +179,7 @@ services:
context: .
dockerfile: docker/web.Dockerfile
target: development
image: yuxi-web:${YUXI_VERSION:-0.7.0.beta2}
image: yuxi-web:${YUXI_VERSION:-0.7.0.beta3}
container_name: web-dev
volumes:
- ./web/src:/app/src

View File

@ -453,7 +453,7 @@ const vReveal = {
</header>
<div v-reveal class="yx-quick">
<pre class="yx-code"><code><span class="yx-c-cmt"># 1. 克隆并初始化</span>
git clone --branch v0.7.0.dev0 --depth 1 https://github.com/xerrors/Yuxi.git
git clone --branch v0.7.0.beta3 --depth 1 https://github.com/xerrors/Yuxi.git
cd Yuxi && ./scripts/init.sh
<span class="yx-c-cmt"># 2. 使用 Docker 启动</span>

View File

@ -43,6 +43,7 @@
- 收敛知识库文件解析参数:文件级 `processing_params` 统一保存 `ocr_engine``ocr_engine_config`,解析阶段直接使用该结构并保留分块参数快照。
- 修复知识库文件大小显示为 0 的问题:文件上传时 `file_sizes` 参数未正确传播或历史数据缺失导致 DB 中 `file_size``None`;新增 `MinIOClient.stat_file/astat_file` 获取文件大小方法,`add_file_record` 在 `size` 缺失时从 MinIO 回补,`_load_metadata` 加载元数据后自动为缺少 `size` 的文件从 MinIO 补全并持久化。
- 优化评估基准自动生成:生成任务支持配置队列并发数,默认 10范围 1-20。
- 完善模型供应商类型:普通聊天模型运行时新增 Anthropic provider type 适配,并清理不再支持的旧 provider type 入口。
- 重梳理知识库评估存储评估数据集、题目、评估运行和逐题结果统一入库JSONL 仅作为导入/导出格式;后端和前端 API 统一使用 dataset/run 语义;评估运行支持用户命名,历史记录按名称展示,综合评分只聚合检索指标。
- 扩展知识库上传来源:添加“从工作区上传”模式,后端将当前用户工作区文件预处理上传到 MinIO前端沿用现有 `addDocuments` 入库链路提交 MinIO URL、内容哈希和文件大小。
- 重构知识库详情页布局:`DatabaseInfo` 改为顶部详情 header + 左侧功能 tab 侧边栏 + 右侧内容区Milvus 默认进入文件管理并将检索测试、知识图谱、知识导图、检索配置、RAG 评估和评估基准统一纳入侧边栏导航;只读连接器保留检索测试与检索配置。
@ -57,6 +58,7 @@
- 优化智能体对话页细节:状态面板隐藏空 section待办名称限制为 20 个中文汉字以内,模型选择器展示供应商名称,并收紧附件状态标签与文件编辑浮动操作样式。
- 标准化 Agent run/SSE 执行链路run 创建时持久化输入消息并提交后入队worker 统一写入 Redis Stream envelopeSSE 输出 `event/data/id`、心跳注释、`Last-Event-ID` 回放和终止 `end` 事件;前端强制使用 run API 并支持 ask_user_question 中断后以 resume run 恢复;事件 envelope 构造收敛到统一 helper前端优先使用 envelope 一级 `thread_id` 路由。
- Agent run SSE 新增 `verbose=false` 精简模式:默认仍返回完整事件载荷;精简模式仅在 SSE 输出前重建最小 payload跳过 `metadata` 和空 `yuxi.agent_state`,将同一 data 内的 `request_id` 外提为单个字段,移除 chunk 中重复的 `meta`、`metadata`、`thread_id`、`response`、空 `namespace` 和图片 base64 等调试字段,保留消息增量、工具调用、工具结果、非空 Agent state、终止状态和 SSE 游标,前端订阅默认使用精简模式。
- 修复 SiliconFlow MiniMax 工具调用流式兼容MiniMax 在 OpenAI 兼容流中会在参数增量 chunk 返回空 `function.name`LangGraph v3 event stream 会将空名称写入最终工具调用并导致工具执行失败;该模型默认对工具调用禁用流式模型响应,保留 LangGraph v3 运行事件并避免 agent-chat 中出现空工具名。
- 收敛后端模块边界:文档解析从 `plugins.parser` 移动到 `knowledge.parser`,内容审查从 `plugins.guard` 移动到 `services.guard`
- 收敛文件服务边界文件预览判断抽为独立服务Viewer 文件系统的 workspace 分支复用用户 workspace 服务,线程运行时上下文解析从泛化 `filesystem_service` 拆出为 agent runtime helper。
- 升级 DeepAgents 到 0.6.7 并适配新版文件系统协议SubAgentMiddleware 改为显式 subagent specSkills prompt 补齐新版占位符sandbox/skills backend 复用新版 `ReadResult`、`GlobResult`、`GrepResult` 等协议类型,文件权限在 backend 层明确区分 skills、uploads、outputs 与 workspace保留最小 `CustomCompositeBackend` 以避免非 route glob 误扫其他 routeAgent 上下文压缩改为复用 DeepAgents SummarizationMiddleware历史摘要与大工具结果统一 offload 到 outputs。

View File

@ -8,38 +8,42 @@
### 看板
**知识库**
- [ ] office 组件预览docx/pptx 可以转PDF然后前端预览
- [ ] 知识库工具新增 query_keywords 工具,专门用于基于关键词命中的排序
- [ ] office 组件预览docx/pptx 可以转PDF然后前端预览 <Badge text="v0.7.1" />
- [ ] 知识库工具新增 query_keywords 工具,专门用于基于关键词命中的排序 <Badge text="v0.7.1" />
- [ ] 调研将当前知识库映射为虚拟文件系统的可行性,先明确文件树映射、权限边界、内容读取与 Agent 工具调用形态,再决定是否实现
- [ ] 增强知识库检索体验:增强 metadata、标签等
- [ ] 优化思维导图构建的接口设计,支持增量构建和更新
- [ ] 个人工作区增加可检索能力(但是不做向量化)
- [ ] 个人工作区增加可检索能力(但是不做向量化) <Badge text="v0.7.1" />
**智能体**
- [ ] 子智能体缺少异步的机制
- [ ] 子智能体缺少 steer 机制
- [ ] 子智能体缺少异步的机制 <Badge text="v0.7.1" />
- [ ] 子智能体缺少 steer 机制 <Badge text="v0.7.1" />
- [ ] 子智能体的双向通信,缺少 ask_for_main_agent 的机制
- [ ] 子智能体与子智能体的通信机制
- [ ] 如何停掉一个子智能体、查看智能体的进度
- [ ] RAG 评估支持 Agent 模式
- [ ] RAG 评估支持 Agent 模式 <Badge text="v0.7.1" />
- [ ] 添加 Agent 独立调用接口,方便后续评估使用
- [ ] 任务队列 <Badge text="v0.7.2" />
**并发与分布式**
- [ ] 提高 FastAPI 的并发能力
**其他**
- [ ] 历史对话新增分组(或者叫做项目)
- [ ] 集成 Memory基于 deepagents 的文件后端实现,需要考虑定位
- [ ] 模型供应商类型继续补齐非 OpenAI 兼容适配,并清理不再支持的 provider type 字样 <Badge text="v0.7.1" />
**仅设想**
- [ ] Yuxi-cli 相关的功能,放在后续版本中实现(不是类似于编程助手,而是管理平台的工,等各个 router 接口优化之后)
- [ ] Yuxi-cli 支持 `yuxi upload <DIR_NAME>`,将本地文件夹上传到系统中
### Bugs
- [ ] 目前的知识库的图片存在公开访问风险
- [ ] 点开对话的时候要能够自动定位到尾部,而不是最开始。
- [ ] HTML 渲染侧边模式底部有部分无法渲染,全屏情况下下面有白边
- [ ] Summary 无法正常触发
---

View File

@ -3,7 +3,7 @@
欢迎使用 Yuxi语析这是一个智能知识库和知识图谱 Agent 开发平台。
本指南将帮助你在几分钟内启动并运行系统,使你能够利用 LangGraph、RAG 技术和知识图谱构建 AI 驱动的知识应用。
![系统架构图](https://xerrors.oss-cn-shanghai.aliyuncs.com/github/image-20260326130844668.png)
![系统架构图](https://xerrors.oss-cn-shanghai.aliyuncs.com/github/arch.png)
::: tip 提示
@ -20,7 +20,7 @@
```bash
# 克隆最新版本
git clone --branch v0.7.0.beta2 --depth 1 https://github.com/xerrors/Yuxi.git
git clone --branch v0.7.0.beta3 --depth 1 https://github.com/xerrors/Yuxi.git
cd Yuxi
```

View File

@ -10,7 +10,7 @@ set -euo pipefail
#
# 该脚本从 backend/package/pyproject.toml 读取当前版本,
# 自动同步所有需要硬编码版本号的位置。
# --dev 模式不会更新 README.md 和 docs/intro/quick-start.md 中 git clone --branch 的版本号。
# --dev 模式不会更新 README.md、docs/intro/quick-start.md 和文档首页中 git clone --branch 的版本号。
# =============================================================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@ -70,6 +70,7 @@ if [ "$DEV_MODE" = false ]; then
echo " - README.md"
echo " - README.en.md"
echo " - docs/intro/quick-start.md"
echo " - docs/.vitepress/theme/components/YuxiHome.vue"
fi
echo ""
read -rp "确认继续? [y/N] " confirm
@ -142,8 +143,12 @@ if [ "$DEV_MODE" = false ]; then
echo "→ 更新 docs/intro/quick-start.md"
perl -pi -e "s/(git clone --branch v)[0-9]+\\.[0-9]+\\.[0-9]+(\\.[a-zA-Z0-9]+)?/\${1}${NEW_VERSION}/g" \
"${PROJECT_ROOT}/docs/intro/quick-start.md"
echo "→ 更新 docs/.vitepress/theme/components/YuxiHome.vue"
perl -pi -e "s/(git clone --branch v)[0-9]+\\.[0-9]+\\.[0-9]+(\\.[a-zA-Z0-9]+)?/\${1}${NEW_VERSION}/g" \
"${PROJECT_ROOT}/docs/.vitepress/theme/components/YuxiHome.vue"
else
echo "→ dev 模式,跳过 README.md、README.en.md 和 docs/intro/quick-start.md 的分支版本更新"
echo "→ dev 模式,跳过 README.md、README.en.md、docs/intro/quick-start.md 和文档首页的分支版本更新"
fi
# -----------------------------------------------------------------------------

View File

@ -1,6 +1,6 @@
{
"name": "yuxi-web",
"version": "0.7.0.beta2",
"version": "0.7.0.beta3",
"private": true,
"type": "module",
"scripts": {

View File

@ -31,7 +31,7 @@
</a-menu-item>
<a-menu-item
key="rename"
:icon="h(Pencil, { size: 14 })"
:icon="h(SquarePen, { size: 14 })"
@click.stop="renameChat(chat.id)"
>
重命名
@ -74,7 +74,7 @@
<script setup>
import { computed, h, ref } from 'vue'
import { message, Modal } from 'ant-design-vue'
import { ChevronDown, MoreVertical, Pencil, Pin, PinOff, Trash2 } from 'lucide-vue-next'
import { ChevronDown, MoreVertical, Pin, PinOff, SquarePen, Trash2 } from 'lucide-vue-next'
import { parseToShanghai } from '@/utils/time'
const props = defineProps({

View File

@ -60,7 +60,7 @@
@click="showEditDepartmentModal(record)"
class="action-btn lucide-icon-btn"
>
<Pencil :size="14" />
<SquarePen :size="14" />
</a-button>
</a-tooltip>
<a-tooltip title="删除部门">
@ -178,7 +178,7 @@
import { reactive, onMounted, watch } from 'vue'
import { notification, message, Modal } from 'ant-design-vue'
import { departmentApi, apiSuperAdminGet } from '@/apis'
import { Delete as Trash2, Edit3 as Pencil, Plus, RefreshCw } from 'lucide-vue-next'
import { Plus, RefreshCw, SquarePen, Trash2 } from 'lucide-vue-next'
//
const columns = [

View File

@ -1,7 +1,7 @@
<template>
<a-modal
v-model:open="visible"
width="1200px"
width="800px"
:footer="null"
:closable="false"
wrap-class-name="file-detail"

View File

@ -105,7 +105,7 @@
<a-menu>
<a-menu-item key="edit" @click.stop="showEditUserModal(user)">
<span class="user-card-menu-item">
<Pencil :size="14" />
<SquarePen :size="14" />
编辑用户
</span>
</a-menu-item>
@ -261,7 +261,7 @@ import { useUserStore } from '@/stores/user'
import { departmentApi } from '@/apis'
import {
Plus,
Pencil,
SquarePen,
Trash2,
User,
UserLock,

View File

@ -5,7 +5,7 @@ import {
Plus,
RefreshCw,
Trash2,
Edit3,
SquarePen,
Bot,
Microscope,
MoreVertical,
@ -438,7 +438,7 @@ defineExpose({
<a-menu>
<a-menu-item key="edit" @click.stop="openEditAgentModal(agent)">
<span class="agent-card-menu-item">
<Edit3 :size="14" />
<SquarePen :size="14" />
编辑智能体
</span>
</a-menu-item>

View File

@ -741,10 +741,9 @@ defineExpose({
<span>Provider Type</span>
<a-select v-model:value="providerForm.provider_type">
<a-select-option value="openai">openai</a-select-option>
<a-select-option value="anthropic">anthropic</a-select-option>
<!-- <a-select-option value="anthropic">anthropic</a-select-option>
<a-select-option value="gemini">gemini</a-select-option>
<a-select-option value="openrouter">openrouter</a-select-option>
<a-select-option value="lmstudio">lmstudio</a-select-option>
<a-select-option value="openrouter">openrouter</a-select-option> -->
</a-select>
</label>
</div>

View File

@ -72,15 +72,6 @@
<section v-else-if="!databases.length" class="sidebar-section">
<div class="sidebar-muted">暂无可访问知识库</div>
</section>
<section class="sidebar-section">
<div class="section-title">共享空间</div>
<button type="button" class="workspace-nav-item secondary disabled" disabled>
<FileTypeIcon is-dir folder-variant="enterprise" :size="18" />
<span>团队工作区</span>
<span class="soon-tag">即将支持</span>
</button>
</section>
</aside>
</template>
@ -184,23 +175,6 @@ const sharedDatabases = computed(() =>
min-height: 32px;
font-size: 13px;
}
&.disabled {
color: var(--gray-400);
cursor: not-allowed;
:deep(.file-type-icon) {
opacity: 0.45;
filter: grayscale(0.25);
}
}
}
.soon-tag {
flex: 0 0 auto;
margin-left: auto;
color: var(--gray-400);
font-size: 11px;
}
.sidebar-muted {

View File

@ -10,7 +10,6 @@ export const modelIcons = {
dashscope: `${ICON_BASE}/bailian-color.svg`,
deepseek: `${ICON_BASE}/deepseek-color.svg`,
google: `${ICON_BASE}/google-color.svg`,
lmstudio: `${ICON_BASE}/lmstudio.svg`,
minimax: `${ICON_BASE}/minimax-color.svg`,
'minimax-cn': `${ICON_BASE}/minimax-color.svg`,
modelscope: `${ICON_BASE}/modelscope-color.svg`,