Commit Graph
209 Commits
Author SHA1 Message Date
Logan.Li 8c49dd22b0 test(migrations): 断言改为校验真实意图,避免新增迁移即误报
AIOps CI / Backend (test, vet, build) (push) Canceled after 0s
AIOps CI / Agent (test, vet, build) (push) Canceled after 0s
AIOps CI / Frontend (typecheck, lint, build) (push) Canceled after 0s
AIOps CI / API integration (SQLite + redka) (push) Canceled after 0s
原断言写死"旧库只应补跑 0002/0003 两条迁移",
新增 0004_metric_aggregate_unique 与 0005_agent_settings 后必然失败。

改为校验:不得重跑基线、不得重跑 0001,
且 0002/0003 必须被执行——这才是该用例真正要守护的行为。

// Logan.Li
2026-10-18 20:10:23 +00:00
Logan.Li b4521d13a1 fix(seed): LDAP 管理密码不再硬编码,改为从 LDAP_ADMIN_PASSWORD 环境变量读取
AIOps CI / Backend (test, vet, build) (push) Canceled after 0s
AIOps CI / Agent (test, vet, build) (push) Canceled after 0s
AIOps CI / Frontend (typecheck, lint, build) (push) Canceled after 0s
AIOps CI / API integration (SQLite + redka) (push) Canceled after 0s
2026-10-19 04:10:00 +08:00
Logan.Li 1c98c25c74 feat(agentcli): 运行结果 incomplete 语义与契约文档
RunResult 增加 Outcome/Reason;触顶标记 incomplete:max_steps;
WebSocket finish 区分 incomplete 与 fatal error。补充 ai-agent docs 13 与挂点索引。
2026-10-19 03:53:09 +08:00
Logan.Li f3a4fb569f fix(deploy): 全新部署链路健壮性(0004 幂等 + 迁移前置 + 空库守卫)
AIOps CI / Backend (test, vet, build) (push) Canceled after 0s
AIOps CI / Agent (test, vet, build) (push) Canceled after 0s
AIOps CI / Frontend (typecheck, lint, build) (push) Canceled after 0s
AIOps CI / API integration (SQLite + redka) (push) Canceled after 0s
- 0004_metric_aggregate_unique 改为幂等:新库基线已由模型 uniqueIndex 建出
  uniq_metric_agg,再次 CREATE 会以 1061 重复键名中断 migrate up,
  导致 0005_agent_settings 建不出来(全新部署实测复现)
- 新增 database.IndexExists:跨 SQLite/MySQL/PostgreSQL 判断索引是否存在
- 新增 database.EnsureSchemaInitialized:服务启动遇到空库时明确失败并给出
  执行 aiops migrate up 的指引,避免「服务起来了但页面全是空数据」
- run.sh docker up/upgrade/update 先跑一次 aiops migrate up 再启动服务

// Logan.Li
2026-09-14 09:02:42 +00:00
Logan.Li 7a96381dc7 fix(version): 界面版本号改为动态读取,统一版本为 v1.0.2
界面侧栏与页脚硬编码 v1.0.0,发版后始终显示陈旧版本。

- 新增 useAppVersion hook:从后端 /version 读取并做模块级缓存
- Sidebar / MainLayout 改用该 hook
- /agent/arch 的 version 字段原先硬编码 "1.0.0",改由 main 注入 router.AppVersion
- Dockerfile 增加 AGENT_VERSION 构建参数,与镜像 VERSION 解耦,
  避免纯前端改动也触发全量 Agent 重推

统一版本:镜像 lghost/aiops:v1.0.2,内置 Agent v1.0.2。

// Logan.Li
2026-09-14 08:46:40 +00:00
Logan.Li 610402d47f fix(dashboard): 修复大屏主机列表恒为空 —— 区域表名错误且错误被静默吞掉
现象:/servers 资产里有 31 台,/dashboards 大屏一台都不显示。

