feat: 新增管理后台前端项目及安全加固
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

refactor(saas): 重构认证中间件与限流策略
- 登录限流调整为5次/分钟/IP
- 注册限流调整为3次/小时/IP
- GET请求不计入限流

fix(saas): 修复调度器时间戳处理
- 使用NOW()替代文本时间戳
- 兼容TEXT和TIMESTAMPTZ列类型

feat(saas): 实现环境变量插值
- 支持${ENV_VAR}语法解析
- 数据库密码支持环境变量注入

chore: 新增前端管理界面
- 基于React+Ant Design Pro
- 包含路由守卫/错误边界
- 对接58个API端点

docs: 更新安全加固文档
- 新增密钥管理规范
- 记录P0安全项审计结果
- 补充TLS终止说明

test: 完善配置解析单元测试
- 新增环境变量插值测试用例
This commit is contained in:
iven
2026-03-31 00:11:33 +08:00
parent 6821df5f44
commit eb956d0dce
129 changed files with 11913 additions and 863 deletions

162
tmp/accounts-page.txt Normal file
View File

@@ -0,0 +1,162 @@
uid=27_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/accounts"
uid=27_13 alert atomic live="assertive" relevant="additions text"
uid=28_0 complementary
uid=28_1 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=28_2 StaticText "Z"
uid=28_3 StaticText "ZCLAW"
uid=28_4 StaticText "Admin"
uid=28_5 navigation
uid=28_6 link "仪表盘" url="http://localhost:3000/"
uid=28_7 StaticText "仪表盘"
uid=28_8 link "账号管理" focusable focused url="http://localhost:3000/accounts"
uid=28_9 StaticText "账号管理"
uid=28_10 link "服务商" url="http://localhost:3000/providers"
uid=28_11 StaticText "服务商"
uid=28_12 link "模型管理" url="http://localhost:3000/models"
uid=28_13 StaticText "模型管理"
uid=28_14 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=28_15 StaticText "Agent 模板"
uid=28_16 link "API 密钥" url="http://localhost:3000/api-keys"
uid=28_17 StaticText "API 密钥"
uid=28_18 link "用量统计" url="http://localhost:3000/usage"
uid=28_19 StaticText "用量统计"
uid=28_20 link "中转任务" url="http://localhost:3000/relay"
uid=28_21 StaticText "中转任务"
uid=28_22 link "系统配置" url="http://localhost:3000/config"
uid=28_23 StaticText "系统配置"
uid=28_24 link "提示词管理" url="http://localhost:3000/prompts"
uid=28_25 StaticText "提示词管理"
uid=28_26 link "操作日志" url="http://localhost:3000/logs"
uid=28_27 StaticText "操作日志"
uid=28_28 button
uid=28_29 StaticText "A"
uid=28_30 StaticText "Admin"
uid=28_31 StaticText "super_admin"
uid=28_32 button "退出登录"
uid=28_33 banner
uid=28_34 heading "账号管理" level="1"
uid=28_35 button "通知"
uid=28_36 main
uid=29_0 textbox "搜索用户名 / 邮箱 / 显示名..."
uid=29_1 combobox expandable haspopup="listbox" value="全部角色"
uid=29_2 combobox expandable haspopup="listbox" value="全部状态"
uid=29_3 StaticText "用户名"
uid=29_4 StaticText "邮箱"
uid=29_5 StaticText "显示名"
uid=29_6 StaticText "角色"
uid=29_7 StaticText "状态"
uid=29_8 StaticText "创建时间"
uid=29_9 StaticText "操作"
uid=29_10 StaticText "qatest"
uid=29_11 StaticText "qatest@zclaw.com"
uid=29_12 StaticText "-"
uid=29_13 StaticText "普通用户"
uid=29_14 StaticText "正常"
uid=29_15 StaticText "2026/03/29 20:34:49"
uid=29_16 button "编辑"
uid=29_17 button "禁用"
uid=29_18 StaticText "qa2_20260329195710"
uid=29_19 StaticText "qa2_20260329195710@zclaw.local"
uid=29_20 StaticText "QA2 User"
uid=29_21 StaticText "普通用户"
uid=29_22 StaticText "正常"
uid=29_23 StaticText "2026/03/29 19:57:12"
uid=29_24 button "编辑"
uid=29_25 button "禁用"
uid=29_26 StaticText "qa_20260329195628"
uid=29_27 StaticText "qa_20260329195628@zclaw.local"
uid=29_28 StaticText "QA User"
uid=29_29 StaticText "普通用户"
uid=29_30 StaticText "正常"
uid=29_31 StaticText "2026/03/29 19:56:31"
uid=29_32 button "编辑"
uid=29_33 button "禁用"
uid=29_34 StaticText "adminuser"
uid=29_35 StaticText "adminuser@zclaw.local"
uid=29_36 StaticText "-"
uid=29_37 StaticText "普通用户"
uid=29_38 StaticText "正常"
uid=29_39 StaticText "2026/03/28 12:47:53"
uid=29_40 button "编辑"
uid=29_41 button "禁用"
uid=29_42 StaticText "saasadmin2"
uid=29_43 StaticText "saas2@zclaw.com"
uid=29_44 StaticText "-"
uid=29_45 StaticText "超级管理员"
uid=29_46 StaticText "正常"
uid=29_47 StaticText "2026/03/28 12:36:03"
uid=29_48 button "编辑"
uid=29_49 button "禁用"
uid=29_50 StaticText "superadmin"
uid=29_51 StaticText "super@zclaw.com"
uid=29_52 StaticText "-"
uid=29_53 StaticText "普通用户"
uid=29_54 StaticText "正常"
uid=29_55 StaticText "2026/03/28 12:36:02"
uid=29_56 button "编辑"
uid=29_57 button "禁用"
uid=29_58 StaticText "testadmin"
uid=29_59 StaticText "testadmin@zclaw.local"
uid=29_60 StaticText "-"
uid=29_61 StaticText "普通用户"
uid=29_62 StaticText "正常"
uid=29_63 StaticText "2026/03/28 12:34:55"
uid=29_64 button "编辑"
uid=29_65 button "禁用"
uid=29_66 StaticText "saasadmin"
uid=29_67 StaticText "admin@zclaw.com"
uid=29_68 StaticText "-"
uid=29_69 StaticText "普通用户"
uid=29_70 StaticText "正常"
uid=29_71 StaticText "2026/03/28 12:23:08"
uid=29_72 button "编辑"
uid=29_73 button "禁用"
uid=29_74 StaticText "debuguser"
uid=29_75 StaticText "debug@zclaw.com"
uid=29_76 StaticText "-"
uid=29_77 StaticText "普通用户"
uid=29_78 StaticText "正常"
uid=29_79 StaticText "2026/03/28 12:20:59"
uid=29_80 button "编辑"
uid=29_81 button "禁用"
uid=29_82 StaticText "testuser1"
uid=29_83 StaticText "test1@zclaw.com"
uid=29_84 StaticText "-"
uid=29_85 StaticText "普通用户"
uid=29_86 StaticText "正常"
uid=29_87 StaticText "2026/03/28 12:15:54"
uid=29_88 button "编辑"
uid=29_89 button "禁用"
uid=29_90 StaticText "user_1774661776301"
uid=29_91 StaticText "user_1774661776301@test.com"
uid=29_92 StaticText "Test User"
uid=29_93 StaticText "普通用户"
uid=29_94 StaticText "正常"
uid=29_95 StaticText "2026/03/28 09:36:16"
uid=29_96 button "编辑"
uid=29_97 button "禁用"
uid=29_98 StaticText "admin"
uid=29_99 StaticText "admin@zclaw.local"
uid=29_100 StaticText "Admin"
uid=29_101 StaticText "超级管理员"
uid=29_102 StaticText "正常"
uid=29_103 StaticText "2026/03/28 01:26:42"
uid=29_104 button "编辑"
uid=29_105 button "禁用"
uid=29_106 StaticText "testuser"
uid=29_107 StaticText "test@zclaw.local"
uid=29_108 StaticText "-"
uid=29_109 StaticText "普通用户"
uid=29_110 StaticText "正常"
uid=29_111 StaticText "2026/03/28 01:19:28"
uid=29_112 button "编辑"
uid=29_113 button "禁用"
uid=29_114 StaticText "第 "
uid=29_115 StaticText "1"
uid=29_116 StaticText " 页 / 共 "
uid=29_117 StaticText "1"
uid=29_118 StaticText " 页 ("
uid=29_119 StaticText "13"
uid=29_120 StaticText " 条)"
uid=29_121 button "上一页" disableable disabled
uid=29_122 button "下一页" disableable disabled

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
tmp/admin-config-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
tmp/admin-logs-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
tmp/admin-models-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

