364 Commits

Author SHA1 Message Date
augushong
d7e348f1ab chore(version): 发布 v2.8.0 版本说明 2026-10-08 12:37:16 +00:00
augushong
f3ac7189f2 refactor(component): tagInput/propertyInput/tableData 模板改为懒加载异步获取
原实现三个组件在 JS 顶层用 $.ajax({async:false}) 同步拉取 .html 模板,
每个页面打开固定发 3 个同步请求(阻塞主线程,与组件是否被使用无关),
且路径硬编码 /static/ 与 __STATIC__(OSS 部署)脱节,模板 URL 无版本
参数存在与 js 缓存不同步的漂移问题,请求失败时静默渲染空白。

改造内容:
- 模板改为首次 render() 时异步获取,Deferred 缓存供同页多实例共享,
  失败不缓存并在下次 render 自动重试,失败时 console.error + 提示
- 模板 URL 取 CONFIG.STATIC + CONFIG.STATIC_VERSION,layout 的
  window.CONFIG 新增这两项注入;无注入时逐级回退 /static 与 VERSION,
  兼容下游覆盖 layout 的旧页面
- 组件 CSS 由 _require.html 直接 link 引入(__STATIC__ + 版本键),
  替代原 JS 动态注入
- render() 返回 Promise(resolve Vue 实例);仓库内调用均为
  fire-and-forget,无兼容影响
2026-10-05 14:08:03 +00:00
augushong
45bc4a7f43 refactor(curd): 移除生成模板与框架页面 data-auth 声明(含 uploadfile 权限映射回归本页节点的行为变化说明)
- CURD 生成模板 index.code 删除 6 个 data-auth 属性行,生成页面零权限声明
- extend/base 13 个列表页 index.html 清理全部 data-auth-* 声明(含注释文本同步改写)
- system/host/index.js 的 set-master 按钮 auth 改写为全节点 'system.host/setMaster'
  (驼峰动作段逐字保留,parseNodeStr 仅 snake 化控制器段);system/auth 的
  assignUsers 解析后与注册节点逐字相等,无需改写