根因:GetLatestReports 的 SQL 中 JOIN 了不存在的表 asset_regions,
实际表名是 asset_cloud_regions(见 model/server.go 的 Region.TableName())。
查询直接报 Error 1146,但 Scan() 的错误未校验,函数静默返回空数组,
接口始终 200 + data:[],因此前端无任何报错可循。

- agent.go: JOIN 改为 asset_cloud_regions,并补上错误校验与 500 响应
- agent_report_test.go: 移除手工创建的 asset_regions,
  改由 AutoMigrate(&model.Server{}) 级联建立 asset_cloud_regions,
  避免测试用错误表名掩盖生产问题

验证:/agent/latest 由 0 台恢复为 31 台(含未装 Agent 的 not_installed 主机)。

// Logan.Li
2026-09-14 08:29:56 +00:00
Logan.Li 59320aa410 perf: 修复 Agent 校验 CPU 热点并实现指标分层聚合与频率下发
CPU 根因:每个 Agent 请求都做一次 bcrypt 校验(实测 72ms),
30 台主机 18 req/s × 72ms ≈ 1.35 核,实测容器 CPU 135%。

- agentauth: 校验结果按 Token 哈希缓存(TTL 5min,轮换即失效),
  last_used_at 写入按 60s 节流。实测 CPU 135% → 1.6%,请求延迟 103ms → 1.6ms
- metricagg: 新增后台逐级降采样聚合 raw→1m/5m→1h→6h/1d,取代前端手动触发
- metrics_aggregate: 补 uniq_metric_agg 唯一索引(原 idx_agg 非唯一导致 upsert 插重复行)
- agent 合并配置接口 GET /agent/config:一次返回任务+探针+端口策略+频率,
  配置轮询 5s→30s;服务端可下发 report_interval,Agent 热更新 ticker 无需重装
- retention: agent_reports 保留期 7d→1d(趋势由聚合表承担)
- redis: 增加 maxmemory 512mb + volatile-lru
- fix(upgrade): 升级脚本改为 fail-fast,修复下载失败仍报 UPGRADE_OK 的静默谎报