BIN
tmp/admin-relay-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
tmp/admin-usage-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

47
tmp/config-page.txt Normal file
View File

@@ -0,0 +1,47 @@
uid=27_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/config"
uid=27_13 alert atomic live="assertive" relevant="additions text"
uid=28_0 complementary
uid=28_1 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=28_2 StaticText "Z"
uid=28_3 StaticText "ZCLAW"
uid=28_4 StaticText "Admin"
uid=28_5 navigation
uid=28_6 link "仪表盘" url="http://localhost:3000/"
uid=28_7 StaticText "仪表盘"
uid=28_8 link "账号管理" url="http://localhost:3000/accounts"
uid=28_9 StaticText "账号管理"
uid=28_10 link "服务商" url="http://localhost:3000/providers"
uid=28_11 StaticText "服务商"
uid=28_12 link "模型管理" url="http://localhost:3000/models"
uid=28_13 StaticText "模型管理"
uid=28_14 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=28_15 StaticText "Agent 模板"
uid=28_16 link "API 密钥" url="http://localhost:3000/api-keys"
uid=28_17 StaticText "API 密钥"
uid=28_18 link "用量统计" url="http://localhost:3000/usage"
uid=28_19 StaticText "用量统计"
uid=28_20 link "中转任务" url="http://localhost:3000/relay"
uid=28_21 StaticText "中转任务"
uid=28_22 link "系统配置" focusable focused url="http://localhost:3000/config"
uid=28_23 StaticText "系统配置"
uid=28_24 link "提示词管理" url="http://localhost:3000/prompts"
uid=28_25 StaticText "提示词管理"
uid=28_26 link "操作日志" url="http://localhost:3000/logs"
uid=28_27 StaticText "操作日志"
uid=28_28 button
uid=28_29 StaticText "A"
uid=28_30 StaticText "Admin"
uid=28_31 StaticText "super_admin"
uid=28_32 button "退出登录"
uid=28_33 banner
uid=28_34 heading "系统配置" level="1"
uid=28_35 button "通知"
uid=28_36 main
uid=31_0 tablist orientation="horizontal"
uid=31_1 tab "全部" selectable selected
uid=31_2 tab "服务器" selectable
uid=31_3 tab "Agent" selectable
uid=31_4 tab "记忆" selectable
uid=31_5 tab "LLM" selectable
uid=31_6 tab "安全策略" selectable
uid=31_7 StaticText "暂无配置项"

