1. 21 7月, 2026 12 次提交
    • 陈泽健's avatar
      feat(service-monitor): 钉钉通知优化 · a7f7e175
      陈泽健 提交于
      - 配置字段 webhook -> webhook_url,兼容旧字段加载
      - 通知格式改为 Markdown,重点展示异常项详情
        - 严重项最多 5 项,警告项最多 3 项
        - 格式:模块:指标名 = 值(阈值:xxx)
        - 报告链接可点击跳转
      - secret 输入框安全控制:禁止粘贴/复制/右键
      - 测试消息同步改为 Markdown 格式
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      a7f7e175
    • 陈泽健's avatar
      fix(service-monitor): 所有时间戳统一使用北京时区 · 712feaa9
      陈泽健 提交于
      _now() 和 _run_job_body 中的 datetime.now() 改为
      datetime.now(SHANGHAI_TZ),确保 last_run_at / created_at
      等字段显示北京时间而非服务器 UTC 时间。
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      712feaa9
    • 陈泽健's avatar
      fix(service-monitor): 定时任务时区固定为 Asia/Shanghai · 1147566e
      陈泽健 提交于
      根因:5.60 服务器系统时区为 UTC,CronTrigger.from_crontab()
      默认使用本地时区解析 cron,导致用户配的'每天 18:15'实际
      在 UTC 18:15(北京时间凌晨 02:15)才触发。
      
      修复:
      - schedule_service.py 新增 SHANGHAI_TZ 常量
      - _add_job() 的 CronTrigger 显式指定 Asia/Shanghai 时区
      - _calc_next_run() 用北京时间作为基准计算下次执行
      - start_date/end_date 用 SHANGHAI_TZ.localize() 转换
      - 三处依赖同步声明 pytz(requirements / skill/requirements / upload_to_server)
      
      验证:_calc_next_run('30 18 * * *') 返回北京时间 18:30;
      5.60 next_run_at 现显示北京时间;51 用例全绿。
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      1147566e
    • 陈泽健's avatar
      fix(service-monitor): init_scheduler FLASK_DEBUG 默认值与 server.py 统一为 '0' · 0d84df9f
      陈泽健 提交于
      根因:schedule_service.py:383 的 FLASK_DEBUG 默认值为 '1',
      而 server.py:151 的默认值为 '0'。systemd 启动时未设
      FLASK_DEBUG 环境变量,导致 init_scheduler() 判定为
      debug 模式 + 非 reloader 父进程,直接 return 不初始化
      APScheduler —— 定时任务永远不执行。
      
      修复:默认值改为 '0',与 server.py 保持一致。
      systemd 服务文件也补充 Environment=FLASK_DEBUG=0 双保险。
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      0d84df9f
    • 陈泽健's avatar
      feat(service-monitor): 定时任务执行状态展示 + 立即执行按钮 · d10c77e4
      陈泽健 提交于
      - schedule.html: 表格新增「上次执行」列(时间+成功/失败/运行中徽章+报告链接)
      - schedule.html: 操作列新增「执行」按钮,点击后后台线程执行、3秒轮询自动刷新
      - schedule_service.py: 抽 _run_job_body 共享执行体、新增 run_now() 手动触发
      - schedule_service.py: create_schedule 初始化 current_status:idle
      - schedule_service.py: 异常路径 last_run_status 与 current_status 统一为 error
      - routes.py: page_schedule 注入 run_badge/run_label;新增 POST .../schedules/<id>/run
      - 响应式适配:平板端隐藏套件/上次执行/下次执行列
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      d10c77e4
    • 陈泽健's avatar
      docs(service-monitor): 定时任务弹窗优化 PRD 文档 · 633da268
      陈泽健 提交于
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      633da268
    • 陈泽健's avatar
      docs: 更新 HANDOFF 交接文档 · 9d887980
      陈泽健 提交于
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      9d887980
    • 陈泽健's avatar
      fix(service-monitor): 定时任务不执行修复 + 依赖补充 + 报告批量删除 · 9d90d646
      陈泽健 提交于
      修复:
      - server.py FLASK_DEBUG 默认值改为 0(避免 reloader 导致 APScheduler 失效)
      - schedule_service init_scheduler 增加 WERKZEUG_RUN_MAIN reloader 防护
      - health 接口增加 scheduler 状态字段便于诊断
      - requirements.txt 补充 apscheduler + croniter 依赖声明
      - upload_to_server.py 启动命令加 FLASK_DEBUG=0
      
      新增:
      - 巡检报告批量删除(checkbox + batch API)
      - 定时任务编辑保存成功提示
      - PRD 问题处理与计划执行文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      9d90d646
    • 陈泽健's avatar
      feat(service-monitor): 通知配置功能(邮件/钉钉/企业微信) · fdb0ee63
      陈泽健 提交于
      - 左侧菜单新增「通知配置」(仅管理员可见)
      - 新增 notification_service.py:三种渠道配置/测试发送/巡检后通知
      - 新增 notification.html:配置卡片 + 触发条件 + 测试按钮
      - runner_service.py:run_inspection_sync 完成后调用通知服务
      - 敏感字段用 Fernet 加密存储
      - 新增 PRD 文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      fdb0ee63
    • 陈泽健's avatar
      feat(service-monitor): 定时任务弹窗交互优化(友好调度配置替代 Cron 表达式) · 28f55365
      陈泽健 提交于
      - 删除 Cron 表达式输入,改为重复周期单选组(每天/工作日/每周)
      - 新增时:分下拉选择器 + 星期多选按钮组
      - 新增生效日期/失效日期选择器
      - 列表显示自然语言描述(如'工作日 09:30')替代 Cron 表达式
      - 后端新增 _build_cron/_describe_schedule 自动转换
      - 数据模型新增 repeat_mode/hour/minute/weekdays/start_date/end_date 字段
      - 新增 PRD 文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      28f55365
    • 陈泽健's avatar
      feat(service-monitor): 定时自动巡检功能(APScheduler + cron 表达式) · 65a88a6d
      陈泽健 提交于
      - 新增 schedule_service.py:定时任务 CRUD + APScheduler BackgroundScheduler 集成
      - 支持 cron 表达式校验(croniter)+ 下次执行时间计算
      - 新增 runner_service.run_inspection_sync() 同步执行函数
      - 新增 schedule.html 定时任务管理页:表格展示 + 新增/编辑弹窗 + Cron 预设
      - 新增 API 路由:schedules CRUD + toggle 启停
      - server.py 初始化 APScheduler
      - upload_to_server.py 增加 apscheduler 依赖
      - PRD 需求文档 + 计划执行文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      65a88a6d
    • 陈泽健's avatar
      feat(service-monitor): 左侧菜单布局改造与报告列表独立页 · f3893286
      陈泽健 提交于
      - 新增 base.html 共享基础模板:左侧固定侧边栏 + 顶部条 + 内容区
      - 侧边栏 4 个菜单项:监测目标/巡检报告/定时任务/目标管理
      - 移动端 768px 以下汉堡菜单滑出
      - index.html 继承 base.html,只保留目标卡片
      - 新增 reports.html 巡检报告独立页,支持按目标筛选
      - targets.html / run.html / report.html 继承 base.html
      - routes.py 新增 page_reports 路由,所有路由增加 active_menu 参数
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      f3893286
  2. 20 7月, 2026 7 次提交
  3. 17 7月, 2026 2 次提交
  4. 16 7月, 2026 2 次提交
    • 陈泽健's avatar
      feat(service-monitor): 落地服务监测模块(自包含子包,核心子集) · c552a6b3
      陈泽健 提交于
      新增 service_monitor/ 自包含子包(与问题排查助手代码物理隔离):
      - routes/services/utils 三层 + 7 个 bash 检测模块(system 01-04 + docker/mysql/redis basic)
      - 本机 subprocess / 远程 paramiko SSH 双模式执行器
      - SSE 实时进度 + 取消 + 报告异常置顶分模块折叠 + MD/JSON 导出
      - Fernet 加密 SSH 凭据,容器名模糊匹配,快速/全量两套件
      - 角色控制:普通用户仅查看,管理员可操作
      - 4 个前端模板(index/targets/run/report),移动端适配
      - 55 个私有测试,全套 218 绿,未破坏现有测试
      
      配套变更:
      - deploy/upload_to_server.py: 新增递归目录上传(service_monitor 多层子目录)
      - requirements.txt: +paramiko +cryptography
      - pytest.ini: testpaths 追加 web/service_monitor/tests
      - .gitignore: 忽略运行时数据(targets.json/reports)
      - CLAUDE.md: 更新项目结构说明
      
      文档:Docs/需求文档/服务监测/(PRD + 计划执行 + HANDOFF)+ 项目根 HANDOFF.md
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c552a6b3
    • 陈泽健's avatar
      feat(offline): 问题排查助手离线 Q&A 模式和容器化部署 · b94d0230
      陈泽健 提交于
      离线模式:OFFLINE_MODE 环境变量控制,跳过 Claude API 直接返回 TF-IDF 匹配结果
      容器化:Dockerfile + docker-compose.yml + requirements.txt + .dockerignore
      同进程依赖:补 cryptography/paramiko(service_monitor 子包依赖,PRD §4.6)
      
      详细变更:
      - utils/offline_config.py:离线开关读取(env OFFLINE_MODE → bool,进程级缓存)
      - services/ai_service.py:新增 build_offline_response(),兼容原始/格式化两种输入
      - routes/troubleshoot.py:troubleshoot/analyze/analyze_stream/health 四处离线分支
        - 离线流式保留 SSE 协议,单帧推送后 close(前端无需改动)
        - 离线跳过缓存读写(<1s 无需缓存)
        - health 响应新增 offline_mode 字段
      - tests/test_offline_mode.py:22 用例全绿(离线配置/响应构建/路由/回归)
      - Dockerfile:python:3.10-slim,gunicorn 多 worker,WORKDIR /app/web
      - docker-compose.yml:restart always,records/users/config 只读挂载,logs 持久化
      - .dockerignore:排除 搜索向量.json(强制 TF-IDF),排除测试/缓存/临时文件
      - requirements.txt:flask/gunicorn/scikit-learn/scipy/numpy/jieba/werkzeug/requests
        + cryptography/paramiko(同进程 service_monitor 硬依赖)
      - .env.example:补 OFFLINE_MODE 说明
      - PRD v2.2 + 计划执行文档(增加 §4.6 同进程依赖耦合说明 + T8 任务)
      
      测试:新增 22 用例全绿,回归 218 全绿(问题排查助手 167 + service_monitor 51)
      隔离:未改 service_monitor / service_manage 代码,仅补其依赖到 requirements
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      b94d0230
  5. 15 7月, 2026 1 次提交
    • 陈泽健's avatar
      docs: PRD 文档按模块归档到子目录 · c6287b3b
      陈泽健 提交于
      - Docs/需求文档/问题处理助手/ — 排查助手全部 PRD + 技术文档(29 个)
      - Docs/需求文档/服务管理/ — 平台化改造 + 返回首页改造 PRD(4 个)
      - Docs/需求文档/服务监测/ — 预留,后续服务监测相关文档归入
      - Docs/离线部署方案/ — 离线部署 PRD 文档(2 个)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c6287b3b
  6. 14 7月, 2026 5 次提交
    • 陈泽健's avatar
      feat(platform): 新增服务管理/服务监测占位模块 + 导航栏改造 · d3468c4b
      陈泽健 提交于
      - 新增服务管理模块占位(service-manage Blueprint + 静态页面)
      - 新增服务监测模块占位(service-monitor Blueprint + 静态页面)
      - modules.py 声明 service-manage(管理员)+ service-monitor(所有用户)
      - index.html 返回首页改为顶部导航栏 + 🏠 返回首页按钮
      - deploy 上传清单补 users.json
      - 新增离线部署方案 PRD 文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      d3468c4b
    • 陈泽健's avatar
      feat(platform): 平台化改造 + 用户密码更新 · 9c733eba
      陈泽健 提交于
      - 新增平台首页路由 /(platform Blueprint),平台名称改为"运行维护平台"
      - 新增 modules.py 声明式模块清单 + get_modules(role) 按角色过滤
      - 新增 platform.html 平台首页模板(卡片网格 + 响应式布局)
      - 原 / 路由从 auth.py 迁移至 platform.py,troubleshoot 独立为 /troubleshoot
      - index.html 加"返回首页"导航链接
      - test_routes_auth.py TestIndex 适配平台首页断言
      - users.json 更新 admin/user 密码哈希
      - 新增 ARCHITECTURE.md 技术架构文档
      - deploy 注释更新
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      9c733eba
    • 陈泽健's avatar
      feat(p2): 语义搜索升级 + 移动端适配 + 项目名称权限限制 · b4fad0c1
      陈泽健 提交于
      P2-1 语义搜索升级(暂关闭 embedding_enabled=false):
      - search_engine.py 加向量加载/查询/降级,公开接口零变更
      - 新增 vector_builder.py 预计算脚本
      - config.json 新增 embedding 配置项
      - /api/health 暴露搜索模式,版本升至 1.3.0
      
      P2-2 移动端响应式适配:
      - index.html/login.html 三档断点 + 触控热区 + 弹窗 + SSE 滚动
      
      安全:普通用户项目名称输入限制:
      - /api/projects 角色鉴权,普通用户返回空列表防泄露
      
      测试:145 用例全绿(+12 向量 +2 项目鉴权)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      b4fad0c1
    • 陈泽健's avatar
      chore(deploy): upload 脚本补 templates 目录到上传清单 · 912bb57f
      陈泽健 提交于
      P1 收尾三项前端改了 index.html/login.html(加 errMsg 兼容函数),
      需同步上传到生产环境,否则新错误响应对象格式会让前端显示 [object Object]。
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      912bb57f
    • 陈泽健's avatar
      refactor(p1): 统一 API 错误响应 + 路由层测试 + submit/export 鉴权 · c7a05bc8
      陈泽健 提交于
      收尾三项(P1 收尾):
      - 统一错误响应:routes 与 decorators 的错误 jsonify 全部接入 error_response
        ({success,error:{code,message}}),补 4 个错误码(UNAUTHORIZED/FORBIDDEN/
        EXPORT_ERROR/RECORD_SUBMIT_ERROR);成功响应与 SSE 流格式不变
      - 前端兼容:login.html + index.html 加 errMsg() 工具函数,6 处 data.error
        读取兼容字符串/对象两种格式,避免显示 [object Object]
      - 安全修复:submit/export 路由加 @login_required(原任何人可调用)
      - 路由层测试:新增 5 个 test_routes_*.py(37 用例),conftest 补
        app/client/auth_client/admin_client fixture,mock AI 调用/缓存/文件写入
      - 全量 131 用例通过(原 94 + 新增 37),无回归
      - 文档:优化方向文档 P1 状态同步;新增 P1 收尾三项需求/计划文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c7a05bc8
  7. 13 7月, 2026 5 次提交
    • 陈泽健's avatar
      docs: 更新 README 与 CLAUDE.md 反映 P1 三层架构 · b7d51dd1
      陈泽健 提交于
      - README.md:重写功能概述、完整目录结构(routes/services/utils + container)、
        三层架构图、快速开始、部署流程、环境变量表、技能清单、本地开发注意、
        P0/P1 重构记录
      - CLAUDE.md:重写为 Claude Code 项目指令,含目录结构、分层约定
        (单例走 container、路径走 utils/paths)、勿改接口模块、异常规范、
        常用命令、6 条避坑、当前 P1 完成状态
      - 两份文档均从过时的旧结构更新到 P1-3 重构后的真实架构
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      b7d51dd1
    • 陈泽健's avatar
      chore(deploy): upload 脚本补齐 routes/services 目录与 decorators/container 文件 · 3caf6a0a
      陈泽健 提交于
      P1-3 架构重构后新增了 routes/、services/ 目录与 container.py、decorators.py 改动,
      upload_to_server.py 需同步更新上传清单,否则部署到 5.60 会缺失文件导致服务起不来。
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      3caf6a0a
    • 陈泽健's avatar
      refactor(p1-3): server.py 拆分为 routes/services/utils 三层架构 · c2698352
      陈泽健 提交于
      - server.py 从 1443 行精简到 146 行,改为 create_app() 应用工厂模式
      - 新增 container.py 依赖容器:集中单例与 config,解决跨模块全局副作用
        (rebuild_search_index 的单例重置改用 container.reset_search_engine)
      - 新增 utils/paths.py:路径常量集中(SCRIPT_DIR/PROJECT_ROOT/RECORDS_DIR 等)
      - 新增 utils/audit.py:log_audit 迁入
      - 新增 utils/record_utils.py:5 个入库纯函数迁入
      - 新增 services/ai_service.py:build_prompt/call_claude_api 等迁入
      - 新增 services/record_service.py:rebuild_search_index 迁入
      - 新增 routes/ 5 个 Blueprint(auth/troubleshoot/cache/export/submit)
      - decorators.py:url_for('login') 适配为 url_for('auth.login')
      - API 路径与响应格式严格不变(15 端点验证通过)
      - 94 单元测试回归全绿
      - 回写 P1 需求/计划文档:P1-3 验收勾选、执行记录与问题记录补全
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      c2698352
    • 陈泽健's avatar
      test(p1-2): 新增 pytest 单元测试,覆盖三大核心模块 · 15192abf
      陈泽健 提交于
      - 新建 skill/code/tests/ 目录:conftest.py 注入 web/ 路径与索引副本,
        使 SearchEngine 在本地可实例化(避免 FileNotFoundError)
      - test_safety_filter.py(41 用例):覆盖 check_dangerous / is_allowed_operation
        / check_relevance / extract_query_keywords / filter_output / filter_sensitive_info
        / filter_output_with_sensitive
      - test_cache_manager.py(19 用例):覆盖 get/set/clear_expired/clear_all/get_stats
        /check_and_clean_if_needed,含损坏文件、不可序列化、超限清理边界
      - test_search_engine.py(34 用例):覆盖 tokenize/compute_tf/idf/tfidf/cosine
        及 SearchEngine 实例化/search/项目分类过滤/get_projects/get_categories
      - 新增 pytest.ini 配置;requirements.txt 追加 pytest/pytest-cov/pytest-mock
      - .gitignore 补充 .coverage、.pytest_cache/ 忽略规则
      - 移除误入库的 __pycache__/*.pyc 编译产物
      - 核心模块覆盖率:safety_filter 99% / cache_manager 87% / search_engine 85%,均 > 80%
      - 回写 P1 需求/计划文档:P1-2 验收勾选、执行记录与问题记录补全
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      15192abf
    • 陈泽健's avatar
      refactor(middleware): P1 级代码质量优化 — 日志系统、异常处理、工具模块抽取 · bccc2b9a
      陈泽健 提交于
      - 新增 utils/ 工具包:统一日志配置(logger)、错误码定义(error_codes)、API 响应封装(response)
      - cache_manager.py:笼统 except Exception 拆分为 FileNotFoundError / JSONDecodeError / OSError 精准处理
      - server.py:12 处 print / traceback.print_exc 替换为 logger.error / logger.exception
      - server.py:新增网络异常(RequestException)和响应解析异常(KeyError/ValueError)捕获
      - deploy/upload_to_server.py:数据源统一到 skill/code/web/,新增 DIRS_TO_UPLOAD 目录递归上传
      - 新增 .claude/skills/HANDOFF/ 会话交接技能
      - CLAUDE.md 注册 /handoff 技能入口
      - Docs/ 新增 P1 级代码质量优化相关 PRD 文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      bccc2b9a
  8. 12 7月, 2026 4 次提交
    • 陈泽健's avatar
      fix(security): 移除登录页默认账号提示,防止敏感信息泄露 · 088a402c
      陈泽健 提交于
      - 移除 login.html 底部默认管理员账号密码提示
      - 移除 upload_login_auth.py 部署完成后的默认账号打印
      - 新增 PRD 需求文档及计划执行文档
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      088a402c
    • 陈泽健's avatar
      chore(config): 添加 Claude Code 技能配置 · a1303c1e
      陈泽健 提交于
      - 创建 .claude/skills/ 目录结构
      - 复制 GitCommit、CreateCMD、prd-code、prd-plan 技能
      - 添加 CLAUDE.md 项目配置文件
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      a1303c1e
    • 陈泽健's avatar
      fix(security): P0级问题修复 · 023f2e65
      陈泽健 提交于
      - P0-1: 移除所有硬编码密码,使用环境变量
      - P0-2: 修复 server.py 重复赋值 bug
      - P0-3: 消除 deploy/web/ 代码重复
      - 新增 .env.example 环境变量模板
      - 新增 .gitignore
      - 更新 README.md 目录结构说明
      - 更新部署脚本从统一源目录复制
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      023f2e65
    • 陈泽健's avatar
      feat(skills): 新增代码提交辅助技能集 · 2dbfa212
      陈泽健 提交于
      新增 5 个 Claude Code skills 和 Troubleshoot 完整功能:
      
      **Skills 新增:**
      - CreateCMD: 在当前目录打开指定数量 CMD 窗口
      - git-commit: 代码提交辅助工具(审查、分类、生成 Conventional Commits)
      - prd-plan: 解析 PRD 需求文档生成执行计划
      - prd-code: 解析执行计划文档生成/更新代码
      - Troubleshoot: 问题排查协助(含 600+ 行排查流程、高频场景、已知坑速查表)
      
      **项目文件:**
      - 新增 Troubleshoot Web 服务代码(Flask + TF-IDF 搜索 + 安全过滤)
      - 新增 PRD 文档集合(需求文档、执行计划、部署报告、用户手册)
      - 新增 README.md 项目说明
      - 新增 config/deploy 配置和部署脚本
      - 删除过时的运维集控脚本
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      2dbfa212
  9. 11 9月, 2024 1 次提交