// Logan.Li
2026-09-14 08:23:31 +00:00
Logan.Li 93abf81e40 fix(database): 修复空库基线迁移因索引命名不一致而失败
GORM 1.30 AutoMigrate 对已存在表的唯一索引执行 `DROP INDEX uni_<表>_<列>`,
而建表阶段用的是 idx_ 前缀,索引名永不匹配,空库执行基线必然以
Error 1091 (Can't DROP ...; check that column/key exists) 失败。

- 新增 indexNamedNaming,令 UniqueName 复用 IndexName 的 idx_ 命名
- BootstrapSchema 改为一次性 AutoMigrate(allModels...),
  让 GORM 在外键依赖排序生效(如 asset_cloud_regions 先于 asset_servers)

// Logan.Li
2026-09-14 07:59:36 +00:00
Logan.LiandCursor 2fd1624bec feat: 加固 Agent CLI 执行边界并更新模型目录
收紧 SSH 命令护栏、权限校验与远程执行会话,并同步主流大模型供应商列表。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 09:43:14 +08:00
Logan.Li fd60361d93 chore: 统一本地服务器与远程仓库源码
- 合并 main 与 master 历史并以服务器结构为基线
- 保留迁移、数据保留、AWS 账单与部署安全能力
- 建立 SDD 规格和 CI 验证闭环
2026-08-05 20:03:25 +08:00
Logan.Li f22e575124 fix: 提供 SQLite 迁移故障恢复开关 2026-07-30 23:49:38 +08:00
Logan.Li d8b124fc7c feat: 更新主流大模型供应商目录
- 按云服务、Coding Plan、API 网关和本地模型分组

- 新增兼容模型发现与供应商协议校验
2026-07-30 21:34:33 +08:00
Logan.Li 9b895efee3 fix: 完善多云同步验证与实例统计
- 修复华为云签名、账单字段与区域映射缓存
- 按真实云实例更新账号服务器数并补充并发测试
2026-07-29 06:35:54 +08:00
Logan.Li 132fe9ba97 feat: 补全多云资产与账单同步
- 接入 AWS、华为云和 Azure 资产及账单 API

- 按原始币种隔离统计并修正账号服务器数

- 修复侧栏菜单展开后的滚动行为
2026-07-29 06:15:00 +08:00
Logan.Li 65e2f09b97 fix: 按业务时区同步昨日账单
- 固定按 Asia/Shanghai 计算账单昨日日期

- 补充 UTC 服务器时区回归测试
2026-07-29 05:57:07 +08:00
Logan.Li dd3770a66c fix: 恢复腾讯云账单同步并完善成本预测
- 接入腾讯云单日账单、全局限频和指数退避

- 修正月末费用预测并增加账期提示和费用归因

- 补充腾讯云限频及账单归因回归测试
2026-07-29 05:44:40 +08:00
Logan.Li 88c41f0b2b fix: 恢复腾讯云主机发现 2026-07-27 17:09:25 +08:00
Logan.Li e831ec2eb1 fix: 统一 Agent 在线状态时区 2026-07-27 16:32:17 +08:00
Logan.Li e557782176 fix: 修复 Agent 状态与监控大屏 2026-07-27 15:56:03 +08:00
Logan.Li 83662487cb fix: 接通服务器V2排序链路
- 将排序参数从V2 Handler传递至Service与Repository

- 增加仓储分页排序与参数白名单测试
2026-07-26 23:38:06 +08:00
Logan.Li 09e6271bb4 feat: 支持服务器主机名排序
- 服务器列表默认按主机名升序并支持表头切换

- 后端按白名单排序并区分分页缓存键
2026-07-26 23:21:10 +08:00
Logan.Li 7a1680884d fix: 压缩RDP实时画面传输
- 将原始RGBA位图压缩为PNG后通过WebSocket发送
- 降低低带宽代理链路下的RDP首帧延迟
- 增加位图压缩与异常数据测试
2026-07-25 17:39:14 +08:00
Logan.Li 699560a270 fix: 完善Agent系统信息上报
- 持续上报系统元数据并动态更新运行时长
- 兼容旧版心跳补齐资产运行时长
- 修复监控指标当前值重复显示单位
2026-07-25 17:14:55 +08:00
Logan.Li 3a3f77ea62 fix: 优化腾讯云账单同步限频
- 全局限制腾讯云API调用频率为每秒4次以内
- 对RequestLimitExceeded增加指数退避重试
- 补充限频回归测试并更新账单同步支持说明
2026-07-25 16:36:02 +08:00
Logan.Li 7bc416d22a fix: 修复Agent指标时区查询
- 统一Agent报告存储与查询的UTC时间边界
- 修复监控大屏、历史图表及离线判断取不到最新数据
- 增加UTC与UTC+8场景回归测试
2026-07-25 16:17:47 +08:00
Logan.Li d9106dde6e fix: 恢复Agent指标并修复时间弹层
- 使用按主键更新避免SQLite字段错误
- 自定义时间选择器改用Portal避免卡片遮挡
2026-07-25 15:51:12 +08:00
Logan.Li af98940211 fix: 修复Agent按IP关联资产
- 统一系统主机名与云资产名称的指标归属
- 修复SQLite更新参数顺序和自动注册冲突错误
- 增加Agent上报关联回归测试
2026-07-25 15:46:08 +08:00
Logan.Li 827d9a31cd fix: 正确识别 Agent 安装与审计失败
- 下载脚本失败时立即终止安装并提示 WAF 拦截
- Agent 服务未运行时不再计为安装成功
- 审计列表兼容后端 status 成功失败字段
2026-07-25 15:08:04 +08:00
Logan.Li 7553ef54de fix: 使用访问域名安装 Agent 并发布下载文件
- 前端提交当前访问 origin,避免反向代理内网地址泄漏
- 校验并安全转义 Agent 服务地址
- 主程序构建时同步生成多平台 Agent 二进制
2026-07-25 15:00:02 +08:00
Logan.Li 0b785da8ae feat: 完善多云资产与腾讯云账单同步
- 接入 AWS、腾讯云、华为云和 Azure 区域及主机发现
- 接入腾讯云账单分页、限流与组件费用汇总
- 批量账单仅同步已支持厂商并优化云账号操作
2026-07-25 14:45:19 +08:00
attacker ca036a85ca feat(k8s): F7 集群详情EventsTab真实后端对接 + go vet修复
1. EventsTab.tsx: DEMO_EVENTS硬编码→kubernetesApi.getEvents真实K8s事件
   - 复用 normalizeK8sEvent/formatEventRelative 工具(与 EventsPage 一致)
   - 新增 loading/empty 状态 + 刷新按钮
   - Warning事件优先排序 + 限100条防溢出
   - KubernetesClusterDetail 传入 clusterCode prop
   - 修复 Q28 组件拆分时遗留的 demo 数据未对接缺口

2. aiops_alert_analysis.go: log.Printf %s→%d 修复 go vet 失败
   - AlertID 类型为 uint, %s 格式符不匹配致 go test 构建失败
   - go vet ./... 全量零错误

验证: tsc -b=0, npm build✓ (18.00s), go build=0, go vet=0, 17/17测试通过
Events API 返回5条真实事件 (type=Normal, reason=Pulled, count=5487)
2026-07-16 21:23:19 +08:00
Logan 5618cd2738 update 2026-07-09 14:16:56 +08:00
hermes-$(hostname) 0690285147 agent-cli 2026-07-08 07:03:30 +00:00
attacker cd30af5bd6 feat(quality): Q5 后端错误处理治理扩展 — RDP/API Token/AIOps 模块 8 处 _ = DB 写入改为 log.Printf
Q4 修复了 controller/ 层 8 处 DB 写入的 _ = 静默忽略,但后续合并的 RDP
远程桌面、API Token、AIOps 告警分析等模块引入了新的 _ = DB 写入忽略。
本次将 controller/middleware 层所有 DB 写入操作(Create/Update/Updates)
的 _ = 静默忽略改为带 log.Printf 错误日志(不阻断业务流程)。

修改文件 (6):
- middleware/auth.go: API 密钥最后使用时间更新
- controller/terminal_session.go: 终端回放审计日志 + 修复 log 变量遮蔽
- controller/user_api_token.go: API 密钥默认值补全
- controller/rdp.go: RDP 会话结束状态 + 命令记录
- controller/rdp_session.go: 会话终止 + 回放审计 + 修复 log 变量遮蔽
- controller/aiops_alert_analysis.go: AI 告警分析结果保存

修复 2 处 Go 变量名遮蔽陷阱(log := model.AuditLog{} 遮蔽 "log" 包 → auditLog)
保留 4 处可接受忽略(1 DB 读取 + 3 WebSocket 帧写入)

验证: go build=0, 17/17 集成测试通过, Docker healthy
2026-07-06 07:16:39 +08:00
Logan.Li e0d652d211 feat: 完善堡垒机与 Agent 智能运维能力
- 支持 Windows Agent 构建、安装脚本和统一上报协议

- 增强 RDP 剪贴板、虚拟盘和文件传输能力

- 新增 AIOps 上下文工具、告警 RCA trace 落库和回放接口

- 重构 docs 模块文档并补充终端、堡垒机、监控、AI Agent 设计
2026-07-05 23:49:36 +08:00
LoganandClaude 76ec9387f0 feat(rdp): 新增 RDP 远程桌面/SMB/账单同步能力 + 清理编译产物
主要变更:
- RDP 远程桌面:新增 backend/pkg/rdp(RDP 引擎 + credssp/display/rle/trace)、
  backend/controller/rdp*(连接/凭证/文件/会话/实时)、frontend RDP 组件与 API
- Windows SMB 文件传输:backend/pkg/winsmb
- 云账单同步:backend/pkg/billingsync + billing_sync/aliyun_billing,前端账单详情
- Agent CLI Kubernetes 工具:kubernetes_action/get、pod_execute/logs
- 服务器导入助手:server_import_helpers、ImportCredentialSettings
- 国际化与组件重构(cloud/deploy/monitor/server/system 等多模块)
- 清理编译产物二进制:移除 backend/server、backend/agent/bin/aiops-agent-*
- .gitignore:新增 backend/agent/ 与 .cache/(避免 334MB go-build 缓存误入库)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-04 01:50:36 +08:00
Logan 78c27037e3 feat(ldap): Active Directory 双目录支持与 Docker 构建优化
- 新增 ldap_ad.go,支持 AD 密码编码、字段映射与目录类型判断
- 重构 ldap/ldap_users/ldap_ou,兼容 OpenLDAP 与 AD 登录、导入、OU 浏览
- 前端系统设置增加目录类型选择与 AD 配置项
- Dockerfile 按 TARGETARCH 单架构编译 Agent,限制 Node 内存防 OOM
- run.sh 新增 docker fast/upgrade,README 补充 LDAP/AD 与常见问题
2026-07-02 22:45:49 +08:00
attacker eddf01dd79 fix(build): go:embed all:static 编译阻塞修复 — .gitignore 允许 .gitkeep 占位
问题: backend/static/ 在 .gitignore 中忽略整个目录,导致 .gitkeep
无法被 git 追踪。全新 clone 后 go build ./... 报错:
'pattern all:static: cannot embed directory static: contains no embeddable files'

修复:
- .gitignore: backend/static/ → backend/static/* + !backend/static/.gitkeep
- 新增 backend/static/.gitkeep 占位文件(go:embed 需要至少一个可嵌入文件)

验证: go build ./... ✅ | tsc -b ✅ | npm build ✅(21s) | 17/17 集成测试 ✅
质量: any=37 unused=2 console=0
2026-07-02 08:26:56 +08:00
attacker f170fed900 fix(tools): 安装脚本国内镜像优化 + 版本升级
- Node.js: pipe-to-tar 改为下载到文件再解压(修复 302 重定向导致 curl 23)
  新增阿里云/清华镜像,降级使用 python3 tarfile 解压
- Maven: 3.9.9→3.9.16(旧版镜像全部 404)
  新增阿里云/清华/中科大/南大镜像,下载后校验 gzip magic
- JDK: 17.0.13+7→17.0.19+10(Adoptium 已清理旧版)
  新增阿里云/华为/中科大/清华镜像
- 全部添加 --connect-timeout 和 gzip 校验
2026-07-02 00:21:13 +00:00
Logan 7e1c8f583c feat: 工具配置增强、站点拨测与日志中心多项改进
- 工具配置:新增卸载 API/UI、Go 工具链、流水线构建自动安装依赖
- 修复 ListTools VerifyTool 递归栈溢出导致获取工具配置失败
- Node.js Alpine 安装改用 unofficial-builds musl 预编译包与 index.json 解析 LTS
- 站点拨测:详情页路由、告警自动恢复、并发拨测与默认可观测频率
- 日志中心:RBAC、查询构建器、ES/Loki 增强与审计 request/response 展示
- 发布配置:构建节点、流水线远程执行、Deploy RBAC 导航拆分
2026-07-02 07:47:33 +08:00
attacker cde7bbe540 fix: 清理 unused-vars 回归(32→0) + 修复 go:embed 编译阻塞
1. ESLint unused-vars 从 32 清零(回归修复)
   - 删除 14 个文件中未使用的 import(lucide 图标/shadcn 组件/JsonData 类型)
   - 移除未使用的变量/参数(categoryLabels/updateEntry/onSaved 等)
   - 涉及: AppRelease/PipelineEditor/KubernetesNodes/AlertCenter/SilenceRulesPanel 等

2. 修复 go:embed all:static 编译阻塞
   - 新增 backend/static/.gitkeep 占位文件
   - 全新 clone 后 go build ./... 可直接通过(不再依赖先 npm run build)

3. 安装缺失的 npm 依赖
   - react-markdown/remark-gfm(AgentMarkdown 组件)
   - @codemirror/lang-python/@codemirror/legacy-modes(ScriptCodeEditor 组件)

验证: go build✅ | tsc -b✅ | npm build✅(21s) | ESLint any=41 unused=0 | 17/17 集成测试✅
2026-07-02 00:08:23 +08:00
LoganandClaude 471353e3d7 feat: 监控告警体系统一重构 + 自动化任务调度引擎 + 监控大屏拆分
告警中心
- 新增统一告警(alert_unified)、监控告警规则(monitor_alert_rule)、指标目录(alert_metric_catalog)
- 通知策略与消息分发(alert_notify_policy/dispatch/message)、静默规则
- 告警引擎按阈值/SNMP 拆分(alert_engine_monitor/snmp)

监控采集
- SNMP 常量/模板与历史指标(snmp templates/constants、snmp_metrics_history、snmp_collect)
- 中间件监控 Redis 采集与种子(middleware_monitor_redis/seed)
- 站点探测 pkg(siteprobe) + 站点视图(site_view)

自动化任务
- cron 调度器(cronscheduler)、脚本运行器(scriptrunner)、系统任务(systask)及运行记录(cron_job_run、system_task)

审计与凭证
- 审计设置(audit_setting) + 历史清理(auditcleaner)

前端
- 监控页面(host/middleware/site/snmp)拆分为子模块并大屏化
- 告警中心多 Tab(规则/指标目录/通知策略/静默)、任务管理组件重构、Agent CLI Markdown 渲染
- 移除旧脚本卡片/详情/日志组件,统一为 ScriptTable/ScriptCodeEditor/TerminalOutput

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 23:44:45 +08:00
Logan 1acb0c49af feat: Agent CLI 与终端审计回放全面优化
- Agent CLI: 多轮对话、SSH 长连接、流式推理、Evolver 按用户隔离、历史侧栏
- 终端审计: 回放播放器、命令书签、筛选分页导出、命令输出统计、录制落盘修复
- 修复 session_commands 表迁移、Kill 竞态导致录制丢失、无录制会话回放提示
- 审计历史页只读(移除删除),移除回放弹框录制搜索
2026-07-01 12:13:53 +08:00
attacker 9a3dd304f7 fix(build): 移除 agent_cli.go 中不存在的 ReasoningEnabled 字段引用
commit 3b19ae6 (ssh-key 转圈修复) 意外引入 ReasoningEnabled 引用,
但 llm.Config 和 model.LLMConfig 均无此字段导致 go build 编译失败。
移除该行恢复正常编译。
2026-07-01 06:39:46 +08:00
LoganandClaude 3b19ae6e98 fix(aiops): Agent CLI 连接 ssh-key 主机永久转圈修复
- buildSSHConfig 放宽认证判定:SSHKey 非空即走密钥认证,不再强依赖 AuthType=="key",
  兼容编辑表单/历史数据未正确设置 AuthType 的 ssh-key 主机(与 WebShell 行为对齐)
- agent_cli WS 握手:Upgrade 提前到预检之前,预检失败经 writeWSCloseError 推具体
  error 帧;写 error 后 sleep 120ms 再发 close,避免 TCP 提前关闭导致 error 帧丢失
- 前端 AgentCLI 连接兜底:新增 8s 连接超时 + onclose 区分"从未连上"(push 明确
  原因提示)与"连上后断开",杜绝预检失败时"正在连接主机"永久转圈、看不到原因
- 引擎配置补传 ReasoningEnabled

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-30 23:25:04 +08:00
attacker ed7a5c07a7 feat(monitor): M15 中间件监控 — Redis/MySQL 后端直连采集引擎
后端:
- 新增 controller/middleware_monitor.go (500+ 行) — CRUD + 测试连接 + 采集引擎
- 后台 goroutine 每 30s 自动连接 Redis/MySQL 采集指标
- Redis: go-redis v9 INFO+DBSIZE 命令采集 12 项指标
- MySQL: database/sql SHOW GLOBAL STATUS 采集 12 项指标
- 指标写入 MetricHistory 表,7 天自动清理
- 8 个 RESTful 路由注册到 routes.go

前端:
- MiddlewareMonitor.tsx 从只读卡片升级为完整管理页面
- 添加监控弹框(Redis/MySQL 类型选择+连接配置表单)
- 实例卡片操作栏(测试/编辑/删除) + 工具栏(立即采集/刷新)
- middlewareMonitorApi 8 个方法

验证: go build✅ npm build✅ 17/17 回归通过 Redis 12 指标✅ MySQL 12 指标✅
2026-06-29 23:24:05 +08:00
LoganandClaude b7780c5a5a fix(agent): 修复资产重复注册(每10s新建) + 批量删除400
agent 自动注册前按 hostname 显式查重(asset_servers.hostname 无 UNIQUE 索引,OnConflict 失效导致 Agent 每次上报都 INSERT 新记录,资产越来越多)。

批量删除 BatchDeleteServers 对齐前端 {ids} 格式(原期望裸 []uint 导致 ShouldBindJSON 解析失败 400)。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-28 23:43:34 +08:00
LoganandClaude f820f0271f feat(remote-exec): 新增远程执行页(执行/上传) + 移除ansible命名 + 主机监控bug修复
远程执行页 RemoteExecPage:关联主机多选 + 批量执行命令 + 批量上传文件(Go-native SSH),高危操作 useConfirm 确认;后端新增 multipart /remote-exec/upload-file 接口(接收文件→SCP 转发到多台主机)。

移除 ansible 命名:菜单 /ansible→/remote、组 id automation→task、子项 id ansible→remote-exec、种子显示名 Ansible→远程执行;删除 dead code ansibleApi。

主机监控 bug:installOne 不再强制 server.Status==running(默认 stopped 导致批量安装必失败);UninstallAgent 凭据判断修正(SSH key 主机 Password 为空不应误判为无凭据而跳过远程卸载)。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-28 23:29:32 +08:00
LoganandClaude 0b2e43ea9e feat(llm): 大模型双协议(OpenAI+Anthropic)接入 + SSH凭证修复 + 容量预测AI解读
后端双协议: 新增 anthropic.go(Complete/Stream/工具转换) + client.go 工厂按 Protocol 路由; llm.Client 加 Stream; llm_chat 三方法收敛复用 llm.Client; resolveProtocol 按 provider 路由; Agent CLI 注入协议。编码套餐(GLM-5.2/Kimi/MiMo/Anthropic)走 Anthropic /v1/messages。

SSH凭证修复: applyCredential 正确解析凭证 JSON 的 private_key(旧实现把整个 JSON 当私钥 → ssh.ParsePrivateKey 失败 → ssh-key 登录不通); AssignCredential/批量导入/单台 CRUD 三处统一; 单台补齐 credential_id 字段(原被忽略)。

容量预测: 新增 AI 深度解读(buildCapacityInsightPrompt + PredictiveCapacityTab 按钮, 复用 aiApi.chat)。

其他: DeepSeek 模型名更新为 deepseek-v4-flash/pro; 智能助手去掉重复模型配置按钮; LLMConfig 精简生成参数(Claude Code 式)。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-28 22:37:46 +08:00
attacker 7ed4ce8d3a fix(log): log-datasources List 返回 {list,total} 格式对齐前端期望
前端 logCenterApi.listDatasources 期望 res.list 数组,但后端 List handler
返回裸数组导致前端取 res?.list 为 undefined。改为 model.ListResponse 对齐
项目其他列表端点的惯例格式。
2026-06-28 10:11:23 +08:00