57
tmp/dashboard-nav.txt Normal file
View File

@@ -0,0 +1,57 @@
uid=33_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/"
uid=33_1 alert atomic live="assertive" relevant="additions text"
uid=33_2 complementary
uid=33_3 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=33_4 StaticText "Z"
uid=33_5 StaticText "ZCLAW"
uid=33_6 StaticText "Admin"
uid=33_7 navigation
uid=33_8 link "仪表盘" url="http://localhost:3000/"
uid=33_9 StaticText "仪表盘"
uid=33_10 link "账号管理" url="http://localhost:3000/accounts"
uid=33_11 StaticText "账号管理"
uid=33_12 link "服务商" url="http://localhost:3000/providers"
uid=33_13 StaticText "服务商"
uid=33_14 link "模型管理" url="http://localhost:3000/models"
uid=33_15 StaticText "模型管理"
uid=33_16 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=33_17 StaticText "Agent 模板"
uid=33_18 link "API 密钥" url="http://localhost:3000/api-keys"
uid=33_19 StaticText "API 密钥"
uid=33_20 link "用量统计" url="http://localhost:3000/usage"
uid=33_21 StaticText "用量统计"
uid=33_22 link "中转任务" url="http://localhost:3000/relay"
uid=33_23 StaticText "中转任务"
uid=33_24 link "系统配置" url="http://localhost:3000/config"
uid=33_25 StaticText "系统配置"
uid=33_26 link "提示词管理" url="http://localhost:3000/prompts"
uid=33_27 StaticText "提示词管理"
uid=33_28 link "操作日志" url="http://localhost:3000/logs"
uid=33_29 StaticText "操作日志"
uid=33_30 button
uid=33_31 StaticText "A"
uid=33_32 StaticText "Admin"
uid=33_33 StaticText "super_admin"
uid=33_34 button "退出登录"
uid=33_35 banner
uid=33_36 heading "仪表盘" level="1"
uid=33_37 button "通知"
uid=33_38 main
uid=33_39 StaticText "总账号数"
uid=33_40 StaticText "-"
uid=33_41 StaticText "活跃 0"
uid=33_42 StaticText "活跃服务商"
uid=33_43 StaticText "-"
uid=33_44 StaticText "模型 0"
uid=33_45 StaticText "今日请求"
uid=33_46 StaticText "-"
uid=33_47 StaticText "中转任务"
uid=33_48 StaticText "今日 Token"
uid=33_49 StaticText "0"
uid=33_50 StaticText "In: 0 / Out: 0"
uid=33_51 heading "请求趋势 (30 天)" level="3"
uid=33_52 StaticText "暂无数据"
uid=33_53 heading "Token 用量 (30 天)" level="3"
uid=33_54 StaticText "暂无数据"
uid=33_55 heading "最近操作" level="3"
uid=33_56 StaticText "暂无操作日志"

