-
Notifications
You must be signed in to change notification settings - Fork 179
Claude/fix chat message error 018v cdth hgg9n5 ue9z3 nm zwa #20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
RonaldJEN
wants to merge
40
commits into
MiniMax-AI:main
from
RonaldJEN:claude/fix-chat-message-error-018vCdthHGG9n5UE9z3NmZWA
Closed
Claude/fix chat message error 018v cdth hgg9n5 ue9z3 nm zwa #20
RonaldJEN
wants to merge
40
commits into
MiniMax-AI:main
from
RonaldJEN:claude/fix-chat-message-error-018vCdthHGG9n5UE9z3NmZWA
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add comprehensive documentation file (CLAUDE.md) that provides AI assistants with detailed guidance on working with the Mini Agent codebase, including: - Complete project overview and key features - Detailed repository structure and architecture explanation - Core components documentation (Agent, LLM abstraction, Tools, Config) - Development workflows and setup instructions - Code style conventions and commit message format - Guidelines for adding new tools and MCP integrations - Testing best practices and debugging tips - Common pitfalls and troubleshooting guide - Quick reference for common tasks This guide helps AI assistants understand the codebase structure, follow project conventions, and make appropriate contributions.
…a-01QbTDpo1uew3iGn9Tp4ADYE docs: add comprehensive CLAUDE.md guide for AI assistants
问题: - 使用智谱 GLM 等非 MiniMax 模型时,API 返回 response.choices 为 None - reasoning_split 是 MiniMax 特有的参数,其他模型不支持 修复: 1. 在 OpenAIClient 添加 enable_reasoning_split 参数 2. 只对 MiniMax 模型启用 reasoning_split(自动检测) 3. 添加完善的空值检查和错误处理 4. 添加详细的日志记录以便调试 影响: - GLM、GPT 等模型现在可以正常工作 - MiniMax 模型保持原有的 reasoning_split 功能 - 更好的错误提示帮助调试问题
问题: - 智谱 GLM 使用 reasoning_content 字段(字符串格式) - MiniMax 使用 reasoning_details 字段(列表格式) - 之前的代码只支持 MiniMax 格式,导致 GLM 的思考内容丢失 改进: 1. 自动检测模型类型和推理格式 - GLM 模型 -> reasoning_content (字符串) - MiniMax 模型 -> reasoning_details (列表) - 其他模型 -> 不启用推理 2. 响应解析支持两种格式 - 优先检查 reasoning_content (GLM) - 回退到 reasoning_details (MiniMax) - 添加详细的调试日志 3. 消息转换支持两种格式 - 发送历史消息时使用正确的格式 - 确保交错思维(Interleaved Thinking)正常工作 4. LLMClient 自动启用 GLM 的 reasoning_split - GLM 和 MiniMax 都支持该参数 - GPT 等其他模型自动禁用 影响: - GLM 模型现在可以完整支持交错思维 - MiniMax 保持原有功能 - 更好的跨模型兼容性
…013bdm9y69geacXCsXYQZhgq Claude/fix OpenAI response null 013bdm9y69geac x cs xyq zhgq
…t to handle OpenAI provider correctly for GLM models. Adjust tests to ensure proper configuration loading and provider handling.
修改内容: - BashTool.__init__ 添加 workspace_dir 参数 - 在所有子进程创建时添加 cwd=workspace_dir 参数 - 将 BashTool 初始化从 initialize_base_tools 移至 add_workspace_tools - 确保 bash 命令在 workspace 目录执行,与文件工具保持一致 修复问题: - 修复 BashTool 执行目录与 workspace 不一致的问题 - 修复 bash 命令在项目根目录执行而文件工具在 workspace 的不一致性 影响范围: - mini_agent/tools/bash_tool.py: 添加 workspace_dir 参数和 cwd 支持 - mini_agent/cli.py: 调整工具初始化顺序
…1jHHk1CCwx9bfHLa43Aza feat(tools): 添加 BashTool workspace 目录支持
新增功能: - 添加 GLMSearchTool 单查询搜索工具 - 添加 GLMBatchSearchTool 批量并行搜索工具 - 支持配置文件和环境变量配置 API Key - 集成到工具加载系统 实现特性: - 异步执行支持 - 线程池并发搜索 - 可配置搜索参数(引擎、数量、时间过滤、内容大小) - 优雅的错误处理和格式化输出 - 完整的类型提示和文档字符串 修改文件: - mini_agent/tools/glm_search_tool.py: 新增搜索工具实现(585行) - mini_agent/config.py: 添加 GLM Search 配置字段 - mini_agent/config/config-example.yaml: 添加配置模板 - mini_agent/cli.py: 集成工具加载逻辑 使用方法: 1. 设置 ZHIPU_API_KEY 环境变量或在 config.yaml 中配置 2. 在 config.yaml 中设置 enable_glm_search: true 3. 安装依赖: pip install zhipuai 4. Agent 可使用 glm_search() 或 glm_batch_search() 进行网页搜索
…1jHHk1CCwx9bfHLa43Aza feat(tools): 添加 GLM Search 网页搜索工具
- 添加缺失的 zhipuai>=2.0.0 依赖到 pyproject.toml - 优化 GLMSearchTool 和 GLMBatchSearchTool 返回格式: - 移除装饰性字符(===)和 emoji(❌) - 使用简洁的结构化格式 [1] Title - 保留完整搜索结果内容,不截断 - 更面向模型理解的输出格式
…1JPBnQ713GXLwHHP1rqZUVG fix(tools): 添加 zhipuai 依赖并优化搜索结果格式
- 新增 HTTPMCPServerConnection 类支持 HTTP/SSE 协议的 MCP 服务器
- 使用 mcp.client.streamable_http 模块进行 HTTP 连接
- load_mcp_tools_async 现在支持自动检测连接模式:
- 检测 mode="streamable-http" 或存在 url 字段时使用 HTTP 模式
- 默认使用 stdio 模式
- 保持与现有 stdio 模式相同的代码风格和错误处理
- 更新类型注解支持两种连接类型
现在可以在 mcp.json 中配置 HTTP MCP 服务器:
{
"mcpServers": {
"server-name": {
"mode": "streamable-http",
"url": "http://example.com/mcp",
"headers": {
"Authorization": "Bearer token",
"Content-Type": "application/json"
}
}
}
}
…1JPBnQ713GXLwHHP1rqZUVG feat(mcp): 添加 streamable-http 模式支持
- 添加 datetime 导入 - 在 Agent.__init__ 中自动注入当前日期时间到 system prompt - 格式:YYYY-MM-DD HH:MM:SS (星期几) - 使模型能够处理与时间相关的任务
…iwbPnUkoTum7PKEF8 feat(agent): 在 system prompt 中注入当前日期和时间
- 添加完整的系统架构和执行流程说明 - 包含 7 个核心部分的详细流程图 - 使用 ASCII 图表展示各个组件的交互 - 帮助开发者理解整体工作机制
添加两个完整的设计文档: 1. BACKEND_WORKSPACE_DESIGN.md - 4种 workspace 方案对比分析 - 推荐方案:统一环境 + 用户文件隔离 - 详细的实现代码示例 - 配额管理和安全控制方案 2. FASTAPI_BACKEND_ARCHITECTURE.md - 完整的 FastAPI 后端架构设计 - SQLite 数据库设计(用户、会话、消息、文件) - 核心服务模块(Session、Agent、Workspace、History) - RESTful API 接口定义 - 安全机制(命令白名单、包白名单) - 部署配置和初始化脚本 基于讨论确定的方案: - 多轮对话 session 管理 - 共享环境 + 用户隔离 - 文件持久化(只保留特定格式) - SQLite 存储对话历史
实现基于架构设计的 FastAPI 后端服务:
## 核心功能
- 简单认证系统(用户名/密码登录)
- 会话管理(创建、列表、详情、关闭)
- 多轮对话接口(支持上下文记忆)
- 对话历史持久化(SQLite)
- 工作空间管理(用户隔离)
- 文件自动保留(.pdf/.xlsx/.pptx/.docx等)
## API 接口
- POST /api/auth/login - 登录
- POST /api/sessions - 创建会话
- GET /api/sessions - 会话列表
- DELETE /api/sessions/{id} - 关闭会话
- POST /api/chat/{session_id} - 发送消息
- GET /api/chat/{session_id}/history - 对话历史
## 技术栈
- FastAPI + SQLAlchemy + SQLite
- Pydantic 数据验证
- 分层架构(API/Service/Model)
- 集成 Mini-Agent 核心
## 包白名单
基于 Claude Skills 需求分析:
- 文档处理: pypdf, reportlab, python-pptx, python-docx, openpyxl
- 数据处理: pandas, numpy
- 图像处理: Pillow
- 可视化: matplotlib, seaborn
- 工具库: requests, httpx, pyyaml, jinja2
## 文件结构
- app/ - 应用代码
- api/ - API 路由
- models/ - 数据模型
- schemas/ - Pydantic 模式
- services/ - 业务逻辑
- data/shared_env/ - 包白名单
- requirements.txt - Python 依赖
- README.md - 使用文档
- test_api.py - API 测试脚本
安全改进: - 添加 backend/.env 到 .gitignore 防止提交 API 密钥 - 添加 backend/data/database/*.db 到 .gitignore - 创建 CONFIG_SECURITY.md 安全配置文档 灵活性改进: - 将 MINIMAX_* 环境变量改为通用的 LLM_* - 支持多个 LLM 提供商 (MiniMax, GLM, OpenAI, Anthropic) - agent_service.py 中添加动态提供商选择 - .env.example 中添加多个提供商配置示例 配置变更: - LLM_API_KEY: API 密钥(替代 MINIMAX_API_KEY) - LLM_API_BASE: API 基础地址 - LLM_MODEL: 模型名称 - LLM_PROVIDER: 提供商类型 (anthropic/openai)
…iwbPnUkoTum7PKEF8 Claude/fix cli timestamp 01 ey gj qiwb pn uko tum7 pkef8
功能特性: - 用户登录界面(用户名/密码认证) - 会话管理(创建、删除、切换会话) - 实时对话界面(发送消息、查看历史) - Markdown 消息渲染(代码高亮、表格、链接) - 思考过程和工具调用可视化 - 会话状态展示(活跃/暂停/完成) - 响应式设计和现代化 UI 技术栈: - React 18.2 + TypeScript 5.2 - Vite 5.0(快速构建) - TailwindCSS 3.3(样式框架) - React Router 6.20(路由管理) - Axios(HTTP 客户端) - react-markdown(Markdown 渲染) - lucide-react(图标) - date-fns(日期处理) 项目结构: - components/: Login, SessionList, Chat, Message - services/: API 服务层封装 - types/: TypeScript 类型定义 - App.tsx: 主应用和路由配置 配置文件: - vite.config.ts: Vite 配置(代理 /api 到后端) - tailwind.config.js: Tailwind 主题配置 - tsconfig.json: TypeScript 配置 - package.json: 依赖管理
…iwbPnUkoTum7PKEF8 feat(frontend): 实现完整的 React 前端界面
认证接口修复:
- 修改登录接口接受 Form 数据而非 JSON
- 返回 session_id 而非 user_id
- LoginResponse 格式匹配前端期望
会话接口修复:
- POST /sessions/create - 创建会话(路径修复)
- GET /sessions/list - 获取会话列表(路径修复)
- GET /sessions/{id}/history - 获取消息历史(新增)
- DELETE /sessions/{id} - 删除会话
- 移除 SessionListResponse 中的 total 字段
- SessionResponse 字段匹配前端(updated_at替代last_active)
对话接口修复:
- POST /chat/{id}/message - 发送消息(路径修复)
- 使用 SendMessageRequest/Response 匹配前端
- 简化响应格式为 {message, response}
数据模型修复:
- Session.last_active → Session.updated_at
- 移除 Session.message_count 和 turn_count
Schema修复:
- 添加 CreateSessionResponse
- 添加 SendMessageRequest/Response
- 添加 MessageHistoryResponse
- 所有字段名匹配前端 TypeScript 类型
所有接口现在完全匹配前端期望的格式!
…QiwbPnUkoTum7PKEF8 fix(backend): 全面修复前后端接口匹配问题
…QiwbPnUkoTum7PKEF8 feat(backend): 添加详细错误日志以便调试
问题: - Message.id 原为 Integer,导致前端验证失败 - 前端期望所有 ID 为字符串格式 修复: - Message.id: Integer → String(36) UUID - HistoryService.save_message: 自动生成 UUID - 移除已删除的 message_count 和 turn_count 更新逻辑 相关错误: ValidationError: messages.0.id Input should be a valid string [type=string_type, input_value=1]
新增脚本: - init_shared_env.py - Python 跨平台初始化脚本(推荐) - init_shared_env.sh - Linux/Mac Shell 脚本 - init_shared_env.bat - Windows 批处理脚本 - README.md - 详细使用说明 功能: - 自动创建目录结构(shared_env, workspaces, database) - 创建 Python 虚拟环境(data/shared_env/base.venv) - 从 allowed_packages.txt 安装所有允许的包 - 支持错误处理和进度显示 使用方法: cd backend python scripts/init_shared_env.py 这解决了 "共用环境没预装" 的问题!
新增功能: - app/utils/init_env.py - 共享环境初始化工具模块 - init_shared_env() - 创建虚拟环境并安装包 - check_shared_env() - 检查环境是否存在 - app/main.py - 在 startup 事件中自动初始化 改进: - 用户无需手动运行初始化脚本 - FastAPI 首次启动时自动创建共享环境 - 批量安装包,速度更快 - 详细的日志输出 精简包列表: - 移除版本锁定,使用最新稳定版 - 只保留运行时必需的 12 个核心包 - 不包含开发工具(pytest, black 等) - 不包含危险系统包 使用方法: 直接启动后端即可,首次启动会自动初始化: uvicorn app.main:app --reload 优势: ✅ 零配置 - 用户不需要手动初始化 ✅ 更快 - 批量安装包 ✅ 更安全 - 精简的包列表 ✅ 更简单 - 一键启动
问题: - 后端通过 sys.path 导入 mini_agent 源代码 - 但 requirements.txt 中缺少 mini_agent 的依赖 - 导致导入 mini_agent 时会失败(缺少 httpx, anthropic 等) 新增依赖: - httpx>=0.27.0 (LLM API 调用) - anthropic>=0.39.0 (Anthropic SDK) - openai>=1.57.4 (OpenAI SDK) - tiktoken>=0.5.0 (Token 计数) - pyyaml>=6.0.0 (配置文件) - mcp>=1.0.0 (Model Context Protocol) - requests>=2.31.0 (HTTP 请求) 说明: - mini_agent 包本身不需要安装(通过源代码导入) - 但 mini_agent 的依赖必须在后端环境中安装 - 共享环境(base.venv)不需要这些依赖
…QiwbPnUkoTum7PKEF8 Claude/fix cli timestamp 01 ey gj qiwb pn uko tum7 pkef8
修复了后端在处理聊天消息时返回 500 错误但无详细信息的问题。 主要改进: 1. 在 chat.py 中添加详细的错误日志输出 - Agent 初始化阶段的错误捕获 - 对话执行阶段的错误捕获 - 输出完整的堆栈跟踪信息 2. 改进前端错误显示 (Chat.tsx) - 从后端响应中提取详细错误信息 - 使用 pre 标签显示多行错误 - 添加关闭按钮 3. 创建诊断脚本 (diagnose.py) - 检查 Python 版本和依赖包 - 验证 .env 配置文件 - 测试 LLM 客户端初始化 - 检查数据库连接 问题定位: - 500 错误通常由 LLM API 配置问题引起 - 用户需要在 .env 中正确配置 LLM_API_KEY 相关 issue: 前后端聊天消息接口报 500 错误
修复了数据库中旧的整数 ID 与新的 UUID 字符串 ID 不兼容导致的错误。 问题现象: 1. 获取历史记录时报 ValidationError: Input should be a valid string 2. 保存消息时报 IntegrityError: datatype mismatch 根本原因: - 旧版本使用整数 ID (autoincrement) - 新版本改为 UUID 字符串 ID - 数据库中存在两种格式的数据混合 解决方案: 1. MessageResponse Schema 添加 field_validator 自动转换 ID 类型 - 兼容整数和字符串 ID - 统一转换为字符串格式 2. 创建迁移脚本 (migrate_database.py) - 将旧的整数 ID 转换为 UUID 字符串 - 保留现有数据 - 支持备份和回滚 3. 创建重置脚本 (reset_database.py) - 快速清理旧数据 - 重建数据库表结构 - 可选清理工作空间 4. 添加详细文档 (DATABASE_MIGRATION.md) - 问题诊断指南 - 两种解决方案说明 - 故障排除步骤 相关文件: - backend/app/schemas/message.py - 添加类型转换 - backend/migrate_database.py - 数据迁移工具 - backend/reset_database.py - 数据库重置工具 - backend/DATABASE_MIGRATION.md - 迁移指南 相关 issue: 数据库 ID 类型不兼容
针对用户反馈"工具是不是没用"的问题,添加详细的工具分析和优化方案。 问题分析: - Agent 尝试用 bash + curl 做网络搜索但失败 - 缺少专业的网络搜索工具 - MCP 搜索工具未启用(disabled: true) 现状说明: - 现有 7 个基础工具都有用(文件操作、bash、会话笔记) - 但主要用于编程任务,缺少信息检索能力 - bash 工具在 Windows 环境下做网络请求容易失败 优化方案: 1. 方案 1:限制 bash 工具的网络使用(临时) 2. 方案 2:添加简单的 WebSearchTool(推荐) 3. 方案 3:启用完整的 MCP 搜索工具 推荐方案 2: - 基于 Serper API 创建简单的搜索工具 - 30 分钟内可完成 - 免费额度 2500 次/月 - 满足基本信息检索需求 相关文件: - backend/TOOLS_OPTIMIZATION.md - 完整指南 - backend/app/services/agent_service.py:84-104 - 工具创建代码 - mini_agent/config/mcp.json - MCP 工具配置 解决用户痛点:让 Agent 能回答"昆仑万维有啥利好"这类需要实时信息的问题
修复了用户反馈"工具是不是没用"的问题 - mini_agent 有搜索工具和 Skills,但后端没有加载它们。 已有资源(未被加载): 1. GLMSearchTool - 智谱 AI 网络搜索工具 2. GLMBatchSearchTool - 批量并行搜索 3. 15 个 Skills(pdf, pptx, docx, xlsx, 设计、开发工具等) 现在的改进: 1. agent_service.py 集成搜索工具 - 自动检测 ZHIPU_API_KEY 环境变量 - 如果配置了就加载 GLM 搜索工具 - 启动时显示加载状态 2. agent_service.py 集成 Skills 系统 - 使用 SkillLoader 加载所有 skills - 添加 GetSkillTool 让 Agent 按需加载 skill 内容 - 支持 15 个预置 skills 3. 更新配置 - .env.example 添加 ZHIPU_API_KEY 配置 - requirements.txt 添加 zhipuai 依赖 4. 添加完整文档 - SEARCH_AND_SKILLS_GUIDE.md 使用指南 - 包含快速开始、使用示例、故障排除 修复效果: - Agent 现在可以回答"昆仑万维有啥利好"等需要实时信息的问题 - Agent 可以使用 15 个 Skills 处理文档、设计等任务 - 启动时清晰显示加载了哪些工具 相关文件: - backend/app/services/agent_service.py:87-132 - 工具加载 - mini_agent/tools/glm_search_tool.py - 搜索工具 - mini_agent/skills/ - 15 个 skills - backend/SEARCH_AND_SKILLS_GUIDE.md - 使用指南 解决 issue: mini_agent 工具集成
回答用户疑问:为什么后端可以直接 import mini_agent 而不需要安装? 核心原理: - 通过 sys.path.insert() 将 mini_agent 源码目录添加到 Python 路径 - Python 导入时直接从源码目录加载模块 - 这是一种"开发模式",无需安装包 两种使用方式: 1. CLI 方式:uv tool install -e . 安装包 - 使用 pyproject.toml 定义 - 创建 mini-agent 命令 - 依赖由 uv 管理 2. 后端方式:sys.path 引用源码 - 直接从 mini_agent/ 目录导入 - 不需要安装 - 依赖在 backend/requirements.txt 架构优势: - 修改源码立即生效,无需重新安装 - CLI 和后端共享同一份源码 - 开发更便利 注意事项: - 依赖需要在两处手动同步 - 目录结构不能随意改变 - git 子模块需要正确初始化 文档包含: - 详细的路径计算说明 - 两种模式的对比 - 生产环境部署建议 - 常见问题解答 相关文件: - backend/app/services/agent_service.py:6-9 - sys.path 操作 - pyproject.toml - CLI 包定义 - backend/requirements.txt - 后端依赖
回应用户反馈:"安装很难吗为何要用导入的 pip install -e 不就会引用他" 用户说得完全对!pip install -e . 确实更简单、更标准。 改进内容: 1. pyproject.toml 添加 [backend] 可选依赖组 - 包含 FastAPI、SQLAlchemy 等后端专用依赖 - 可以用 `pip install -e ".[backend]"` 一次性安装所有依赖 2. 创建自动化安装脚本 - setup-backend.sh (Linux/Mac) - setup-backend.bat (Windows) - 一键安装所有依赖 3. 添加详细文档 - INSTALL_GUIDE.md - 推荐使用 pip install -e . 的理由 - README_INSTALLATION.md - 快速开始指南 - 说明新旧方式的对比 新方式的优势: ✅ Python 标准做法 ✅ 只维护一份依赖(pyproject.toml) ✅ IDE 完全支持和自动补全 ✅ 一条命令搞定:pip install -e ".[backend]" 旧方式的问题(sys.path): ❌ 不标准的 hack ❌ IDE 无法识别模块 ❌ 需要维护两份依赖文件 迁移步骤(可选): 1. pip install -e ".[backend]" 2. 删除 agent_service.py 中的 sys.path 操作(6-9 行) 3. 重启后端测试 注意:当前代码仍然保留 sys.path 方式以保持兼容性, 但强烈推荐使用 pip install -e . 方式。 相关文件: - pyproject.toml:35-45 - backend 依赖组 - backend/setup-backend.sh - Linux/Mac 安装脚本 - backend/setup-backend.bat - Windows 安装脚本 - backend/INSTALL_GUIDE.md - 详细指南 - backend/README_INSTALLATION.md - 快速开始 解决用户痛点:提供更简单、更标准的安装方式
用户提醒:"你不用都听我的,fastapi 还有那个共享环境呢" 用户说得对!我重新思考后发现: ## pip install -e ".[backend]" 的问题 1. ❌ 概念混乱 - mini_agent 是 Agent 库,不应该知道 FastAPI - 违反单一职责原则 2. ❌ 共享环境污染 - 共享环境只应包含 Agent 核心依赖 - 不应包含 FastAPI/SQLAlchemy 等后端框架 3. ❌ 部署困惑 - CLI 用户会困惑:为什么有 [backend] 选项? - 库和应用的职责不清 ## 当前方式(sys.path)的合理性 ✅ **职责分离**: - mini_agent = 纯粹的 Agent 库 - backend = 独立的 Web 应用 ✅ **共享环境纯粹**: - 只包含 Agent 核心依赖 - 不包含 Web 框架 ✅ **部署灵活**: - CLI: pip install -e . - 后端: pip install -r requirements.txt + sys.path - 其他集成: 自由选择 类似于大型项目的组织方式: - TensorFlow: core + serving + lite - Django: core + contrib - 都是库和应用分离 ## 改进方向 不是改变架构,而是改善开发体验: - 配置 IDE 支持自动补全 - 添加自动化检查确保依赖同步 - 完善文档说明设计合理性 ## 结论 撤回 pyproject.toml 中的 [backend] 依赖组。 当前的 sys.path 方式不是"hack",而是合理的架构选择: - 保持 mini_agent 作为纯粹的库 - backend 作为独立的应用 - 通过 sys.path 松耦合引用 相关文件: - backend/DEPENDENCY_STRATEGY.md - 完整分析 - pyproject.toml - 移除 backend 依赖组 - backend/requirements.txt - 保持后端依赖独立 感谢用户的提醒,让我重新审视了架构设计!🙏
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.