- 行为变化:system/uploadfile 页原 data-auth-add/edit/delete 误映射 system.menu/*
  (上游模板复制残留),删除后按钮按本页 system.uploadfile/* 节点判定——该页
  控制器仅注册 delete 动作,非超管用户的添加按钮从此正确隐藏(现状是
  有 system.menu/add 权限即显示但点击被后端拒绝),data-auth-edit 为死属性
  (本页无编辑按钮)
- VersionBase::VERSION v2.7.0 → v2.8.0,使 admin-core.js 静态引用缓存键
  (?t=get_site_version_key())失效,防下游升级后旧缓存 js 叠加新布局导致
  非超管按钮全隐
2026-10-04 01:31:36 +00:00
augushong
fa89908c4b feat(auth): 后台布局注入全局权限集合 UA_AUTH 2026-10-04 01:13:00 +00:00
augushong
d3a44a2e1c feat(auth): AuthService 新增 getAuthPayload 权限载荷构建 2026-10-04 00:47:11 +00:00
augushong
a9f9045d10 fix(table): 卡片勾选收敛至勾位图标并消除勾选重渲闪烁(pro#4)
- 委托收敛勾位判定+快速路径 class 回显
- 勾位光标样式
- usercard/goodscard 勾位适配
- 两个技能文档契约同步
2026-10-03 11:55:56 +00:00
augushong
0cc01810f4 chore(version): 发布 v2.7.0 版本说明 2026-10-02 15:20:00 +00:00
augushong
842641763a feat(theme): 配色专属标准皮肤,清爽全包观感与面板交互重构 2026-09-27 02:18:41 +00:00
augushong
9cfb5fbd78 feat(view): 商品列表默认形态改为商品模板 2026-09-25 14:30:35 +00:00
augushong
4f469f4c09 feat(theme): 新增清爽皮肤(36px 紧凑头部)并设为默认 2026-09-25 12:55:29 +00:00
augushong
276d9b001e feat(view): 名片模板视觉升级,状态开关移至头部 2026-09-25 11:50:49 +00:00
augushong
ee13e1bdfe feat(view): 商品卡模板视觉升级,状态开关移至图面右上 2026-09-25 11:50:35 +00:00
augushong
58053e0280 feat(view): 商品列表新增商品自定义卡片模板三形态示例 2026-09-25 10:37:49 +00:00
augushong
994803f155 feat(view): 用户管理示例升级三形态并示范按端默认配置 2026-09-14 18:40:02 +00:00
augushong
d4367060b8 refactor(view): 清理十八页冗余的受控显式声明 2026-09-14 16:35:15 +00:00
augushong
0708afddf0 feat(table): 用户管理名片卡片官方示例 2026-09-11 12:58:46 +00:00
augushong
301b132f2f feat(table): 灰度第四批 mall 三页切换受控模式 2026-09-10 22:10:26 +00:00
augushong
e9bbcc5bb2 feat(table): 灰度第三批三页切换并收编业务直呼 2026-09-10 21:22:43 +00:00
augushong
4f14f18c78 feat(table): 灰度第二批三页切换受控模式 2026-09-10 20:36:16 +00:00
augushong
a335ce7985 feat(table): 灰度第一批四页切换受控模式 2026-09-10 20:36:16 +00:00
augushong
6c5be1a15a feat(table): 装载 reloadData shim 与 checkStatus 分发 2026-09-10 18:27:29 +00:00
augushong
9603bc23e3 chore(table): 删除第一代 uaTable 原型死代码 2026-09-10 17:26:23 +00:00
augushong
7932d1cd07 chore(update): 版本号提升至v2.6.0
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-10 12:52:01 +00:00
augushong
553047025c refactor(install): 种子退役,migrate:run 一条命令完成建表与初始数据
新增 InitDataAlignService 六域对齐(超管/角色/权限节点/配置/快捷入口/商城演示)与 20260909130000 迁移;SystemAdmin 快照以字面量哈希入库;删除种子三件与安装锁依赖,seeds 目录留 .gitkeep;README/tests/规则等 11 处说明同步。

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-09 14:38:10 +00:00
augushong
e54c772868 feat(admin): 菜单快照对齐迁移,存量库自动补齐运行管理与XHProf菜单
对齐迁移是菜单快照进入数据库的唯一途径(新装与存量库同路径);缺失行按显式 id 补插,框架结构行仅对齐 pid+sort,软删/用户分组跳过;新增规则文件与索引;清理 status 模块孤儿占位文件。

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-09 14:37:56 +00:00
augushong
2906d51995 chore(update): 版本号提升至v2.5.1 2026-09-07 23:58:04 +08:00
augushong
68823568ef fix(update): .agents项目自维护文件改判可选更新,防止升级强制覆盖与强制删除 2026-09-07 23:46:22 +08:00
augushong
1422878966 fix(mcp): 日志页密钥列关联键名兼容驼峰/蛇形,修复活密钥误显示已删除兜底 2026-08-21 22:58:29 +08:00
augushong
aba0d20615 feat(storage): v2.5.0存量升级脚本补齐存储配置 2026-08-20 22:21:25 +08:00
augushong
15cda70d0a feat(storage): 初始化数据新增S3与WebDAV配置项 2026-08-20 22:15:23 +08:00
augushong
afe176c6f5 feat(storage): 上传配置页新增S3与WebDAV表单 2026-08-20 22:14:26 +08:00
augushong
f01ecbe08e docs(storage): 新增v2.5.0升级提示与特性说明 2026-08-20 22:12:20 +08:00
augushong
0d20fd7786 feat(mcp): tools/call 自请求分发、CSRF 内部标记豁免与调用审计 2026-08-16 22:46:32 +08:00
augushong
c21bf9f240 feat(mcp): mcp 独立应用与 /mcp Streamable HTTP 端点(官方 SDK + PSR-7 桥接) 2026-08-16 22:15:19 +08:00
augushong
1ab276b1e9 feat(mcp): McpService 密钥认证与动态工具集(白名单∩创建者实时权限) 2026-08-16 21:40:55 +08:00
augushong
744a0819f2 feat(mcp): 密钥授权页,仅创建者拥有的节点可授权(防越权与漂移) 2026-08-16 21:18:40 +08:00
augushong
25c98b6ed6 feat(mcp): MCP 调用日志只读列表页 2026-08-16 20:55:03 +08:00
augushong
918d1d4dd5 feat(mcp): MCP 密钥管理后台(CURD 重组 Base/App,密钥仅创建时明文展示) 2026-08-16 20:55:02 +08:00
augushong
5777448d99 feat(mcp): 新增 MCP 密钥/授权/日志三表 Scheme 与模型 2026-08-16 20:20:47 +08:00
augushong
57873080df feat(log): 新增 debug_log_import 定时导入任务(时间窗口+事务对齐+当天文件保护) 2026-08-16 08:45:19 +08:00
augushong
c0cae93562 feat(log): 新增 DebugLogReader 增量读服务(JSONL 按行 + CSV fgetcsv 多行安全) 2026-08-16 08:17:52 +08:00
augushong
8cbe62a402 feat(admin): 初始化菜单重组运行管理分组并补录 XHProf 菜单
系统管理下新增运行管理目录(309),含定时任务(310)、Web日志(311)两个子目录;定时器配置/日志、访问统计仪表盘、原始访问日志、性能分析、系统状态、日志管理、主机列表共 8 条菜单挪入新分组;补录此前遗漏的 XHProf 四条菜单(304-307,叶子带 auth_node),新装环境与开发库结构对齐(26 条)。

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-15 19:11:39 +08:00
augushong
a43a9a48b9 feat(tools): XHProf 日志导入三层服务与函数监控物化
- XhprofProfileParserService(Base/App):纯数组解析 jsonl 行,
  meta 字段以真实 fixture 为准;simple_url 缺失兜底与采集端回调同算法;
  watch 正则按 callee 物化(ct/wt_sum/wt_max),非法正则编译计 fail 跳过
- XhprofLogReaderService(Base/App):增量读取,半行缓冲超限整行丢弃
  (不照抄 nginx 8MB 强制切行);EOF 无换行半行不 yield 不推进 offset;
  进度不自动落盘,由导入侧在同一事务内显式 savePosition
- XhprofLogImport 定时任务(Base/App):不受 XHPROF_ENABLE 门控,
  runs-*.jsonl 按文件名序增量导入;run 逐条 insert + detail chunk 20
  insertAll + run_watch insertAll 与 position 同事务落盘;导至 EOF 后
  只删已导完文件
- 修复 T1 缺陷:request_time decimal(12,3) 装不下 10 位时间戳,
  Scheme 与 migration 同步改 decimal(13,3)
- 新增 parser 单元测试(真实 fixture 断言,9 用例 42 断言)
  与 jsonl fixture;phpunit 注册 unit 测试套件
2026-08-15 06:11:01 +08:00
augushong
b472df8c1d feat(tools): XHProf 数据清理任务与定时注册 2026-08-15 05:47:34 +08:00
augushong
0e1df3852d feat(update): 新增 admin:update --fetch-only 纯拉取模式 2026-08-08 19:09:21 +08:00
augushong
ad96755ff5 docs(permission): 统一校准权限节点措辞,消除更新节点误解
admin:permission:nodes 是查看型命令(实时扫描注解、不写库、改注解即生效),但文档/注释多处用一键更新/自动更新/生成等动作词描述,导致开发者系统性误以为它是更新权限节点命令。本次校准 8 个文件 10 处误导措辞,并在命令输出末尾追加机制提示。@NodeAnotation 拼写保持不变(框架故意少一个 t)。
2026-08-08 18:21:25 +08:00
augushong
8faa52ce90 feat(nginx-log): 多节点适配(node_id 全链路 + 全局/按节点聚合 + 节点筛选 + v2.4.0 升级脚本)
- 6 张表加 node_id 字段 + position/stat 改复合唯一键(migration)
- 6 个 Scheme 同步 node_id 注解 + 唯一键
- Reader 带 node_id 参数 + 懒加载接管(getLastPosition 回退查 node_id='')
- Aggregator 全局行(node_id='')+ 按节点循环 insertAggregatesForScope
- Stat 所有查询方法加 where node_id 条件
- Dashboard 控制器/视图加节点筛选下拉框 + AJAX 带 node_id
- AccessLog 列表加节点列 + 采集进度卡片显示节点信息
- import 定时任务 run_type 改 all(每节点采集自己的日志)
- v2.4.0 升级脚本追加 ALTER TABLE(幂等 check-then-alter)
- 菜单调整:去掉 Nginx 顶级菜单 + 读取位置管理,改为系统管理下挂两个子菜单
- ulthon-timer 文档补充 run_type=all 多节点部署注意事项
2026-08-08 10:33:20 +08:00
augushong
f1a2e8fd5d fix(nginx-log): service 文件加 Service 后缀(命名规范合规)
F2 Code quality review 发现:3 个新增 service 未遵守
.agents/rules/ulthon-naming-convention.md 第 19 行规定
(service 模块文件名需带 Service 后缀)。

变更:
- 重命名 6 个文件(3 Base + 3 App):
  NginxLogParser(Base)→NginxLogParserService(Base)
  NginxLogReader(Base)→NginxLogReaderService(Base)
  NginxLogAggregator(Base)→NginxLogAggregatorService(Base)
- 同步类名、use、类型 hint、new 引用
- NginxLogReaderServiceBase 异常消息前缀同步加 Service
- controller Base 引用更新(NginxLogImportBase / NginxLogStatAggregateBase)

验证:
- php -l 全部 8 个文件语法通过
- grep 残留旧名 = 0 结果(24 处引用全部带 Service 后缀)
2026-07-28 06:57:13 +08:00
augushong
0f9f12174c test(nginx-log): 权限节点扫描 + 端到端 QA 验证 + curd 路径修复
- 跑 admin:permission:nodes 扫描 138 个权限节点(17 个 nginx 相关节点)

- 17 个 nginx 节点 assign 给 role-id=1(写入 ul_system_auth_node 满足 plan 验收)

- curd 路径修复:菜单 href 由 system.nginx_access_log/index 改为 nginx.access_log/index(匹配 curd 生成的实际 URL,方案 B)

  - SystemMenu.php / v2.4.0.php / DB ul_system_menu 三处同步(含 id=303 log_position)

  - dashboard id=301 system.nginx_log_stat/index 保持不变(控制器确实在 system 模块)

- 端到端 QA 全通过:100 行日志 → import 74 行(静态过滤)→ aggregate stat_hour=1/url=6 → dashboard 数据完整

- 修复 T10 遗留 bug:cleanStatTables 用 Unix 时间戳当阈值,与 stat_date YYYYMMDD 不匹配导致误删

  - threshold 从 strtotime('today')-days*86400 改为 (int) date('Ymd', strtotime('today')-days*86400)

  - 验证:366 天前 stat 数据被删,今天 stat 数据保留

- 权限隔离:超管可访问,未登录被拦(code=40101 请先登录后台)

- Evidence: .omo/evidence/task-16-nginx-log-analytics-e2e/(15 个文件)
2026-07-28 06:47:24 +08:00
augushong
8a5a0d9877 feat(nginx-log): NginxLogStat dashboard 视图与 JS(echarts 趋势图) 2026-07-28 06:34:30 +08:00