13
tmp/login-snapshot.txt Normal file
View File

@@ -0,0 +1,13 @@
uid=26_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/login"
uid=26_1 heading "ZCLAW" level="1"
uid=26_2 StaticText "AI Agent 管理平台"
uid=26_3 StaticText "统一管理 AI 服务商、模型配置、API 密钥、用量监控与系统配置"
uid=26_4 heading "登录" level="2"
uid=26_5 StaticText "输入您的账号信息以继续"
uid=26_6 StaticText "用户名"
uid=26_7 textbox "用户名"
uid=26_8 StaticText "密码"
uid=26_9 textbox "密码"
uid=26_10 button
uid=26_11 checkbox "记住我"
uid=26_12 button "登录"

176
tmp/logs-page.txt Normal file
View File

@@ -0,0 +1,176 @@
uid=27_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/logs"
uid=27_13 alert atomic live="assertive" relevant="additions text"
uid=28_0 complementary
uid=28_1 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=28_2 StaticText "Z"
uid=28_3 StaticText "ZCLAW"
uid=28_4 StaticText "Admin"
uid=28_5 navigation
uid=28_6 link "仪表盘" url="http://localhost:3000/"
uid=28_7 StaticText "仪表盘"
uid=28_8 link "账号管理" url="http://localhost:3000/accounts"
uid=28_9 StaticText "账号管理"
uid=28_10 link "服务商" url="http://localhost:3000/providers"
uid=28_11 StaticText "服务商"
uid=28_12 link "模型管理" url="http://localhost:3000/models"
uid=28_13 StaticText "模型管理"
uid=28_14 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=28_15 StaticText "Agent 模板"
uid=28_16 link "API 密钥" url="http://localhost:3000/api-keys"
uid=28_17 StaticText "API 密钥"
uid=28_18 link "用量统计" url="http://localhost:3000/usage"
uid=28_19 StaticText "用量统计"
uid=28_20 link "中转任务" url="http://localhost:3000/relay"
uid=28_21 StaticText "中转任务"
uid=28_22 link "系统配置" url="http://localhost:3000/config"
uid=28_23 StaticText "系统配置"
uid=28_24 link "提示词管理" url="http://localhost:3000/prompts"
uid=28_25 StaticText "提示词管理"
uid=28_26 link "操作日志" focusable focused url="http://localhost:3000/logs"
uid=28_27 StaticText "操作日志"
uid=28_28 button
uid=28_29 StaticText "A"
uid=28_30 StaticText "Admin"
uid=28_31 StaticText "super_admin"
uid=28_32 button "退出登录"
uid=28_33 banner
uid=28_34 heading "操作日志" level="1"
uid=28_35 button "通知"
uid=28_36 main
uid=32_0 combobox expandable haspopup="listbox" value="全部操作"
uid=32_1 button "刷新"
uid=32_2 StaticText "操作类型"
uid=32_3 StaticText "目标类型"
uid=32_4 StaticText "目标 ID"
uid=32_5 StaticText "详情"
uid=32_6 StaticText "IP 地址"
uid=32_7 StaticText "时间"
uid=32_8 StaticText "account.login"
uid=32_9 StaticText "account"
uid=32_10 StaticText "db5fb656..."
uid=32_11 StaticText "-"
uid=32_12 StaticText "127.0.0.1"
uid=32_13 StaticText "2026/03/29 21:47:15"
uid=32_14 StaticText "account.login"
uid=32_15 StaticText "account"
uid=32_16 StaticText "db5fb656..."
uid=32_17 StaticText "-"
uid=32_18 StaticText "127.0.0.1"
uid=32_19 StaticText "2026/03/29 21:45:39"
uid=32_20 StaticText "account.login"
uid=32_21 StaticText "account"
uid=32_22 StaticText "db5fb656..."
uid=32_23 StaticText "-"
uid=32_24 StaticText "127.0.0.1"
uid=32_25 StaticText "2026/03/29 21:45:21"
uid=32_26 StaticText "account.login"
uid=32_27 StaticText "account"
uid=32_28 StaticText "db5fb656..."
uid=32_29 StaticText "-"
uid=32_30 StaticText "127.0.0.1"
uid=32_31 StaticText "2026/03/29 21:44:59"
uid=32_32 StaticText "account.login"
uid=32_33 StaticText "account"
uid=32_34 StaticText "db5fb656..."
uid=32_35 StaticText "-"
uid=32_36 StaticText "127.0.0.1"
uid=32_37 StaticText "2026/03/29 21:11:52"
uid=32_38 StaticText "account.login"
uid=32_39 StaticText "account"
uid=32_40 StaticText "db5fb656..."
uid=32_41 StaticText "-"
uid=32_42 StaticText "127.0.0.1"
uid=32_43 StaticText "2026/03/29 21:11:24"
uid=32_44 StaticText "account.login"
uid=32_45 StaticText "account"
uid=32_46 StaticText "db5fb656..."
uid=32_47 StaticText "-"
uid=32_48 StaticText "127.0.0.1"
uid=32_49 StaticText "2026/03/29 21:09:42"
uid=32_50 StaticText "account.login"
uid=32_51 StaticText "account"
uid=32_52 StaticText "db5fb656..."
uid=32_53 StaticText "-"
uid=32_54 StaticText "127.0.0.1"
uid=32_55 StaticText "2026/03/29 21:09:24"
uid=32_56 StaticText "account.login"
uid=32_57 StaticText "account"
uid=32_58 StaticText "db5fb656..."
uid=32_59 StaticText "-"
uid=32_60 StaticText "127.0.0.1"
uid=32_61 StaticText "2026/03/29 21:06:08"
uid=32_62 StaticText "account.login"
uid=32_63 StaticText "account"
uid=32_64 StaticText "db5fb656..."
uid=32_65 StaticText "-"
uid=32_66 StaticText "127.0.0.1"
uid=32_67 StaticText "2026/03/29 21:03:10"
uid=32_68 StaticText "account.login"
uid=32_69 StaticText "account"
uid=32_70 StaticText "db5fb656..."
uid=32_71 StaticText "-"
uid=32_72 StaticText "127.0.0.1"
uid=32_73 StaticText "2026/03/29 20:57:19"
uid=32_74 StaticText "account.login"
uid=32_75 StaticText "account"
uid=32_76 StaticText "db5fb656..."
uid=32_77 StaticText "-"
uid=32_78 StaticText "127.0.0.1"
uid=32_79 StaticText "2026/03/29 20:56:41"
uid=32_80 StaticText "account.login"
uid=32_81 StaticText "account"
uid=32_82 StaticText "db5fb656..."
uid=32_83 StaticText "-"
uid=32_84 StaticText "127.0.0.1"
uid=32_85 StaticText "2026/03/29 20:53:50"
uid=32_86 StaticText "account.login"
uid=32_87 StaticText "account"
uid=32_88 StaticText "db5fb656..."
uid=32_89 StaticText "-"
uid=32_90 StaticText "127.0.0.1"
uid=32_91 StaticText "2026/03/29 20:40:31"
uid=32_92 StaticText "account.login"
uid=32_93 StaticText "account"
uid=32_94 StaticText "db5fb656..."
uid=32_95 StaticText "-"
uid=32_96 StaticText "127.0.0.1"
uid=32_97 StaticText "2026/03/29 20:37:48"
uid=32_98 StaticText "account.login"
uid=32_99 StaticText "account"
uid=32_100 StaticText "8b1c82f1..."
uid=32_101 StaticText "-"
uid=32_102 StaticText "127.0.0.1"
uid=32_103 StaticText "2026/03/29 20:35:14"
uid=32_104 StaticText "account.create"
uid=32_105 StaticText "account"
uid=32_106 StaticText "8b1c82f1..."
uid=32_107 StaticText "-"
uid=32_108 StaticText "127.0.0.1"
uid=32_109 StaticText "2026/03/29 20:34:49"
uid=32_110 StaticText "account.login"
uid=32_111 StaticText "account"
uid=32_112 StaticText "db5fb656..."
uid=32_113 StaticText "-"
uid=32_114 StaticText "127.0.0.1"
uid=32_115 StaticText "2026/03/29 20:09:59"
uid=32_116 StaticText "account.login"
uid=32_117 StaticText "account"
uid=32_118 StaticText "db5fb656..."
uid=32_119 StaticText "-"
uid=32_120 StaticText "127.0.0.1"
uid=32_121 StaticText "2026/03/29 20:09:27"
uid=32_122 StaticText "account.login"
uid=32_123 StaticText "account"
uid=32_124 StaticText "0a63282a..."
uid=32_125 StaticText "-"
uid=32_126 StaticText "127.0.0.1"
uid=32_127 StaticText "2026/03/29 19:59:22"
uid=32_128 StaticText "第 "
uid=32_129 StaticText "1"
uid=32_130 StaticText " 页 / 共 "
uid=32_131 StaticText "7"
uid=32_132 StaticText " 页 ("
uid=32_133 StaticText "129"
uid=32_134 StaticText " 条)"
uid=32_135 button "上一页" disableable disabled
uid=32_136 button "下一页"

