feat: expand node artifact operations and retention

This commit is contained in:
lpf
2026-03-09 10:46:22 +08:00
parent be2e025fe5
commit ba3be33c91
22 changed files with 2724 additions and 151 deletions

View File

@@ -12,7 +12,24 @@ const resources = {
mcpServicesHint: 'Manage MCP servers, install packages, and inspect discovered remote tools.',
cronJobs: 'Cron Jobs',
nodes: 'Nodes',
nodeArtifacts: 'Node Artifacts',
nodeArtifactsHint: 'Browse, download, and delete files or media returned from node dispatches.',
nodeArtifactsEmpty: 'No node artifacts found.',
nodeArtifactsPrune: 'Prune',
nodeArtifactsKeepLatest: 'Keep latest N',
nodeArtifactsRetention: 'Artifact Retention',
nodeArtifactsRetentionHint: 'Latest auto-prune result from node artifact retention.',
nodeArtifactsRetentionKeepLatest: 'Keep latest',
nodeArtifactsRetentionRetainDays: 'Retain days',
nodeArtifactsRetentionPruned: 'Pruned this run',
nodeArtifactsRetentionRemaining: 'Remaining',
nodeArtifactDetail: 'Artifact Detail',
nodeArtifactPreviewUnavailable: 'Preview unavailable for this artifact.',
allNodes: 'All Nodes',
allKinds: 'All Kinds',
size: 'Size',
nodesDetailHint: 'Inspect node capabilities, mirrored remote agents, recent dispatches, and returned artifacts.',
nodesFilterPlaceholder: 'Filter by node id, name, or tag',
agentTree: 'Agent Tree',
noAgentTree: 'No agent tree available.',
readonlyMirror: 'Read-only mirror',
@@ -26,6 +43,16 @@ const resources = {
subagentProfiles: 'Subagent Profiles',
subagentsRuntime: 'Agents',
nodeP2P: 'Node P2P',
nodeAlerts: 'Node Alerts',
nodeAlertsEmpty: 'No active node alerts.',
nodeTags: 'Node Tags',
nodeDispatchDetail: 'Dispatch Detail',
replayDispatch: 'Replay Dispatch',
replaying: 'Replaying...',
resetReplayDraft: 'Reset Draft',
nodeReplayRequest: 'Replay Request',
nodeReplayResult: 'Replay Result',
nodeReplayInvalidArgs: 'Replay args must be valid JSON.',
agentTopology: 'Agent Topology',
agentTopologyHint: 'Unified graph for local agents, registered nodes, and mirrored remote agent branches.',
runningTasks: 'running',
@@ -146,6 +173,28 @@ const resources = {
dashboardNodeDispatchError: 'Error',
configNodeP2P: 'Node P2P',
configNodeP2PHint: 'Configure websocket tunnel or WebRTC transport for remote nodes.',
configNodeDispatch: 'Node Dispatch Policy',
configNodeDispatchHint: 'Bias node selection and bind actions or agents to tagged nodes.',
configNodeDispatchPreferLocal: 'Prefer local node',
configNodeDispatchPreferP2P: 'Prefer P2P transport',
configNodeDispatchAllowRelay: 'Allow relay fallback',
configNodeDispatchActionTags: 'Action tag rules',
configNodeDispatchAgentTags: 'Agent tag rules',
configNodeDispatchAllowActions: 'Node allow actions',
configNodeDispatchDenyActions: 'Node deny actions',
configNodeDispatchAllowAgents: 'Node allow agents',
configNodeDispatchDenyAgents: 'Node deny agents',
configNodeDispatchActionTagsPlaceholder: 'screen_snapshot=vision\ncamera_snap=vision,gpu',
configNodeDispatchAgentTagsPlaceholder: 'coder=build\nvision=vision,gpu',
configNodeDispatchAllowActionsPlaceholder: 'edge-a=camera_snap,screen_snapshot',
configNodeDispatchDenyActionsPlaceholder: 'edge-b=screen_record',
configNodeDispatchAllowAgentsPlaceholder: 'edge-a=main,coder',
configNodeDispatchDenyAgentsPlaceholder: 'edge-b=vision',
configNodeArtifacts: 'Node Artifact Retention',
configNodeArtifactsHint: 'Auto-prune old node artifacts so audit and media storage stay bounded.',
configNodeArtifactsKeepLatest: 'Keep latest artifacts',
configNodeArtifactsRetainDays: 'Retain days (0 to disable)',
configNodeArtifactsPruneOnRead: 'Apply retention on list/export',
configNodeP2PStunPlaceholder: 'Comma-separated STUN URLs',
configNodeP2PIceServers: 'ICE Servers',
configNodeP2PIceServersEmpty: 'No structured ICE servers configured.',
@@ -156,6 +205,8 @@ const resources = {
paused: 'Paused',
noCronJobs: 'No cron jobs found',
noNodes: 'No nodes available',
allActions: 'All Actions',
allTransports: 'All Transports',
sessions: 'Sessions',
mainChat: 'Main Chat',
internalStream: 'Internal Stream',
@@ -551,6 +602,12 @@ const resources = {
proxies: 'Proxies',
cross_session_call_id: 'Cross-session Call ID',
supports_responses_compact: 'Supports Responses Compact',
dispatch: 'Dispatch',
prefer_local: 'Prefer Local',
prefer_p2p: 'Prefer P2P',
allow_relay_fallback: 'Allow Relay Fallback',
action_tags: 'Action Tags',
agent_tags: 'Agent Tags',
min_sleep_sec: 'Min Sleep (Seconds)',
max_sleep_sec: 'Max Sleep (Seconds)',
retry_backoff_base_sec: 'Retry Backoff Base (Seconds)',
@@ -573,7 +630,24 @@ const resources = {
mcpServicesHint: '管理 MCP 服务、安装服务包,并查看已发现的远端工具。',
cronJobs: '定时任务',
nodes: '节点',
nodeArtifacts: '节点工件',
nodeArtifactsHint: '查看、下载和删除节点调度返回的文件或媒体工件。',
nodeArtifactsEmpty: '当前没有节点工件。',
nodeArtifactsPrune: '清理',
nodeArtifactsKeepLatest: '保留最近 N 条',
nodeArtifactsRetention: '工件保留统计',
nodeArtifactsRetentionHint: '显示最近一次节点工件自动清理的结果。',
nodeArtifactsRetentionKeepLatest: '保留最近数量',
nodeArtifactsRetentionRetainDays: '保留天数',
nodeArtifactsRetentionPruned: '本次清理数量',
nodeArtifactsRetentionRemaining: '剩余数量',
nodeArtifactDetail: '工件详情',
nodeArtifactPreviewUnavailable: '该工件暂不支持预览。',
allNodes: '全部节点',
allKinds: '全部类型',
size: '大小',
nodesDetailHint: '查看节点能力、远端镜像 agent、最近调度记录以及返回的工件。',
nodesFilterPlaceholder: '按节点 ID、名称或标签筛选',
agentTree: '代理树',
noAgentTree: '当前没有可用的代理树。',
readonlyMirror: '只读镜像',
@@ -587,6 +661,16 @@ const resources = {
subagentProfiles: '子代理档案',
subagentsRuntime: 'Agents',
nodeP2P: '节点 P2P',
nodeAlerts: '节点告警',
nodeAlertsEmpty: '当前没有活跃节点告警。',
nodeTags: '节点标签',
nodeDispatchDetail: '调度详情',
replayDispatch: '重放调度',
replaying: '重放中...',
resetReplayDraft: '重置草稿',
nodeReplayRequest: '重放请求',
nodeReplayResult: '重放结果',
nodeReplayInvalidArgs: '重放参数必须是合法 JSON。',
agentTopology: 'Agent 拓扑',
agentTopologyHint: '统一展示本地 agent、注册 node 以及远端镜像 agent 分支的关系图。',
runningTasks: '运行中',
@@ -707,6 +791,28 @@ const resources = {
dashboardNodeDispatchError: '错误',
configNodeP2P: '节点 P2P',
configNodeP2PHint: '为远端节点配置 websocket tunnel 或 WebRTC 传输。',
configNodeDispatch: '节点调度策略',
configNodeDispatchHint: '控制节点选择偏好,并把动作或 agent 绑定到带标签的节点。',
configNodeDispatchPreferLocal: '优先本地节点',
configNodeDispatchPreferP2P: '优先 P2P 传输',
configNodeDispatchAllowRelay: '允许 relay 回退',
configNodeDispatchActionTags: '动作标签规则',
configNodeDispatchAgentTags: 'Agent 标签规则',
configNodeDispatchAllowActions: '节点允许动作',
configNodeDispatchDenyActions: '节点禁止动作',
configNodeDispatchAllowAgents: '节点允许 Agents',
configNodeDispatchDenyAgents: '节点禁止 Agents',
configNodeDispatchActionTagsPlaceholder: 'screen_snapshot=vision\ncamera_snap=vision,gpu',
configNodeDispatchAgentTagsPlaceholder: 'coder=build\nvision=vision,gpu',
configNodeDispatchAllowActionsPlaceholder: 'edge-a=camera_snap,screen_snapshot',
configNodeDispatchDenyActionsPlaceholder: 'edge-b=screen_record',
configNodeDispatchAllowAgentsPlaceholder: 'edge-a=main,coder',
configNodeDispatchDenyAgentsPlaceholder: 'edge-b=vision',
configNodeArtifacts: '节点工件保留策略',
configNodeArtifactsHint: '自动清理旧节点工件,避免审计和媒体存储无限增长。',
configNodeArtifactsKeepLatest: '保留最近工件数',
configNodeArtifactsRetainDays: '保留天数0 表示关闭)',
configNodeArtifactsPruneOnRead: '在列表/导出时执行保留策略',
configNodeP2PStunPlaceholder: '逗号分隔的 STUN URL',
configNodeP2PIceServers: 'ICE 服务器',
configNodeP2PIceServersEmpty: '当前没有结构化 ICE 服务器配置。',
@@ -717,6 +823,8 @@ const resources = {
paused: '已暂停',
noCronJobs: '未找到定时任务',
noNodes: '无可用节点',
allActions: '全部动作',
allTransports: '全部传输',
sessions: '会话',
mainChat: '主对话',
internalStream: '内部流',
@@ -1112,6 +1220,12 @@ const resources = {
proxies: '代理集合',
cross_session_call_id: '跨会话调用 ID',
supports_responses_compact: '支持紧凑 responses',
dispatch: '调度',
prefer_local: '优先本地',
prefer_p2p: '优先 P2P',
allow_relay_fallback: '允许 Relay 回退',
action_tags: '动作标签',
agent_tags: 'Agent 标签',
min_sleep_sec: '最小休眠(秒)',
max_sleep_sec: '最大休眠(秒)',
retry_backoff_base_sec: '重试退避基准(秒)',