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 |
|
augushong
|
3e983d8b8f
|
feat(nginx-log): adminUpdateCodeData v2.4.0 存量升级代码(sysconfig + 菜单幂等补齐)
|
2026-07-28 06:28:17 +08:00 |
|
augushong
|
d5329cdd45
|
feat(nginx-log): curd 生成 raw/position 后台并改只读
- NginxAccessLog + NginxLogPosition Scheme 加 #[Component] 注解
- Scheme Table name 补 ul_ 前缀(curd 严格校验要求)
- curd 生成 nginx 模块完整后台(controller/model/view/js)
- Base/App 双层只读控制器(参照 TimerLogBase 范式)
- AccessLogBase: add/edit/delete/modify 全部 error
- LogPositionBase: 同上
- 视图改造:
- access_log 裁剪到 8 列核心字段(time_local/method/uri/status/remote_addr/request_time/body_bytes_sent/http_user_agent)
- status/request_time 自定义 badge 渲染
- toolbar 清空 + operat 仅保留详情(B 类只读页面)
- log_position 全字段 + 只读化
- HTTP 验证:index 200 OK + add/edit/delete/modify 全部返回错误
|
2026-07-28 06:21:13 +08:00 |
|
augushong
|
7987001cd2
|
feat(nginx-log): NginxLogStat dashboard 控制器(Base/App 双层,日/周/月/年聚合)
- extend/base/admin/controller/system/NginxLogStatBase.php:完整逻辑
- @ControllerAnnotation(title=Nginx访问统计) + @NodeAnotation(title=访问统计)
- index() 页面/接口同体:isAjax() 返回 JSON,否则 fetch()
- period 解析:day(24h)/week(7d)/month(30d)/year(12m)/custom,invalid 自动 fallback day
- custom start>end 自动 swap
- 整体指标:SUM stat_hour,avg_request_time 按 PV 加权平均
- 趋势:day 按 stat_hour 聚合补 0-23;week/month/custom 按 stat_date 补日期序列;year 按 (stat_date DIV 100) 聚合补 1-12 月
- Top N:sysconfig('nginx_log','topn_default',10),topN=0 不截断
- 跨周期 UV 标注:uv_is_estimate = period !== 'day'
- 空表/空范围不崩(返回 0/[])
- app/admin/controller/system/NginxLogStat.php:App 入口,仅 extends Base
性能:stat_hour 10 万行 + period=year 服务端 < 700ms(< 2s 要求)
依赖:T1 stat 模型、T9 Aggregate;blocks:T13 视图
|
2026-07-28 06:17:22 +08:00 |
|
augushong
|
2b677c6f89
|
feat(nginx-log): NginxLogStatAggregate 定时任务 + timer config 注册
|
2026-07-28 06:02:07 +08:00 |
|
augushong
|
8eaa672ed6
|
feat(nginx-log): NginxLogClean 定时任务 + timer config 注册(完成 3 个 nginx 任务)
|
2026-07-28 06:00:15 +08:00 |
|
augushong
|
13b1313e92
|
feat(nginx-log): NginxLogImport 定时任务 + timer config 注册(Base/App 双层)
|
2026-07-28 05:48:46 +08:00 |
|
augushong
|
ceb73c750a
|
feat(nginx-log): NginxLogAggregator 聚合 service(Base/App 双层,delete-then-insert 幂等)
|
2026-07-28 00:52:51 +08:00 |
|
augushong
|
9fe55f81bf
|
feat(nginx-log): NginxLogReader 增量读取 service(Base/App 双层,含轮转检测)
|
2026-07-28 00:39:11 +08:00 |
|