Critical runtime bugs:
- terminal.html WebSSH完全不可用(URL前缀/JSON解析/Content-Type三处错误)
- servers.py路由遮蔽:/logs被/{id}拦截,3个前端页面同步日志查询失败
- scripts.html startExecPoll()→startExecPolling(),长任务快速执行崩溃
- agent.py {value!r!s:.50}格式串非法,agent发非数值时ValueError
- alerts.html d.daily.reduce()无null检查,API返回空数据时TypeError
Resource leak / stability:
- websocket.py僵尸连接未关闭TCP,文件描述符泄漏
- websocket.py _last_alert_time字典无限增长(加1小时过期清理)
- asyncssh_pool.py全忙时超过MAX_CONNECTIONS无限增长
- self_monitor.py Telegram告警无冷却,宕机时每30秒刷屏
- schedule_runner.py一次性调度执行超60秒会重复触发
- 限速脚本EXPIRE每次重置窗口可绕过(改用Lua原子脚本)
Security:
- JWT access token加token_version声明,改密码后旧token立失效(零宽限)
- INSTALL_MODE导入时常量→动态函数,安装后JWT认证不再残留禁用
- install.py /lock端点加管理员存在性验证,防止阻断安装
- ServerUpdate schema移除connectivity只读字段,防止伪造连接状态
Frontend fixes:
- doExec()缺r.ok检查、commands.html null检查
- _server_to_dict()补last_checked_at+ssh_key_public
- _field_match()逗号cron表达式修复
- alerts类型显示、SSH会话名称、搜索高亮定位
- 一次性/循环定时任务(run_mode+fire_at+自动禁用)
Dead code removed (400+ lines):
- SyncService batch_push/_push_single等5个方法(零调用者)
- 5个未使用schema(SyncCommands/SyncConfig/SyncSftp/FileDeploy/PaginatedResponse)
- 6个零调用service方法、3个无前端API端点
- 4个未使用import
Schema migrations:
- push_schedules: run_mode + fire_at列,cron_expr改NULL
- servers: 7个新列 + ssh_key_private/public VARCHAR(500)→TEXT
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
14 KiB
Nexus 6.0 — AI 接续工作交接(SSOT)
生成日期: 2026-05-23
用途: 切换 AI / 新会话时唯一接续入口;下文汇总本会话决策、代码状态、待办与验证清单。
工作区:C:\Users\uzuma\Desktop\svn\Nexus\.claude\worktrees\suspicious-williams-fe9492
部署状态: ❌ 尚未部署(无生产环境、无需「重启服务」;首次部署后再跑 E2E)
0. 给下一任 AI 的复制提示词
【严谨性】与 Nexus 团队同等严谨,不得降低标准。全量标准索引:
docs/project/standards-transfer-package.md
【必读 · 按序】
1. docs/project/AI-HANDOFF-2026-05-23.md
2. docs/project/nexus-full-site-features.md
3. docs/project/development-acceptance-standard.md
4. docs/project/standards-transfer-package.md
【规范 · 全文内化(开发 + 审计同等强制)】
- .cursor/rules/perfect-implementation.mdc
- .cursor/rules/nexus-tech-stack.mdc + nexus-python-backend.mdc + nexus-frontend.mdc + nexus-security.mdc
- .cursor/rules/audit-line-review.mdc(走读/Phase2 触发)
- standards/system-development-standard.md
- standards/line-walk-audit-standard-v2.md
- standards/audit-core-principles.md
【逐行审查】8步/文件、全文Read至EOF、Closure全表(含SAFE)、FINDING必须文件:行号、单回复≤5文件;
禁止grep/Top15冒充审计;P0/P1当场修+changelog+矩阵。提示词见 v2 §十四.1。
【验收】完成前:pytest tests/test_security_unit.py + wsl_integration_smoke.sh + changelog;
上线前:production-verification-checklist.md;宣称完成前读 verification-before-completion SKILL。
项目未部署。端口:子机出站443心跳;中心→子机SSH22;8601仅本机。
P1待办:WebSSH断线重连、CSV批量导入。首次部署E2E见本文§6。
已否决见§7。
1. 项目一句话
Nexus 6.0:2000+ 台服务器运维平台;FastAPI 四层架构 + Redis 实时心跳 + WebSocket/Telegram 告警 + asyncssh 推送/WebSSH/脚本;前端 Tailwind v4 + Alpine.js 静态页。
2. 端口与通道模型(2026-05-23 最终决策)
| 方向 | 端口 | 用途 | 是否必须 |
|---|---|---|---|
| 子机 → 中心 | 443 出站 | Agent 心跳、长任务 curl 回调 |
✅ 必须 |
| 中心 → 子机 | 22 入站 | rsync 推送、文件浏览/操作、脚本执行、手动健康检查、Agent 安装/升级 | ✅ 必须 |
| 子机本机 | 127.0.0.1:8601 | Agent uvicorn(仅本机) | 可选进程;不要求公网 8601 |
已否定/不推荐
- 为脚本/健康检查强制公网开放 8601
- 用宝塔「Python 项目管理器」托管 Agent(与面板生命周期耦合)
- 用 btpanel-skills 安装 Agent(skills 仅适合读面板监控 API,见 btpanel-skills)
Go 单二进制 Agent:长期可选;当前子机均有 Python 3.12,优先 venv 方案。
3. 本会话及近期已完成(代码)
3.1 架构 / 运维向
| 项 | 说明 | 关键文件 |
|---|---|---|
| 脚本执行改 SSH | 不再依赖中心访问子机 8601;结果含 channel: ssh |
server/application/services/script_service.py |
| 手动健康检查改 SSH | check_all_servers 经 SSH 探测指标 |
server_service.py, server/infrastructure/ssh/remote_probe.py |
| Agent 安装脚本 | python3.12+ venv、127.0.0.1 监听、不自动放行公网 8601 |
web/agent/install.sh |
| 安装说明文案 | 心跳 443 / 脚本 SSH / 无需公网 8601 | web/app/servers.html |
| Changelog | docs/changelog/2026-05-23-ssh-exec-no-8601.md |
3.2 功能向(会话前后期,代码已在仓库)
| 项 | 说明 |
|---|---|
| 推送 dry-run 预览 | push.html + SyncEngineV2.preview_sync(),方案 D 智能提示 |
| 推送日志视图 | commands.html 推送日志 Tab |
| 脚本快捷执行 | scripts.html 直接执行面板 |
| 定时脚本执行 | schedule_runner.py + schedules.html,schedule_type=script |
| 审计时间/用户过滤 | audit.html + settings.py API |
| 告警中心页 | alerts.html + /api/alert-history + AlertLog 表 |
| Telegram 测试 / Chat ID | settings.html + settings API |
| 告警分项 Telegram 开关 | settings.html + NOTIFY_* 配置 |
| 登录 IP 白名单 + 订阅解析 | subscription_parser.py + ip_allowlist_refresh.py(2h) |
| Agent 远程安装 / 安装命令 | servers.html + install-agent API |
| Agent 升级(SSH) | POST /servers/{id}/upgrade-agent(未随新 venv install.sh 对齐,见待办) |
| Agent IP 白名单 | agent.py + install.sh 写入 allowed_ips |
| 时钟漂移检测 | 心跳 agent_time + UI 徽章 + Telegram |
| TOTP 重绑 UX | settings.html |
| 远程文件删/改名/建目录 | sync_v2.py |
| Phase 2 审计 63 项 | 矩阵 docs/reports/audit-phase-2-findings-matrix.md |
| WSL 联调脚本/venv | scripts/wsl_*.sh, docs/project/wsl-integration-test.md |
| 标准文档目录 | standards/ + docs/project/*-standard*.md |
3.3 代码完成度(主观)
- 核心业务代码: ~95%~98%
- 首次部署 E2E: 0%(未部署)
- 用户要求的增强功能: 仍有 5~7 项未写代码(见 §4)
4. 待实现功能(下一任 AI 工作 backlog)
按用户确认优先级排序。
P1 — 建议先做
| ID | 功能 | 说明 | 建议触及文件 |
|---|---|---|---|
| F-01 | WebSSH 断线重连 | 方案 C:断线自动重试 1 次 + 手动重连按钮 | web/app/terminal.html, server/api/webssh.py |
| F-02 | 服务器批量导入 CSV | 上传 CSV → 校验 → 批量 POST /api/servers/ |
新 API + servers.html |
| F-03 | Agent 升级与 install.sh 对齐 | upgrade-agent 应使用 /opt/nexus-agent/.venv + 127.0.0.1 |
server/api/servers.py |
P2 — 迭代
| ID | 功能 | 说明 |
|---|---|---|
| F-04 | 仪表盘历史趋势图 | CPU/内存时序;需 Redis/MySQL 历史或新聚合 |
| F-05 | 远程文件上传 UI | 可用 WebSSH/scp/推送代替;非阻塞上线 |
| F-06 | 远程文件内容预览 | 可用 WebSSH cat 代替 |
可选 / 讨论项(未承诺实现)
| ID | 功能 | 说明 |
|---|---|---|
| F-07 | 宝塔面板 API 监控增强 | 参考 aaPanel/btpanel-skills,补站点/服务状态(不替代 Agent) |
| F-08 | Agent ↔ 中心 mTLS | 安全增强,工作量大 |
| F-09 | Docker Compose 部署 | 用户称暂不需要 |
| F-10 | Go 单二进制 Agent | 2000+ 台 Python 3.12 齐全时可暂缓 |
SSH 回退(已采用主路径,非待办)
用户曾问「SSH 回退」:已实现为默认 SSH,非「Agent 失败再回退」。无需再做了 Agent 优先逻辑,除非用户改口。
5. 标准转接(与团队同等严谨 · 下一任 AI 必读)
| 文档 | 路径 |
|---|---|
| 标准转接包(全量索引) | standards-transfer-package.md |
| 开发验收 L0~L5 | development-acceptance-standard.md |
| 标准目录 | standards/README.md |
逐行审查:与开发规范同等强制 — 全文见 standards/line-walk-audit-standard-v2.md + standards/audit-core-principles.md;Cursor 触发器 audit-line-review.mdc。
开发规范:standards/system-development-standard.md 全文 + 档 B 全部 .cursor/rules/nexus-*.mdc。
5b. 开发验收标准(L0~L5 速查)
SSOT:development-acceptance-standard.md
| 层级 | 何时用 | 关键文档 |
|---|---|---|
| L0 | 始终 | perfect-implementation.mdc、standards/system-development-standard.md |
| L1 | 新功能/大改 | docs/design/specs/、docs/design/plans/ 内验收标准 |
| L2 | 每次改代码合并前 | pytest tests/test_security_unit.py、scripts/wsl_integration_smoke.sh |
| L3 | 安全路径改动 | standards/line-walk-audit-standard-v2.md、audit-core-principles.md |
| L4 | 模块 E2E | script-execution.md §11、alert-push-policy.md、T1~T5 |
| L5 | 首次部署/上线 | production-verification-checklist.md(逐项勾选) |
禁止:未跑 L2 命令就声称「已完成」;未勾 L5 就声称「可上线」。
6. 待验证(非「未实现」,但上线前必做)
项目未部署时不要写「请重启生产」;以下在 first deploy 后执行。
6.1 基础(CLAUDE.md / AGENTS.md)
- T1 心跳 Redis 写入
- T2 WebSocket
- T3 三层守护(杀 Python → Supervisor 拉起)
- T4 Telegram
- T5 install.html 五步
6.2 脚本平台(docs/project/script-execution.md §11)
- T-SE1~T-SE8(分批、长任务回调、停止、Redis 刷盘等)
- 注意: 文档仍写 Agent
:8601执行,实际已改 SSH — 验证时按 SSH 测,并更新文档。
6.3 首次生产清单
完整表:docs/project/production-verification-checklist.md
6.4 WSL 代码向(无密钥核对)
docs/project/wsl-integration-test.md + scripts/wsl_integration_smoke.sh --code-only
6.5 建议「最小首次部署 10 条」
- install 向导生成
.env+ 管理员 - 登录 + TOTP
- 添加 1 台子机(SSH 凭据)
- 子机安装 Agent(新
install.sh),确认 无需公网 8601 仍有心跳 - 仪表盘看到 Redis 在线/指标
- SSH 推送 1 个目录(dry-run + 正式)
- SSH 执行短脚本(
channel: ssh) - WebSSH 连接 + 命令审计
- Telegram 测试发送
alerts.html有告警历史记录
7. 已否决(永久不做,除非用户书面改口)
| 功能 | 原因 |
|---|---|
| 文件编辑器(Monaco/ACE) | 2026-05-23 用户明确抛弃;WebSSH + vim |
| RBAC / 多管理员 | 鉴权即信任 |
| 审计日志导出 CSV/JSON | 用户不需要 |
| 移动端适配 | 用户否决 |
| 会话录像 asciicast | 不需要 |
| Redis Sentinel/Cluster | 用户不需要 |
| Docker 部署(当前阶段) | 用户暂不需要 |
| 推送结果邮件报告 | 不需要 |
记录:docs/Nexus-功能说明书.html §15(部分条目已过期,见 §8)
8. 文档债务(下一任 AI 应同步)
| 文档 | 问题 | 动作 |
|---|---|---|
docs/Nexus-功能说明书.html |
§15 仍写审计过滤/定时脚本「未实现」 | 更新为已实现 |
docs/project/script-execution.md |
仍写 Agent HTTP 执行、:8800/:8601 | 改为 SSH 22 + 443 心跳 |
docs/design/specs/2026-05-19-sprint-planning.md |
WebSSH/ install 仍标待做 | 标为已完成或归档 |
PROJECT_HANDOVER.md |
日期与端口模型旧 | 顶部链到本文 |
CLAUDE.md / AGENTS.md |
待测试列表仍有效 | 部署后勾选 |
新变更务必: docs/changelog/YYYY-MM-DD-*.md(perfect-implementation.mdc)
9. 环境与约束(用户确认)
- 子机: 宝塔面板;Python 3.7.16(面板 pyenv)+ 系统 3.12.3
- Agent 安装: 固定 3.12 venv,隔离于宝塔 pyenv 3.7
- 防火墙: 多数子机未开公网 8601;推送/脚本依赖 22;心跳依赖 出站 443
- WSL 联调: 只验证代码路径,不纠结部署密钥是否入 git(install 生成)
- 仓库: 唯一 Nexus 仓库;worktree 开发
10. 关键路径索引
| 类别 | 路径 |
|---|---|
| 接续 SSOT | 本文 |
| 全站功能清单 | docs/project/nexus-full-site-features.md |
| 标准转接包 | docs/project/standards-transfer-package.md |
| 开发验收标准 | docs/project/development-acceptance-standard.md |
| 系统开发标准 | standards/system-development-standard.md |
| 逐行审计 v2 | standards/line-walk-audit-standard-v2.md |
| 审计原则 | standards/audit-core-principles.md |
| 功能说明书 HTML | docs/Nexus-功能说明书.html |
| 项目记忆 | CLAUDE.md, AGENTS.md |
| 进度 | docs/project/status.md, docs/project/roadmap.md |
| 部署 | docs/project/deploy.md |
| 审计矩阵 | docs/reports/audit-phase-2-findings-matrix.md |
| 脚本 SSOT | docs/project/script-execution.md |
| 标准 | standards/README.md, docs/project/line-walk-audit-standard-v2.md |
| Agent | web/agent/agent.py, web/agent/install.sh |
| 脚本 SSH | server/application/services/script_service.py |
| 健康 SSH | server/infrastructure/ssh/remote_probe.py |
| 告警历史 | web/app/alerts.html, server/api/settings.py(alert_history_router) |
| Changelog 示例 | docs/changelog/2026-05-23-ssh-exec-no-8601.md |
11. 架构分层(禁止违反)
web/app/*.html → server/api/*.py → application/services → infrastructure/* → domain/models
- API 层:JWT + Pydantic;不写 SQL
- 无
.env→ 安装模式(仅/api/install/+ 静态) - 不可从 DB 覆盖:
SECRET_KEY,API_KEY,ENCRYPTION_KEY,DATABASE_URL
12. Git / 提交说明
- 用户未要求 commit 时勿主动提交
- 当前 worktree 含大量未跟踪
.cursor/、修改的server/**、web/**、docs/** - 合并前建议:按逻辑拆分 commit(SSH 通道 / 功能增强 / 文档)
13. 会话决策时间线(摘要)
- WSL 全链路联调 → Redis pool、SQLAlchemy aiomysql patch、venv
- Phase 2/3/4 逐行审计 → 63+ 项修复
- 标准文档 →
standards/ - 功能 gap 讨论 → dry-run、告警中心、白名单、定时脚本等 已实现
- 文件编辑器 → 否决
- Agent 8601 vs SSH → 脚本+健康检查走 22;心跳走 443;弱化 8601
- 宝塔 Python 管理 → 不用;venv + 3.12
- 项目未部署 → 无需重启
文档维护: 下一任 AI 完成待办或验证后,更新本文 §4 §5 §7 的勾选状态,并写 changelog。