{
"auth": {
"login": {
"agree": "我已阅读并同意《使用须知》",
"checking": "正在检查登录状态…",
"errorAgree": "请先阅读并同意《使用须知》",
"errorBackend": "无法连接到后端服务",
"errorCredential": "用户名或密码错误",
"password": "密码",
"passwordPlaceholder": "请输入密码",
"submit": "登录",
"submitting": "登录中...",
"title": "登录",
"username": "用户名",
"welcome": "欢迎回来,请输入密码以继续使用 ARTEX"
},
"setup": {
"confirmPassword": "确认密码",
"confirmPlaceholder": "再次输入密码",
"desc": "首次使用 ARTEX,请为账户设置一个登录密码(至少 8 位)",
"errorBackend": "无法连接到后端服务",
"errorInit": "初始化失败",
"errorMismatch": "两次输入的密码不一致",
"errorTooShort": "密码长度至少 8 位",
"newPassword": "新密码",
"newPasswordPlaceholder": "至少 8 位",
"submit": "设置密码并登录",
"submitting": "保存中...",
"title": "初始化密码"
},
"terms": {
"a1Body": "本软件(ARTEX)是一款基于 GNU Affero General Public License v3.0(AGPL-3.0)发布的开源程序。您可依据该协议自由使用、复制、修改和分发本软件;但任何衍生作品(包括通过网络向第三方提供的在线服务)均须同样以 AGPL-3.0 协议开源并向使用者公开对应的完整源代码。AGPL-3.0 完整条款以随附的 LICENSE 文件为准。",
"a1Title": "第一条 · 定义与开源许可",
"a2Body": "本软件仅供个人学习、代码研究、安全技术原理探讨,以及在您自行搭建的本地隔离环境中进行技术验证之用,适用于学习、学术研究、代码审阅等非攻击性、非破坏性用途。除本条明确许可的情形外,您不得将本软件用于任何其他目的。",
"a2Title": "第二条 · 授权使用范围",
"a3Item1": "严禁对任何网站、线上服务、他人或第三方所有的联网系统发起扫描、探测、利用或攻击(无论是否已获得授权、是否为您自有资产);",
"a3Item2": "严禁将本软件用于任何实际的渗透测试、攻防对抗、红蓝演练或生产环境;",
"a3Item3": "严禁将本软件用于非法入侵、数据窃取、勒索、拒绝服务(DoS/DDoS)或任何破坏性、犯罪性活动;",
"a3Item4": "严禁移除、篡改或规避本软件及其输出中的任何版权、许可或安全提示信息;",
"a3Item5": "严禁从事任何违反您所在国家或地区法律、法规及监管规定的行为。",
"a3Title": "第三条 · 禁止行为",
"a4Body": "本软件的著作权及相关知识产权归项目作者及贡献者所有,并在 AGPL-3.0 协议约定的范围内向您授予相应权利。除该协议明确授予的权利外,本声明未以明示或默示方式授予您任何其他权利。",
"a4Title": "第四条 · 知识产权",
"a5Body": "本软件为可自行部署的开源程序,作者不运营任何集中式服务、亦不会收集或上传您的使用数据。您在使用过程中产生、处理或接触的一切数据,均由您自行掌控并负责其合法性与安全性;因数据处理不当引发的任何后果由您自行承担。",
"a5Title": "第五条 · 数据与隐私",
"a6Body": "您应自行遵守所在国家或地区关于网络安全、数据安全与个人信息保护、计算机犯罪等方面的全部法律法规(在中国大陆包括但不限于《网络安全法》《数据安全法》《个人信息保护法》及相关司法解释)。",
"a6Emphasis": "因您违反上述法律法规或本声明约定而产生的一切法律责任与后果,均由您本人独立承担,与本软件作者及贡献者无关。",
"a6Title": "第六条 · 合规与法律责任",
"a7Body": "本软件按\"现状(AS IS)\"与\"现有(AS AVAILABLE)\"状态提供,不附带任何明示或默示的担保,包括但不限于对适销性、特定用途适用性、准确性及不侵权的担保。在适用法律允许的最大范围内,本软件作者及贡献者不对因使用或无法使用本软件(无论使用方式是否得当)而导致的任何直接、间接、偶然、特殊或后果性损失承担责任,包括但不限于数据丢失、系统损坏、业务中断、利润损失或法律纠纷。",
"a7Title": "第七条 · 免责声明与责任限制",
"a8Body": "作者有权根据法律法规或项目发展需要不时更新本声明,更新后的版本将随项目发布并自公布之日起生效;您继续使用本软件即视为接受修订后的条款。在法律允许的范围内,本声明的最终解释权归项目作者所有。若本声明任一条款被认定为无效,不影响其余条款的效力。",
"a8Title": "第八条 · 条款变更与最终解释",
"agreeButton": "我已阅读并同意全部条款",
"footerNotRead": "请将条款滚动至底部后再确认",
"footerRead": "您已浏览全部条款",
"intro": "本《使用须知与免责声明》(以下简称\"本声明\")是您与 ARTEX 项目作者及贡献者之间就使用本软件所达成的约定。请您在使用前审慎阅读、充分理解各条款内容,特别是以粗体或色块标注的免责、责任限制及禁止性条款。",
"introEmphasis": "一旦您下载、安装、访问或以任何方式使用本软件,即视为您已阅读、理解并同意接受本声明的全部约束。",
"meta": "版本 v1.0 · 生效日期 2026-09-18 · 请在登录前完整阅读以下全部条款",
"title": "ARTEX 使用须知与免责声明"
}
},
"dashboard": {
"activeModel": "激活模型",
"activeTasks": "活跃任务",
"activityStream": "活动流",
"ago": "{value} 前",
"all": "全部",
"assetDistribution": "资产分布",
"assetNodes": "资产节点",
"assetType": {
"app": "应用",
"endpoint": "端点",
"ip": "IP",
"root_domain": "根域名",
"service": "服务",
"subdomain": "子域名"
},
"byType": "按类型",
"cacheHit": "缓存命中",
"cacheHitRate": "缓存命中率",
"captureOff": "捕获未开启",
"chartCacheRead": "缓存读",
"chartInput": "输入",
"chartOutput": "输出",
"colEngine": "引擎",
"colGoalProgress": "目标进度",
"colInFlight": "在途",
"colLastActivity": "最近活动",
"colStatus": "状态",
"colTask": "任务",
"confirmedFindings": "确认发现",
"configured": "已配置",
"crossTaskShared": "跨任务共享",
"default": "默认",
"eventCount": "{count} 条事件",
"findings": "发现",
"inputUncached": "输入(未命中)",
"llmConfig": "LLM 配置",
"morePending": "还有 {count} 条…",
"noActivity": "暂无活动记录",
"noAssetData": "暂无资产数据",
"noData": "暂无数据",
"noFindings": "暂无发现",
"noPendingIntercepts": "无待审批拦截",
"noTasks": "暂无任务",
"noTrafficData": "暂无流量数据",
"notConfigured": "未配置",
"off": "关闭",
"on": "开启",
"output": "输出",
"pendingApprovals": "待审批 ({count})",
"range7": "7天",
"range30": "30天",
"range90": "3月",
"range180": "6月",
"range365": "一年",
"recentRequests": "最近请求",
"recording": "录制中",
"requestCount": "{count} 次请求",
"srcNew": "计量账本",
"srcOld": "活动统计",
"statDone": "完成",
"statExplore": "探索",
"statPaused": "暂停",
"statTokenDetail": "入 {input}(含缓存 {cache})· 出 {output}",
"subtitle": "系统全局状态 · 实时刷新",
"systemStatus": "系统状态",
"taskCount": "{count} 个任务",
"tasks": "任务",
"title": "总览",
"tokenConsumption": "LLM Token 消耗",
"tokenUsage": "Token 用量",
"tooltipNew": "新版:来自 llm_usage 计量账本,逐次调用精确、含中断消耗;仅覆盖启用后的数据",
"tooltipOld": "旧版:来自 activity 统计(含历史任务),中断消耗不计、无法精确到模型",
"totalInOut": "合计 (输入+输出)",
"totalNodes": "共 {count} 节点",
"trafficCapture": "流量捕获",
"trafficExchanges": "流量交互",
"trafficStatusCodes": "流量状态码",
"verNew": "新版",
"verOld": "旧版",
"viewTasks": "查看任务"
},
"header": {
"updateBadge": "新版本 {latest}",
"updateBadgeShort": "新版本",
"updateTitle": "发现新版本 {latest},点击前往更新",
"version": "版本 · {version}"
},
"nav": {
"group": {
"function": "功能",
"system": "系统"
},
"item": {
"agents": "Agent",
"approvals": "审批记录",
"asset-intercept": "资产拦截",
"assets": "资产",
"chat": "对话",
"commands": "工具执行",
"dashboard": "仪表盘",
"findings": "发现",
"intercept": "拦截规则",
"llm": "LLM",
"llm-records": "LLM 录制",
"logs": "日志",
"mcp": "MCP",
"notify": "通知推送",
"settings": "系统配置",
"skills": "Skill",
"sync": "资产同步",
"tasks": "任务",
"tools": "工具",
"traffic": "流量",
"workspace": "工作空间"
}
},
"notFound": {
"back": "Go back home",
"description": "The page you are looking for could not be found.",
"title": "Page not found."
},
"search": {
"button": "Search",
"empty": "No results found.",
"placeholder": "Search dashboards, users, and more…"
},
"status": {
"audit": {
"allow": "放行",
"block": "拦截"
},
"delivery": {
"failed": "失败",
"pending": "待发送",
"sending": "发送中",
"sent": "已送达",
"skipped": "已跳过"
},
"engine": {
"exploring": "探索中",
"idle": "空闲",
"paused": "已暂停",
"stalled": "停滞"
},
"finding": {
"confirmed": "已确认",
"duplicate": "重复",
"false_positive": "误报",
"fixed": "已修复",
"ignored": "忽略",
"in_progress": "处理中",
"pending": "待处理",
"resolved": "已处理",
"risk_accepted": "风险接受"
},
"goal": {
"abandoned": "已放弃",
"met": "已达成",
"open": "进行中"
},
"intent": {
"blocked": "执行出错",
"deleted": "已删除",
"done": "已完成",
"exhausted": "预算耗尽",
"open": "待领",
"paused": "已暂停",
"running": "执行中",
"stopped": "已停止"
},
"node": {
"confirmed": "确认",
"observed": "观测",
"tombstoned": "废弃"
},
"severity": {
"critical": "严重",
"high": "高危",
"low": "低危",
"medium": "中危"
},
"task": {
"created": "已创建",
"done": "已完成",
"failed": "失败",
"paused": "已暂停",
"queued": "排队中",
"running": "运行中",
"timeout": "已超时"
}
},
"userMenu": {
"changePassword": "修改密码",
"logout": "退出登录"
},
"taskDetail": {
"report": {
"title": "渗透测试报告(Markdown)",
"copy": "复制",
"loading": "加载中…",
"empty": "暂无报告",
"copySuccess": "已复制 Markdown",
"copyError": "复制失败,请手动选择文本复制"
},
"findings": {
"columnFinding": "漏洞",
"sortTime": "发现时间",
"orderAsc": "正序",
"orderDesc": "倒序",
"sortAria": "发现时间当前{order},点击切换排序方向",
"unclassified": "未分类",
"sourceReadonly": "来源 #{id} · 只读",
"trafficEvidence": "流量证据 {count} 条",
"viewDetail": "查看漏洞详情",
"detail": "详情",
"evidencePoc": "证据 / PoC",
"markedAs": "已标记为「{label}」",
"updateFailed": "更新失败:{message}",
"empty": "本任务及直接关联任务暂无确认发现。"
},
"retests": {
"loadError": "加载任务漏洞失败:{error}",
"retry": "重试",
"selectTitle": "选择漏洞",
"selectDesc": "查看本任务漏洞的复测记录,或发起新的复测。",
"selectAria": "选择漏洞:{name}",
"emptyTitle": "暂无可复测漏洞",
"emptyDesc": "本任务发现漏洞后,可在这里手动发起复测。",
"prevPage": "上一页漏洞",
"nextPage": "下一页漏洞",
"pageIndicator": "第 {page} / {total} 页",
"findingDetail": "漏洞详情"
},
"tabs": {
"sessions": "会话",
"overview": "总览",
"graph": "探索链路",
"broadcast": "播报板",
"findings": "发现",
"retests": "复测",
"assets": "测试资产",
"coverage": "资产覆盖图",
"intercept": "拦截审批",
"report": "报告"
},
"header": {
"notFound": "任务 {id} 已被删除、归档或不存在",
"loading": "加载中…",
"backToList": "返回任务列表"
},
"control": {
"pause": "暂停",
"resume": "恢复",
"completed": "已完成",
"ended": "已结束",
"paused": "已暂停探索",
"resumed": "已恢复探索",
"failed": "操作失败:{message}"
},
"archive": {
"queued": "任务已加入归档队列",
"failed": "归档失败:{message}",
"disabledQueued": "排队中的任务必须先暂停",
"disabledRunning": "运行中的任务必须先暂停",
"disabledInherited": "任务被未归档任务 #{id} 直接继承,请先归档依赖任务",
"triggerAria": "归档任务",
"dialogTitle": "归档任务 #{id}?",
"dialogDesc": "任务图谱、关联记录、独占资产与流量、工作文件和 LLM 历史将压缩到冷存储。归档完成后可在任务列表的“已归档”页还原。",
"cancel": "取消",
"confirm": "确认归档"
},
"llm": {
"controlAria": "查看或切换任务 LLM 配置",
"exhausted": "配置链已耗尽",
"profileRef": "配置 #{id}",
"followDefault": "跟随默认配置",
"backupCount": "{count} 个备用",
"editorDescription": "调整顺序或当前配置后,将从下一次 LLM 调用开始生效。",
"editorDescriptionTerminal": "任务已结束,改动只影响后续的主 Agent 对话。",
"save": "保存",
"saveReset": "保存并重置",
"saving": "保存中",
"chainTitle": "任务 LLM 配置链",
"exhaustedTitle": "配置链额度已耗尽",
"exhaustedDesc": "所有已选配置均被判定为额度不足。保存配置链可重置故障状态。",
"close": "关闭",
"updated": "LLM 配置已更新",
"updatedWithReopened": "LLM 配置已更新,并恢复 {count} 条额度阻塞意图",
"updateFailed": "更新失败:{message}"
},
"coverageGraph": {
"kind": {
"company": "公司",
"root_domain": "根域名",
"subdomain": "子域名",
"ip": "IP",
"service": "服务",
"app": "App",
"endpoint": "端点"
},
"graph": {
"moreCount": "还有 {count} 个{kind}",
"scopeIn": "范围内",
"tested": "已测",
"loading": "加载中…",
"empty": "暂无范围内资产(先锚定任务范围)",
"refresh": "刷新",
"legendTested": "已测(高亮)",
"legendUntested": "未测",
"legendOutOfScope": "范围外",
"hint": "力导向布局,可拖拽节点、滚轮缩放;灰色「⋯」是折叠节点,点开可展开更多。"
},
"sheet": {
"attributes": "属性",
"attrType": "类型",
"attrTestState": "测试状态",
"tested": "已测试",
"untested": "未测试",
"outOfScope": "范围外(连接节点)",
"attrDomain": "域名",
"attrRootDomain": "根域名",
"attrPort": "端口",
"attrTitle": "标题",
"attrStatusCode": "状态码",
"attrApp": "App",
"attrAssetId": "资产ID",
"refIntents": "关联意图",
"refFacts": "关联事实",
"refFindings": "关联发现",
"rawData": "原始数据",
"refSource": "来源 #{id} · 只读",
"foldTitle": "未展示的{kind}({count})",
"foldHint": "已测优先展示。点「展示更多」把下一批拉进图里。",
"showMore": "展示更多(+{step})"
}
},
"assetsTab": {
"title": "测试资产",
"totalAll": "当前任务共关联 {count} 项资产",
"add": "新增测试资产",
"empty": "当前分类暂无测试资产",
"loadError": "加载任务资产失败:{message}",
"kind": {
"root_domain": "根域名",
"ip": "IP",
"subdomain": "子域名",
"app": "应用",
"service": "服务",
"endpoint": "接口"
},
"col": {
"domain": "域名",
"icp": "ICP 备案",
"source": "来源",
"action": "操作",
"cSegment": "C段",
"boundDomains": "绑定域名",
"openPorts": "开放端口",
"rootDomain": "根域名",
"recordType": "解析类型",
"recordValue": "解析值",
"app": "应用",
"address": "地址",
"category": "分类",
"title": "标题",
"fingerprint": "指纹",
"addressService": "地址 / 服务",
"statusCode": "状态码",
"responseLength": "响应长度",
"auth": "认证",
"method": "方法",
"fullAddress": "完整地址",
"params": "参数"
},
"source": {
"label": {
"agent": "Agent 发现",
"anchor": "黑板锚点",
"api": "资产 API",
"company": "企业关联",
"legacy": "历史关联",
"manual": "人工加入",
"system": "系统关联",
"task": "任务初始化"
},
"node": "来源节点 #{id}",
"legacySummary": "由历史任务资产关联迁移,暂无更详细来源说明"
},
"remove": {
"aria": "将资产 {label} 移出任务",
"title": "移出任务",
"confirmTitle": "移出当前任务?",
"confirmBody": "将“{label}”从当前任务的测试资产中移出。",
"keep": "全局资产、关联流量和历史黑板锚点会继续保留。",
"cancel": "取消",
"removing": "移出中",
"confirm": "确认移出",
"success": "已将 {label} 移出当前任务",
"error": "移出失败:{message}"
},
"addSheet": {
"title": "新增测试资产",
"description": "直接填写测试范围。域名和 IP 会创建或复用全局资产;CIDR、ICP 和关键词作为 Agent 范围上下文。",
"editorLabel": "测试资产与范围",
"editorDescription": "每行一条,自动识别域名、IP、CIDR、ICP 备案和关键词。",
"cancel": "取消",
"submitN": "登记 {count} 条",
"submit": "登记",
"success": "已登记 {requested} 条范围,关联 {assetSummary} 项域名/IP 资产",
"error": "新增失败:{message}"
}
},
"broadcastTab": {
"kind": {
"begin": "起点",
"task": "根任务",
"goal": "目标",
"intent": "意图",
"fact": "事实",
"finding": "漏洞",
"hint": "提示",
"digest": "压缩"
},
"rel": {
"spawns": "派生",
"derived_from": "意图链",
"yields": "产出",
"proves": "证明",
"covers": "压缩"
},
"state": {
"fact": {
"origin": "起点",
"confirmed": "已确认",
"dismissed": "已否定"
},
"finding": {
"confirmed": "已确认",
"dismissed": "已排除"
},
"hint": {
"active": "待采纳",
"consumed": "已采纳"
},
"digest": {
"active": "生效中",
"superseded": "已替代"
}
},
"assetType": {
"app": "应用",
"endpoint": "接口",
"ip": "IP",
"root_domain": "根域名",
"service": "服务",
"subdomain": "子域名"
},
"relTime": {
"now": "刚刚",
"minutes": "{count} 分钟前",
"hours": "{count} 小时前",
"days": "{count} 天前"
},
"node": "节点",
"nodeRef": "节点 #{id}",
"fieldType": "类型 {label}",
"fieldSource": "来源 {origin}",
"noSummary": "(无摘要)",
"noPayload": "(无 payload)",
"assets": "涉及资产 · {count}",
"deleteReason": "删除原因",
"upstream": "上游 · 由此而来",
"downstream": "下游 · 由此产生",
"fresh": "新",
"unknownDay": "未知日期",
"emptyFiltered": "没有符合条件的播报。",
"emptyNoNodes": "这个任务还没有产生探索节点。",
"pending": "{count} 条新播报 · 回到最新",
"toolbar": {
"searchPlaceholder": "搜索内容 / 来源 / 节点 id",
"searchAria": "搜索播报",
"clear": "清除",
"orderDescAria": "当前最新在前,点击改为最早在前",
"orderAscAria": "当前最早在前,点击改为最新在前",
"newest": "最新在前",
"oldest": "最早在前",
"pauseAria": "暂停自动刷新",
"resumeAria": "恢复自动刷新",
"live": "自动刷新",
"paused": "已暂停"
}
},
"overviewTab": {
"add": "添加",
"addFailed": "添加失败",
"saveFailed": "保存失败",
"desc": {
"title": "任务描述与目标",
"descLabel": "描述",
"goalLabel": "目标"
},
"goals": {
"title": "目标管理",
"hint": "(最终可核验的目标,共 {count} 条;新增/修改会通知规划者并复活任务)",
"addPlaceholder": "新增目标,如『拿到管理员账号的越权访问』",
"vulnPlaceholder": "漏洞类(可选)",
"empty": "暂无目标,添加后规划者会据此派发探索意图并判定达成。"
},
"constraints": {
"title": "操作约束",
"hint": "(框定 planner/worker 的探索边界,共 {count} 条;改动下一轮规划生效)",
"deny": "禁止",
"allow": "允许",
"addPlaceholder": "一条操作约束,如『仅测当前端口,不扫其他端口』",
"empty": "暂无操作约束。建任务时会自动从描述/目标抽取;也可在此手动增删改,用来框定「允许/禁止做哪些操作」。"
},
"coverage": {
"title": "资产测试覆盖度",
"rough": "(粗估,仅供参考)",
"testedOf": "已测 {tested} / 范围内 {total}"
},
"tokens": {
"title": "LLM Token 用量",
"hint": "(按模型统计{calls, plural, =0 {} other {,共 #次调用}})",
"input": "输入",
"output": "输出",
"cacheRead": "缓存读",
"cacheHitRate": "缓存命中率",
"colModel": "模型",
"colCalls": "调用",
"colHitRate": "命中率",
"empty": "暂无 LLM 用量(任务尚未产生调用,或记录仍在写入)。"
},
"scope": {
"title": "测试范围",
"hint": "(覆盖度分母 + 授权边界,共 {count} 条)",
"kind": {
"company": "公司",
"root_domain": "根域名",
"subdomain": "子域名",
"ip": "IP",
"cidr": "网段",
"icp": "ICP",
"keyword": "关键词"
},
"source": {
"auto": "自动",
"agent": "Agent",
"manual": "手动"
},
"placeholder": {
"company": "公司名或 id",
"ipCidr": "如 10.0.0.1 或 10.0.0.0/24",
"icp": "如 京ICP备12345678号-1",
"keyword": "如 企业名称关键词",
"domain": "如 example.com"
},
"companyFallback": "企业 #{id}",
"inherited": "继承",
"empty": "暂无测试范围,添加后可作为资产覆盖度的分母。"
},
"heartbeat": {
"title": "心跳",
"engineState": "引擎态",
"runningWorker": "运行中 Worker",
"lastActivity": "最近活动",
"goals": "目标 {met}/{total}",
"completedAt": "完成时间"
},
"running": {
"title": "进行中意图",
"empty": "暂无进行中意图"
},
"attention": {
"title": "需要关注",
"confirmedVuln": "确认漏洞",
"executing": "执行中",
"frontierPending": "frontier 待领",
"blockedIntent": "被拦意图"
},
"recent": {
"title": "最近发现",
"empty": "暂无发现"
},
"blocked": {
"title": "被拦/出错意图",
"hint": "(共 {count} 条,可重跑)",
"rerunAll": "全部重跑",
"rerun": "重跑",
"truncated": "仅显示前 20 条,点「全部重跑」处理剩余 {rest} 条。"
},
"stat": {
"pending": "待领意图",
"pendingSub": "frontier 开放",
"confirmed": "确认发现",
"confirmedSub": "本任务",
"total": "意图总数",
"totalSub": "本任务全部意图"
},
"rule": {
"title": "任务级资产拦截 / 允许",
"hint": "(仅本任务生效,不进全局;先拦截后允许,共 {count} 条)",
"block": "拦截",
"allow": "允许",
"notePlaceholder": "备注(可选)",
"empty": "暂无任务级规则。「拦截」命中即禁止测试;「允许」为白名单——配置后本任务只允许命中允许规则的资产(未配置则不启用白名单)。",
"kind": {
"exact_domain": "域名(全等)",
"exact_ip": "IP(全等)",
"exact_url": "URL(全等)",
"fuzzy_domain": "域名(模糊)",
"fuzzy_ip": "IP(模糊)",
"fuzzy_url": "URL(模糊)",
"cidr": "CIDR 网段"
}
}
}
},
"retest": {
"panel": {
"title": "漏洞复测",
"desc": "在独立会话中验证当前状态,保留每次复测的结论与证据。",
"viewRunning": "查看正在进行的复测会话",
"start": "发起复测",
"loadError": "加载复测记录失败:{error}",
"retry": "重试",
"emptyTitle": "暂无复测记录",
"emptyDesc": "修复部署完成后,可发起复测并比较新旧证据。",
"viewSession": "查看会话",
"sessionDeleted": "会话已删除",
"notes": "补充说明:{notes}",
"evidence": "复测证据",
"status": {
"pending": "等待启动",
"running": "复测中",
"completed": "已完成",
"failed": "复测失败",
"stopped": "已停止"
},
"verdict": {
"reproduced": "仍可复现",
"fixed": "已修复",
"inconclusive": "无法确认"
}
},
"dialog": {
"startedNew": "复测已启动,可点击「复测中」查看会话",
"alreadyRunning": "该漏洞正在复测,可查看已有会话",
"startFailed": "发起复测失败:{message}",
"title": "复测漏洞 #{id}",
"desc": "复测 Agent 将读取原证据和测试约束,在独立会话中执行针对性验证。复测成功完成且确认修复后,漏洞状态自动改为「已修复」,其他结论保留原状态。",
"notesLabel": "补充说明(可选)",
"notesPlaceholder": "例如:使用原测试账号验证原接口;修复版本为 v2。",
"notesDesc": "可补充修复版本、测试条件或本次限制。",
"cancel": "取消",
"submit": "开始复测",
"submitting": "正在创建…"
}
},
"llmChain": {
"current": "当前",
"skippedTitle": "当前游标之前的配置不会被自动故障转移选中",
"skipped": "已跳过",
"backup": "备用 {n}",
"profileRef": "配置 #{id}",
"searchPlaceholder": "搜索并添加 LLM 配置",
"noProfiles": "暂无可用 LLM 配置",
"noMatch": "没有匹配的 LLM 配置",
"activeSuffix": "(激活)",
"emptyHint": "未指定配置时,任务跟随 Agent 或全局激活配置。",
"unavailable": "配置已不可用",
"moveUp": "上移配置",
"moveDown": "下移配置",
"remove": "移除配置",
"currentProfile": "当前配置"
},
"sideQuestion": {
"button": "旁路提问",
"buttonTitle": "/btw 旁路提问",
"title": "旁路提问",
"panelLabel": "旁路提问面板",
"clearHistory": "清空旁路历史",
"closePanel": "关闭旁路面板",
"contextUpdatedAt": "上下文更新于 {time}",
"firstRunHint": "主 Agent 首次运行后即可提问",
"loadEarlier": "加载更早的旁路问答",
"emptyTitle": "随时问一个问题",
"emptyDesc": "根据当前 Agent 的上下文回答,主任务继续运行。",
"recentExchanges": "最近 {count} 组问答原文",
"historySummarized": "含早期问答摘要",
"snapshotSummarized": "使用主上下文摘要",
"contextTime": "上下文 {time}",
"questionAria": "旁路问题",
"askPlaceholder": "询问当前上下文…",
"independentNote": "独立问答 · 无工具执行",
"stopAnswer": "停止旁路回答",
"sendQuestion": "发送旁路问题",
"clearConfirmTitle": "清空旁路历史?",
"clearConfirmDesc": "删除当前 Agent 的旁路问答,并停止正在生成的旁路回答。主会话和上下文快照会保留。",
"cancel": "取消",
"clearConfirm": "清空历史",
"drawerDesc": "{label} 的独立问答",
"parseError": "旁路数据解析失败,请重新打开面板",
"status": {
"running": "回答中",
"completed": "已完成",
"failed": "失败",
"cancelled": "已停止",
"interrupted": "已中断"
},
"phase": {
"preparing": "正在准备上下文…",
"summarizing_history": "正在整理早期旁路问答…",
"compressing_snapshot": "正在压缩旁路上下文副本…",
"retrying": "模型上下文超限,正在缩减后重试…",
"answering": "正在回答…"
}
},
"approval": {
"title": {
"task": "拦截审批",
"history": "审批记录"
},
"refresh": "刷新",
"intro": "展开记录查看工具请求和审批裁决,以及当时的上下文与执行结果。",
"pendingBadge": "{count} 待审批",
"loadError": "加载失败",
"recordLoadError": "记录加载失败:{error}。请点击刷新重试。",
"pendingLoadError": "待审批加载失败:{error}。请点击刷新重试。",
"filter": {
"label": "审批记录筛选",
"status": "审批状态",
"source": "判定来源",
"clear": "清除筛选",
"statusAll": "全部状态",
"sourceAll": "全部来源"
},
"status": {
"pending": "待审批",
"allowed": "已允许",
"denied": "已拒绝",
"timeout": "已超时"
},
"sourceOption": {
"model": "模型判定",
"rule": "规则判定",
"unknown": "来源未知"
},
"pendingSection": "待处理({count})",
"pendingHint": "展开后允许或拒绝",
"pendingTableLabel": "待处理审批",
"filteredResults": "筛选结果",
"allRecords": "全部记录",
"emptyFiltered": "没有符合筛选条件的审批记录",
"emptyTitle": "暂无审批记录",
"emptyFilteredDesc": "请调整审批状态或判定来源,或清除筛选查看全部记录。",
"emptyDesc": "规则或模型作出审批决定后,记录将显示在这里。",
"historyTableLabel": "审批记录列表",
"table": {
"expandDetail": "展开详情",
"tool": "工具",
"source": "来源",
"matchRule": "匹配规则",
"params": "参数",
"status": "状态"
},
"row": {
"toggleAria": "{action}审批 #{id}"
},
"collapse": "收起",
"expand": "展开",
"detailAria": "审批详情 #{id}",
"conversationRef": "对话 #{id}",
"taskRef": "任务 {id}",
"ruleRef": "规则 #{id}",
"locateSourceAria": "定位审批 #{id} 的来源:{label}",
"locateFailed": "无法定位对应执行",
"modelDecision": "模型判定",
"ruleMissing": "规则未记录或已删除",
"noReason": "未记录理由",
"copied": "已复制",
"copyFailed": "复制失败,请手动选择内容复制",
"copyAria": "复制{label}",
"notRecorded": "未记录",
"truncatedNote": "内容已截断,以上为保存的片段。",
"allow": "允许",
"deny": "拒绝",
"allowedExecution": "已允许执行",
"deniedExecution": "已拒绝执行",
"detailLoadFailed": "详情加载失败",
"detailLoadFailedWith": "详情加载失败:{error}",
"retryDetail": "重试详情",
"noDetailSnapshot": "此记录未保存审批详情快照,无法还原当时的上下文、模型初判和执行输出。",
"collapseContext": "收起上下文",
"viewContextAndResult": "查看上下文与执行结果",
"digestOnlyNote": "此历史记录仅保存审查输入指纹,未保存输入原文,无法还原当时发给模型的上下文。这不代表审查时没有上下文;新产生的模型裁决会保留输入快照。",
"noModelInputNote": "此记录没有保存模型审查输入,可能由规则直接裁决、模型调用前发生异常或产生于旧版本。",
"viewAuditFragmentNotSent": "查看会话审计片段(未发送模型)",
"viewAuditFragment": "查看会话审计片段",
"auditCurrentTurn": "会话当前轮输入(审计片段)",
"visibleContext": "可见会话上下文",
"savedContextNote": "保存于 {time} 的会话记录片段。模型实际使用的内容以“模型审查输入”为准。",
"contextTruncated": "仅保存最近的上下文,部分内容已截断。",
"errorTag": "异常",
"noRelatedContext": "未记录可关联的上下文",
"executionOutput": "执行输出",
"toolNotExecuted": "工具未执行。",
"noOutputYet": "尚无执行输出",
"ambiguousCorrelation": "存在相同参数的并发调用,无法唯一关联工具调用;本记录不展示推测的执行结果。",
"noUniqueToolId": "未记录可唯一关联的工具调用 ID。",
"toolCallId": "工具调用 ID",
"inputDigest": "参数摘要 SHA-256",
"configDigest": "审查配置指纹 SHA-256",
"modelInputDigest": "模型审查输入 SHA-256",
"resultRecordedAt": "结果记录时间",
"toolRequest": "{agent} · 工具请求",
"agentFallback": "Agent",
"viewCommand": "查看命令内容",
"commandContent": "命令内容",
"executionResult": "执行结果",
"loading": "加载中…",
"reviewStatus": "审查状态",
"approvalVerdict": "审批裁决",
"noApprovalReason": "未记录审批理由",
"finalAction": "最终动作",
"sourceLabel": "来源",
"requestedAt": "申请时间",
"decidedAt": "决定时间",
"ruleSnapshot": "规则快照",
"approvalModelProfile": "审批模型配置",
"modelInitial": "模型初判",
"ruleInitial": "规则初判",
"modelFallback": "模型异常回退",
"action": {
"allow": "允许",
"ask": "转人工审批",
"deny": "拒绝"
},
"execution": {
"not_started": "尚未执行",
"not_executed": "未执行",
"awaiting_result": "已允许,等待执行结果",
"succeeded": "执行成功",
"failed": "执行失败",
"unknown": "执行结果未知",
"notCorrelated": "未关联执行结果"
},
"context": {
"user": "用户消息",
"assistant": "Agent 消息",
"text": "Agent 消息",
"tool_use": "工具请求",
"tool_result": "工具输出"
},
"review": {
"context": "模型审查上下文",
"snapshotNote": "以下为本次实际发送给审查模型的输入快照。背景仅用于理解当前动作,裁决依据为审查策略。",
"legacyInput": "此记录使用旧版输入,保留当时实际发送的内容。",
"currentCall": "当前待审查调用",
"bgUser": "背景 · 用户消息",
"bgWorkerLegacy": "背景 · Worker 意图摘要(旧版)",
"bgUserNote": "取自当前用户消息。",
"bgWorkerNote": "这是旧版发送的 Worker 意图摘要;新版 Worker 审查不再发送此内容。",
"noBg": "本次审查未附带背景消息。",
"turnInputLegacy": "当前轮输入(旧版)",
"taskDescLegacy": "任务描述(旧版)",
"taskGoalLegacy": "任务目标(旧版)",
"taskConstraintsLegacy": "任务操作约束(旧版)",
"workerIntentLegacy": "Worker 意图(旧版)",
"workingDir": "工作目录",
"noHistory": "本次审查未发送历史调用或执行结果。",
"historyTitleLegacy": "当时提供给模型的历史调用(旧版)",
"histSucceeded": "成功",
"histFailed": "失败(可能有部分副作用)",
"histArgs": "历史调用参数",
"histResult": "历史执行结果",
"noPairable": "本次未提供可配对的历史工具执行记录。",
"histTruncated": "历史为有限窗口,部分内容已截断。",
"viewFullJson": "查看完整模型审查输入 JSON",
"modelInput": "模型审查输入"
}
},
"agentEditor": {
"tab": {
"prompt": "配置与提示词",
"wrapup": "收尾提示词",
"triggers": "触发"
},
"notFound": "未找到 Agent:{key}",
"llm": {
"label": "默认模型(LLM 配置)",
"follow": "跟随任务 / 全局激活配置",
"defaultSuffix": " · 默认",
"hint": "为该 Agent 绑定固定 LLM 配置(点「保存配置」生效)。优先级:Agent 绑定 > 任务/会话指定 > 全局激活。"
},
"config": {
"maxTurns": "最大循环次数(0=不限)",
"runSeconds": "运行时长(秒,0=不限)",
"save": "保存配置"
},
"webSearch": {
"label": "网络搜索",
"onHint": "为该 Agent 开启后(点上方保存生效),可用 web_search 联网检索",
"offHint": "需先在「系统配置」开启网络搜索并配置后端,才能在此启用"
},
"shell": {
"label": "交互式 Shell",
"hint": "为该 Agent 开启后(点上方保存生效),可用持久 PTY 会话工具(shell_open/send/read/close/list)驱动 msfconsole/ssh/REPL 等交互程序"
},
"prompt": {
"varsLabel": "变量(点击插入占位符,渲染时由运行时数据替换)",
"example": "示例:{example}",
"noVars": "(无变量)",
"placeholder": "留空则使用内置默认提示词",
"previewBtn": "预览渲染",
"saveVersion": "保存为新版本",
"resetDefault": "恢复默认"
},
"preview": {
"title": "渲染预览",
"descPrefix": "所有",
"descSuffix": "已由后端用示例值替换。",
"renderError": "渲染错误:{error}",
"failed": "预览失败:{error}"
},
"version": {
"historyLabel": "版本历史",
"current": "当前",
"none": "(暂无保存的版本,使用内置默认)",
"noNote": "(无备注)",
"empty": "(空)",
"compareCurrent": "与当前版本对比",
"loadToEditor": "加载到编辑器"
},
"diff": {
"title": "版本对比:v{from} → v{to}(当前)",
"removed": "- 删除",
"added": "+ 新增"
},
"wrapup": {
"desc": "当此 Agent 因超时或步数耗尽被终止时,系统会注入这段「收尾提示词」跑一轮收尾:先把已识别但未落库的内容写回,再输出一句总结(避免烂尾)。留空则使用内置默认。",
"bodyLabel": "收尾提示词正文",
"custom": "自定义",
"useDefault": "使用内置默认",
"placeholder": "留空则使用内置默认收尾提示词",
"turnsLabel": "收尾轮数(收尾阶段自身最多跑几轮;0=用内置默认 {default} 轮)",
"save": "保存",
"resetDefault": "恢复默认",
"defaultLabel": "内置默认(只读,供参考)"
},
"taskTimeout": {
"desc": "任务超时收尾(与上面的 per-run 收尾是两套):当整个任务到达超时上限、即将结束时注入。与 per-run 语义常相反(如 planner:per-run 说“别停继续规划”,任务超时说“到点停止、做最后判定”)。留空则用内置默认。",
"bodyLabel": "任务超时收尾提示词正文",
"placeholder": "留空则使用内置默认任务超时收尾提示词",
"turnsLabel": "收尾轮数(0=用内置默认 {default} 轮)"
},
"toast": {
"savedVersion": "已保存为版本 v{version}",
"saveFailed": "保存失败:{error}",
"resetToDefaultVersion": "已恢复为内置默认(v{version})",
"resetToDefault": "已恢复为内置默认",
"resetFailed": "恢复失败:{error}",
"wrapupSaved": "收尾配置已保存(下次运行生效)",
"wrapupCleared": "已清空,将使用内置默认",
"taskTimeoutWrapupSaved": "任务超时收尾配置已保存(下次运行生效)",
"configSaved": "已保存运行配置(立即生效)",
"mcpVisOn": "已开启 MCP「{name}」可见",
"mcpVisOff": "已取消 MCP「{name}」可见",
"skillVisOn": "已开启 Skill「{name}」可见",
"skillVisOff": "已取消 Skill「{name}」可见",
"toolBound": "已绑定工具「{key}」",
"toolUnbound": "已解绑工具「{key}」",
"toolBindFailed": "保存工具绑定失败:{error}",
"loadedToEditor": "已加载 v{version} 到编辑器,确认后点「保存为新版本」"
},
"mcp": {
"desc": "勾选此 Agent 可见的 MCP 服务器。",
"none": "(暂无 MCP)"
},
"skill": {
"desc": "勾选此 Agent 可见的 Skill。",
"none": "(暂无 Skill)"
},
"tools": {
"desc": "勾选绑定给此 Agent 的内置工具。",
"trafficBadge": "流量",
"disabledBadge": "已停用",
"needCapture": "需开启流量捕获",
"none": "(暂无工具)"
},
"triggers": {
"desc": "触发器让这个自定义 Agent 自动运行:每次触发都新建一个会话运行(在「对话」页可见)。可多选触发条件;系统会把「本次为何触发 + 相关任务/finding/目标」自动附加到你写的基础消息后面。",
"policyLabel": "触发后处理策略(决定触发如何排队/合并运行)",
"runMode": "运行模式",
"serial": "串行(排队,一次一个)",
"parallel": "并行(各自并发会话)",
"mergeMode": "合并模式",
"mergeByTask": "按任务合并",
"mergeAll": "全部合并成一条",
"mergeNone": "不合并",
"maxParallel": "最大并发(0=不限)",
"policyParallel": "并行:每次触发立即各开一个会话并发运行,不合并;超过最大并发的触发排队等空位。",
"policyByTask": "串行·按任务合并:同 agent 一次跑一个;排队中同一任务的事件触发合并成一条会话。",
"policyAll": "串行·全部合并:同 agent 一次跑一个;取队列时把当前排队的所有触发合并成一条会话。",
"policyNone": "串行·不合并:同 agent 一次跑一个;每条触发各自一个会话。",
"editTitle": "编辑触发器 #{id}(改完点「保存修改」)",
"addTitle": "新增触发器(每种条件可填各自的用户消息)",
"onInterval": "定时触发",
"every": "每",
"seconds": "秒",
"intervalPlaceholder": "定时触发时发给 agent 的话,如:巡检所有任务",
"onFinding": "发现 finding 时触发",
"findingPlaceholder": "发现 finding 时发给 agent 的话(系统会附带任务与 finding 详情)",
"onGoalMet": "目标达成时触发",
"goalPlaceholder": "目标达成时发给 agent 的话(系统会附带任务与达成的目标)",
"onTaskTimeout": "任务超时时触发",
"taskTimeoutPlaceholder": "任务超时时发给 agent 的话(系统会附带任务编号与目标)",
"onToolCall": "工具调用时触发",
"toolSelectHint": "选择要监听的工具(至少一个);任务执行中这些工具每次调用完成都会触发。已选 {count} 个。",
"toolListEmpty": "(工具列表为空)",
"toolCallPlaceholder": "工具被调用时发给 agent 的话(系统会附带任务信息、工具入参与返回内容)",
"onTaskCreate": "任务创建时触发",
"taskCreatePlaceholder": "任务被创建时发给 agent 的话(系统会附带任务编号与目标)",
"saveEdit": "保存修改",
"add": "添加触发器",
"cancelEdit": "取消编辑",
"existing": "已有触发器",
"existingNone": "(暂无)",
"edit": "编辑",
"delete": "删除",
"errNoCondition": "至少选择一种触发条件",
"errNoTool": "工具调用触发至少选择一个工具",
"savedEdit": "已保存修改",
"added": "已添加触发器",
"saveEditFailed": "保存失败:{error}",
"addFailed": "添加失败:{error}",
"savePolicyFailed": "保存策略失败:{error}",
"deleteFailed": "删除失败:{error}",
"cond": {
"everyN": "每 {sec}s",
"finding": "发现 finding",
"goalMet": "目标达成",
"taskTimeout": "任务超时",
"toolCall": "工具调用({count})",
"taskCreate": "任务创建",
"none": "(无条件)"
},
"detail": {
"interval": "定时:{msg}",
"finding": "finding:{msg}",
"goal": "目标:{msg}",
"timeout": "超时:{msg}",
"taskCreate": "任务创建:{msg}",
"tools": "工具:{tools}",
"toolsNone": "(未选)",
"message": "消息:{msg}"
}
}
},
"assetSearch": {
"placeholder": "DSL 搜索:domain=example AND status_code>=400",
"loading": "搜索中…",
"found": "找到 {count} 条",
"field": {
"domain": "域名(根域名/子域名/服务域名)",
"ip": "IPv4/IPv6 地址",
"url": "完整 URL(服务/接口)",
"root_domain": "根域名",
"page_title": "页面标题(HTTP 服务)",
"icp": "ICP 备案号",
"service_name": "服务名称(非 HTTP 服务)",
"app_name": "应用名称",
"bundle_id": "应用 Bundle ID",
"category": "应用分类",
"app_icp": "应用 ICP 备案",
"method": "HTTP 方法 GET/POST/PUT/…",
"service_type": "服务类型:http | other",
"record_type": "DNS 解析类型 A/CNAME/MX/…",
"technology": "技术指纹(数组字段)",
"port": "端口号(整数)",
"status_code": "HTTP 状态码(整数)",
"company_id": "归属企业 ID(整数)",
"task_id": "来源任务 ID(整数)"
},
"op": {
"fuzzy": "模糊匹配",
"exact": "精确匹配",
"exclude": "排除",
"eq": "等于",
"ne": "不等于",
"gt": "大于",
"gte": "大于等于",
"lt": "小于",
"lte": "小于等于"
},
"logic": {
"and": "且(两个条件都满足)",
"or": "或(满足其中之一)"
}
},
"taskTemplate": {
"picker": {
"label": "任务模板",
"manage": "管理模板",
"saveAs": "另存为模板",
"loading": "正在加载模板",
"empty": "暂无任务模板",
"search": "搜索并选择任务模板",
"noMatch": "没有匹配的模板",
"hint": "选择后会复制模板的描述、目标、分类与任务级规则,不与模板保持关联。",
"loadError": "加载模板失败:{error}"
},
"apply": {
"title": "使用模板「{name}」?",
"description": "当前已填写的描述和目标将被模板内容覆盖。",
"cancel": "取消",
"confirm": "覆盖并使用"
},
"manager": {
"title": "任务模板管理",
"description": "模板保存描述、目标、分类与任务级拦截/允许规则;修改不会影响已经创建的任务。",
"new": "新建模板",
"noTemplates": "暂无模板",
"nameLabel": "模板名称",
"namePlaceholder": "例如:外部 Web 渗透",
"descriptionLabel": "描述",
"descriptionPlaceholder": "测试对象与背景",
"goalLabel": "目标",
"goalPlaceholder": "任务需要达成的目标",
"categoryLabel": "任务分类",
"categoryUnclassified": "未分类",
"categoryHint": "应用模板时预填此分类(可再改)。",
"rulesLabel": "任务级拦截 / 允许规则",
"rulesHint": "应用模板时预填这些任务级规则(拦截/允许,仅对新任务生效,不进全局)。",
"delete": "删除模板",
"close": "关闭",
"create": "创建模板",
"saveChanges": "保存修改",
"saving": "保存中",
"validation": "请填写模板名称、描述和目标",
"created": "模板已创建",
"updated": "模板已更新",
"deleted": "模板已删除",
"saveError": "保存失败:{error}",
"deleteError": "删除失败:{error}"
},
"deleteDialog": {
"title": "删除模板「{name}」?",
"untitled": "未命名模板",
"description": "已由该模板创建的任务不会受到影响。",
"cancel": "取消",
"deleting": "删除中",
"delete": "删除"
}
},
"explorationGraph": {
"kind": {
"task": "根任务",
"begin": "起点",
"goal": "目标",
"hint": "提示",
"intent": "意图",
"fact": "事实",
"finding": "漏洞",
"digest": "压缩"
},
"rel": {
"spawns": "派生",
"derived_from": "意图链",
"yields": "产出",
"proves": "证明"
},
"detail": {
"attributes": "属性",
"type": "类型",
"state": "状态",
"priority": "优先级",
"origin": "来源",
"sourceTask": "来源任务",
"time": "时间",
"digestConclusion": "压缩结论",
"members": "压缩的节点({count})",
"membersNotLoaded": "另有 {count} 个成员节点未随当前图加载",
"raw": "原始数据",
"copy": "复制",
"copied": "已复制",
"sourceBadge": "来源 #{id}",
"sourceTaskBadge": "来源任务 #{id} · 只读",
"inheritedTooltip": "继承自任务 #{id},只读",
"inheritedReadOnly": "#{id}(继承,只读)"
},
"emptyHint": "暂无探索数据",
"lineage": {
"empty": "无链路可展示(该漏洞未关联探索节点,或所属任务已删除)。",
"emptyHint": "无链路",
"loading": "加载中…"
}
},
"pagination": {
"perPage": "条/页",
"range": "{from}–{to} / 共 {total} 条",
"empty": "共 0 条",
"prev": "上一页",
"next": "下一页"
},
"findings": {
"title": "发现",
"subtitle": "跨任务漏洞汇总",
"view": {
"flat": "全部发现",
"grouped": "按任务分组",
"asset": "按资产"
},
"stat": {
"total": "发现总数",
"pending": "待处理"
},
"search": {
"placeholder": "检索漏洞内容"
},
"severity": {
"all": "全部",
"critical": "严重",
"high": "高危",
"medium": "中危",
"low": "低危",
"ariaFilter": "按{label}等级筛选"
},
"status": {
"placeholder": "状态",
"all": "全部状态"
},
"vulnclass": {
"placeholder": "漏洞类型",
"all": "全部类型"
},
"task": {
"placeholder": "任务",
"all": "全部任务",
"unassigned": "未关联 / 任务已删除",
"deletedShort": "任务 #{id}(已删除)"
},
"sort": {
"severity": "按严重度",
"time": "按时间"
},
"selectedCount": "已选 {count} 条",
"export": "导出",
"selectAllPage": "选择当前页全部",
"selectAllGroup": "选择本组当前页全部",
"asset": {
"all": "全部资产",
"totalCount": "共 {count} 条"
},
"group": {
"withName": "{name}(任务 #{id})",
"taskOnly": "任务 #{id}",
"sourceUnavailable": "来源任务不可用",
"viewTask": "查看任务 #{id}"
},
"empty": "没有匹配的发现。",
"deepen": {
"title": "深入利用漏洞",
"description": "将在原任务 #{id} 中创建优先级 10 的 Worker 意图,基于当前漏洞开展二次验证:{name}",
"label": "利用描述",
"placeholder": "描述需要验证的利用路径、边界条件、目标或期望证据",
"hint": "新意图会继承该漏洞的资产锚点。",
"submit": "创建深入意图"
},
"exportDialog": {
"title": "导出发现",
"description": "选择导出范围与格式,生成后浏览器会自动下载。",
"scopeLabel": "导出范围",
"scopeFiltered": "导出当前筛选结果(共 {count} 条)",
"scopeAll": "导出全部",
"scopeSelected": "导出勾选的 {count} 条",
"formatLabel": "导出格式",
"formatMdSingle": "Markdown 汇总报告(单个 .md 文件)",
"formatMdZip": "Markdown 分文件(一漏洞一 .md,打包 .zip)",
"formatCsv": "CSV 表格(.csv)",
"formatJson": "JSON(.json)",
"exporting": "导出中…",
"submit": "导出"
},
"common": {
"cancel": "取消",
"save": "保存",
"saving": "保存中…",
"delete": "删除",
"loading": "加载中…"
},
"toast": {
"retestStatusFailed": "加载复测状态失败:{error}",
"exportStarted": "已开始下载导出文件",
"exportFailed": "导出失败:{error}",
"assetTreeFailed": "资产树加载失败:{error}",
"marked": "已标记为「{label}」",
"updateFailed": "更新失败:{error}",
"saved": "已保存",
"saveFailed": "保存失败:{error}",
"deleted": "已删除漏洞",
"deleteFailed": "删除失败:{error}",
"deepenQueued": "深入意图 #{id} 已进入任务队列",
"deepenCreated": "已创建高优先级 Worker 意图 #{id}",
"deepenFailed": "提交失败:{error}"
},
"table": {
"colSeverity": "严重度",
"colName": "漏洞名称",
"colAsset": "资产",
"colStatus": "状态",
"colTask": "所属任务",
"colTime": "时间",
"colActions": "操作",
"selectOne": "选择该漏洞",
"viewDetail": "查看发现详情",
"unclassified": "未分类",
"trafficEvidence": "流量证据 {count} 条",
"retestingTitle": "查看正在进行的复测会话",
"retesting": "复测中",
"retestTitle": "在独立会话中复测该漏洞",
"retest": "复测",
"deepen": "深入",
"deleteAria": "删除漏洞",
"deleteConfirmTitle": "确认删除该漏洞?",
"deleteConfirmBody": "将被永久删除,同时从发现列表、任务发现 Tab 与探索图中移除,此操作不可撤销。",
"editName": "漏洞名称",
"editNamePlaceholder": "可读标题,留空回退类别",
"editCategory": "类别",
"editCategoryPlaceholder": "如 SQL Injection",
"editSeverity": "严重等级",
"evidence": "证据",
"typeInline": "· 类型:",
"assetInline": "· 资产:",
"detailReport": "详细报告",
"reportCopied": "已复制详细报告",
"reportLoadFailed": "报告加载失败。",
"reportEmpty": "暂无详细报告。"
},
"assetTree": {
"kind": {
"company": "企业",
"root_domain": "根域名",
"subdomain": "子域名",
"ip": "IP",
"app": "应用",
"service": "服务",
"endpoint": "接口",
"none": "未关联"
},
"emptyNoAsset": "当前筛选下没有关联到资产的发现。",
"emptyNoMatch": "没有匹配的资产。",
"filterPlaceholder": "过滤资产",
"refresh": "刷新资产树",
"truncated": "资产过多,已隐藏{kinds}层级(计数仍已计入上层)。用筛选或过滤框收窄可看到完整层级。",
"collapse": "折叠",
"expand": "展开",
"criticalCount": "严重 {count}",
"highCount": "高危 {count}",
"totalCount": "共 {count} 条发现"
},
"detail": {
"notFound": "未找到发现 {id}",
"back": "返回发现列表",
"sourceTask": "来源任务 #{id} · 只读",
"tab": {
"overview": "概览",
"lineage": "链路图"
},
"summary": "摘要",
"summaryEmpty": "(无摘要)",
"evidence": "证据 / PoC",
"evidenceEmpty": "(无证据)",
"reportStale": "流量证据已变更,详细报告待更新。",
"statusTitle": "状态",
"fieldId": "漏洞 ID",
"fieldSeverity": "严重等级",
"fieldStatus": "处理状态",
"fieldType": "漏洞类型",
"fieldAssets": "涉及资产",
"fieldTask": "所属任务",
"taskDeleted": "—(任务已删除)",
"fieldTime": "发现时间",
"severityChanged": "严重等级已改为「{label}」",
"statusChanged": "处理状态已改为「{label}」"
},
"traffic": {
"title": "关联流量",
"bind": "绑定流量",
"inherited": "继承证据 · 只读",
"description": "按复现顺序组织请求与响应。清理原始流量后,已绑定证据仍然保留。",
"retry": "重试",
"empty": "暂无关联流量",
"emptyHint": "可绑定正常对照、漏洞证明和补充验证请求。",
"evidenceNo": "证据 #{id}",
"viewRaw": "查看报文",
"editNote": "编辑说明",
"moveUp": "上移证据 {id}",
"moveDown": "下移证据 {id}",
"unbind": "解除绑定",
"updated": "流量证据已更新",
"editTitle": "编辑流量证据",
"editDescription": "说明这组请求/响应如何支持漏洞结论。",
"roleLabel": "用途",
"noteLabel": "证据说明",
"saveNote": "保存说明",
"role": {
"baseline": "正常对照",
"proof": "漏洞证明",
"verification": "补充验证",
"supporting": "辅助证据"
}
}
},
"copyButton": {
"label": "复制",
"success": "已复制",
"error": "复制失败,请手动选择文本复制"
},
"trafficEvidence": {
"picker": {
"title": "绑定流量",
"description": "筛选并多选请求/响应,已选记录会跨页保留。绑定后可设置用途、说明和顺序。",
"host": "目标 host",
"hostPlaceholder": "域名或 IP",
"method": "请求方法",
"allMethods": "全部方法",
"keyword": "关键词",
"keywordPlaceholder": "URL / 正文关键词",
"selectPage": "选择本页未绑定流量",
"colMethodUrl": "方法 / URL",
"colTime": "时间",
"colStatus": "状态码",
"colAction": "操作",
"selectOne": "选择流量 {id}",
"bound": "已绑定",
"preview": "预览",
"loading": "加载中…",
"noMatch": "没有匹配的流量",
"selectedSummary": "已选 {selected} 条 · 共 {total} 条",
"prevPage": "上一页",
"pageNo": "第 {page} 页",
"nextPage": "下一页",
"cancel": "取消",
"saving": "保存中…",
"bindCount": "绑定 {count} 条流量",
"boundToast": "已绑定 {count} 条流量"
},
"viewer": {
"title": "流量证据 #{id}",
"fallbackDesc": "查看绑定时保存的请求与响应",
"request": "请求 Request",
"response": "响应 Response",
"bodyBytes": "正文 {bytes} 字节",
"previewSuffix": " · 当前为预览",
"downloadRequest": "下载完整请求正文",
"downloadResponse": "下载完整响应正文",
"loadMore": "加载更多正文"
},
"captured": {
"title": "预览流量",
"description": "流量 ID:{id}。绑定时会保存完整正文。"
},
"code": {
"empty": "(空)",
"copyFailed": "复制失败,请使用 Ctrl/Cmd+A 后复制",
"wrapOff": "关闭自动换行",
"wrapOn": "开启自动换行",
"copiedPacket": "已复制报文",
"copyPacket": "复制报文",
"copied": "已复制",
"label": "HTTP 报文代码"
}
},
"transcript": {
"newRound": "新一轮",
"streaming": "实时流式中…",
"loading": "加载中…",
"withThinking": "含推理",
"kind": {
"thinking": "推理",
"result": "总结",
"note": "说明"
},
"tool": {
"name": "工具",
"running": "执行中…",
"failed": "✕ 失败",
"command": "命令",
"output": "输出",
"empty": "(空)",
"loadFailed": "(加载失败)",
"pinned": "定位的工具调用 #{seq}"
},
"approval": {
"request": "审批请求",
"historyReadonly": "历史记录 · 只读",
"allowed": "已允许",
"timeout": "已超时",
"denied": "已拒绝",
"allow": "允许",
"deny": "拒绝",
"expand": "展开审批详情",
"collapse": "收起审批详情",
"retry": "重试详情",
"loading": "正在加载审批详情…",
"loadError": "审批详情加载失败",
"allowedToast": "已允许执行",
"deniedToast": "已拒绝执行"
}
},
"mentionTextarea": {
"inputAria": "消息,输入 @ 引用记录",
"listboxAria": "选择引用记录",
"pickKind": "选择引用类型",
"searchKind": "搜索{kind}",
"allRecords": "全部记录",
"hintKeys": "↑↓ 选择 · Enter 确认 · Esc 关闭",
"candidatesAria": "引用候选",
"searching": "搜索中…",
"searchError": "搜索失败:{error}。请重新输入重试。",
"noMatch": "没有匹配记录,请更换名称、地址或 ID",
"loadingMore": "正在加载更多…",
"pageError": "加载失败,点击重试",
"showingMore": "已显示 {count} 条,向下滚动加载更多",
"showingAll": "已显示全部 {count} 条",
"searchHint": "输入名称、地址或 ID 搜索记录",
"removeAria": "移除引用 {label}",
"selectedHint": "发送时读取最新详情 · 最多 10 条",
"kind": {
"finding": "漏洞",
"asset": "资产",
"company": "企业",
"endpoint": "接口",
"ip": "IP",
"app": "应用",
"root_domain": "域名",
"subdomain": "子域名",
"service": "服务"
}
},
"assetInterceptRules": {
"action": {
"block": "拦截",
"allow": "允许"
},
"kind": {
"exact_domain": "域名(全等)",
"exact_ip": "IP(全等)",
"exact_url": "URL(全等)",
"fuzzy_domain": "域名(模糊)",
"fuzzy_ip": "IP(模糊)",
"fuzzy_url": "URL(模糊)",
"cidr": "CIDR 网段"
},
"notePlaceholder": "备注(可选)",
"add": "添加一条"
},
"interceptPage": {
"title": "命令拦截",
"subtitle": "工具执行前先按拦截规则匹配;未命中的命令可交由模型兜底判定",
"scope": {
"label": "拦截范围",
"empty": "未启用任何工具 — 拦截规则与模型兜底均不会生效",
"toolCount": "{count} 个工具",
"adjust": "调整范围",
"dialogTitle": "拦截范围",
"dialogDesc": "只有启用拦截的工具才会进入规则匹配;其余工具直接放行"
},
"tab": {
"rules": "拦截规则",
"model": "模型配置"
},
"rules": {
"priorityHint": "按优先级(数字越大越先)逐条匹配,首条命中的规则生效",
"add": "新建规则",
"loading": "加载中…",
"empty": "暂无规则",
"addFirst": "新建第一条规则",
"colPriority": "优先级",
"colName": "名称",
"colTarget": "目标",
"colType": "类型",
"colPattern": "模式",
"colAction": "策略",
"colEnabled": "启用"
},
"target": {
"tool_name": "工具名",
"tool_input": "输入内容"
},
"matchType": {
"regex": "正则",
"string": "字符串"
},
"action": {
"allow": "允许",
"deny": "禁止",
"ask": "申请"
},
"editor": {
"editTitle": "编辑规则",
"newTitle": "新建规则",
"desc": "优先级越大越先匹配;首条命中规则生效,后续跳过",
"name": "名称",
"namePlaceholder": "给规则起个名字",
"priority": "优先级(数字越大越先匹配)",
"matchTarget": "匹配目标",
"targetToolName": "工具名(tool_name)",
"targetToolInput": "输入内容(tool_input JSON)",
"matchTypeLabel": "匹配类型",
"typeStringContains": "字符串包含",
"typeRegex": "正则表达式",
"pattern": "模式",
"regexWarn": "包含 Go RE2 扩展语法(如 (?i)),浏览器无法预览,提交后由服务端验证",
"actionLabel": "拦截策略",
"actionAllow": "允许 — 直接放行,跳过后续规则",
"actionDeny": "禁止 — 阻断,返回拒绝消息给模型",
"actionAsk": "向用户申请 — 等待审批",
"denyMessage": "拒绝消息(返回给模型)",
"askMessage": "审批说明(可选)",
"denyMessagePlaceholder": "操作被安全策略阻止",
"enableTimeout": "启用审批超时",
"enableTimeoutHint": "超时后自动处置,不再等待",
"timeoutSeconds": "超时时间(秒)",
"timeoutAction": "超时动作",
"timeoutDeny": "自动拒绝",
"timeoutAllow": "自动允许",
"enableRule": "启用此规则",
"cancel": "取消",
"saving": "保存中…",
"save": "保存"
},
"toast": {
"ruleUpdated": "规则已更新",
"ruleCreated": "规则已创建",
"ruleDeleted": "规则已删除",
"loadRulesFailed": "加载拦截规则失败",
"nameRequired": "名称不能为空",
"patternRequired": "模式不能为空",
"regexInvalid": "正则表达式语法无效",
"scopeSaved": "拦截范围已保存",
"loadFailed": "加载失败: {error}",
"saveFailed": "保存失败: {error}"
},
"toolGroup": {
"exec": "执行类",
"write": "写入/编辑类",
"system": "系统工具",
"custom": "自定义工具"
},
"toolDesc": {
"Bash": "在 shell 中执行命令",
"WebFetch": "发起 HTTP/HTTPS 请求(含代理支持)",
"web_search": "网络搜索",
"shell_open": "开启持久 PTY 交互会话",
"shell_send": "向交互会话发送输入",
"shell_read": "读取交互会话输出",
"shell_close": "关闭交互会话",
"shell_list": "列出所有交互会话",
"Write": "写入文件",
"Edit": "编辑文件(精确替换)",
"MultiEdit": "批量编辑文件"
},
"judge": {
"title": "模型兜底审批",
"desc": "在拦截范围内、且没有任何拦截规则命中的命令,才由模型做语义判断(放行 / 转人工 / 拦截)",
"enabled": "已启用",
"disabled": "未启用",
"promptTitle": "审批提示词",
"promptDesc": "模型据此判定 ALLOW / ASK / DENY,可直接编辑",
"restoreTemplate": "恢复默认模板",
"promptPlaceholder": "留空使用内置模板",
"charCount": "{count} 字",
"modelAndPolicy": "判定模型与策略",
"approvalModel": "审批模型",
"followActive": "跟随激活配置",
"judgeTimeout": "模型判定超时(秒)",
"failAction": "模型失败时(出错 / 超时 / 无法解析)",
"failAllow": "放行",
"failAsk": "转人工审批",
"failDeny": "拦截",
"manualApproval": "人工审批(模型判为「转人工」时)",
"askTimeout": "审批等待超时(秒)",
"askTimeoutAction": "超时后默认动作",
"askTimeoutDeny": "拦截",
"askTimeoutAllow": "放行",
"saving": "保存中…",
"saveConfig": "保存配置",
"loadConfigFailed": "加载模型兜底配置失败: {error}",
"configSaved": "模型兜底配置已保存",
"restored": "已恢复内置默认模板",
"restoreFailed": "恢复失败: {error}"
}
},
"assetInterceptPage": {
"title": "资产拦截",
"subtitle": "全局资产黑名单:命中的域名 / IP / URL / 网段将被拦截,不对其执行任何操作",
"intro": "支持全等与模糊匹配的域名 / IP / URL,以及 CIDR 网段;默认内置模糊拦截政府(.gov / .gov.cn)与教育(.edu / .edu.cn)网站",
"add": "新建规则",
"loading": "加载中…",
"empty": "暂无资产拦截规则",
"addFirst": "新建第一条规则",
"colType": "类型",
"colPattern": "匹配内容",
"colNote": "备注",
"colEnabled": "启用",
"builtin": "内置",
"group": {
"exact": "全等匹配",
"fuzzy": "模糊匹配",
"cidr": "网段"
},
"editor": {
"editTitle": "编辑资产拦截规则",
"newTitle": "新建资产拦截规则",
"desc": "命中此规则的目标资产会被全局拦截",
"matchType": "匹配类型",
"matchContent": "匹配内容",
"hintCidr": "CIDR 网段,形如 192.168.0.0/16",
"hintFuzzy": "模糊匹配:目标包含此内容即命中",
"hintExact": "全等匹配:目标需与此内容完全一致",
"note": "备注(可选)",
"notePlaceholder": "说明这条规则的用途",
"enableRule": "启用此规则",
"cancel": "取消",
"saving": "保存中…",
"save": "保存"
},
"toast": {
"loadFailed": "加载资产拦截规则失败",
"ruleUpdated": "规则已更新",
"ruleCreated": "规则已创建",
"ruleDeleted": "规则已删除",
"contentRequired": "匹配内容不能为空",
"cidrInvalid": "CIDR 格式无效,形如 192.168.0.0/16"
},
"deleteConfirm": "确定删除资产拦截规则「{pattern}」?"
},
"scopeEditor": {
"defaultLabel": "资产范围",
"defaultDescription": "每行一条,自动识别域名、IP、CIDR、ICP 备案和企业关键词。",
"placeholder": "example.com\n203.0.113.10\n198.51.100.0/24\n京ICP备12345678号-1\n企业名称关键词",
"kind": {
"domain": "域名",
"ip": "IP",
"cidr": "CIDR",
"icp": "ICP",
"keyword": "关键词"
},
"recognized": "已识别 {count} 条",
"lineError": "第 {line} 行:{error}",
"moreErrors": "另有 {count} 行错误",
"error": {
"empty": "请填写范围值",
"tooLong": "最多 {max} 个字符",
"domainSpace": "请输入不含空格的有效域名或 URL",
"domainInvalid": "请输入有效域名或 URL",
"ipInvalid": "请输入有效 IP",
"cidrInvalid": "请输入 CIDR 网段",
"cidrPrefixV4": "IPv4 网段前缀需为 /16 至 /32",
"cidrPrefixV6": "IPv6 网段前缀需为 /32 至 /128"
}
},
"approvalFocus": {
"mismatch": "审批来源与当前会话不一致",
"noSource": "无法定位原始执行",
"notFoundDeleted": "会话中未找到对应工具调用,记录可能已删除",
"notFound": "会话中未找到对应工具调用",
"locateFail": "无法定位:{error}",
"expanded": "已展开审批 #{id} 对应的工具调用",
"loading": "正在加载审批 #{id} 所在的对话位置…",
"retry": "重试定位",
"cancel": "取消定位"
},
"todoPopover": {
"parseError": "解析 Todo 失败",
"none": "本会话暂无 Todo",
"view": "查看最近 Todo",
"recent": "最近 Todo",
"loadingSuffix": " · 加载中…",
"empty": "(空)"
},
"agentsPage": {
"title": "Agent",
"subtitle": "内置 Agent 的提示词/配置,以及自定义会话 Agent 的创建与管理",
"listTitle": "Agent 清单",
"countTotal": "共 {count} 个",
"empty": "(暂无 Agent)",
"new": "新建 Agent",
"badgeBuiltin": "内置",
"badgeCustom": "自定义",
"badgeDisabled": "已停用",
"noDescription": "(无描述)",
"toolLabel": "工具",
"deleteTitle": "删除 Agent「{name}」?",
"deleteDesc": "将一并删除它的提示词、变量、可见性与工具绑定。此操作不可撤销。",
"cancel": "取消",
"delete": "删除",
"deleted": "已删除 Agent「{name}」",
"deleteFailed": "删除失败:{msg}",
"created": "已创建 Agent「{name}」",
"createFailed": "创建失败:{msg}",
"createTitle": "新建自定义 Agent",
"createDesc": "创建一个会话型助手。key 用于内部标识,创建后不可更改;名称与描述用于识别。",
"keyPlaceholder": "如 research_helper",
"keyError": "小写字母开头,仅含小写字母/数字/下划线",
"nameLabel": "名称",
"namePlaceholder": "如 研究助手",
"descLabel": "描述",
"descPlaceholder": "一句话说明这个 Agent 是干什么的",
"create": "创建",
"editorDescFallback": "提示词、配置、可见资源与工具绑定"
},
"logsPage": {
"title": "系统日志",
"subtitle": "后端实时日志流(planner / worker / 数据库 / 流量 …)",
"filterPlaceholder": "过滤(文本 / tag)…",
"all": "全部",
"paused": "已暂停",
"pause": "暂停",
"clear": "清空",
"totalLines": "{count} 行",
"warnCount": "{count} 警告",
"errorCount": "{count} 错误",
"loading": "加载中…",
"loadOlder": "加载更早日志",
"empty": "暂无日志。"
},
"mcpPage": {
"subtitle": "外部 MCP 工具服务器 · 按 Agent 授权可见",
"addCard": "添加 MCP",
"enableAria": "启用",
"deleteAria": "删除",
"toolCount": "{count} 个工具",
"noTools": "尚未发现工具",
"visibilityLabel": "可见性(按 Agent 授权)",
"addServer": "添加 MCP 服务器",
"sheetDesc": "stdio(本地起进程)或 http(远程 Streamable HTTP)",
"tabConfig": "配置",
"tabTools": "工具列表",
"save": "保存",
"add": "添加",
"transport": "传输方式",
"transportStdio": "stdio(本地)",
"transportHttp": "http(远程)",
"transportSse": "sse(旧版)",
"nameLabel": "名称",
"cmdLabel": "命令",
"argsLabel": "参数(空格分隔)",
"urlLabel": "远程 URL",
"insecureLabel": "跳过 TLS 证书校验(自签证书)",
"headersLabel": "请求头(每行 KEY=VALUE,如 Authorization=Bearer xxx)",
"envLabel": "环境变量(每行 KEY=VALUE)",
"refresh": "刷新",
"loading": "加载中…",
"toolsEmpty": "尚未发现工具,点击刷新重新获取。",
"errNoName": "请填写名称",
"errNoCmd": "请填写命令",
"errNoUrl": "请填写远程 URL",
"saved": "已保存",
"added": "已添加 MCP 服务器",
"saveFailed": "保存失败:{msg}",
"foundTools": "发现 {count} 个工具",
"refreshFailed": "刷新失败:{msg}",
"removed": "已删除:{name}",
"deleteFailed": "删除失败:{msg}",
"actionFailed": "操作失败:{msg}",
"visibilityGranted": "授予「{name}」可见",
"visibilityRevoked": "取消「{name}」可见"
},
"toolsPage": {
"title": "工具",
"subtitle": "系统工具的描述/绑定,以及自定义工具(command/script/http)",
"searchPlaceholder": "搜索工具名、描述、Agent…",
"tabSystem": "系统工具",
"tabCustom": "自定义工具",
"systemMatched": "{shown} / {total} 个匹配,点击卡片编辑描述、参数默认值与 Agent 绑定",
"systemTotal": "共 {total} 个,点击卡片编辑描述、参数默认值与 Agent 绑定",
"systemNoMatch": "没有匹配的系统工具",
"systemEmpty": "(暂无系统工具,等待后端 seed)",
"customMatched": "shell/command/script/http,{shown} / {total} 个匹配,点击卡片编辑",
"customTotal": "shell(bash 声明) / command(命令) / script(Python) / http(API),共 {total} 个,点击卡片编辑",
"newCustom": "新建自定义工具",
"customNoMatch": "没有匹配的自定义工具",
"customEmpty": "(暂无自定义工具,点击右上角「新建自定义工具」)",
"editSheetDesc": "编辑描述、参数默认值与 Agent 绑定",
"badgeSystem": "系统",
"badgeCustom": "自定义",
"badgeDisabled": "已停用",
"callsTitle": "累计调用 {count} 次",
"callsBadge": "调用 {count}",
"noDescription": "(无描述)",
"noBoundAgents": "(未绑定 Agent)",
"trafficGatedNote": "该工具依赖流量捕获。请先在「系统配置」开启流量捕获,才能绑定给 Agent 并启用。",
"bindAgentLabel": "绑定 Agent(决定该工具给哪些 Agent)",
"bindAgentShort": "绑定 Agent",
"noAgents": "(无 Agent)",
"enabled": "启用",
"descLabel": "工具描述(发送给模型)",
"paramsLabel": "参数(名称 / 类型 / 必填只读;描述与默认值可改)",
"noParams": "(无参数)",
"required": "必填",
"itemsSubfield": "items 子字段",
"rowDesc": "描述",
"rowDefault": "默认值",
"defaultEmptyHint": "(空=无默认)",
"scalarOnly": "仅标量支持",
"save": "保存",
"resetDefault": "恢复默认",
"savedTool": "已保存工具「{key}」",
"saveFailed": "保存失败:{msg}",
"resetDone": "已恢复「{key}」为代码默认",
"resetFailed": "恢复失败:{msg}",
"keyError": "key 需小写字母开头,仅含小写字母/数字/下划线",
"schemaError": "参数 JSON Schema 格式错误",
"headersError": "headers JSON 格式错误",
"httpSchemaRequired": "http 工具必须提供参数 JSON Schema(含 properties,不能留空)",
"createdCustom": "已创建自定义工具",
"saved": "已保存",
"deleted": "已删除",
"deleteFailed": "删除失败:{msg}",
"testParamsError": "测试参数 JSON 格式错误",
"editCustom": "编辑 {key}",
"customSheetDesc": "shell=bash 环境声明(只需名称+描述,告知模型可用 bash 调用);command/script/http 需写执行规格。",
"keyPlaceholder": "如 nmap_scan",
"descLabelShort": "描述(发给模型)",
"kindLabel": "类型",
"kindShell": "shell(bash 环境声明)",
"kindCommand": "command(shell 命令模板)",
"kindScript": "script(Python 脚本)",
"kindHttp": "http(API 请求)",
"shellHint": "适合 nmap、sqlmap、ffuf 等出名工具——模型已知用法,只需声明\"可在 bash 中调用\"即可。名称+描述会追加到 Bash 工具描述里。",
"cmdTemplateLabel": "命令模板(占位符 '{param}',如 nmap -p '{ports}' '{target}')",
"scriptLabel": "Python 正文(参数走 stdin JSON / os.environ[\"TOOL_X\"])",
"httpUrlLabel": "URL(可含 '{param}')",
"httpHeadersLabel": "Headers(JSON,可含 '{param}')",
"httpBodyLabel": "Body(可含 '{param}')",
"proxyLabel": "代理 URL(空=直连)",
"useRecordingProxy": "走记录代理",
"timeoutLabel": "超时(ms,空=默认)",
"schemaLabel": "参数 JSON Schema",
"schemaHttpSuffix": "(http 工具必填,需含 properties)",
"schemaDefaultSuffix": "(留空 = 自动给 '{args}' 薄壳)",
"deferredLabel": "deferred(大量不常用工具才开)",
"testSectionLabel": "测试运行(用当前表单,不会保存)",
"testParamsPlaceholder": "示例参数 JSON,如 '{\"target\":\"example.com\"}'",
"testRun": "测试运行",
"testRunning": "运行中…",
"noOutput": "(无输出)",
"create": "创建",
"delete": "删除"
},
"skillsPage": {
"title": "Skill",
"subtitle": "技能库 · agentskills.io 规范 · 按 Agent 授权可见",
"missingCount": "{count} 个未命中调用",
"missingHint": "Agent 点名调用、但技能库里不存在的 skill。按被点名次数排序。",
"newSkill": "新建 Skill",
"uploadTitle": "上传包含 SKILL.md 的 .zip 压缩包",
"uploading": "上传中…",
"uploadZip": "上传压缩包",
"emptySidebar": "暂无 Skill,点击「新建」开始",
"callCountTitle": "被调用 {count} 次 · 最近 {last}",
"newFile": "新建文件",
"newFolder": "新建文件夹",
"deleteFolder": "删除文件夹",
"deleteFile": "删除文件",
"deleteSkillAction": "删除 Skill",
"emptyOverview": "暂无 Skill,点击左侧「新建」或「上传压缩包」开始",
"statTotal": "Skill 总数",
"statTotalHint": "{count} 个被调用过",
"statCalls": "累计调用",
"statUnused": "未使用",
"statUnusedHintSome": "从未被任何 agent 加载",
"statUnusedHintNone": "全部用过",
"statMissing": "未命中调用",
"statMissingHintSome": "{count} 个不存在的 skill",
"statMissingHintNone": "无",
"overviewTitle": "技能库总览",
"overviewDesc": "选择左侧的 Skill 查看详情与调用记录,或从这里快速了解整体使用情况。",
"ranking": "调用排行",
"rankingEmpty": "还没有任何 Skill 调用记录。",
"callsCount": "{count} 次",
"recent": "最近调用",
"recentEmpty": "暂无记录。",
"unusedSkills": "未使用的 Skill",
"allUsed": "所有 Skill 都被调用过。",
"neverCalled": "从未调用",
"installed": "已安装 Skill:{name}({files} 个文件)",
"overwriteConfirm": "{msg}\n\n是否覆盖同名 Skill?",
"uploadFailed": "上传失败:{msg}",
"readFileFailed": "读取文件失败",
"folderCreated": "已创建文件夹:{path}",
"fileCreated": "已创建文件:{path}",
"createFailed": "创建失败:{msg}",
"deleted": "已删除:{path}",
"deleteFailed": "删除失败:{msg}",
"skillDeleted": "已删除 Skill:{name}",
"saved": "已保存",
"saveFailed": "保存失败:{msg}",
"mcpLinked": "关联「{name}」",
"mcpUnlinked": "取消关联「{name}」",
"opFailed": "操作失败:{msg}",
"visGranted": "授予「{name}」可见",
"visRevoked": "取消「{name}」可见",
"needName": "请填写 name",
"needDesc": "description 为必填项",
"skillCreated": "已创建 Skill",
"callStats": "调用统计",
"totalCalls": "总调用次数",
"coveredTasks": "覆盖任务数",
"callers": "调用方:",
"loadingCalls": "加载调用明细…",
"recentCallsCount": "最近 {count} 次调用",
"taskRef": "任务 #{id}",
"sessionRef": "对话会话",
"noCallsYet": "还没有调用记录。",
"linkedMcp": "关联 MCP",
"linkedMcpHint": "(加载 Skill 时才披露/解锁其工具)",
"noMcp": "暂无 MCP,可在「MCP」页添加。",
"visibility": "可见性(按 Agent 授权)",
"noAgents": "(暂无 Agent)",
"saving": "保存中…",
"save": "保存",
"loading": "加载中…",
"deleteSkillQ": "删除 Skill「{name}」?",
"deleteFolderQ": "删除文件夹「{path}」?",
"deleteFileQ": "删除文件「{path}」?",
"deleteSkillDesc": "将删除该 Skill 的全部文件、MCP 关联与可见性配置。此操作不可撤销。",
"deleteFolderDesc": "将一并删除该文件夹下的所有文件。此操作不可撤销。",
"irreversible": "此操作不可撤销。",
"cancel": "取消",
"deleting": "删除中…",
"delete": "删除",
"tabBasic": "基本信息",
"tabVisibility": "可见性",
"nameLabel": "名称",
"nameHint": "小写字母 / 数字 / 连字符,1–64 字符",
"descLabel": "描述",
"descPlaceholder": "这个 skill 做什么、何时使用。",
"compatPlaceholder": "需要 sqlmap、python3",
"bodyLabel": "正文",
"bodyHint": "(留空自动生成骨架)",
"bodyPlaceholder": "## 执行方法\n\n1. 先探测错误\n2. 区分盲注类型\n\n脚本放 scripts/ 目录。",
"mcpSheetHint": "加载 Skill 时才披露并解锁所选 MCP 的工具。",
"visSheetHint": "选中的 Agent 创建后即可见此 Skill。",
"creating": "创建中…",
"create": "创建"
},
"changePasswordDialog": {
"title": "修改密码",
"description": "用户名固定为 ARTEX。需先输入当前密码验证;修改后已签发的登录 token 仍有效直至过期。",
"currentPassword": "当前密码",
"newPassword": "新密码",
"confirmPassword": "确认新密码",
"cancel": "取消",
"submit": "确认修改",
"submitting": "修改中…",
"errorRequired": "请填写当前密码和新密码",
"errorMismatch": "两次输入的新密码不一致",
"success": "密码已修改",
"failed": "修改失败:{msg}"
},
"commands": {
"title": "工具执行",
"searchPlaceholder": "搜索工具 / 参数...",
"taskIdPlaceholder": "任务 ID",
"stats": "统计",
"colTime": "时间",
"colTask": "任务",
"colTool": "工具",
"colInput": "输入",
"colStatus": "状态",
"empty": "暂无工具执行记录",
"failed": "失败",
"success": "成功",
"statsTitle": "工具调用统计",
"statsDescFiltered": "当前筛选条件下的全部记录",
"statsDescAll": "全部工具执行记录",
"unitTools": "个工具",
"unitCalls": "次调用",
"statsEmpty": "暂无统计数据",
"detailTitle": "工具执行详情",
"inputLabel": "输入 Input",
"outputLabel": "输出 Output",
"emptyOutput": "(空)"
},
"workspace": {
"crumbRoot": "工作空间",
"newFolder": "新建文件夹",
"upload": "上传",
"refresh": "刷新",
"colName": "名称",
"colSize": "大小",
"colMtime": "修改时间",
"colActions": "操作",
"loading": "加载中…",
"empty": "空目录",
"download": "下载",
"delete": "删除",
"downloadFile": "下载文件",
"tooLarge": "文件过大,不支持在线预览/编辑。",
"binary": "二进制文件,不支持在线预览/编辑。",
"dirty": "未保存的修改",
"synced": "已同步",
"save": "保存",
"saving": "保存中…",
"folderNamePlaceholder": "文件夹名称",
"cancel": "取消",
"create": "创建",
"confirmDelete": "{kind, select, dir {确认删除 目录 “{name}”?(含其下所有内容)} other {确认删除 文件 “{name}”?}}",
"readDirFailed": "读取目录失败:{msg}",
"openFileFailed": "打开文件失败:{msg}",
"saved": "已保存",
"saveFailed": "保存失败:{msg}",
"deleted": "已删除",
"deleteFailed": "删除失败:{msg}",
"uploaded": "已上传 {n} 个文件",
"uploadFailed": "上传失败:{msg}",
"folderCreated": "已创建目录",
"createFailed": "创建失败:{msg}",
"downloadFailed": "下载失败:{msg}"
},
"llmRecords": {
"title": "LLM 录制",
"searchPlaceholder": "搜索 Session ID...",
"taskPlaceholder": "选择任务…",
"taskEmpty": "暂无任务记录",
"deleteTaskConversations": "删除任务对话",
"selectTaskFirst": "先在上方选择任务",
"recording": "录制中",
"recordingOff": "已关闭",
"colTime": "时间",
"colTask": "任务",
"colLatency": "延迟",
"colStatus": "状态",
"empty": "暂无 LLM 调用记录",
"taskBadge": "任务 #{id}",
"rawTooltipHas": "查看与 provider 实际收发的 HTTP 原文",
"rawTooltipNone": "该记录录制于此功能上线前,无原文",
"raw": "原文",
"loading": "加载…",
"emptyContent": "(空)",
"copyCopied": "已复制",
"copyTooltip": "复制内容",
"deleteTitle": "删除任务「{taskId}」的全部 LLM 对话?",
"deleteDesc": "将永久删除该任务的所有 LLM 调用记录(含请求/响应原文),此操作不可撤销。",
"cancel": "取消",
"deleting": "删除中…",
"confirmDelete": "确认删除"
},
"assetSync": {
"title": "资产同步",
"subtitle": "从外部数据源同步资产入库",
"notReady": "数据源就绪后即可选择项目 / 任务进行同步。",
"statusLoadFailed": "读取数据源状态失败:{msg}",
"dsTitle": "数据源状态",
"refresh": "刷新",
"created": "已创建 ScopeSentry 数据源,请填写地址与密钥",
"createFailed": "创建失败:{msg}",
"urlRequired": "请填写 MCP 地址",
"savedEnabled": "已保存并启用数据源",
"savedPending": "已保存(尚未满足启用条件)",
"saveFailed": "保存失败:{msg}",
"notCreatedDesc": "尚未创建 ScopeSentry 数据源。创建后会新增一个占位 MCP(地址/密钥为空、未启用)。",
"createDs": "创建数据源",
"notConfigured": "数据源已创建但未配置,请填写 MCP 地址与 API Key 后启用。",
"notEnabled": "数据源已配置但未启用,保存后将自动启用。",
"mcpUrl": "MCP 地址",
"mcpUrlPlaceholder": "http://<主机>:8082/mcp",
"apiKeyLabel": "API Key(X-API-Key,留空保留原值)",
"saveEnable": "保存并启用",
"toolsFound": "已发现 {count} 个工具",
"badgeChecking": "检测中…",
"badgeNotCreated": "未创建",
"badgeNotConfigured": "未配置",
"badgeNotEnabled": "未启用",
"badgeConnected": "已连接",
"badgeUnreachable": "不可达",
"listLoadFailed": "加载列表失败:{msg}",
"selectAtLeastOneTarget": "请至少选择一个{dim, select, project {项目} other {任务}}",
"selectAtLeastOneType": "请至少选择一种资产类型",
"syncDone": "同步完成,共入库 {total} 条资产",
"syncFailed": "同步失败:{msg}",
"loading": "加载中…",
"noData": "无数据",
"workbenchTitle": "选择数据同步",
"dimProject": "项目维度",
"dimTask": "任务维度",
"syncAssetsLabel": "同步资产:",
"createCompany": "按项目建立企业并写入资产范围",
"searchProject": "搜索项目名",
"searchTask": "搜索任务名",
"selectedCount": "已选 {count}",
"syncSelected": "同步选中",
"colProjectName": "项目名",
"colTaskName": "任务名",
"colTag": "标签",
"colAssetCount": "资产数",
"colStatus": "状态",
"colTime": "时间",
"pageNo": "第 {page} 页",
"assetType": {
"subdomain": "子域名",
"service": "服务",
"app": "App",
"ip": "IP"
},
"resultCompanies": "新建/更新企业:{names}",
"moreErrors": "…共 {count} 条错误"
},
"assets": {
"title": "资产",
"totalAssets": "共 {count} 项资产",
"deleteSelected": "删除已选 ({count})",
"refresh": "刷新",
"companyTable": {
"name": "企业",
"count": "资产数",
"scope": "资产范围",
"actions": "操作"
},
"noScope": "未设置范围",
"deleteCompanyAria": "删除企业 {name}",
"companyEmpty": "还没有企业。点击右上角「新增企业」并填写资产范围,系统会自动认领命中的资产。",
"tab": {
"company": "企业",
"rootDomain": "根域名",
"ip": "IP",
"subdomain": "子域名",
"app": "应用",
"service": "服务",
"endpoint": "接口"
},
"col": {
"domain": "域名",
"icp": "ICP 备案",
"ownerCompany": "归属企业",
"cSegment": "C段",
"boundDomains": "绑定域名",
"openPorts": "开放端口",
"rootDomain": "根域名",
"recordType": "解析类型",
"recordValue": "解析值",
"appName": "应用名",
"category": "分类",
"service": "服务",
"port": "端口",
"statusCode": "状态码",
"pageTitle": "标题",
"fingerprint": "指纹",
"auth": "认证",
"method": "方法",
"fullUrl": "完整地址",
"params": "参数"
},
"unassigned": "未归属",
"deleteAssetAria": "删除资产 {target}",
"authFallback": "认证",
"emptyData": "暂无数据。",
"loading": "加载中…",
"deleteDialog": {
"title": "确认删除",
"body": "将永久删除 {count} 条资产记录,此操作不可撤销。",
"confirm": "确认删除"
},
"deleteCompanyDialog": {
"title": "删除企业 · {name}",
"body": "此操作将永久删除该企业及其资产范围配置,不可撤销。",
"alsoDeleteAssets": "同时删除该企业下的所有资产",
"alsoDeleteHint": "不勾选则保留资产,仅取消归属关系"
},
"cancel": "取消",
"saving": "保存中…",
"save": "保存",
"deleting": "删除中…",
"fixInvalidScope": "请修正无效的资产范围",
"saveFailed": "保存失败:{msg}",
"reasonLabel": "归属依据(可选)",
"reasonPlaceholder": "如 证书 / whois / ASN 佐证",
"toast": {
"deleted": "已删除 {count} 条资产",
"deleteFailed": "删除失败:{msg}",
"companyDeletedWithAssets": "已删除企业,同时删除 {count} 条资产",
"companyDeleted": "已删除企业"
},
"companyDialog": {
"addButton": "新增企业",
"title": "新增企业",
"description": "配置企业及其资产范围。关键词只作为 Agent 提示,不会自动归属资产。",
"nameLabel": "企业名称",
"namePlaceholder": "如 Acme Corp(名称唯一)",
"nameRequired": "请填写企业名称",
"createdWithInvalid": "已创建企业,添加 {added} 条范围;{invalid} 行无效",
"created": "已创建企业,添加 {added} 条范围",
"exists": "企业已存在,请换个名称"
},
"editScope": {
"button": "编辑",
"title": "编辑资产范围 · {name}",
"description": "编辑后将替换全部现有范围。ICP 精确匹配资产,企业关键词仅作为 Agent 提示。",
"overwrite": "覆盖保存",
"savedWithInvalid": "已保存;{invalid} 行无效",
"updated": "范围已更新,共 {added} 条"
},
"appendScope": {
"button": "追加",
"title": "追加资产范围 · {name}",
"description": "新范围会追加到现有范围。ICP 精确匹配资产,企业关键词仅作为 Agent 提示。",
"scopeRequired": "请填写要追加的范围",
"appended": "已追加 {added} 条范围"
}
},
"tasksPage": {
"tab": {
"current": "当前任务",
"archived": "已归档"
},
"filter": {
"searchPlaceholder": "搜索描述 / 目标 / ID",
"clearSearch": "清除搜索",
"statusPlaceholder": "状态",
"allStatus": "全部状态",
"categoryPlaceholder": "任务分类",
"allCategory": "全部分类",
"uncategorized": "未分类"
},
"count": "{shown}/{total} 条",
"selected": "已选 {count} 个",
"clearSelection": "取消选择",
"batchPause": "暂停 {count}",
"batchResume": "继续 {count}",
"batchArchive": "归档 {count}",
"empty": {
"noTasks": "暂无任务,点击右上角「新建任务」开始。",
"noMatch": "没有匹配的任务。"
},
"table": {
"selectAllAria": "选择本页全部任务",
"name": "名称",
"description": "描述",
"target": "目标",
"status": "状态",
"goalProgress": "目标进度",
"findings": "漏洞",
"findingsSub": "严/高/中/低",
"findingsTitle": "严重 / 高 / 中 / 低",
"runningWorker": "运行中 Worker",
"created": "创建时间",
"duration": "运行时长",
"actions": "操作"
},
"delete": {
"detailAssets": "删除资产 {n} 条",
"detailAssetsDetached": "解除共享资产关联 {n} 条",
"detailTraffic": "删除流量 {n} 条",
"detailFiles": "删除任务文件",
"detailFindings": "删除漏洞 {n} 条",
"detailLlm": "删除 LLM 请求/响应记录 {n} 条",
"summary": "任务已删除({details})",
"summaryBare": "任务已删除"
},
"toast": {
"deleteWarn": "{summary};部分外部数据清理未完成:{warning}",
"deleteFailed": "删除失败:{msg}",
"paused": "任务 #{id} 已暂停",
"resumed": "{queued, select, yes {任务 #{id} 已继续,已进入队列} other {任务 #{id} 已继续}}",
"controlFailed": "{action, select, pause {暂停失败:{msg}} other {继续失败:{msg}}}",
"renamed": "任务 #{id} 已重命名",
"renameFailed": "重命名失败:{msg}",
"pinned": "任务 #{id} 已置顶",
"unpinned": "任务 #{id} 已取消置顶",
"pinFailed": "{pinned, select, yes {取消置顶失败:{msg}} other {置顶失败:{msg}}}",
"archiveQueued": "任务 #{id} 已进入归档队列",
"archiveFailed": "归档失败:{msg}"
},
"row": {
"selectAria": "选择任务 {id}",
"pinnedBadge": "已置顶",
"unnamed": "未命名",
"viewDetail": "查看任务详情",
"tokenTitle": "输入 {input} · 缓存 {cache} · 输出 {output}",
"tokenIn": "入",
"tokenCache": "缓",
"tokenOut": "出",
"nameAria": "任务 #{id} 名称",
"renameAria": "重命名任务 #{id}",
"renameTitle": "重命名",
"pinAria": "置顶任务 #{id}",
"unpinAria": "取消置顶任务 #{id}",
"pinTitle": "置顶",
"unpinTitle": "取消置顶",
"resumeTask": "继续任务",
"pauseTask": "暂停任务",
"controlDisabled": "该状态不可暂停或继续",
"archiveAria": "归档任务 #{id}"
},
"archiveBlock": {
"queued": "排队中的任务必须先暂停",
"running": "运行中或尚未结束的任务必须先暂停",
"inherited": "任务被未归档任务 #{id} 直接继承,请先归档依赖任务"
},
"archiveDialog": {
"title": "{count, plural, =1 {归档任务} other {归档 #个任务}}",
"description": "归档会停止任务调度,将图谱、LLM 历史、文件以及独占资产和流量压缩到本地冷存储。归档完成后可从「已归档」中还原。",
"cancel": "取消",
"confirm": "确认归档"
},
"batch": {
"deleted": "已删除 {count} 个任务",
"deletedDetails": "已删除 {count} 个任务({details})",
"deleteWarn": "{summary};部分外部数据清理未完成:{warnings}",
"deleteFailed": "{count} 个任务删除失败:{items}{truncated, select, yes { 等} other {}}",
"archiveQueued": "已将 {count} 个任务加入归档队列",
"archiveFailed": "{count} 个任务无法归档:{items}",
"controlLimit": "一次最多控制 100 个任务",
"paused": "已暂停 {count} 个任务",
"resumed": "{queued, select, yes {已继续 {count} 个任务,部分任务已进入队列} other {已继续 {count} 个任务}}",
"controlFailed": "{count} 个任务操作失败:{items}{truncated, select, yes { 等} other {}}",
"controlBatchFailed": "{action, select, pause {批量暂停失败:{msg}} other {批量继续失败:{msg}}}",
"moveLimit": "一次最多修改 100 个任务的分类",
"moved": "已将 {count} 个任务移动到「{target}」",
"moveFailed": "{count} 个任务未能移动:{items}{truncated, select, yes { 等} other {}}",
"moveCategoryFailed": "修改分类失败:{msg}",
"statusChanged": "状态已变化",
"taskGone": "任务已不存在"
},
"upload": {
"marker": "【上传文件(绝对路径)】",
"hint": "worker 可用 Read/Bash 按路径打开:",
"failed": "上传失败:{msg}"
},
"taskRef": "任务 #{id}",
"sort": {
"default": "按{label}倒序排序",
"active": "{label}当前{direction, select, asc {正序} other {倒序}},点击切换排序方向"
},
"concurrency": {
"aria": "任务并发设置",
"trigger": "并发设置",
"title": "任务并发限制",
"description": "限制同时运行的任务数量。达到上限后,新任务会按创建顺序排队并在空位出现时自动启动。",
"enableLabel": "开启任务并发限制",
"defaultOff": "默认关闭",
"limitLabel": "同时运行上限",
"cancel": "取消",
"save": "保存",
"enabledToast": "已开启并发限制:最多同时运行 {count} 个任务",
"disabledToast": "已关闭任务并发限制",
"saveFailed": "保存失败:{msg}"
},
"archive": {
"state": {
"archive_queued": "等待归档",
"archiving": "归档中",
"archive_failed": "归档失败",
"ready": "可还原",
"restore_queued": "等待还原",
"restoring": "还原中",
"restore_failed": "还原失败",
"delete_queued": "等待删除",
"deleting": "删除中",
"delete_failed": "删除失败"
},
"compression": "{size} · 节省 {percent}%",
"deleteTitle": "永久删除 {count} 个任务归档?",
"deleteDescription": "将永久删除约 {size} 的归档包及 {rows} 条关联数据快照。此操作不可恢复。",
"deleteCancel": "取消",
"deleteConfirm": "永久删除",
"loadFailed": "读取归档列表失败:{msg}",
"restoreQueued": "已将 {count} 个任务加入还原队列",
"restoreRejected": "{count} 个任务无法还原",
"restoreFailed": "还原失败:{msg}",
"deleteQueued": "已将 {count} 个归档加入永久删除队列",
"deleteRejected": "{count} 个归档无法删除",
"permDeleteFailed": "永久删除失败:{msg}",
"retryQueued": "已重新加入处理队列",
"retryFailed": "重试失败:{msg}",
"searchPlaceholder": "搜索任务名称 / 描述 / ID",
"statePlaceholder": "处理状态",
"allStates": "全部状态",
"total": "{count} 个归档",
"selected": "已选 {count} 个",
"restore": "还原 {count}",
"deleteSelected": "永久删除 {count}",
"selectPageAria": "选择当前页归档",
"colTask": "任务",
"colOriginalStatus": "原状态",
"colCategory": "分类",
"colArchivedAt": "归档时间",
"colCompressedSize": "压缩大小",
"colDataCount": "数据量",
"colProcessingState": "处理状态",
"colActions": "操作",
"emptyTitle": "暂无任务归档",
"emptyDescription": "暂停或终态任务可从当前任务列表归档。",
"selectRowAria": "选择任务归档 #{id}",
"uncategorized": "未分类",
"originalSizeTitle": "压缩前 {size}",
"retryAria": "重试归档操作",
"retryTitle": "重试",
"restoreAria": "还原任务",
"restoreTitle": "还原任务",
"permDeleteAria": "永久删除归档",
"permDeleteTitle": "永久删除"
},
"deleteOptions": {
"legend": "同时清理关联数据",
"allLabel": "全部删除",
"allDescription": "选中下方全部关联数据,包括资产、流量、文件、漏洞和 LLM 请求/响应记录。",
"assetsLabel": "关联资产",
"assetsDescription": "删除仅属于该任务的资产;共享资产只解除当前任务关联。",
"trafficLabel": "关联流量",
"trafficDescription": "按关联资产的精确主机名删除;仍被其他任务引用的共享主机流量会保留。",
"filesLabel": "任务文件",
"filesDescription": "删除该任务工作目录中的上传文件、命令输出和其他产物。",
"findingsLabel": "关联漏洞",
"findingsDescription": "永久删除该任务产生的独立漏洞记录与漏洞报告。",
"llmLabel": "LLM 请求/响应记录",
"llmDescription": "永久删除该任务录制的 LLM 请求、响应、Token 与错误详情。"
},
"deleteDialog": {
"aria": "删除任务",
"title": "确认删除任务 #{id}?",
"descSuffix": "的执行记录与探索链路将被永久删除。",
"descNoTask": "该任务的执行记录与探索链路将被永久删除。",
"cancel": "取消",
"deleting": "删除中",
"delete": "删除"
},
"move": {
"trigger": "修改分类",
"title": "修改所选 {count} 个任务的分类",
"description": "目标分类对所选任务统一生效;选「未分类」会把它们移出当前分类。",
"targetLabel": "目标分类",
"selectPlaceholder": "选择分类",
"uncategorized": "未分类",
"noCategory": "还没有任何分类,先用「分类管理」创建一个。",
"cancel": "取消",
"move": "移动"
},
"bulkDelete": {
"trigger": "删除所选 {count}",
"title": "确认删除所选 {count} 个任务?",
"description": "这些任务的执行记录与探索链路将被永久删除,下方清理选项对所选任务统一生效。",
"more": "…等 {count} 个",
"cancel": "取消",
"progress": "删除中 {done}/{total}",
"confirm": "删除 {count} 个任务"
},
"sourcePicker": {
"atLimit": "最多关联 {max} 个任务",
"placeholder": "搜索任务 ID、描述或目标",
"empty": "没有匹配的任务",
"unknownTask": "未知任务"
},
"categoryPicker": {
"unknown": "未知分类",
"placeholder": "搜索分类,或输入新名称后回车创建",
"create": "创建分类「{name}」",
"hint": "输入名称以搜索或创建分类",
"created": "已创建分类「{name}」",
"createFailed": "创建分类失败:{msg}"
},
"companyPicker": {
"scopeDomain": "域名",
"scopeKeyword": "关键词",
"scopeNone": "未配置资产范围",
"scopeEntry": "{label}:{value}",
"scopeMore": "另 {count} 条",
"placeholder": "搜索企业名称或资产范围",
"empty": "没有匹配的企业",
"fallback": "企业 #{id}",
"assetCount": "{count} 个资产"
},
"categoryManage": {
"trigger": "分类管理",
"title": "任务分类管理",
"description": "分类用于任务筛选与归档;修改不会影响任务执行,删除后任务会移入未分类。",
"newCategory": "新建分类",
"uncategorized": "未分类",
"nameLabel": "分类名称",
"namePlaceholder": "例如:外网评估",
"renameHint": "当前有 {count} 个任务使用该分类。重命名后会同步更新任务列表。",
"createHint": "创建后可在新建任务和任务列表筛选中使用。",
"categoryTasks": "分类任务",
"uncategorizedTasks": "未分类任务",
"categoryTaskCount": "该分类包含 {count} 个任务。",
"uncategorizedTaskCount": "当前有 {count} 个任务尚未分类。",
"emptyCategoryTitle": "该分类暂无任务",
"emptyUncategorizedTitle": "暂无未分类任务",
"emptyDescription": "此处将在任务归入后显示内容。",
"dropHint": "松开以移动",
"taskCount": "{count} 个任务",
"dragAria": "拖动任务 #{id}",
"dragTitle": "拖动任务",
"deleteCategory": "删除分类",
"close": "关闭",
"saving": "保存中",
"create": "创建分类",
"save": "保存修改",
"created": "分类已创建",
"updated": "分类已更新",
"createFailed": "创建分类失败:{msg}",
"updateFailed": "更新分类失败:{msg}",
"deleted": "分类已删除,关联任务已移入未分类",
"deleteFailed": "删除分类失败:{msg}",
"targetMissing": "目标分类不存在,请刷新后重试",
"moved": "任务 #{id} 已移至「{name}」",
"moveFailed": "移动任务失败:{msg}",
"deleteTitle": "删除分类「{name}」?",
"unnamedCategory": "未命名分类",
"deleteDescription": "分类删除后,其中 {count} 个任务会自动移入“未分类”,任务数据不会被删除。",
"deleteCancel": "取消",
"deleting": "删除中",
"deleteConfirm": "删除"
},
"create": {
"newTask": "新建任务",
"description": "填写测试对象与目标,高级参数可按需展开。",
"nameLabel": "名称(可选)",
"namePlaceholder": "给任务起个便于识别的名字,例如:Acme 官网渗透",
"categoryLabel": "任务分类",
"categoryHint": "可选,单个分类;用于任务列表筛选和归档,不影响 Agent 执行。",
"descLabel": "描述",
"descPlaceholder": "测试对象与背景,例如:测试 example.com 这个站点",
"uploadButton": "上传文件",
"uploadDone": "已上传 {count} 个文件,绝对路径已追加到描述末尾(可编辑)",
"uploadIdle": "可多选;上传后把文件的绝对路径追加到描述,供 worker 用 Read/Bash 打开",
"goalLabel": "目标",
"goalPlaceholder": "要达成什么,例如:拿下后台管理权限、获取服务器权限",
"sourceLabel": "关联任务",
"sourceHint": "最多关联 {max} 个任务。实时只读继承所选任务的持久化黑板、资产范围及相关流量;新任务写入独立黑板。",
"companyLabel": "关联企业资产范围",
"companyHint": "创建任务时会将所选企业当前已有资产加入“测试资产”,并将域名、IP、CIDR、ICP 和企业关键词提供给 Agent 作为范围上下文;不会自动生成意图或强制改变执行目标。",
"interceptLabel": "任务级资产拦截 / 允许规则(可选)",
"interceptHint": "仅对本任务生效,不写入全局规则。判定顺序:先按「拦截」规则(含全局)匹配,命中即禁止测试;未命中且本任务配置了「允许」规则时,须命中某条允许规则才放行,否则同样不允许测试;未配置任何允许规则则不启用白名单。",
"llmLabel": "LLM 配置链",
"llmHint": "按列表顺序故障转移;第一项为当前配置,仅在明确额度不足时切换下一项。",
"advanced": "高级设置",
"advancedSub": "超时 · 心跳 · 首个意图",
"timeoutLabel": "任务超时(分钟,可选)",
"timeoutPlaceholder": "留空 = 不限时",
"timeoutHint": "到点后触发优雅收尾(各 agent 写回 + planner 终局判定),任务进入 timeout 终态。",
"heartbeatLabel": "planner 心跳(分钟)",
"heartbeatPlaceholder": "默认 10",
"heartbeatHint": "距上轮规划结束/任务开始满该时长且期间无触发,自动触发一轮规划(兜底卡死 + 唤醒去监督在跑的 worker)。下限 10 分钟。",
"seedLabel": "直接下发首个意图(描述+目标)",
"seedHint": "开启后创建即把「描述+目标」作为一条意图下发,worker 免等首轮规划直接开跑,跑完再由 planner 接手判定/补充。CTF 等常一个 work 直接解决的场景推荐开启;关闭则走标准的先规划再执行。",
"coverageLabel": "资产覆盖度功能",
"coverageHint": "默认开启:计算并展示测试覆盖度、态势图显示测试进度、自动累积测试范围。关闭后不再计算/展示覆盖度,态势图仅展示资产不显示进度,agent 也不再获得范围类工具。关闭不影响「关联企业资产范围」。",
"cancel": "取消",
"creating": "创建中",
"create": "创建",
"validateRequired": "请填写描述与目标",
"validateSourceLimit": "最多关联 {max} 个来源任务",
"createdToast": "任务已创建",
"createFailed": "创建失败:{msg}"
}
},
"chatSendMode": {
"option": {
"enter": "Enter 发送,Shift+Enter 换行",
"ctrlEnter": "Ctrl+Enter 发送,Enter 换行"
}
},
"traffic": {
"title": "流量",
"subtitle": "全局录制代理 · 所有 HTTP 往来",
"recording": "录制中",
"stopped": "已停用",
"total": "共 条",
"picker": {
"selectTarget": "选择目标…",
"selectTargetCount": "选择目标({count})",
"batchByTarget": "按目标批量删除",
"sortAriaDesc": "数据包数量当前倒序,点击切换为正序",
"sortAriaAsc": "数据包数量当前正序,点击切换为倒序",
"sortTipDesc": "按数据包数量倒序",
"sortTipAsc": "按数据包数量正序",
"selectAll": "全选",
"deselectAll": "取消全选",
"empty": "暂无流量记录",
"deleteSelected": "删除选中({count})"
},
"toolbar": {
"hostHint": "先在左侧选择目标或输入 host",
"deleteHost": "删除该目标",
"purgeTitle": "删除全部流量并压实存储",
"purgeEmptyTitle": "当前没有流量记录",
"purgeAll": "清空全部",
"search": "搜索全部(URL / 方法 / 类型 / 状态码…)",
"method": "方法",
"allMethods": "全部方法"
},
"filters": {
"advanced": "高级筛选",
"body": "响应内容(正文关键词,≥3字)",
"path": "路径(如 /api/user/…)",
"status": "状态码",
"allStatus": "全部状态码",
"respLen": "响应长度",
"min": "最小(B)",
"max": "最大(B)",
"clear": "清除筛选"
},
"selection": {
"selected": "已选 {count} 条流量",
"linkToVuln": "关联到漏洞",
"clear": "清空选择"
},
"table": {
"selectPage": "选择本页流量",
"time": "时间",
"method": "方法",
"status": "状态码",
"respLen": "响应长度",
"selectRow": "选择流量 {id}",
"loading": "加载中…",
"empty": "没有匹配的流量。"
},
"detail": {
"request": "请求 Request",
"response": "响应 Response",
"loadingMsg": "加载报文…",
"loadFailed": "(无法加载报文)"
},
"toast": {
"purgedWithSpace": "已清空 {deleted} 条流量,释放 {space} 存储",
"purged": "已清空 {deleted} 条流量",
"purgeFailed": "清空失败:{msg}"
},
"dialog": {
"titlePurge": "清空全部流量记录?",
"titleSelected": "删除选中的 {count} 个目标的全部流量?",
"titleFilter": "删除该目标的全部流量?",
"descPurge": "将永久删除全部 条流量记录(含请求/响应原文),忽略当前的筛选条件,此操作不可撤销。已绑定到漏洞的流量证据保存在独立的证据库中,不受影响。
清空后会顺带压实存储,把索引占用的磁盘空间还给系统;这期间流量录制会短暂暂停。",
"descSelected": "将永久删除 个目标()的所有流量记录(含请求/响应原文),此操作不可撤销。",
"descFilter": "将永久删除 host 包含 的所有流量记录(含请求/响应原文),此操作不可撤销。",
"cancel": "取消",
"confirmPurge": "确认清空",
"confirmDelete": "确认删除",
"purging": "清空中…",
"deleting": "删除中…"
}
},
"chat": {
"live": "实时",
"custom": "自定义",
"emptyStart": "开始和「{agent}」对话",
"turnsTooltip": "agent 循环轮次(模型调用次数)",
"turnsCount": "{turns} 轮",
"loadEarlierHint": "向上滚动加载更早的消息…",
"running": "运行中",
"untitledConversation": "新对话",
"newConversation": "新建对话",
"filterByAgentAria": "按 Agent 筛选对话",
"allAgents": "全部 Agent",
"agentOption": "{name}({count})",
"selectAllAria": "选择当前筛选的全部对话",
"selectedCount": "已选 {count} 个",
"done": "完成",
"multiSelect": "多选",
"emptyAll": "暂无对话",
"emptyForAgent": "该 Agent 暂无对话",
"loadMore": "加载更多",
"deletedConversation": "对话已被删除",
"loadingConversation": "正在加载对应对话…",
"totalCount": "共 {count} 个",
"filteredCount": "{shown} / {total} 个",
"conversationNotFound": "对话不存在",
"bulkDeleted": "已删除 {count} 个对话",
"bulkDeleteFailDetail": "#{id}({error})",
"bulkDeleteFailed": "{count} 个对话删除失败:{details}",
"andMore": " 等",
"bulkDeleteError": "批量删除失败:{msg}",
"bulkDeleteTitle": "删除选中的 {count} 个对话?",
"bulkDeleteDesc": "对话消息和执行记录将一并删除,此操作不可撤销。",
"deleting": "删除中",
"confirmDelete": "确认删除",
"composer": {
"removeAttachment": "移除",
"uploadFile": "上传文件",
"sendSideQuestion": "发送旁路问题",
"stopRun": "停止本次运行",
"sendMessage": "发送消息",
"placeholder": "输入消息,@ 引用记录,Enter 发送",
"placeholderRunning": "Agent 正在回复,可输入 /btw 提问…"
},
"llmProfile": {
"default": "默认",
"defaultNamed": "默认({name})",
"change": "更换",
"select": "选择 LLM 配置"
},
"agentPicker": {
"placeholder": "选择 Agent…"
},
"item": {
"selectAria": "选择对话「{title}」",
"renameHint": "双击重命名",
"pinnedAria": "已置顶",
"runningTooltip": "Agent 正在运行",
"manageAria": "管理对话「{title}」",
"rename": "重命名",
"pin": "置顶",
"unpin": "取消置顶",
"delete": "删除",
"deleteTitle": "删除对话「{title}」?",
"deleteDesc": "此操作不可撤销。",
"cancel": "取消"
},
"group": {
"expand": "展开「{name}」",
"collapse": "收起「{name}」",
"activeInside": "当前对话在此分组内",
"runningAria": "{count} 个对话运行中"
},
"toast": {
"sendFailed": "发送失败:{msg}",
"uploadFailed": "上传失败:{msg}",
"switchLlmFailed": "切换 LLM 失败:{msg}",
"stopFailed": "停止失败:{msg}",
"deleteFailed": "删除失败:{msg}",
"renameFailed": "重命名失败:{msg}",
"pinFailed": "置顶失败:{msg}",
"unpinFailed": "取消置顶失败:{msg}"
}
},
"linkTraffic": {
"title": "关联到漏洞",
"description": "将所选 {count} 条流量保存为已有漏洞的证据。",
"findLabel": "查找漏洞",
"searchPlaceholder": "名称 / 摘要 / 漏洞类别",
"loading": "加载中…",
"empty": "没有匹配的漏洞,请先登记漏洞",
"prevPage": "上一页",
"nextPage": "下一页",
"pageInfo": "第 {page} 页 · 共 {total} 条",
"selected": "已选漏洞:#{id} {name}",
"selectPrompt": "请选择一个漏洞",
"cancel": "取消",
"saving": "保存中…",
"confirm": "确认关联",
"boundToast": "已关联 {count} 条流量到漏洞 #{id}"
},
"sortableHead": {
"sortBy": "按{label}倒序排序",
"active": "{label}当前{direction, select, asc {正序} other {倒序}},点击切换排序方向"
},
"sessions": {
"token": {
"inShort": "入",
"cacheShort": "缓",
"outShort": "出",
"inLong": "input",
"cacheLong": "cache",
"outLong": "output"
},
"item": {
"sourceTask": "来源 #{id}",
"deleted": "已删除",
"live": "实时",
"deleteTitle": "删除该意图(需填写原因,可选假删除/真删除)"
},
"asset": {
"current": "当前资产:{label}",
"sourceTask": "来源任务 #{id}",
"type": {
"app": "应用",
"endpoint": "接口",
"ip": "IP",
"root_domain": "根域名",
"service": "服务",
"subdomain": "子域名"
},
"source": {
"agent": "Agent 发现",
"anchor": "黑板锚点",
"api": "资产 API",
"company": "企业关联",
"legacy": "历史关联",
"manual": "人工加入",
"system": "系统关联",
"task": "任务初始化"
}
},
"toast": {
"uploadFailed": "上传失败:{msg}",
"createSessionFailed": "新建会话失败:{msg}",
"reasonRequired": "请填写删除原因",
"workerPaused": "Worker #{id} 已暂停",
"workerResumed": "Worker #{id} 已恢复,等待重新领取",
"hardDeleteExtra": "(含 {intents} 意图 / {facts} 事实 / {findings} 漏洞)",
"workerHardDeleted": "Worker #{id} 及其独占下游已彻底删除{extra}",
"workerSoftDeleted": "Worker #{id} 已删除(原因已记录,规划者将据此重新规划)",
"workerActionFailed": "Worker 操作失败:{msg}",
"loadFailed": "加载失败",
"sendFailed": "发送失败:{msg}",
"retryLater": "请稍后重试",
"messageTooLong": "消息不能超过 {max} 个字符",
"workerMessageSent": "消息已发送给 Worker #{id},已立即继续执行"
},
"role": {
"mainagent": "主 Agent",
"planner": "规划 Planner",
"worker": "Workers",
"system": "系统审计"
},
"title": {
"main": "主 Agent · 会话 #{n}",
"planner": "规划 Planner · 态势研判",
"system": "系统事件 · LLM 故障转移"
},
"resolution": {
"unnamed": "未命名配置",
"current": "当前配置:{label}",
"unavailable": "模型不可用",
"noConfig": "没有可用的 LLM 配置"
},
"list": {
"title": "会话列表"
},
"sse": {
"live": "实时",
"reconnecting": "重连中",
"titleLive": "实时连接正常",
"titleDown": "实时连接中断,正在自动重连(历史仍可见)"
},
"taskTotal": "任务总计",
"tokens": {
"full": "输入 {input} · 输出 {output} · 缓存读取 {cacheRead} · 缓存写入 {cacheWrite}"
},
"newMain": {
"title": "新建主 Agent 会话(清空上下文,任务状态保留)",
"aria": "新建主 Agent 会话",
"label": "新建"
},
"worker": {
"loadOlder": "加载更早的 Worker",
"noRunning": "暂无运行中的 Worker 会话。",
"execSession": "Worker 执行会话"
},
"header": {
"sourceTask": "来源任务 #{id} · 只读历史",
"interactive": "可交互",
"runDurationTitle": "运行时长(首步 → 末步)",
"olderHistoryTitle": "向上滚动加载更早历史",
"olderHistoryLabel": "↑ 更早历史"
},
"deletedNotice": {
"heading": "此意图已被用户删除",
"detail": "(已停止执行,规划者已收到通知;意图与产出保留,可在下方查看历史)",
"reason": "删除原因:"
},
"transcript": {
"loadingMore": "加载更早历史…",
"loadingActivity": "加载活动流…",
"loadError": "加载失败:{error}",
"retry": "重试",
"emptyMain": "还没有对话。在下方给主 Agent 发消息,引导探索方向或介入流程。",
"emptyWorker": "暂无活动记录。"
},
"composer": {
"attachmentRemove": "移除",
"mainAria": "给主 Agent 发消息",
"mainBusyPlaceholder": "主 Agent 正在运行,可输入 /btw 提问…",
"mainPlaceholder": "给主 Agent 发消息,@ 引用漏洞、资产等…",
"uploadTitle": "上传文件",
"sideQuestion": "发送旁路问题",
"stopTitle": "停止当前执行",
"sendTitle": "发送消息",
"workerAria": "给 Worker #{id} 发消息",
"workerPlaceholder": "给 Worker #{id} 发消息,@ 引用记录,调整执行方向…",
"pauseTitle": "暂停当前 Worker",
"resumeTitle": "不发消息,直接继续执行",
"resumeAria": "直接继续执行",
"resumeLabel": "直接继续"
},
"deleteDialog": {
"title": "删除 Worker #{id}?",
"hardDesc": "真删除会物理移除该意图,以及仅由它支撑的下游节点(级联到叶子,避免留下孤立数据);共享节点、目标和任务根事实会保留。此操作不可恢复。规划者会收到删除通知并据此重新规划。",
"softDesc": "假删除会把该意图置为「已删除」并记录删除原因,意图节点、执行记录、已登记的事实和漏洞都会保留。规划者会收到「该意图由用户删除 + 原因」并据此重新规划。",
"softLabel": "假删除",
"softHint": "保留数据,可追溯",
"hardLabel": "真删除",
"hardHint": "级联移除,不可恢复",
"reasonLabel": "删除原因(必填)",
"reasonPlaceholder": "说明为什么删除这条意图,例如:方向判断错误 / 目标已失效 / 与其他意图重复…",
"back": "返回",
"confirmHard": "彻底删除",
"confirmSoft": "确认删除"
},
"newSession": {
"title": "开启新会话?",
"desc": "当前会话会被归档(可随时切回),主 Agent 将以干净的上下文继续。任务的图谱、资产、目标不受影响。",
"cancel": "取消",
"starting": "开启中…",
"start": "开启新会话"
}
},
"settingsPage": {
"title": "系统配置",
"subtitle": "全局运行时开关",
"save": "保存",
"configured": "已配置",
"onSuffix": " · 已开启",
"offSuffix": " · 已关闭",
"toast": {
"saveFailed": "保存失败:{error}",
"workersInvalid": "并发数必须是大于 0 的整数",
"workersSaved": "已保存并发工作 agent 数(对之后启动的任务生效)",
"pythonSaved": "已保存 Python 解释器配置",
"bindingOn": "已开启 Agent 自动绑定流量",
"bindingOff": "已关闭 Agent 自动绑定流量",
"noaOn": "已开启 noa 上下文压缩(对之后启动的运行生效)",
"noaOff": "已关闭 noa 上下文压缩(恢复内置压缩)",
"webSearchSaved": "已保存网络搜索配置",
"braveKeySaved": "已保存 Brave API Key",
"tavilyKeySaved": "已保存 Tavily API Key",
"proxySaved": "已保存出口代理",
"proxyCleared": "已清除出口代理(改为直连)",
"globalProxySaved": "已保存全局代理",
"globalProxyCleared": "已清除全局代理(改为直连)",
"testSuccess": "搜索测试成功 · {backend} 返回 {count} 条结果",
"testFailed": "搜索测试失败:{error}",
"testUnknownError": "未知错误"
},
"trafficCapture": {
"title": "流量捕获",
"desc": "开启后,所有 Agent 的 HTTP 流量经记录代理全量落库,并向 Agent 注入 traffic_search / traffic_get 工具与代理配置(提示词含代理说明)。
关闭(默认)时不记录任何流量:Agent不会拿到代理配置与流量工具,提示词也不含代理相关内容。切换后会即时重建 Agent 生效。",
"on": "已开启 · 正在记录流量并注入代理",
"off": "已关闭 · 不记录、不注入代理"
},
"agentBinding": {
"title": "Agent 自动绑定流量",
"desc": "默认关闭。开启后,漏洞入库时触发的报告 Agent 会核对已有 HTTP 请求/响应,关联对应流量后再编写报告。查阅数据包及额外的工具调用会增加 Token 消耗。
TCP、未抓包或没有匹配流量时仍可正常上报。此开关不影响流量捕获、人工绑定及已保存证据的查看。 对下一轮 Agent 生效;关闭后会立即拒绝新的自动绑定。",
"on": "已开启 · 会增加 Token 消耗",
"off": "已关闭 · 可继续人工绑定"
},
"globalProxy": {
"title": "全局代理",
"desc": "所有 Agent 的目标流量经此代理出网(隐藏源 IP / 走跳板)。支持 http / https / socks5,可带 user:pass 认证。留空=直连。
开启流量捕获时,它作为记录代理的上游(流量仍全量落库,再经此代理出网);关闭捕获时,直接注入 Agent 的 bash / WebFetch 出网。与网络搜索代理、LLM 代理相互独立。
提示:socks5 在关闭捕获时依赖各命令行工具对 ALL_PROXY 的支持(curl 可用,部分工具可能忽略); 若主要用 socks5,建议开启流量捕获——此路径由 MITM 亲自拨号,工具无感知、稳定生效。",
"addrLabel": "代理地址",
"placeholder": "socks5://user:pass@host:1080 或 http://host:port(留空=直连)",
"configured": "已配置 · 所有目标流量经此代理出网",
"notConfigured": "未配置 · 目标流量直连出网"
},
"constraints": {
"title": "操作约束注入",
"desc": "开启后,把每个任务的操作约束(在任务总览「操作约束」里维护的 allow/deny 条目)拼进对应 Agent 的系统提示,用来框定探索边界(如「仅测当前端口」「禁止爆破」)。
可分别控制注入到 规划者(planner)与 执行者(worker) ;默认都开。切换即时生效(下一轮读取),无需重建 Agent。关闭后该 Agent 不再看到约束。",
"injectPlanner": "注入规划者(planner)",
"injectWorker": "注入执行者(worker)"
},
"experimental": {
"title": "实验功能",
"desc": "尚在验证中的机制,默认关闭。可能改变 Agent 行为或影响稳定性,请在了解影响后启用。
noa 上下文压缩:由模型主动压缩长对话历史(norma v0.4.0)。开启后平台接入的四类 Agent(规划者 / 执行者 / 主 Agent / 对话)改用 noa 接管上下文,取代内置压缩,压缩原文会归档到任务工作目录下便于回溯。切换即时生效(对之后启动的运行生效),无需重建 Agent;关闭后立即恢复内置压缩。",
"noaLabel": "noa 上下文压缩"
},
"webSearch": {
"title": "网络搜索",
"desc": "这是网络搜索的总开关 + 来源配置。开启后,才能在每个 Agent 的配置里单独选择是否启用 web_search(仅返回标题/链接/摘要,不抓取正文;抓取由 WebFetch 负责)。网络搜索不走记录代理,独立于流量捕获。
来源可选 DuckDuckGo(ddgs)(无需 Key)、Brave(免费版)(需填写 Brave API Key)、 Tavily(需填写 Tavily API Key)或 DeepSeek(复用当前 LLM 配置)。总开关关闭时,各 Agent 的网络搜索开关不可用。",
"on": "总开关已开启 · 可在各 Agent 配置里单独启用",
"off": "已关闭 · 各 Agent 无法启用网络搜索",
"sourceLabel": "搜索来源",
"sourcePlaceholder": "选择来源",
"sourceDdgs": "DuckDuckGo(ddgs · 免费无 Key)",
"sourceBrave": "Brave(免费版 · 需 Key)",
"sourceTavily": "Tavily(需 Key)",
"sourceDeepseek": "DeepSeek(官方)",
"deepseekTitle": "DeepSeek 官方联网搜索",
"deepseekDesc1": "该来源直接复用当前激活的 LLM 配置。因此它仅支持 DeepSeek 官方模型,且该配置必须使用 anthropic 协议——DeepSeek 的 OpenAI 协议端点不支持服务端搜索。切换 LLM 配置后此来源可能失效。",
"deepseekDesc2": "与其它来源不同,搜索由 DeepSeek 服务端执行:每次搜索会额外消耗一次模型调用(产生 Token 费用),搜索请求不经过上面的出口代理,也不计入流量留痕;返回结果只有标题和链接(无摘要),需要正文时由 WebFetch 抓取。",
"deepseekDesc3": "是否满足上述条件由你自行确认,系统不做拦截;可用下方「测试搜索」按钮实际跑一次来验证。",
"braveKeyLabel": "Brave Search API Key",
"braveKeyPlaceholderSet": "已配置(留空则不变)",
"braveKeyPlaceholderUnset": "输入 Brave API Key",
"braveNeedsKey": "已选择 Brave 但尚未配置 Key —— 在保存 Key 之前,搜索工具不会启用。",
"braveQuota": "免费版额度约 2,000 次/月。前往 https://brave.com/search/api/ 获取 Key。",
"tavilyKeyLabel": "Tavily Search API Key",
"tavilyKeyPlaceholderSet": "已配置(留空则不变)",
"tavilyKeyPlaceholderUnset": "输入 Tavily API Key(tvly-…)",
"tavilyNeedsKey": "已选择 Tavily 但尚未配置 Key —— 在保存 Key 之前,搜索工具不会启用。",
"tavilyGetKey": "前往 https://tavily.com 注册并获取 API Key。",
"proxyLabel": "出口代理(可选)",
"proxyPlaceholder": "http://host:port 或 socks5://host:port(留空=直连)",
"proxyHint": "独立出口代理,仅用于访问搜索端点(VPN/SOCKS 等)。与记录流量的 MITM 代理无关;网络不通时经此代理访问。",
"testHint": "用当前配置(来源 + 代理 + Key)实际搜索一次「test」,验证是否可用。",
"testRunning": "测试中…",
"testButton": "测试搜索"
},
"python": {
"title": "自定义脚本 · Python 解释器",
"desc": "自定义 script 类型工具用它跑 Python。开机会自动检测(python3 优先);此处可手填 venv / 特定版本的绝对路径,留空则运行时自动检测。",
"placeholder": "/usr/bin/python3(留空=自动检测)",
"detect": "重新检测"
},
"workers": {
"title": "工作并发 · Work Agent 数",
"desc": "每个任务并发运行的工作 agent 数量(默认 3)。数值越大并发探测越多、消耗也越高。修改后对之后启动的任务生效,正在运行的任务不受影响。"
},
"sendKey": {
"title": "会话输入框发送键位",
"desc": "对话页与任务详情的主 Agent 会话输入框共用此设置,选择后立即生效、无需保存。
该偏好只存在本浏览器,不随账号同步,换浏览器或清理站点数据后需重新设置。",
"label": "发送方式"
},
"update": {
"title": "版本与更新",
"desc": "从 GitHub 检查并安装新版本。更新会重启程序,正在运行的任务会被中断。",
"currentVersion": "当前版本",
"latestVersion": "最新版本",
"modeDocker": "Docker",
"modeStandalone": "独立程序",
"changelog": "更新日志",
"connectError": "无法连接 GitHub:{error} 可在上方配置全局代理后重试。",
"noAsset": "{latest} 没有提供 {os}/{arch} 的发布包(缺少 {asset}),无法自动更新。",
"willDownloadPrefix": "将下载 ",
"willDownloadSize": "({size})",
"willDownloadSuffix": ",校验 SHA256 并冒烟测试后才会替换,失败自动保留当前版本。",
"upToDate": "当前已是最新版本。",
"dockerNote": "Docker 下的更新只替换程序本身,不更新镜像里的 playwright / nmap 等工具链,且docker compose up -d重建容器后会退回镜像自带的版本。需要连镜像一起升级请执行docker compose pull artex && docker compose up -d artex。",
"restarting": "正在重启并应用新版本,请稍候(页面会自动刷新)…",
"check": "检查更新",
"updateToVersion": "更新到 {latest}",
"updateNow": "立即更新",
"rollback": "回滚到上一版本",
"footer": "一键更新依赖守护脚本重启程序。请通过 start.sh(Windows 为 start.bat)启动 ARTEX;直接运行 artex 本体时,程序退出后不会被自动拉起。",
"toast": {
"checkFailed": "检查更新失败:{error}",
"found": "发现新版本 {latest}",
"upToDate": "当前已是最新版本",
"updated": "已更新到 {version},正在重新加载页面",
"restartTimeout": "等待服务重启超时。请检查后端日志,或确认 artex 是通过 start.sh / start.bat 启动的。",
"updateFailed": "更新失败:{error}",
"startFailed": "启动更新失败:{error}",
"rollbackSwitched": "已切换到上一版本,正在重启…",
"rollbackFailed": "回滚失败:{error}",
"preparing": "准备中…"
},
"confirm": {
"title": "确定更新到 {latest}?",
"restart": "更新会重启程序,正在运行的任务会被中断。",
"docker": "注意:容器内更新只替换程序本身,不会更新镜像里的 playwright / nmap 等工具链;若新版本依赖新工具,请改用 docker compose pull。",
"rollback": "回滚到上一版本?\n\n程序会重启,正在运行的任务会被中断。\n注意:数据库结构不会回退,旧版本可能无法识别新版写入的数据。"
}
}
},
"llmPage": {
"page": {
"subtitle": "全 Agent 共享的格式 / 模型 / 限速配置。点击卡片编辑,星标为当前激活配置。",
"poolConfig": "轮询配置",
"enabled": "已开启",
"new": "新建",
"tab": {
"profiles": "模型配置",
"retry": "重试与退避"
},
"empty": "还没有模型配置,点击右上角「新建」创建第一个。",
"toast": {
"activated": "已激活:{name}",
"activateFailed": "激活失败:{msg}",
"cannotDeleteActive": "无法删除当前激活的配置",
"deleted": "已删除:{name}",
"deleteFailed": "删除失败:{msg}"
}
},
"card": {
"proxy": "代理 {proxy}",
"thinking": "思考 {effort}",
"thinkingOff": "关",
"excluded": "不参与轮询",
"priority": "优先级 {priority}",
"active": "已激活",
"activate": "设为激活",
"deleteAria": "删除配置"
},
"health": {
"noKey": {
"label": "未配置 Key",
"hint": "未填 API Key,无法调用"
},
"tripped": "已熔断",
"trippedCooldown": "已熔断 · {cooldown}",
"degraded": "异常 · 失败 {fails} 次",
"ok": "正常"
},
"pool": {
"title": "LLM 轮询 · 故障转移",
"desc": "开启后,未指定模型的 Agent 在当前配置不可用(余额不足 / Key 失效 / 限流 / 服务异常)时自动切到下一个配置。",
"enable": {
"label": "启用轮询",
"hint": "默认关闭。关闭时始终只用激活配置,失败即失败。",
"aria": "LLM 轮询开关"
},
"bindFallback": {
"label": "指定模型失败时也兜底",
"hint": "默认关闭:Agent 或任务指定了某个配置就只用它,失败即失败(不会悄悄换成别的模型)。开启后,指定的配置失败时也会回落到下面的轮询链。",
"aria": "绑定配置失败兜底开关"
},
"order": {
"label": "轮询顺序",
"tooFew": "当前只有 {n} 个可用配置,轮询不会生效——至少需要 2 个已填 API Key 且参与轮询的配置。"
},
"recoverAll": "全部恢复",
"badge": {
"active": "激活",
"excluded": "不参与轮询"
},
"cooldown": "冷却 {cooldown}",
"consecutiveFails": "连续失败 {fails} 次",
"recoverNow": {
"aria": "立即恢复",
"title": "立即恢复:清除熔断,下次调用重试该配置"
},
"priority": "优先级 {priority}",
"empty": "暂无配置",
"note": "激活配置恒为第 1 顺位,其余按优先级从高到低(在各配置里设置)。某个配置失败后进入冷却 (60s → 5min → 30min),冷却期内被跳过,恢复后自动切回。上下文窗口装不下当前请求的配置会被跳过。 指定了模型的 Agent 与任务默认不参与轮询。",
"toast": {
"enabled": "已开启 LLM 轮询",
"disabled": "已关闭 LLM 轮询",
"fallbackUpdated": "已更新兜底设置",
"setFailed": "设置失败:{msg}",
"recoveredOne": "已恢复该配置",
"recoveredAll": "已恢复全部配置",
"recoverFailed": "恢复失败:{msg}"
}
},
"profile": {
"titleNew": "新建模型配置",
"titleEdit": "编辑:{name}",
"activeBadge": "激活中",
"descNew": "新建后不会自动激活,请在卡片上「设为激活」以启用。",
"descEdit": "修改后点击保存;激活配置保存后对全部 Agent 立即生效。",
"name": {
"label": "名称",
"placeholder": "例如:OpenAI 生产"
},
"format": {
"label": "格式",
"placeholder": "选择格式"
},
"model": {
"label": "模型",
"loadTitle": "从 API 加载可用模型"
},
"baseUrl": {
"label": "Base URL(可选)"
},
"proxy": {
"label": "代理(可选)",
"hint": "仅 LLM 出站请求走此代理,支持 http/https/socks5,可带账号密码(如 socks5://user:pass@host:port,密码含特殊字符需 URL 编码);留空表示不使用代理(直连)。"
},
"sessionHeader": {
"label": "自定义会话头(可选)",
"placeholder": "如 x-session-id(留空=不发送)",
"hint": "填写头名后,每次请求都会带上这个 HTTP 头,头值自动填为 当前会话的 session id(chat 会话如 conv-12、worker 如 exp3-worker-i87)。用于按 session-id 头做提示缓存 / 粘性路由的网关;同一会话多轮稳定、不同会话互不相同。留空则不发送。"
},
"apiKey": {
"placeholderSet": "已设置({hint}),留空保持不变"
},
"rps": "每秒限速",
"rpm": "每分钟限速",
"cw": "上下文窗口(K)",
"rateHint": "限速 0 = 不限,全 Agent 共享。上下文窗口单位 K(千 token),0 = 默认 200K,上限 1000(即 1M);设太高会导致压缩不触发。",
"priority": {
"label": "轮询优先级",
"hint": "数字越大越先被选中;激活配置恒为第 1 顺位,与本值无关。相同优先级的配置会轮流打头,天然分摊额度。"
},
"exclude": {
"label": "不参与轮询",
"hint": "开启后不会被当作故障转移目标(仍可被 Agent / 任务显式指定使用)。 适合「只给某个 Agent 专用、不希望别人失败时烧掉」的昂贵配置。",
"aria": "不参与轮询"
},
"streaming": {
"label": "流式输出 · streaming",
"hint": "开启(默认)走流式 SSE,有运行中实时进度与实时 token 计数。 关闭则走真·非流式(stream:false,一次性返回完整响应)——可绕开部分网关糟糕的 SSE 实现(空帧 / 思考字段丢帧),代价是失去运行中的实时进度。",
"aria": "流式输出"
},
"maxTokens": {
"label": "输出上限 · max tokens",
"hint": "单次回复最多生成多少 token,随每次请求发出。0(默认)= 不发送该字段,由服务端默认值决定。 这与上面的「上下文窗口」是两回事:那是模型总容量,只在本地用来算压缩阈值。 设太小会让推理模型在思考阶段就被截断,一个字答案都出不来。"
},
"maxTokensField": {
"label": "上限字段名",
"opt": {
"default": "max_tokens(默认)"
}
},
"maxTokensFieldHint": {
"openai": "上限发哪个键。max_tokens 是默认,绝大多数兼容网关只认它;OpenAI 官方推理模型(o 系列 / GPT-5)反过来只认 max_completion_tokens,收到 max_tokens 会直接报 unsupported_parameter。",
"anthropic": "仅 openai 格式可选。Anthropic 的字段名固定为 max_tokens。",
"openai-responses": "仅 openai 格式可选。Responses API 的字段名固定为 max_output_tokens。"
},
"thinkingType": {
"label": "思考开关 · thinking.type",
"hint": "控制是否发送 thinking 字段。不发送=不带该字段(兼容 MiniMax 等不支持 的模型);关闭=发 disabled;开启=发 enabled。与下面的强度互相独立。",
"opt": {
"none": "不发送(默认)",
"disabled": "关闭",
"enabled": "开启"
}
},
"effort": {
"label": "思考强度 · reasoning_effort",
"hint": "独立的强度档位(OpenAI reasoning_effort / Anthropic output_config.effort)。 有些接口没有 thinking 字段、只靠强度即可激活思考,故可单独设置、不发送思考开关。",
"opt": {
"none": "不发送(默认)"
}
},
"testing": "测试中…",
"testConnection": "测试连接",
"create": "新建",
"save": "保存",
"toast": {
"modelsLoaded": "已加载 {n} 个模型",
"loadModelsFailed": "加载模型失败:{error}",
"noModels": "未获取到模型",
"loadModelsError": "加载模型出错:{msg}",
"testOk": "连接成功 · {latency}ms · {model}",
"testReply": "回复:{reply}",
"testFailed": "连接失败:{error}",
"unknown": "未知",
"testError": "测试出错:{msg}",
"nameModelRequired": "请填写名称与模型",
"created": "已新建:{name}(在卡片上「设为激活」以启用)",
"savedActive": "已保存,激活配置即时生效,无需重启",
"saved": "已保存",
"saveFailed": "保存失败:{msg}"
}
},
"retryLayer": {
"connect": {
"title": "建连重试",
"where": "SDK · 拿到 200 之前",
"trigger": "连不上或还没拿到 200:连接重置 / 读写超时 / DNS 失败等网络层错误,以及 HTTP 408、429、500、502、503、504。",
"skips": "其余状态码(400 / 401 / 403 / 404 / 413 / 422 等)都是确定性拒绝,重发也一样失败,直接上抛。",
"desc": "原样重发同一个请求。流一旦开始(已经拿到 200),中途断开就不归这层管了。",
"attemptsLabel": "重试次数",
"defInterval": "0.5s→1s→2s 指数(封顶 8s)",
"offHint": "-1 = 一次都不重试,失败立刻上抛"
},
"empty": {
"title": "空响应重试",
"where": "SDK · 仅 openai 格式",
"trigger": "HTTP 200、finish_reason 是正常 stop,但整条响应一个内容块都没有——网关空帧、思考字段丢帧、采样打嗝都会长这样。",
"skips": "因 max_tokens 截断而没有内容的不算(那要靠调高输出上限解决,重发只会再撞一次)。",
"desc": "重发整个 prompt,所以在长上下文上比较贵,次数不宜给大。",
"attemptsLabel": "重试次数",
"defInterval": "0.5s→1s→2s 指数(封顶 8s)",
"offHint": "-1 = 空响应直接原样交出"
},
"stream": {
"title": "同 provider 安全窗口重试",
"where": "本项目 · 未交付输出前",
"trigger": "流已经建立(拿到 200)之后才出问题:连接中途断开、供应商 overloaded、流内的 429 / 5xx 错误事件——且一个 token 都还没交给调用方。",
"skips": "额度耗尽(402 / insufficient_quota,交给轮询换配置)、上下文过长(413 / context length,交给压缩)、400 / 401 / 403 / 404 / 422 确定性拒绝,都不重试。",
"desc": "在同一个配置上重放同一个请求。因为还没交付任何输出,重放不会重复模型输出或工具执行。",
"attemptsLabel": "重试次数",
"defInterval": "0.5s→1s 指数(封顶 4s)",
"offHint": "-1 = 断流直接交给外层的意图重跑"
},
"breaker": {
"title": "轮询熔断",
"where": "本项目 · 进程级,全局一份",
"trigger": "瞬时失败(429、5xx、网络错误)连续累计到阈值时熔断;余额不足(402)、密钥失效(401 / 403)、模型不存在(404)这类确定性失败不看阈值,第一次就熔断。",
"skips": "成功一次即清零,所以偶尔抽风的配置不会被慢慢攒到熔断。",
"desc": "熔断后进入冷却,冷却期内轮询直接跳过这个配置。状态落库,重启不丢。",
"attemptsLabel": "连续失败几次熔断",
"defInterval": "1min→5min→30min 梯度",
"offHint": "-1 = 瞬时失败永不熔断(确定性失败仍然熔断)"
},
"intent": {
"title": "意图重跑",
"where": "本项目 · 进程级,全局一份",
"trigger": "前面几层都没兜住:worker 以 model_error 收场——内层重试全部用尽,或者流已经开始交付输出后才断掉(那时重放不安全,只能整条重来)。",
"skips": "额度耗尽已经由轮询换配置处理,不在这里重跑;任务被暂停 / 终止 / 进入收尾时立即让位,不占用退避时间。",
"desc": "整条意图从头再跑一遍。它是最外层,一次重跑意味着里面几层的次数会再乘一遍。",
"attemptsLabel": "重跑次数",
"defInterval": "固定 3s",
"offHint": "-1 = 不重跑,该意图直接判为 blocked"
}
},
"retry": {
"defaultN": "默认 {n}",
"triggerLabel": "触发",
"skipsLabel": "不走这层",
"intervalMs": "间隔 ms",
"defaultBackoff": "默认退避",
"fixed": "固定 {human}",
"emptyLine": "留空 = 用默认;{hint}。",
"override": {
"label": "重试覆盖",
"hint": "只对这个配置生效,覆盖「重试与退避」里的全局默认。每格留空 = 跟随全局;次数填 -1 = 关掉这层重试;间隔填了就用固定间隔取代指数退避。熔断与意图重跑是进程级的,只能在全局那页调。"
},
"loading": "读取重试策略…",
"intro": "一次模型调用的失败会依次经过五层重试,由内到外: 建连 → 空响应 → 同 provider 安全窗口 → 轮询熔断 → 意图重跑。内层用尽才轮到外层,所以次数是相乘的——把每层都拉满,一次抖动能烧掉几十次请求。 全部留空即当前默认值,与没有这页时的行为完全一致。前三层可以在每个模型配置里单独覆盖。",
"save": "保存",
"resetAll": "全部恢复默认",
"toast": {
"loadFailed": "读取重试策略失败:{msg}",
"saved": "已保存,即时生效(正在跑的这一轮调用仍用旧参数)",
"saveFailed": "保存失败:{msg}"
}
}
},
"notifyPage": {
"title": "通知推送",
"subtitle": "发现漏洞时推送到钉钉 / 飞书 / 企业微信等渠道 · 每个渠道可独立设推送时机与过滤规则",
"globalSwitch": "总开关",
"addChannel": "添加渠道",
"disabled": "已停用",
"aria": {
"globalSwitch": "推送总开关",
"enable": "启用",
"delete": "删除",
"statusChange": "接收状态变更"
},
"toast": {
"loadConfigFailed": "读取推送配置失败:{msg}",
"loadChannelsFailed": "读取渠道列表失败:{msg}",
"nameRequired": "请填写渠道名称",
"saved": "已保存",
"channelAdded": "已添加渠道",
"saveFailed": "保存失败:{msg}",
"testSent": "已发出测试消息({ms} ms),请到群里确认",
"testFailed": "测试失败:{msg}",
"deleted": "已删除:{name}",
"deleteFailed": "删除失败:{msg}",
"actionFailed": "操作失败:{msg}",
"globalOn": "推送已开启",
"globalOff": "推送已暂停"
},
"stats": {
"channels": "渠道",
"channelsHint": "启用 / 总数",
"sentToday": "今日送达",
"pending": "待发送",
"failed": "失败",
"backlog": "最久积压",
"backlogStuck": "推送可能卡住了"
},
"global": {
"title": "全局设置",
"baseUrl": "回链地址",
"baseUrlHint": "消息里「查看详情」按钮指向的地址。留空则不带按钮。",
"digest": "汇总周期(分钟)",
"digestHint": "仅对「汇总」模式的渠道生效。",
"save": "保存全局设置"
},
"tab": {
"channels": "渠道",
"deliveries": "投递记录"
},
"mode": {
"realtime": "实时",
"digest": "汇总"
},
"kind": {
"dingtalk": "钉钉",
"feishu": "飞书",
"wecom": "企业微信",
"webhook": "通用 Webhook",
"telegram": "Telegram",
"email": "邮件"
},
"sheet": {
"addTitle": "添加通知渠道",
"rateLimited": " · 默认限流 {rate} 条/分钟",
"rateUnlimited": " · 不限流",
"kindLabel": "渠道类型",
"kindLocked": "渠道类型不可修改——改了类型等于换一套凭据,请新建渠道。",
"nameLabel": "渠道名称",
"namePlaceholder": "应急响应群 / 日常播报群",
"noFields": "该渠道的表单尚未定义(前端缺 CHANNEL_FIELDS 条目),请补全后再试。",
"modeLabel": "推送时机",
"modeRealtime": "实时 · 每条漏洞单独发一条",
"modeDigest": "汇总 · 按周期合并成一条",
"modeHint": "想做「高危实时、其余汇总」就建两个渠道:一个实时 + 门槛高危,一个汇总 + 不限级别。",
"rateLabel": "限流(条/分钟)",
"ratePlaceholder": "0 = 不限",
"rateHint": "留空用渠道默认值;0 表示不限流。超限不会丢消息,只会推迟发送。",
"enable": "启用该渠道",
"save": "保存",
"add": "添加",
"sendTest": "发送测试消息"
},
"filter": {
"title": "过滤规则(留空即不过滤)",
"minSeverity": "最低级别",
"includeLabel": "只推这些漏洞类型",
"includePlaceholder": "SQL注入\n命令执行",
"includeHint": "每行一个关键词,大小写不敏感的子串匹配。留空=全部类型。",
"excludeLabel": "排除这些漏洞类型",
"excludePlaceholder": "信息泄露",
"excludeHint": "排除优先于包含:同时命中时会被排除。",
"taskIds": "限定任务 ID",
"assetIds": "限定资产 ID",
"idsHint": "任务/资产留空=不限;填写后要求与漏洞有交集。",
"onStatusChange": "漏洞处置状态变更时也推送(仅实时模式)"
},
"severityOpt": {
"all": "不限",
"low": "低危及以上",
"medium": "中危及以上",
"high": "高危及以上",
"critical": "仅严重"
},
"masked": {
"savedTail": "已保存(尾号 {tail}) · 填入新值即覆盖,清空则删除该项",
"saved": "已保存 · 填入新值即覆盖,清空则删除该项"
},
"summary": {
"includeCount": "类型含 {n} 词",
"excludeCount": "排除 {n} 词",
"taskCount": "{n} 个任务",
"assetCount": "{n} 个资产",
"statusChange": "含状态变更",
"all": "全部漏洞"
},
"field": {
"dingtalk": {
"webhook": {
"label": "Webhook 地址"
},
"secret": {
"label": "加签密钥",
"help": "机器人安全设置选「加签」时填写;选「自定义关键词」或未开启安全设置则留空"
}
},
"feishu": {
"webhook": {
"label": "Webhook 地址"
},
"secret": {
"label": "签名校验密钥",
"help": "机器人开启「签名校验」时填写,否则留空"
}
},
"wecom": {
"webhook": {
"label": "Webhook 地址"
}
},
"webhook": {
"url": {
"label": "目标 URL"
},
"method": {
"label": "请求方法",
"opt": {
"POST": "POST(带请求体)",
"PUT": "PUT(带请求体)",
"PATCH": "PATCH(带请求体)",
"GET": "GET(不带请求体)"
}
},
"headers": {
"label": "自定义请求头",
"help": "每行 KEY=VALUE,例如 Authorization=Bearer xxx"
},
"body_template": {
"label": "请求体模板",
"help": "留空用内置默认模板。变量:'{{.Title}} {{.Batch}} {{.Count}} {{.HomeURL}} {{.SentAt}}',以及 range .Items 下的 .Name/.VulnClass/.Severity/.Summary/.Assets/.DetailURL/.StatusLabel。插入字符串请用 '{{json .Xxx}}' 而不是 '{{.Xxx}}',否则标题里的引号会破坏 JSON。"
}
},
"telegram": {
"bot_token": {
"label": "Bot Token"
},
"chat_id": {
"label": "Chat ID"
},
"base_url": {
"label": "API 地址",
"help": "留空用官方地址;自建 Bot API 反代时填写"
}
},
"email": {
"host": {
"label": "SMTP 服务器"
},
"port": {
"label": "端口",
"help": "587 走 STARTTLS;465 请把「隐式 TLS」打开"
},
"username": {
"label": "账号"
},
"password": {
"label": "密码 / 授权码"
},
"from": {
"label": "发件人"
},
"to": {
"label": "收件人",
"help": "多个地址用逗号分隔"
},
"tls": {
"label": "隐式 TLS",
"help": "465 端口打开;587 保持关闭(会自动 STARTTLS)"
}
}
},
"delivery": {
"loadFailed": "读取投递记录失败:{msg}",
"requeued": "已重新入队",
"resendFailed": "重发失败:{msg}",
"allChannels": "全部渠道",
"allStates": "全部状态",
"refresh": "刷新",
"totalCount": "共 {total} 条",
"colTime": "时间",
"colFinding": "漏洞",
"colChannel": "渠道",
"colState": "状态",
"colAttempts": "尝试",
"colError": "错误",
"loading": "加载中…",
"empty": "暂无投递记录",
"noTitle": "(无标题)",
"statusChanged": "状态变更",
"resend": "重发"
},
"unit": {
"sec": "{n} 秒",
"min": "{n} 分钟",
"hour": "{n} 小时"
}
}
}