Skip to content
Merged

Dev #1746

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
4bebf23
Update changelog.md
SengokuCola May 21, 2026
15a7925
fix: webui表达方式-AI审核记录表格无法滚动的问题
ChinoKou May 22, 2026
d039e1d
Harden statistics report rendering
A-Dawn May 22, 2026
dee361f
build: 更新 Dashboard 与插件 SDK 版本
SengokuCola May 23, 2026
edf96c4
feat: 完善表达审核记录筛选与展示
SengokuCola May 23, 2026
46549b1
feat: 限制多模态请求图片数量
SengokuCola May 23, 2026
0ff547d
feat: 支持中期记忆专用模型
SengokuCola May 23, 2026
88b8e98
feat: 展示推理过程模型信息
SengokuCola May 23, 2026
a611233
feat: 增加 replyer 请求前 Hook
SengokuCola May 23, 2026
0d84345
feat: 支持回复频率为零时静默接收
SengokuCola May 23, 2026
9d9e5a5
refactor: 优化插件市场和表情资源展示
SengokuCola May 23, 2026
1c885b7
fix: webui长期记忆为空时, "前往长期记忆控制台" 按钮无效的问题
ChinoKou May 23, 2026
b67ab22
Merge remote-tracking branch 'upstream/dev' into dev
ChinoKou May 23, 2026
26ace1b
Merge commit from fork
SengokuCola May 23, 2026
b5ca929
feat: 增加推荐插件
SengokuCola May 23, 2026
fa3ee6c
通过webui访问统计文件
SengokuCola May 23, 2026
9225e42
Merge pull request #1736 from ChinoKou/dev
SengokuCola May 24, 2026
68393f3
fix: 修复 WebUI 黑话检索结果异常
SengokuCola May 25, 2026
7e523ce
Merge branch 'dev' of https://github.com/Mai-with-u/MaiBot into dev
SengokuCola May 25, 2026
2eab150
fix(A_memorix): 修复知识导入清单失效逻辑
A-Dawn May 25, 2026
30c853a
增加独立timing gate模型
SengokuCola May 25, 2026
652cdab
Merge branch 'Mai-with-u:dev' into dev
A-Dawn May 25, 2026
e339ec5
Merge pull request #1741 from A-Dawn/dev
A-Dawn May 25, 2026
fe55327
feat: 支持插件组件自定义 RPC 超时
SengokuCola May 25, 2026
377b6b2
fix: 优化 dashboard toast 自动消失
SengokuCola May 25, 2026
e701545
更新开发容器配置:新增专用 Dockerfile 和路径修正脚本,重写 devcontainer.json。修改 .gitignore,使…
Snowlights2022 May 25, 2026
fa750c8
Merge pull request #1743 from Snowlights2022/Update-envcontainers-config
SengokuCola May 25, 2026
8d2946a
feat: 增加图片缓存定时清理
SengokuCola May 25, 2026
f9b6da2
Merge branch 'dev' of https://github.com/Mai-with-u/MaiBot into dev
SengokuCola May 25, 2026
8280c7c
更新文件
SengokuCola May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM mcr.microsoft.com/devcontainers/python:1-3.13-bookworm

# 修复 Yarn APT 仓库 GPG 密钥过期(NO_PUBKEY 62D54FD4003F6525)
# 必须在任何 apt-get update 之前移除,否则 features 中的 apt-packages 等会失败
RUN rm -f /etc/apt/sources.list.d/yarn.list

# 安装 uv:与生产 Dockerfile 一致
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

