更新日志
CHANGELOG · 更新日志
AI SSH 运维 Agent —— 每次功能更新在此登记(按时间倒序,最新在最上)。
V12.4 发布 · 2026-10-10(当前版本,内部版本号 12.4.0)
版本主题:状态面板扩展 + 主机清单自动同步。面板看得全(Windows
主机 / 华为网络设备指标入板),管得住(删除受控主机面板同步消失),
顺手修掉两个预存缺陷。
本版主要能力:
- 状态面板扩展(d778bbd):Windows 主机与华为 VRP 网络设备指标采集
入面板——_collect 按 device_type 三路分流(windows=PowerShell 合并
脚本 / huawei_vrp=Telnet display 命令 / 其余=Linux 四命令);VRP
管道过滤+全量回退混合策略、More 自动翻页兜底;前端按设备类型裁剪
指标行 + 设备标签;修复 _parse_win_metrics 单行 K=V 解析缺陷
(Windows 真机四项指标全空的根因)
- 面板主机与受控清单自动同步(6d75d48):DELETE /api/hosts 联动清理
monitor.yml 显式条目并触发引擎 reload;_discover 跳过不在 hosts.yml
的幽灵显式条目(消除每轮 config error,主机加回自动重新纳管);
rescan 清理已删主机旧快照/告警状态残留
- 修复预存缺陷(c20a77a 引入):llm.py list_remote_models 缩进错位被
嵌进 _to_namespace 函数体而非 LLMClient 方法,/api/models 实时模型
列表自上线起失效,现归位类内
- 质量口径:monitor_test 209 项 + gui_test 删除联动专项 4 项 +
smoke_test 166 项全过;真机验证 server-2019(Windows)四项指标
恢复、删除主机面板同步
V12.3 发布 · 2026-10-10(内部版本号 12.3.0)
版本主题:Web GUI 服务器状态面板一期——主机卡片总览。值守监测
从「出了事才响」升级为「一眼看清所有主机」:独立仪表盘视图 + 五态
卡片 + 告警联动,零新增 SSH 负载。
本版主要能力:
- MonitorEngine 快照化(monitor.py):采集结果落 _latest/_latest_ts
快照;新增 _history 环形缓冲(每主机 240 点 ≈ 2 小时滚动窗口,
一期只存不读,埋二期趋势图底座)
- dashboard() 聚合:五态判定(ok/alert/error/paused/idle)复用现有
告警状态表不重算,面板与告警永远说同一套话;每主机生效阈值由
_host_threshold() 算好下发,前端不复算;新增 GET
/api/monitor/dashboard(纯内存读取,未初始化返回 503)
- 前端仪表盘(index.html + app.js):顶栏「对话 | 状态面板」切换 +
#dash 直达;主机卡片网格(四条指标进度条超阈变红 + 阈值刻度线、
角色标签、服务徽章、「更新于 Xs 前」);汇总五态计数徽章 + 一键
值守引导;面板激活 5s 轮询、切回对话即停;WS alert 事件到达即时
刷新,告警横幅与卡片变色同步
- 质量口径:monitor_test 新增 21 项 dashboard 断言全量回归通过;
25 台真机冒烟(7 ok / 3 alert / 1 paused / 15 idle)+ 截图验证
- 内部版本号补齐:version 同步为 12.3.0(V12.1 发版时 CHANGELOG
声明 12.1.0 但 init.py 实际停留在 12.0.0,本次一并修正)
V12.1 发布 · 2026-10-04(内部版本号声明 12.1.0,version 实际未同步,见 V12.3 修正)
版本主题:30 天免费试用 + 到期授权页(Trial-to-Paid)——首次运行即享
全功能 30 天试用,到期后停留在授权页(显示机器码与购买方式)引导转化,
先体验后付费,降低买家决策门槛。
本版主要能力:
- 授权试用层(license.py):TRIAL_DAYS=30,trial.dat 记录起始日与最后
活跃时间(起始日一经写入不变、last 只增防回拨);验证过正式授权即
销毁试用资格,防止「到期删 key 再白嫖」
- Web GUI 到期授权页:授权失败不再退出,自动起受限 gate 服务并打开
授权页(机器码一键复制 + 真实联系方式 + 购买流程说明)
- 界面试用徽章:Web 顶栏常驻剩余天数,剩余 ≤7 天红色闪烁提醒
- 场景切换工具:tools/dev_lic.py(status/reset/expire/consume/restore/
key on|off)+ dev_trial.bat / dev_licensed.bat 双击一键切换
- 商业文档全面改版:安装说明 / 用户操作手册 / 用户协议 / 发货清单 /
发货说明对齐试用流程,联系方式更新为 QQ 813296487 | 微信 wokaohaoshuai
- 双 exe 重打包并完成包内三场景验证(CLI 试用 / Web 试用 / 到期 gate)
V12.0 发布 · 2026-10-04(内部版本号 12.0.0)
版本主题:Windows 全面支持 + 本机自动纳管——AI 运维助手跨出 Linux,
同一套对话交互、值守监测、受控变更分级体系,现在同时覆盖 Windows 服务器;
程序启动自动纳管本机,开箱即管脚下这台机器。
本版主要能力(详细变更见下方各条目):
- Windows 接入通道(P1):OpenSSH 官方通道、GBK/UTF-8 双重解码、
cmd/PowerShell 方言自动适配、Web/CLI 双入口添加主机
- 多行脚本 stdin 通道(P2):run_script 命令行恒定 92 字符,脚本文本
Base64 编码经 stdin 注入 PowerShell,上限 48000 字节
- 受控变更三级分级(P2):readonly / confirm / normal 全工具覆盖,
Windows 高危规则库 12 → 24 条
- 值守 Windows 角色探针(P3):scan_roles 指纹识别 IIS / SQL Server /
MySQL,双层判定 + 双去抖;并修复三套角色探针共有的恢复去抖失效缺陷
- 本机自动纳管:启动探测 127.0.0.1:22,自动登记本机(判重 / 命名避让 /
注释保全),全新安装零配置开箱即管
- 体验与工程:Web 静态资源 no-cache(升级即所见)、构建前 exe 占用检测
版本号规则:自 V11(2026-09-28 归档)以来新增 Windows 支持三阶段、
值守告警邮件、华为 VRP 接入等平台级能力,主版本号 +1 即 V12.0;此后按
主.次.修订(语义化)演进——重大平台扩展升主版本,新工具/新探针升次版本,
缺陷修复升修订号。
发布物:AI-SSH-Agent.exe / AI-SSH-Agent-Web.exe(onefile,双击即用)、
安装说明 / 用户操作手册 / 用户协议 / 添加Windows主机指南 /
THIRD-PARTY-NOTICES。交付包见 交付/AI-SSH运维Agent-V12.0-20261004/。
2026-10-04 · 本机自动纳管
版本主题:程序启动时(CLI 与 Web)自动把"运行本程序的主机"加入主机清单——
本机经 127.0.0.1 回环 SSH 与远程主机走完全相同的执行通道,装完即可对本机做 AI 运维。
变更
config.py:新增 detect_local_sshd(127.0.0.1:22 探测,读到 SSH- banner 才算,
防端口被他用)与 ensure_local_host——判重(已有回环 SSH 条目即跳过;huawei_vrp
的 127.0.0.1 是 eNSP 端口映射的 Telnet 设备,不算本机)→ hostname 清洗命名
(与现有主机同名自动加 -local 避让)→ 文本追加写 hosts.yml(保留既有注释,
不走 yaml 重写)→ 密码留空(CLI 首连交互输入 / Web 在 .env 配 HOST_PW_);
全新安装(无 hosts.yml)自动创建最小清单并将本机设为 default。main.py/webapp.py:双入口启动挂载(授权校验之后执行,失败仅提示不阻断启动)。- 判重与写入均只追加不重写,用户手工维护的集群分组注释零破坏。
验证
- 离线:smoke_test 166 项(新增本机纳管 12 项:判重/幂等/注释保留/vrp 回环不误判/
hostname 避让/字段完整);全量回归 535 项全绿(monitor 168 / win 135 / netdev 25 /
license 11 / mail 30)。 - 真机:开发机(Windows,未装 OpenSSH Server)启动正确走 no-sshd 分支跳过并给
启用指引,hosts.yml 零改动。
2026-10-04 · 值守监测 Windows 角色探针(P3)
版本主题:值守监测支持 Windows 主机——windows 角色探针接入 scan_roles
指纹自动识别(IIS / SQL Server / MySQL),单条合并 PowerShell 采集基础指标
与服务状态,告警语义与 k8s/openstack 探针对齐(dirty/clean 双去抖)。同时修复
三套探针共有的恢复去抖失效缺陷。
变更
monitor.py:Windows 基础采集分流——device_type=windows 走单条合并
PowerShell 脚本(K=V 输出 CPU/内存/C 盘/swap + 指定服务状态),状态
Running/Stopped 归一为 active/inactive,服务判定复用 Linux 通用路径;
新增 WindowsProbe(win:svc:* 键,连续 2 轮异常告警 / 连续 2 轮正常恢复);
ROLE_FINGERPRINTS 新增 windows 指纹(与 Linux 指纹天然互斥,scan_roles
零分流自动识别);ROLES 注册 windows。- 缺陷修复:k8s / openstack / windows 三套探针的 _judge_list/_judge_flag/
_judge_ok 共 6 处,dirty 分支未清零 clean 计数——主机正常过一轮后,故障→
恢复的恢复侧去抖失效(恢复第 1 轮即推 recovered)。修复为对称清零,恢复
须连续 _CLEAN_ROUNDS 轮才推送。 tests/monitor_test.py:新增 Windows 组(采集分流/解析归一/collect 注入/
probe 状态机/指纹互斥)与恢复去抖回归用例,136→168 项。config/monitor.yml:测试机 WIN01 接入(roles: [windows], services: [w3svc])。
验证
- 离线:monitor_test 168 项全绿;全量回归 523 项(smoke 154 / win 135 /
netdev 25 / license 11 / mail 30)。 - 真机端到端(Windows Server 2019 + IIS):scan_roles 命中 windows;值守
5 轮故障演练事件时序逐条吻合——轮2 svc:w3svc alert(通用判定立即)→
轮3 win:svc:w3svc alert(去抖 2 轮)→ 轮4 svc recovered(立即,windows
侧去抖静默)→ 轮5 win:svc recovered(去抖 2 轮),两层监控语义闭环。
2026-10-04 · Windows 多行脚本与受控变更分级(P2)
版本主题:新增 run_script 多行脚本工具(Windows 经 stdin 通道注入 PowerShell
脚本,Linux 原生透传 bash);全工具引入受控变更三级风险标注
(readonly/confirm/normal);Windows 高危规则库扩充至 24 条;AI 提示词同步。
变更
ssh.py:run_script Windows 实现 = stdin 通道——命令行恒定 92 字符
(iex 解码 stdin 传入的 Base64),脚本文本(首行拼静默+UTF-8 前导)→ UTF-8 →
Base64 → stdin 注入;Base64 纯 ASCII 在 GBK 解码下无损;避开超长命令行
(sshd exec 长命令不稳定)与 EncodedCommand 特征(易触发杀软行为拦截);
脚本上限 48000 字节超限报错引导拆分;cmd 方言主机与网络设备报错引导。safety.py:_DANGEROUS_WINDOWS 12→24 条(新增服务控制、计划任务、用户禁删、
防火墙与 Defender 篡改、卸载补丁、系统映像、证书删除等 13 组);新增
classify_risk 三级分类(confirm 优先;只读判定仅限无管道/分句/重定向/
命令替换的单条命令;双方言只读模式表)。tools.py:新增 run_script 工具(schema/dispatch/_run_script);
_check_multiline 三遍检测(原文 + "; " 归一喂 bash 切分器 + 空格归一喂
Windows 前瞻)抓跨行绕过;run_command/run_script 结果带 risk 字段,
readonly 日志加 [RO] 标注。agent.py:SYSTEM_PROMPT_WINDOWS 与通用模板补 run_script 用法与 risk 三级说明。
验证
- 离线单测:win_test 135 项(新增 stdin 通道/超时终止/多行三遍检测/
classify 21 例/工具层集成)+ 全量回归 491 项全绿(smoke 154 / monitor 136 /
netdev 25 / license 11 / mail 30)。 - 真机验收:Windows Server 2019 + OpenSSH 10.0p2,win_smoke 20/20 全过
(多行脚本/中文无损/normal 标注/readonly 标注/高危拦截/拦截后连接存活)。 - 过程发现并修复环境级问题:测试机双 sshd 并存(内置 Capability 7.7 与 zip
10.0p2 抢 22 端口,服务曾指向内置老版导致 exec 全挂)+ 360 杀软行为拦截
LocalSystem 下 PowerShell 子进程(杀软信任后恢复);400+ 行超大脚本仍被
360 拦截属个案,已在 README 已知边界注明。
2026-10-04 · Windows 主机接入(SSH + PowerShell,P1)
版本主题:新增 Windows 被管主机支持(device_type=windows):复用 SSH 通道连接
Windows OpenSSH,命令经 PowerShell 执行;中文 GBK 输出双重解码不乱码(连接前导
强制 UTF-8 + GBK 回落兑底);Windows 方言高危命令(递归强制删除/格式化/关机重启/
注册表系统键删除/清事件日志/改执行策略/删用户等)确认制分级;Web GUI 添加主机
设备类型新增「Windows(SSH)」。支持 Win10 1809+ / Win11 / Server 2019/2022/2025
(Server 2016 手动装 OpenSSH 可用),Win7 / 2008R2 不支持。
变更
config.py:device_type 扩展 windows;HostCfg 新增 win_shell 字段(powershell/cmd,
决定编码前导包装,非法取值回落);load_hosts 对 windows 主机默认用户 administrator;
describe() 显示 [Windows] 标签;hosts.example.yml 补 Windows 示例。ssh.py:新增 _decode_windows 双重解码(utf-8 → gbk → replace 兑底);
_wrap_windows 命令编码前导(PS 设 [Console]::OutputEncoding / cmd 切 chcp 65001),
run() 内按 device_type 包装与选解码器;gather_env_info 按设备类型分流,新增
_gather_env_windows(COMPUTERNAME/OS 版本/IP/whoami/CPU 内存,全 PowerShell 只读)。safety.py:新增 _DANGEROUS_WINDOWS 规则集(PowerShell 与 cmd 双方言正则:
Remove-Item 系递归强删含 rm/del/ri/erase 别名与任意前缀缩写、rd/rmdir/del /s、
format/diskpart/Clear-Disk、Stop-Computer/shutdown、reg delete 与 HKLM/HKU 删除、
Clear-EventLog/wevtutil cl、Set-ExecutionPolicy、删用户组、bcdedit、vssadmin delete
shadows、cipher /w)+ check_command_windows;内置规则编译失败直接暴露不静默跳过。tools.py:run_command 按设备方言路由规则集(windows→check_command_windows);
多主机并行对含 Windows 目标叠加方言规则(保持一次确认覆盖全部目标主机语义);
run_command 工具描述补 PowerShell 语法提示。agent.py:新增 SYSTEM_PROMPT_WINDOWS(PowerShell 速查表:系统/进程/服务/磁盘/
网络/事件日志;关键认知:PS 5.1 无 &&、Get-CimInstance 查 WMI、$env: 环境变量、
路径反斜杠、先读后写、不改安全基线);_pick_prompt 三分流。webapp.py+ 前端:添加主机设备类型白名单/下拉加 windows;windows 空密码被拒;
app.js 切换设备类型时默认用户 administrator 联动;弹窗副标题提示目标机前提。- 文档:新增
docs/Windows主机接入指引.txt(目标机启用 OpenSSH/防火墙/DefaultShell/
UAC 远程过滤四步 + 杀软排查 + hosts.yml 配置 + 验证与常见问题)。
验证
- 新增
tests/win_test.py75 项全通过(config 解析/规则命中放行 36 例/编码三态/
包装前导/环境采集/提示词分流/主通道路由/多主机混编/webapp 添加主机)。 - 回归无破坏:smoke_test 154、netdev_test 25、monitor_test 136、license_test 11、
mail_test 30 全通过。 - 真机验收:Windows Server 2019 测试机 win_smoke.py 待执行(用户环境)。
- 已知边界:P1 命令包装限定单行命令(多行脚本列入 P2);DefaultShell 未设为
PowerShell 时功能可用但 AI 输出质量下降。
2026-09-25 · 华为 VRP 网络设备 Telnet 接入(巡检 + 配置下发)
版本主题:新增华为 VRP 网络设备接入能力:Telnet 自实现(Python 3.13 移除 telnetlib 后纯 socket 实现),支持本地端口映射与标准 23 端口两种连接方式,AI 可对路由器/交换机执行只读巡检(net_exec)与受控配置下发(net_config),配置变更逐条安全检查 + 人工确认。
变更
- 新增
ai_agent/netdev.py:TelnetSession(IAC 协商剥离、三态登录、screen-length 0 temporary 关分页、错误回显判定、utf-8→gbk→latin-1 编码链、设备侧 [Y/N] 交互受控自动应答)+ NetDevManager 连接复用;run 返回 SSHResult 同构对象,工具层下游零改动复用。 config.py:HostCfg 新增 device_type 字段(linux/huawei_vrp),hosts.example.yml 补网络设备示例。safety.py:VRP 规则集——毁灭性命令(format / reset saved-configuration 等)直接拒绝不可确认;reboot/save/shutdown 等高危走 SafetyGate 人工确认;check_vrp_readonly 只读白名单(display/ping/tracert/screen-length)。tools.py:新增 net_exec / net_config 两个工具;HostManager 按设备类型分流(网络设备走 Telnet,Linux 走 SSH);run_command 在网络设备上自动转发为只读通道,配置命令引导用 net_config;net_config 内部托管 system-view 进出(进视图失败即中止),逐条下发 + 逐条安全确认,已确认命令自动应答设备侧 Y/N。agent.py:新增 SYSTEM_PROMPT_NETDEV 提示词(VRP 方言速查、无退出码认知、bash 习惯禁用、视图托管说明);reset/set_env 按 device_type 选模板。main.py/webapp.py:切主机/清空上下文回调链同步传 device_type,Web/CLI 切换网络设备后 AI 自动获得华为设备提示词。
验证
- 假 Telnet 服务单测
tests/netdev_test.py25 项全通过(协商剥离/三态登录/错误判定/Y-N 交互/net_config 视图托管/安全规则/误用防护/连接复用),无需真机可随时回归。 - 真机集成冒烟
tests/netdev_smoke.py(eNSP AR1:2000 / SW1:2001)13 项全通过:巡检、非只读拒绝、Linux 主机引导、run_command 分流、description 下发+撤销+回读、format 硬拒绝、save 确认拒绝、错误回显判定、慢 ping。 - 提示词选路验证
tests/nd5_verify.py14 项全通过;回归 smoke_test 154/154、monitor_test 136 通过、webapp 导入正常。 - 已知待排查:真机 save 持久化链路(确认放行 → 设备侧 Y/N 自动应答)在 eNSP 环境下未闭环(模拟环境单测通过),后续独立排查。
2026-09-25 · 值守告警邮件通知(手动输入 SMTP 账号)
版本主题:值守告警在 Web 横幅 + 报警音之外新增邮件通知;SMTP 账号由用户在 Web GUI「邮件通知」面板手动输入,保存到 monitor.yml 的 email 段。commit b4df5e5。
变更
- 新增
ai_agent/mailer.py:load/save_email_config只动 monitor.yml 的 email 段不破坏其他键(空密码沿用旧值,避免界面打码覆盖真实密码);纯标准库 smtplib 发送(SSL 465 / STARTTLS 587);MailNotifierdaemon 线程异步消费告警队列,60s 滑动窗口限 5 封防邮件风暴,发送失败记last_error绝不拖垮值守主流程。 webapp.py:hook_alert挂邮件投递(仅 alert/error 级;recovered/info 不发,告警去抖仍由监测器状态机保证);新增 RESTGET/POST /api/monitor/email(GET 密码打码只暴露 has_password)与POST /api/monitor/email/test(未保存的新配置也可直接试发)。- 前端:值守面板旁新增「邮件通知」设置区——启用开关、SMTP 服务器、端口、SSL、发信账号、授权码/密码、收件人(逗号分隔)+「保存」「发送测试邮件」;页面加载回填、密码不回填留空沿用,保存后热加载无需重启。
- 示例:
config/monitor.example.yml补 email 段模板与授权码说明。
验证
- 新增
tests/mail_test.py30 项全通过(配置读写/其他键保留/空密码沿用/校验/MIME 构造/打码/SSL 与 STARTTLS 分支 mock/通知器过滤/限流/失败兜底);tests/mail_e2e_test.py9 项全通过(TestClient 走完 GET/POST/回读/400/test 不可达路径,真实 monitor.yml 备份后验证并恢复);冒烟 154 通过 / 0 失败;monitor_test 136 通过无回归;app.js 过 node 语法校验。
2026-09-23 · 多模态视觉能力(AI 看图)
版本主题:让 AI 能看懂用户传入的本地图片(监控截图、报错图、拓扑图等),CLI 与 Web 双端传图,辅助运维判断。commit 19ce6dd。
变更
agent.run支持images参数:无图 user 消息 content 保持字符串,有图改为 OpenAI 标准数组(text 块 + image_url 块,base64 data URL);图片随消息进入上下文历史。llm.py透传零改动。- 新增
ai_agent/images.py:load_image_data_urls(白名单 png/jpg/jpeg/gif/webp/bmp + 单张 5MB 上限,ImageLoadError中文报错)。 - CLI 新增
/img:挂载本地图片(支持多张)随下一条消息发送,发送即消费;/img查看、/img clear清空;挂载时 provider 未标记 vision 给提示。 - Web 输入框「📎」多选上传 →
POST /api/image/upload(暂存tmp/images/)→ 缩略预览/移除 → 发送携带image_paths;模型 chip 用「👁 视觉」标注当前提供商。 config.pyProvider新增vision标记(默认 False,仅 UI 提示);/api/state返回 vision。- 依赖:
requirements.txt补python-multipart(FastAPI 上传 multipart 必需)。 - 文档:README / RELEASE_NOTES / CLI
/help更新。
验证
- 新增
tests/vision_test.py16 条用例全通过;冒烟 143 通过 / 0 失败;上传端点实测合法 png 保存、非法 .txt 拒绝;app.js过 node 语法校验。
记忆沉淀
- 记忆系统新增子页 ai-ssh-agent-vision(多模态详情)与 ai-ssh-agent-recent(2026-09-22 演进细节,原总览页超限迁移);总览页 ai-ssh-agent 瘦身并加子页导航;核心记忆补「多模态视觉(AI 看图)」。
2026-09-23 · Web 界面加入作者署名
版本主题:Web GUI 侧边栏顶部(标题下方)加入作者信息,个性化展示。
变更
index.html:标题彭大帅的智能运维助手下方新增署名行Tommypeng · CSDN非著名博主[IT大白鼠](小号 muted 样式)。
2026-09-22 · list_vms 增加 vmrun 兜底
版本主题:list_vms 在 vmrun 不可用(路径无效/VMware 未装/命令失败)时会抛 VMError 崩溃;改为兜底:仅列清单并把状态标为「未知」,附 warning 提示。
变更
_list_vms:vmr.list()包try/except VMError;失败时running=None,各 VM 状态显示「未知」,返回vmrun_error+warning(提示无法探测运行状态,已按清单列出)。vmrun 可用时行为不变。- 实测:vmrun 不可用→列清单+状态未知+warning 不报错;可用→正常状态。
- 冒烟:143 通过,0 失败。
2026-09-22 · 修复空 VM 清单导致全部 VM 工具不可用
版本主题:load_vmware 把「空/缺失 vms」与「vms 类型损坏」一视同仁地抛 ConfigError,导致新环境(vmware.yml 为空)下 list_vms / register_vm_by_ip 等全部 VM 工具报错,无法登记首台 VM(清单从零起步死锁)。
修复
load_vmware:vms为空/缺失时返回空清单(list_vms显示 count=0,register_vm_by_ip可正常登记首台 VM);仅当vms是列表/字符串等类型损坏时才报错(提示检查文件格式)。- 实测:空 vms dict / 缺 vms 字段 均正常返回空清单;vms 非 dict 报格式错误。
- 冒烟:143 通过,0 失败。
2026-09-22 · 修复 VM 克隆覆盖已有清单 + vmware.yml 新建补全 vmrun
版本主题:检查 AI 更新 VM 虚拟机清单(vmware.yml)逻辑发现的两个问题并修复。
修复
_vm_clone克隆前防重名:dest_name已在清单时拒绝克隆(提示换名或先移除原条目),与register_vm_by_ip的防重一致,避免静默覆盖已有 VM 清单条目。add_vmware_vm新建文件补全vmrun:vmware.yml不存在时初始化默认vmrun路径(与load_vmware兜底一致),结构完整、可自定义。
验证
- 单测:新建文件含 vmrun / 更新保留 vmrun 不覆盖其他 VM / 克隆到已登记名被拒绝 / 不同名不误拦 全通过。
- 冒烟:143 通过,0 失败。
2026-09-22 · 新增 remove_host / rename_host 工具
版本主题:给 AI 增加两个主机清单管理工具,用一条对话指令即可完成"删除/重命名主机"这类清理操作。
新增
- remove_host:从
hosts.yml删除一台 SSH 主机(破坏性操作,执行前经gate.confirm向用户确认)。默认保留其.env密码(避免被共享主机误删);传purge=true且密码不被其他主机共享时,连带清理该.env密码变量。 - rename_host:重命名一台 SSH 主机(写
hosts.yml,密码沿用)。若monitor.yml显式配置了旧主机名,自动同步改名以保持值守一致。 - 底层:
config.py新增remove_host/rename_host/del_env_var;hosts.yml的default、内存清单与当前主机随操作同步。
验证
- 单测:删除(确认/取消)/ purge 专属密码清理 / purge 共享密码保护 / 重命名 + monitor.yml 同步 / 重名与不存在拦截 全通过。
- 冒烟:143 通过,0 失败(工具数断言更新为 21)。
2026-09-22 · 值守自动跟随 hosts.yml 清单变化
版本主题:修复值守运行中修改主机清单后,一键值守清单不随之更新的问题。此前 _hosts 是构造时的快照,新增/删除主机需手动重启值守才生效。
变更
MonitorEngine新增_refresh_hosts():每轮 tick 重读hosts.yml,自动把新增主机纳入、删除主机移出监测清单(更新hm.hosts后rescan())。- hosts.yml 解析失败时保持现有清单,不中断值守。
- 值守运行中改
config/hosts.yml(增删主机)后,下一轮(约 30s)自动生效,无需重启。 - 单测:新增纳入 / 删除移除 / 解析失败保持现状 / 含刷新 tick 运行 全通过;冒烟 143 通过 0 失败。
2026-09-22 · 新增 swap 使用率监测
版本主题:性能告警补齐 swap 指标。此前仅监测 CPU/内存/磁盘,内存吃紧导致 swap 被大量换页时不会告警。
新增
_CMD_SWAP:free -m | awk '/^Swap:/{if($2+0>0) printf "%.1f", $3/$2*100; else print "0"}'(无 swap 分区恒为 0,不误报)。- 阈值判定新增
swap指标,默认阈值 50%(可配),monitor.example.yml已补说明。 - 实测:真实机器 swap=0(正常)、无分区→0、高占用 73.3% 触发、中 29.3% 正常。
2026-09-22 · 一键值守默认关闭
版本主题:值守不再随 webapp 启动自动开启,改为默认关闭、需点「一键值守」按钮手动启动,避免启动即对全部主机周期性 SSH 轮询。
变更
init_state()只初始化MonitorEngine(加载配置、自动纳管清单),不再自动start();/api/monitor默认running=false。- 启动日志由「监测器已启动」改为「监测器已就绪:可值守 N 台主机…(默认未值守,点「一键值守」启动)」。
- 前端状态灯默认灰、按钮显示「一键值守」,点击后
start才进入值守。
2026-09-22 · 告警常驻面板:异常持续可见,恢复自动变绿移除
版本主题:值守告警从「顶部单条 5s 横幅」升级为「右侧常驻告警列表」,多主机同时异常不再互相覆盖,未恢复异常持续可见。
新增
- 右侧告警常驻面板(
#alarmPanel):有未恢复异常时滑出,累积展示所有告警;每条含主机/指标/消息/时间 + 单独关闭按钮;支持「全部关闭」。多主机同时异常互不覆盖。 - 状态语义:异常(alert)入列表红色常驻;某指标恢复(recovered)时该条自动变绿标「已恢复」并短暂保留后移除;info 级(如连接失败暂停)仅短横幅提示。
- 顶部横幅降为短提示:新异常弹横幅 + 报警音作即时提醒(3.2s 自动收,可点关),常驻展示交由右侧面板。
交互
- 恢复事件与告警按
host:metric匹配,自动变色移除;也可手动关闭任意一条。 - 断线重连(history 重放)时重建未恢复告警列表。
2026-09-22 · 修复 CPU 采集命令错误
版本主题:值守告警的 CPU 采集命令取错字段,导致所有主机 CPU 恒算为 ~100%,告警完全失真(正常机器也报 CPU 100% > 90%,与真爆 CPU 的主机无法区分)。
修复
_CMD_CPU原命令top -bn1 | awk -F'id,' ...取的是id,之后的 iowait 段(100-iowait,恒 ~100),而非100-idle。- 改为正确解析 idle 字段:
top -bn1 | grep '%Cpu(s)' | grep -oE '[0-9.]+ id' | head -1 | awk '{print 100-$1}'。 - 实测:高负载(idle 0)→100、中(idle 60)→40、低(idle 99.7)→0.3;正常环境完整 tick 0 误报。
2026-09-22 · 监测值守:自动发现 + 一键值守
版本主题:Web GUI 新增「值守监测」面板,一键启停多主机监测,并自动纳管 hosts.yml 全部主机;未开机主机连续连接失败自动暂停避免刷屏,恢复后自动续。
新增功能
- 一键值守按钮(Web GUI)
- 侧边栏新增「值守监测」面板:状态灯(值守中/已停止/有暂停)+ 监测主机数 + 暂停主机数 + 「一键值守 / 停止值守」切换按钮。
-
新增
GET /api/monitor、POST /api/monitor/start、POST /api/monitor/stop接口,/api/state附带 monitor 摘要。 -
自动发现纳管
MonitorEngine新增auto_discover:一键值守自动把hosts.yml全部主机纳入监测(服务留空只盯 CPU/内存/磁盘);exclude可排除指定主机;max_fail配置连续失败阈值。-
显式在
monitor.yml配置的主机(含 services/thresholds)优先保留专属配置。 -
失败降级暂停
- 主机连续连接失败达
max_fail次后自动暂停监测(仅推一次提示,不再刷屏);每轮做存活探测,连通后自动恢复并继续监测。 - 新增 info 级事件:主机暂停/恢复只弹横幅不响报警音。
配置文件
config/monitor.example.yml:新增auto_discover/exclude/max_fail字段说明。
2026-09-22 · 支持本地 Ollama 模型(c20a77a)
版本主题:新增本地 Ollama 免 Key 接入,并让 Web 能使用本机任意自定义模型。
新增功能
- 本地 Ollama 模型接入(免 Key)
- 配置模板(
config/providers.example.yml)新增ollama提供商(keyless: true,内置qwen2.5:7b/llama3.2:3b/deepseek-r1:7b)。 Provider增加keyless标记:免 Key provider 无需在.env配 Key 即视为可用,程序自动以占位串连接http://localhost:11434/v1,数据不出本机、离线可用。-
Web 左侧栏对本地模型显示「本地」标记,直接可切换,无需填 Key。
-
Web 支持 Ollama 自定义模型
- 新增
GET /api/models接口,实时拉取当前 provider 的模型列表;Ollama 会列出本机已装的全部模型(含自定义/改名模型),不再局限于providers.yml登记项。 - Web 模型面板:切到 Ollama 后下拉自动填充本机实时模型,并支持「刷新」;新增「自定义模型名」输入框,可直接填任意模型名切换(须与
ollama list一致),与 CLI/model <名称>能力对齐。
配套改进
- 修正 Web 界面标题断言:
tests/gui_test.py由"AI SSH"改为匹配实际标题「彭大帅的智能运维助手」,消除误报。 - 文档同步:
README.md、docs/Win10虚拟机安装AI-SSH-运维Agent.txt补充 Ollama 接入与自定义模型说明。
测试
tests/smoke_test.py:新增 8 条 keyless 断言(免 Key 放行、非 keyless 仍拦截、LLMClient 构造等),119 通过 / 0 失败。tests/gui_test.py:新增/api/models三分支用例(实时列表、拉取失败、未连接),69 通过 / 1 失败(剩余 1 项为真实 SSH 现场恢复,依赖目标主机开机,与本次改动无关)。
使用前提
- 本机需安装并运行 Ollama:
ollama serve+ollama pull 模型名(模型名须与ollama list一致)。 - 在本机
config/providers.yml复制模板ollama提供商段,并把default指向ollama。
2026-09-22 · AI 运行时自主添加主机(18330f5)
版本主题:新增 add_host 工具,AI 收到用户的 IP/用户名/密码后可直接登记主机,无需再手动编辑 hosts.yml。
新增功能
add_host工具- 参数:
host(IP/域名)、user(用户名)、password(密码),可选name(主机名,缺省自动生成)与port(默认 22)。 - 添加后立即进入本地清单,
list_hosts可看到、switch_host可直接连接,无需重启。 - 同名主机再次添加时自动更新其连接信息。
- 密码不落 YAML:遵循项目约定写入项目根目录
.env(HOST_PW_<主机名>变量),并同步到进程环境,连接立即生效。
配套改进
config.py:新增add_host(写hosts.yml)与set_env_var(写.env并同步进程环境变量)。tools.py:新增add_hostschema 与实现,接入execute分发。- 顺带把上一轮 Ollama 的
AttributeError修复补提交(f0dc0b0)。
测试
tests/smoke_test.py:新增 13 条add_host断言(缺参报错、新增、持久化、同名更新、密码同步、缺省命名等),schema 工具计数 14→15,132 通过 / 0 失败。
2026-09-22 · KVM 虚机生命周期管理(46e2ecf)
版本主题:新增 KVM 虚拟机生命周期管理能力,在已连接的 SSH 宿主机上通过 virsh 管理虚机,对齐现有 VMware 工具的体验。
新增功能
kvm_list/kvm_control/kvm_snapshot/kvm_clone四个工具- 在当前已连接的 SSH 主机(KVM 宿主机)上执行 virsh(克隆用 virt-clone),先
switch_host到宿主机即可。 kvm_control:start / stop(优雅关机)/ reboot / destroy(强制销毁)。kvm_snapshot:list / create / delete。kvm_clone:用virt-clone自动复制磁盘并定义新虚机(重 IO,需确认)。- 新增
ai_agent/kvm.py:KvmDriver封装 virsh/virt-clone,通过注入的命令执行器(绑定SSHConnection.run)跑远程命令,便于测试 mock。
配套改进
- 工具 schema 计数 15 → 19;README 补充 KVM 工具表与依赖说明(libvirt-client / virt-clone / root 权限)。
测试
tests/smoke_test.py:新增 11 条 KVM 断言(虚机清单解析、高危确认拒绝/同意、命令构造、无主机提示、非法 action),143 通过 / 0 失败。
使用前提
- KVM 宿主机需安装
libvirt-client(virsh),克隆需virt-clone;管理需 root 或 libvirt 组权限。
历史提交速查
| 日期 | commit | 说明 |
|---|---|---|
| 2026-09-22 | 46e2ecf |
KVM 虚机生命周期管理 kvm_list/control/snapshot/clone(走 SSH virsh) |
| 2026-09-22 | 18330f5 |
add_host 运行时添加主机(IP/用户名/密码) |
| 2026-09-22 | f0dc0b0 |
修复 Ollama 返回缺 tool_calls/content 导致的 AttributeError |
| 2026-09-22 | 3944985 |
修复 Ollama 工具调用 502(llm 改 requests 直发带 num_ctx) |
| 2026-09-22 | c20a77a |
支持本地 Ollama 模型接入与 Web 自定义模型 |
| 2026-09-21 | 7750805 |
VMware 按 IP 自动登记虚拟机 register_vm_by_ip |
| 2026-09-21 | 67c4fa3 |
VMware Workstation 虚拟机操作能力 list_vms/vm_control/vm_snapshot/vm_clone |
| 2026-09-20 | d6de9b9 |
本地知识库读写能力 list_local_dir/read_local_file/write_local_file |
| 2026-09-20 | 3f4b6b6 |
requirements.txt 分组重写,显式声明 pydantic,补测试依赖说明 |
注:历史速查仅登记近期主要功能提交;更早改动请查阅
git log。