{{ msgText }}
系统概览
用户与机器管理
👥 用户数
{{ users.length }}
已创建用户
🖥 在线机器
{{ onlineAgents.length }}
当前在线
📦 暂存机器
{{ parkedMachines.length }}
已暂存
🔗 连接地址
客户端登录地址
{{ siteOrigin }}
远程助手连接地址
{{ siteOrigin }}
快速操作
平台概览
代理商与平台运营总览
🏢 代理商总数
{{ tenants.length }}
代理商总数
✅ 启用中
{{ tenants.filter(t => t.is_active).length }}
正常运营
⛔ 已停用
{{ tenants.filter(t => !t.is_active).length }}
已停用代理商
👤 总用户数
{{ tenants.reduce((s, t) => s + (t.user_count || 0), 0) }}
所有代理商用户合计
最近代理商
| 代理商 | 代理商ID | 用户数 | 状态 | 创建时间 |
|---|---|---|---|---|
| {{ t.name }} | {{ t.code }} | {{ t.user_count || 0 }} | 启用 停用 | {{ fmtDate(t.created_at) }} |
🏢
暂无代理商
快速操作
🏢
{{ loggedTenantName || loggedTenantCode }}
代理商ID:{{ loggedTenantCode }}
🔗 连接地址
工程师客户端登录地址
{{ clientLoginUrl }}
在工程师客户端「服务器地址」中输入此地址登录
远程助手连接地址
{{ clientLoginUrl }}
在 远程助手「服务器」框粘贴此地址,自动识别代理商并连接
快速操作
代理商管理
代理商的添加、编辑、停用与删除
代理商列表 ({{ tenants.length }})
🏢
暂无代理商
| 代理商 | 代理商ID | 用户数 | 状态 | 创建时间 | 操作 |
|---|---|---|---|---|---|
|
{{ t.name }}
ID: {{ t.id }}
|
{{ t.code }} | {{ t.user_count || 0 }} | 启用 停用 | {{ fmtDate(t.created_at) }} |
AI 配置
全局 AI 服务参数,所有代理商共用
🤖 模型配置
支持 OpenAI 及所有兼容接口(通义千问、DeepSeek、文心一言等)
用户管理
管理团队成员与权限角色
用户列表 ({{ users.length }})
👥
暂无用户
| 用户 | 角色 | 状态 | 创建时间 | 操作 |
|---|---|---|---|---|
|
{{ u.display_name }}
{{ u.username }}
|
{{ roleLabel(u.role) }} | 启用 禁用 | {{ fmtDate(u.created_at) }} | 当前用户 |
机器管理
查看和管理已连接的 远程助手机器
在线机器 ({{ onlineAgents.length }})
🖥
暂无在线机器
通过客户端连接 远程助手后,机器将出现在此处
| 名称 | IP 地址 | 操作系统 | 版本 | 操作 |
|---|---|---|---|---|
|
{{ a.display_name || a.hostname }}
{{ a.hostname }}
|
{{ a.ip_address || '--' }} | {{ a.os_info || '--' }} | {{ a.version || '?' }} |
暂存机器 ({{ parkedMachines.length }})
📦
暂无暂存机器
| 名称 | 状态 | 机器 ID | 暂存时间 | 操作 |
|---|---|---|---|---|
| {{ m.display_name || m.hostname }} {{ m.hostname }} |
● 在线● 待接入● 离线 | {{ (m.machine_id || '').slice(0, 12) }}… | {{ fmtDate(m.parked_at) }} |
⏳ 待接入请求 ({{ pendingRequests.length }})
| 主机名 | IP | 系统 | 描述 | 操作 |
|---|---|---|---|---|
| {{ rq.hostname }} | {{ rq.ip || '--' }} | {{ rq.os_info || '--' }} |
Enter 发送 · Shift+Enter 换行 · 需先选择目标机器
工具库
后端存放的通用 CLI 工具:AI 会按关键字搜到它们并投递到工程师本机或目标机器上。
改动即时生效,不需要发版。
⚠ 以下条目没被收录(清单写错或载荷缺失,修好才会出现在库里):
· {{ s }}
加载中...
没有匹配的工具
| 名称 | 平台 | 版本 | 说明 | 操作 |
|---|---|---|---|---|
|
{{ t.name }}
⚠ 仅本机(不可投递)
依赖 {{ t.requires.join(', ') }}
相关度 {{ t.score }}
|
{{ t.os_label }} | {{ t.version || '—' }} |
{{ t.description }}
用法: {{ t.usage }}
关键词: {{ t.keywords.join('、') }}
|
怎么用
· 工程师端 / AI:`toolbox(operation="search", query="…")` 找工具 → `ensure`(不带 agent_id 装本机,带 agent_id 投递到那台机器)→ 按返回的路径调用。
· 下架是移到后端 `_deprecated/`(不删除,移回即可恢复)——AI 会搜不到它。
· 仅本机 = 许可证只覆盖「工程师自己的设备」(如 Sysinternals / Windows SDK 调试工具), 投递到客户机会被后端直接拒绝。
· 加载工具需要 关键词写对(那是 AI 按需求找工具时命中的依据); 填「别人会用什么词来找它」而不是把说明拆词。
· 工程师端 / AI:`toolbox(operation="search", query="…")` 找工具 → `ensure`(不带 agent_id 装本机,带 agent_id 投递到那台机器)→ 按返回的路径调用。
· 下架是移到后端 `_deprecated/`(不删除,移回即可恢复)——AI 会搜不到它。
· 仅本机 = 许可证只覆盖「工程师自己的设备」(如 Sysinternals / Windows SDK 调试工具), 投递到客户机会被后端直接拒绝。
· 加载工具需要 关键词写对(那是 AI 按需求找工具时命中的依据); 填「别人会用什么词来找它」而不是把说明拆词。
添加 / 覆盖工具
已选 {{ toolFiles.length }} 个:{{ toolFiles.map(f => f.name).join('、') }}
订阅 / 计费
查看当前名额,按需购买额外管理员或机器
👥 用户
{{ billingUsage.user_count || 0 }} / {{ billingUsage.total_user_quota || 0 }}
已用 / 名额
🖥 机器
{{ billingUsage.machine_count || 0 }} / {{ billingUsage.total_machine_quota || 0 }}
仅主 Agent 占名额
📅 订阅
{{ billingUsage.plan_expires_at ? fmtDate(billingUsage.plan_expires_at) : '未订阅' }}
{{ billingUsage.remaining_days >= 0 ? ('剩 ' + billingUsage.remaining_days + ' 天') : '无到期时间' }}
购买名额
基础费 ¥{{ billingUsage.base_price_monthly || 200 }} / 月(含 1 个管理员 + 1 台机器);
额外管理员 ¥{{ billingUsage.price_admin_monthly || 100 }} / 月,额外机器 ¥{{ billingUsage.price_machine_monthly || 10 }} / 月
应付:¥{{ calc.billing_total || '—' }}
月费 ¥{{ calc.billing_monthly }} × {{ subForm.months }} 个月
订单记录
| 订单号 | 金额 | 月数 | 状态 | 创建时间 |
|---|---|---|---|---|
| {{ o.order_no }} | ¥{{ o.amount }} | {{ o.plan_months }} | 已支付 待支付 | {{ fmtDate(o.created_at) }} |
🧾
暂无订单
活跃度统计
统计中,请稍候...
暂无数据
口径说明
· 当前范围:{{ activityRangeLabel }}。默认看 24 小时。
· 汇总页读的是持久化的按小时聚合数据(不受日志轮转影响,将来可做月度报表); 明细页为了拿到原始会话(峰值并发、同秒聚集等)仍需现扫日志。两者口径同源。
· 隧道连接数 ≠ 使用次数:客户端对每个 TCP 连接各建一条隧道,所以把「使用时段」(间隔 5 分钟内合并)作为使用频次。
· 未配对的 open = 连接失败({{ activity.source.failed }} 次),不是数据缺失,已排除在时长之外。
· 「审计行」包含机器产生的记录(进程页每 5 秒一行、文件传输每分块一行),看人工操作请用有效操作。
· 汇总与明细都按整小时对齐窗口、都用完整日志配对会话,因此同一范围的数值一致; 窗口整点对齐意味着起止时刻可能比「24小时」早不足 1 小时。
· MCP 调用按小时采集(自本次升级起)。更早的记录只有按自然日的粒度, 没有时间戳可用于拆分到小时,不做时间猜测,因此不计入区间汇总 —— 升级当天这一列会是 0,次日起正常。
· 当前范围:{{ activityRangeLabel }}。默认看 24 小时。
· 汇总页读的是持久化的按小时聚合数据(不受日志轮转影响,将来可做月度报表); 明细页为了拿到原始会话(峰值并发、同秒聚集等)仍需现扫日志。两者口径同源。
· 隧道连接数 ≠ 使用次数:客户端对每个 TCP 连接各建一条隧道,所以把「使用时段」(间隔 5 分钟内合并)作为使用频次。
· 未配对的 open = 连接失败({{ activity.source.failed }} 次),不是数据缺失,已排除在时长之外。
· 「审计行」包含机器产生的记录(进程页每 5 秒一行、文件传输每分块一行),看人工操作请用有效操作。
· 汇总与明细都按整小时对齐窗口、都用完整日志配对会话,因此同一范围的数值一致; 窗口整点对齐意味着起止时刻可能比「24小时」早不足 1 小时。
· MCP 调用按小时采集(自本次升级起)。更早的记录只有按自然日的粒度, 没有时间戳可用于拆分到小时,不做时间猜测,因此不计入区间汇总 —— 升级当天这一列会是 0,次日起正常。
{{ activityHints[activityTab] }}
⚠ 以下账号的 MCP 用量没有上报(审计日志里有调用,但客户端一次都没上报):
{{ i ? '、' : '' }}{{ w.name }}(日志 {{ w.audit_calls }} 次)
这是客户端侧的问题,不是统计算错:该机器上的 MCP 脚本没有上报用量。 请在该机器上确认 MCP 配置指向的
这是客户端侧的问题,不是统计算错:该机器上的 MCP 脚本没有上报用量。 请在该机器上确认 MCP 配置指向的
linggong_mcp_server.py 是否为客户端随包发布的版本
(旧副本不会上报;客户端启动时会自愈它自己写的那一份)。
| 用户 | 远程桌面 | 隧道占用 | 有效操作 | 活跃天数 | 活跃分钟 | MCP 调用 | AI 轮次 | AI token | AI 耗时 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.name }} | {{ fmtDur(r.desktop_sec) }} | {{ fmtDur(r.tunnel_sec) }} | {{ r.effective_ops }} | {{ r.active_days }} | {{ r.active_minutes }} | {{ r.mcp_calls }} ⚠ | {{ r.ai_turns || '—' }} | {{ r.ai_in_tokens || r.ai_out_tokens ? fmtTokens((r.ai_in_tokens || 0) + (r.ai_out_tokens || 0)) : '—' }} | {{ r.ai_ms ? fmtDur(r.ai_ms / 1000) : '—' }} |
| {{ activityRangeLabel }} 没有记录 | |||||||||
| 用户 | 类型 | 使用时段 | 连接数 | 实际占用 | 平均/时段 | 峰值并发 | 连接失败 | 同秒聚集 | 数据区间 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.name }} | {{ r.kind }} | {{ r.usage }} | {{ r.connections }} | {{ fmtDur(r.busy_sec) }} | {{ fmtDur(r.avg_usage_sec) }} | {{ r.peak }} | {{ r.failed || '—' }} | {{ r.scheduled_pct }}% ⚠ | {{ r.first }} ~ {{ r.last }} 已下线 |
| {{ activityRangeLabel }} 没有记录 | |||||||||
| 用户 | 审计行 | 其中机器产生 | 有效操作 | 活跃天数 | 活跃分钟 | 主要行为 |
|---|---|---|---|---|---|---|
| {{ r.name }} | {{ r.audit_lines }} | {{ r.auto_lines || '—' }} | {{ r.effective_ops }} | {{ r.active_days }} | {{ r.active_minutes }} | {{ idx ? '、' : '' }}{{ k }}×{{ v }} |
| (系统) | {{ activity.system_ops.audit_lines }} | — | — | — | — | 无 user=/admin= 署名 = 远程助手自己发起(如客户端自动申请维护位) |
| 用户 | 调用次数 | 成功 | 失败 | 失败率 | 工具耗时 |
|---|---|---|---|---|---|
| {{ r.name }} | {{ r.calls }} | {{ r.ok }} | {{ r.fail }} | {{ r.calls ? Math.round(r.fail / r.calls * 100) + '%' : '—' }} | {{ fmtDur(r.total_ms / 1000) }} |
| 暂无 MCP 使用记录 | |||||
修改密码