# 需要使用 gitpod-remote-ssh 扩展的开发者请注释下面三行构建命令
RUN for d in /home/vscode/.vscode-server/extensions/gitpod.gitpod-remote-ssh-*; do \
[ -d "$d" ] && mv "$d" "${d}.disabled"; \
done; exit 0
111 changes: 80 additions & 31 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,31 +1,80 @@
{
"name": "MaiBot-DevContainer",
"image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye",
"features": {
"ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {
"packages": [
"tmux"
]
},
"ghcr.io/devcontainers/features/github-cli:1": {}
},
"forwardPorts": [
"8000:8000"
],
"postCreateCommand": "pip3 install --user -r requirements.txt",
"customizations": {
"jetbrains": {
"backend": "PyCharm"
},
"vscode": {
"extensions": [
"tamasfe.even-better-toml",
"njpwerner.autodocstring",
"ms-python.python",
"KevinRose.vsc-python-indent",
"ms-python.vscode-pylance",
"ms-python.autopep8"
]
}
}
}
{
"name": "MaiBot-DevContainer",
"build": {
"dockerfile": "Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
"moby": true,
"installDockerBuildx": true,
"installDockerComposeSwitch": true,
"version": "latest",
"dockerDashComposeVersion": "latest"
}
},
// 同时转发 API 端口(8000)和 WebUI 面板端口(8001)
"forwardPorts": [
8000,
8001
],
// 开发环境变量:对齐生产部署的必要 env 设定
"containerEnv": {
"MAIBOT_LOCALE": "zh-CN",
"MAIBOT_LEGACY_0X_UPGRADE_CONFIRMED": "1",
"TZ": "Asia/Shanghai",
"EULA_AGREE": "1b662741904d7155d1ce1c00b3530d0d",
"PRIVACY_AGREE": "9943b855e72199d0f5016ea39052f1b6"
},
// 将 .venv/bin 加入 PATH,对齐生产镜像的 ENV PATH="/MaiMBot/.venv/bin:${PATH}"
// 清空从宿主机继承的 HTTP_PROXY,网络路由由 Docker 决定,与宿主机无关
// COMPOSE_FILE 指定仅 devcontainer 内加载的覆盖文件,容器外 docker compose 不受影响
"remoteEnv": {
"PATH": "${containerWorkspaceFolder}/.venv/bin:${containerEnv:PATH}",
"HTTP_PROXY": "",
"HTTPS_PROXY": "",
"COMPOSE_FILE": "docker-compose.yml:docker-compose.devcontainer.yml"
},
// 处理WSL/开发容器遗留的 safe.directory ;修复 Docker-outside-of-Docker 挂载路径;使用uv安装依赖
"postCreateCommand": "git config --global --get-all safe.directory | grep -qx '${containerWorkspaceFolder}' || git config --global --add safe.directory ${containerWorkspaceFolder}; chmod +x ${containerWorkspaceFolder}/.devcontainer/setup-dood-override.sh && ${containerWorkspaceFolder}/.devcontainer/setup-dood-override.sh ${containerWorkspaceFolder}; uv sync",
// 启动时重置 safe.directory ;修改 docker-config 权限,使得 WSL 和容器内用户都能访问修改
"postStartCommand": "git config --global --unset-all safe.directory 2>/dev/null; git config --global --add safe.directory ${containerWorkspaceFolder}; sudo chmod -R a+rwX ${containerWorkspaceFolder}/docker-config ${containerWorkspaceFolder}/data 2>/dev/null || true",