42
tmp/models-snap.txt Normal file
View File

@@ -0,0 +1,42 @@
uid=33_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/models"
uid=33_1 alert atomic live="assertive" relevant="additions text"
uid=33_2 complementary
uid=33_3 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=33_4 StaticText "Z"
uid=33_5 StaticText "ZCLAW"
uid=33_6 StaticText "Admin"
uid=33_7 navigation
uid=33_8 link "仪表盘" url="http://localhost:3000/"
uid=33_9 StaticText "仪表盘"
uid=33_10 link "账号管理" url="http://localhost:3000/accounts"
uid=33_11 StaticText "账号管理"
uid=33_12 link "服务商" url="http://localhost:3000/providers"
uid=33_13 StaticText "服务商"
uid=33_14 link "模型管理" focusable focused url="http://localhost:3000/models"
uid=33_15 StaticText "模型管理"
uid=33_16 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=33_17 StaticText "Agent 模板"
uid=33_18 link "API 密钥" url="http://localhost:3000/api-keys"
uid=33_19 StaticText "API 密钥"
uid=33_20 link "用量统计" url="http://localhost:3000/usage"
uid=33_21 StaticText "用量统计"
uid=33_22 link "中转任务" url="http://localhost:3000/relay"
uid=33_23 StaticText "中转任务"
uid=33_24 link "系统配置" url="http://localhost:3000/config"
uid=33_25 StaticText "系统配置"
uid=33_26 link "提示词管理" url="http://localhost:3000/prompts"
uid=33_27 StaticText "提示词管理"
uid=33_28 link "操作日志" url="http://localhost:3000/logs"
uid=33_29 StaticText "操作日志"
uid=33_30 button
uid=33_31 StaticText "A"
uid=33_32 StaticText "Admin"
uid=33_33 StaticText "super_admin"
uid=33_34 button "退出登录"
uid=33_35 banner
uid=33_36 heading "模型管理" level="1"
uid=33_37 button "通知"
uid=33_38 main
uid=34_0 combobox expandable haspopup="listbox" value="全部服务商"
uid=34_1 button "新建模型"
uid=34_2 StaticText "暂无数据"

14
tmp/post-login.txt Normal file
View File

@@ -0,0 +1,14 @@
uid=27_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/login"
uid=27_1 heading "ZCLAW" level="1"
uid=27_2 StaticText "AI Agent 管理平台"
uid=27_3 StaticText "统一管理 AI 服务商、模型配置、API 密钥、用量监控与系统配置"
uid=27_4 heading "登录" level="2"
uid=27_5 StaticText "输入您的账号信息以继续"
uid=27_6 StaticText "用户名"
uid=27_7 textbox "用户名"
uid=27_8 StaticText "密码"
uid=27_9 textbox "密码"
uid=27_10 button
uid=27_11 checkbox "记住我"
uid=27_12 button "登录"
uid=27_13 alert atomic live="assertive" relevant="additions text"

96
tmp/post-login2.txt Normal file
View File

@@ -0,0 +1,96 @@
uid=27_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/"
uid=27_13 alert atomic live="assertive" relevant="additions text"
uid=28_0 complementary
uid=28_1 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=28_2 StaticText "Z"
uid=28_3 StaticText "ZCLAW"
uid=28_4 StaticText "Admin"
uid=28_5 navigation
uid=28_6 link "仪表盘" url="http://localhost:3000/"
uid=28_7 StaticText "仪表盘"
uid=28_8 link "账号管理" url="http://localhost:3000/accounts"
uid=28_9 StaticText "账号管理"
uid=28_10 link "服务商" url="http://localhost:3000/providers"
uid=28_11 StaticText "服务商"
uid=28_12 link "模型管理" url="http://localhost:3000/models"
uid=28_13 StaticText "模型管理"
uid=28_14 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=28_15 StaticText "Agent 模板"
uid=28_16 link "API 密钥" url="http://localhost:3000/api-keys"
uid=28_17 StaticText "API 密钥"
uid=28_18 link "用量统计" url="http://localhost:3000/usage"
uid=28_19 StaticText "用量统计"
uid=28_20 link "中转任务" url="http://localhost:3000/relay"
uid=28_21 StaticText "中转任务"
uid=28_22 link "系统配置" url="http://localhost:3000/config"
uid=28_23 StaticText "系统配置"
uid=28_24 link "提示词管理" url="http://localhost:3000/prompts"
uid=28_25 StaticText "提示词管理"
uid=28_26 link "操作日志" url="http://localhost:3000/logs"
uid=28_27 StaticText "操作日志"
uid=28_28 button
uid=28_29 StaticText "A"
uid=28_30 StaticText "Admin"
uid=28_31 StaticText "super_admin"
uid=28_32 button "退出登录"
uid=28_33 banner
uid=28_34 heading "仪表盘" level="1"
uid=28_35 button "通知"
uid=28_36 main
uid=28_37 StaticText "总账号数"
uid=28_38 StaticText "13"
uid=28_39 StaticText "活跃 13"
uid=28_40 StaticText "活跃服务商"
uid=28_41 StaticText "0"
uid=28_42 StaticText "模型 0"
uid=28_43 StaticText "今日请求"
uid=28_44 StaticText "0"
uid=28_45 StaticText "中转任务"
uid=28_46 StaticText "今日 Token"
uid=28_47 StaticText "0"
uid=28_48 StaticText "In: 0 / Out: 0"
uid=28_49 heading "请求趋势 (30 天)" level="3"
uid=28_50 StaticText "暂无数据"
uid=28_51 heading "Token 用量 (30 天)" level="3"
uid=28_52 StaticText "暂无数据"
uid=28_53 heading "最近操作" level="3"
uid=28_54 StaticText "时间"
uid=28_55 StaticText "账号 ID"
uid=28_56 StaticText "操作"
uid=28_57 StaticText "目标类型"
uid=28_58 StaticText "目标 ID"
uid=28_59 StaticText "2026/03/29 21:47:15"
uid=28_60 StaticText "db5fb656"
uid=28_61 StaticText "..."
uid=28_62 StaticText "account.login"
uid=28_63 StaticText "account"
uid=28_64 StaticText "db5fb656"
uid=28_65 StaticText "..."
uid=28_66 StaticText "2026/03/29 21:45:39"
uid=28_67 StaticText "db5fb656"
uid=28_68 StaticText "..."
uid=28_69 StaticText "account.login"
uid=28_70 StaticText "account"
uid=28_71 StaticText "db5fb656"
uid=28_72 StaticText "..."
uid=28_73 StaticText "2026/03/29 21:45:21"
uid=28_74 StaticText "db5fb656"
uid=28_75 StaticText "..."
uid=28_76 StaticText "account.login"
uid=28_77 StaticText "account"
uid=28_78 StaticText "db5fb656"
uid=28_79 StaticText "..."
uid=28_80 StaticText "2026/03/29 21:44:59"
uid=28_81 StaticText "db5fb656"
uid=28_82 StaticText "..."
uid=28_83 StaticText "account.login"
uid=28_84 StaticText "account"
uid=28_85 StaticText "db5fb656"
uid=28_86 StaticText "..."
uid=28_87 StaticText "2026/03/29 21:11:52"
uid=28_88 StaticText "db5fb656"
uid=28_89 StaticText "..."
uid=28_90 StaticText "account.login"
uid=28_91 StaticText "account"
uid=28_92 StaticText "db5fb656"
uid=28_93 StaticText "..."