"customizations": {
"jetbrains": {
"backend": "PyCharm"
},
// 配置VS Code插件和设置
"vscode": {
"extensions": [
// 显式列出以在容器内安装和激活copilot和智能体所需workspace组件
"github.copilot",
"github.copilot-chat",
// github.copilot-chat模型提供程序
"vizards.deepseek-v4-for-copilot",
"johnny-zhao.oai-compatible-copilot",

// 开发相关插件
"tamasfe.even-better-toml",
"njpwerner.autodocstring",
"ms-python.python",
"KevinRose.vsc-python-indent",
"ms-python.vscode-pylance",
"ms-python.autopep8",
"charliermarsh.ruff"
],
"settings": {
// 使用uv创建的虚拟环境
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"python.terminal.activateEnvironment": true,
// Python文件使用ruff格式化、自动整理import
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}
}
}
}
62 changes: 62 additions & 0 deletions .devcontainer/setup-dood-override.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/bin/sh
# ============================================================================
# Docker-outside-of-Docker (DooD) bind mount 路径修正脚本
# ============================================================================
# 问题:VS Code devcontainer 将宿主机项目路径(如 /home/user/MaiBot)挂载到
# 容器内的 ${containerWorkspaceFolder}。当 docker compose 在容器内执行时,
# Docker Compose 将相对路径 ./ 解析为容器内路径,发送给宿主机 Docker 守护进程。
# 守护进程在宿主机上找不到同名路径,自动创建空目录,导致数据"消失"。
#
# 解决:从 /proc/1/mountinfo 提取宿主机真实项目路径,生成 docker-compose.devcontainer.yml,
# 将 bind mount 源路径改写为宿主机绝对路径。该文件仅在 devcontainer 内通过
# COMPOSE_FILE 环境变量加载,容器外 docker compose 不受任何影响。
#
# 兼容性:devcontainer 始终运行 Linux,本脚本依赖 /proc/1/mountinfo(Linux 内核接口)。
# Windows/macOS 宿主机的 Docker Desktop 会自动处理路径转换。
# ============================================================================

set -eu

WORKSPACE_FOLDER="${1:-/workspaces/MaiBot}"
OVERRIDE_FILE="${WORKSPACE_FOLDER}/docker-compose.devcontainer.yml"

# 从 /proc/1/mountinfo 提取宿主机上对应 workspace 的真实路径
# mountinfo 格式: mount_id parent_id major:minor root mount_point options - fs_type source super_options
# 我们需要第5列(mount_point)匹配 workspace,取第4列(root)为宿主机路径
HOST_ROOT=$(awk -v ws="$WORKSPACE_FOLDER" '$5 == ws {print $4; exit}' /proc/1/mountinfo)

if [ -z "$HOST_ROOT" ]; then
echo "[devcontainer] ⚠ 未能从 /proc/1/mountinfo 检测到 ${WORKSPACE_FOLDER} 的宿主机路径"
echo "[devcontainer] docker compose 的 bind mount 可能指向错误位置,数据不会持久化"
exit 0
fi

echo "[devcontainer] 检测到宿主机项目路径: ${HOST_ROOT}"

# 生成 docker-compose.devcontainer.yml(通过 COMPOSE_FILE 加载)
# 仅覆盖 volumes 配置,其余配置继承自 docker-compose.yml
cat > "$OVERRIDE_FILE" << OVERRIDE_EOF
# 此文件由 .devcontainer/setup-dood-override.sh 自动生成
# 修复 Docker-outside-of-Docker 场景下 bind mount 的宿主机路径解析问题
# 仅在 devcontainer 内通过 COMPOSE_FILE 环境变量加载,容器外 docker compose 不受影响
# 请勿手动编辑,删除后将在下次容器创建时重新生成
services:
core:
volumes:
- ${HOST_ROOT}/docker-config/mmc:/MaiMBot/config
- ${HOST_ROOT}/data/MaiMBot:/MaiMBot/data
- ${HOST_ROOT}/data/MaiMBot/emoji:/data/emoji
- ${HOST_ROOT}/data/MaiMBot/plugins:/MaiMBot/plugins
- ${HOST_ROOT}/data/MaiMBot/logs:/MaiMBot/logs
- ${HOST_ROOT}/depends-data:/MaiMBot/depends-data
napcat:
volumes:
- ${HOST_ROOT}/docker-config/napcat:/app/napcat/config
- ${HOST_ROOT}/data/qq:/app/.config/QQ
- ${HOST_ROOT}/data/MaiMBot:/MaiMBot/data
sqlite-web:
volumes:
- ${HOST_ROOT}/data/MaiMBot:/data/MaiMBot
OVERRIDE_EOF

echo "[devcontainer] ✓ 已生成 ${OVERRIDE_FILE}"
2 changes: 1 addition & 1 deletion .github/workflows/publish-webui-dist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: "1.2.0"
bun-version: "1.2.1"

- name: Build dashboard
working-directory: dashboard
Expand Down
Loading
Loading