79
tmp/prompts-page.txt Normal file
View File

@@ -0,0 +1,79 @@
uid=27_0 RootWebArea "ZCLAW Admin" url="http://localhost:3000/prompts"
uid=27_13 alert atomic live="assertive" relevant="additions text"
uid=28_0 complementary
uid=28_1 link "Z ZCLAW Admin" url="http://localhost:3000/"
uid=28_2 StaticText "Z"
uid=28_3 StaticText "ZCLAW"
uid=28_4 StaticText "Admin"
uid=28_5 navigation
uid=28_6 link "仪表盘" url="http://localhost:3000/"
uid=28_7 StaticText "仪表盘"
uid=28_8 link "账号管理" url="http://localhost:3000/accounts"
uid=28_9 StaticText "账号管理"
uid=28_10 link "服务商" url="http://localhost:3000/providers"
uid=28_11 StaticText "服务商"
uid=28_12 link "模型管理" url="http://localhost:3000/models"
uid=28_13 StaticText "模型管理"
uid=28_14 link "Agent 模板" url="http://localhost:3000/agent-templates"
uid=28_15 StaticText "Agent 模板"
uid=28_16 link "API 密钥" url="http://localhost:3000/api-keys"
uid=28_17 StaticText "API 密钥"
uid=28_18 link "用量统计" url="http://localhost:3000/usage"
uid=28_19 StaticText "用量统计"
uid=28_20 link "中转任务" url="http://localhost:3000/relay"
uid=28_21 StaticText "中转任务"
uid=28_22 link "系统配置" url="http://localhost:3000/config"
uid=28_23 StaticText "系统配置"
uid=28_24 link "提示词管理" focusable focused url="http://localhost:3000/prompts"
uid=28_25 StaticText "提示词管理"
uid=28_26 link "操作日志" url="http://localhost:3000/logs"
uid=28_27 StaticText "操作日志"
uid=28_28 button
uid=28_29 StaticText "A"
uid=28_30 StaticText "Admin"
uid=28_31 StaticText "super_admin"
uid=28_32 button "退出登录"
uid=28_33 banner
uid=28_34 heading "提示词管理" level="1"
uid=28_35 button "通知"
uid=28_36 main
uid=30_0 heading "提示词管理" level="1"
uid=30_1 StaticText "管理内置和自定义提示词模板,支持版本控制和 OTA 分发"
uid=30_2 button "+ 新建模板"
uid=30_3 button "全部"
uid=30_4 button "内置"
uid=30_5 button "自定义"
uid=30_6 StaticText "名称"
uid=30_7 StaticText "分类"
uid=30_8 StaticText "来源"
uid=30_9 StaticText "版本"
uid=30_10 StaticText "状态"
uid=30_11 StaticText "更新时间"
uid=30_12 StaticText "操作"
uid=30_13 button "reflection"
uid=30_14 StaticText "builtin_system"
uid=30_15 StaticText "内置"
uid=30_16 StaticText "v"
uid=30_17 StaticText "1"
uid=30_18 StaticText "active"
uid=30_19 StaticText "2026/3/28 15:38:25"
uid=30_20 button "历史"
uid=30_21 button "compaction"
uid=30_22 StaticText "builtin_compaction"
uid=30_23 StaticText "内置"
uid=30_24 StaticText "v"
uid=30_25 StaticText "1"
uid=30_26 StaticText "active"
uid=30_27 StaticText "2026/3/28 15:38:25"
uid=30_28 button "历史"
uid=30_29 button "extraction"
uid=30_30 StaticText "builtin_extraction"
uid=30_31 StaticText "内置"
uid=30_32 StaticText "v"
uid=30_33 StaticText "1"
uid=30_34 StaticText "active"
uid=30_35 StaticText "2026/3/28 15:38:25"
uid=30_36 button "历史"
uid=30_37 StaticText "共 "
uid=30_38 StaticText "3"
uid=30_39 StaticText " 个模板"