Files
dela 0335d572de
ci / go (push) Waiting to run
ci / go-db (agent) (push) Waiting to run
ci / go-db (config) (push) Waiting to run
ci / go-db (db) (push) Waiting to run
ci / go-db (evidence) (push) Waiting to run
ci / go-db (llmrec) (push) Waiting to run
ci / go-db (server) (push) Waiting to run
web / web (push) Waiting to run
docs / links (push) Canceled after 0s
detections / detections (push) Canceled after 0s
First Commit
2026-10-09 08:38:16 +08:00

3695 lines
158 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"auth": {
"login": {
"agree": "我已阅读并同意<terms>《使用须知》</terms>",
"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 因<b>超时</b>或<b>步数耗尽</b>被终止时,系统会注入这段「收尾提示词」跑一轮收尾:先把已识别但未落库的内容写回,再输出一句总结(避免烂尾)。留空则使用内置默认。",
"bodyLabel": "收尾提示词正文",
"custom": "自定义",
"useDefault": "使用内置默认",
"placeholder": "留空则使用内置默认收尾提示词",
"turnsLabel": "收尾轮数(收尾阶段自身最多跑几轮;0=用内置默认 {default} 轮)",
"save": "保存",
"resetDefault": "恢复默认",
"defaultLabel": "内置默认(只读,供参考)"
},
"taskTimeout": {
"desc": "<b>任务超时收尾</b>(与上面的 per-run 收尾是<b>两套</b>):当<b>整个任务</b>到达超时上限、即将结束时注入。与 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 自动运行:每次触发都<b>新建一个会话运行</b>(在「对话」页可见)。可多选触发条件;系统会把「本次为何触发 + 相关任务/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": "选择要监听的工具(至少一个);任务执行中这些工具每次<b>调用完成</b>都会触发。已选 {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 扩展语法(如 <code>(?i)</code>),浏览器无法预览,提交后由服务端验证",
"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": "在<scope>拦截范围</scope>内、且<norule>没有任何拦截规则命中</norule>的命令,才由模型做语义判断(放行 / 转人工 / 拦截)",
"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": "该工具依赖<b>流量捕获</b>。请先在「系统配置」开启流量捕获,才能绑定给 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": "用户名固定为 <b>ARTEX</b>。需先输入当前密码验证;修改后已签发的登录 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": "共 <n>{count}</n> 项资产",
"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": "将永久删除 <n>{count}</n> 条资产记录,此操作不可撤销。",
"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": "共 <n></n> 条",
"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": "将永久删除全部 <n></n> 条流量记录(含请求/响应原文),忽略当前的筛选条件,此操作不可撤销。已绑定到漏洞的流量证据保存在独立的证据库中,不受影响。<br></br><muted>清空后会顺带压实存储,把索引占用的磁盘空间还给系统;这期间流量录制会短暂暂停。</muted>",
"descSelected": "将永久删除 <n></n> 个目标(<hosts></hosts>)的所有流量记录(含请求/响应原文),此操作不可撤销。",
"descFilter": "将永久删除 host 包含 <host></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": "<s>真删除</s>会物理移除该意图,以及<s>仅由它支撑</s>的下游节点(级联到叶子,避免留下孤立数据);共享节点、目标和任务根事实会保留。<s>此操作不可恢复。</s>规划者会收到删除通知并据此重新规划。",
"softDesc": "<s>假删除</s>会把该意图置为「已删除」并记录删除原因,意图节点、执行记录、已登记的事实和漏洞<s>都会保留</s>。规划者会收到「该意图由用户删除 + 原因」并据此重新规划。",
"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 工具与代理配置(提示词含代理说明)。<br></br>关闭(默认)时不记录任何流量:Agent<b>不会</b>拿到代理配置与流量工具,提示词也<b>不含</b>代理相关内容。切换后会即时重建 Agent 生效。",
"on": "已开启 · 正在记录流量并注入代理",
"off": "已关闭 · 不记录、不注入代理"
},
"agentBinding": {
"title": "Agent 自动绑定流量",
"desc": "默认关闭。开启后,漏洞入库时触发的报告 Agent 会核对已有 HTTP 请求/响应,关联对应流量后再编写报告。<b>查阅数据包及额外的工具调用会增加 Token 消耗。</b><br></br>TCP、未抓包或没有匹配流量时仍可正常上报。此开关不影响流量捕获、人工绑定及已保存证据的查看。 对下一轮 Agent 生效;关闭后会立即拒绝新的自动绑定。",
"on": "已开启 · 会增加 Token 消耗",
"off": "已关闭 · 可继续人工绑定"
},
"globalProxy": {
"title": "全局代理",
"desc": "所有 Agent 的<b>目标流量</b>经此代理出网(隐藏源 IP / 走跳板)。支持 <b>http / https / socks5</b>,可带 <code>user:pass</code> 认证。留空=直连。<br></br>开启<b>流量捕获</b>时,它作为记录代理的<b>上游</b>(流量仍全量落库,再经此代理出网);关闭捕获时,直接注入 Agent 的 bash / WebFetch 出网。与网络搜索代理、LLM 代理相互独立。<br></br><b>提示</b>:socks5 在<b>关闭捕获</b>时依赖各命令行工具对 <code>ALL_PROXY</code> 的支持(curl 可用,部分工具可能忽略); 若主要用 socks5,建议开启流量捕获——此路径由 MITM 亲自拨号,工具无感知、稳定生效。",
"addrLabel": "代理地址",
"placeholder": "socks5://user:pass@host:1080 或 http://host:port(留空=直连)",
"configured": "已配置 · 所有目标流量经此代理出网",
"notConfigured": "未配置 · 目标流量直连出网"
},
"constraints": {
"title": "操作约束注入",
"desc": "开启后,把每个任务的<b>操作约束</b>(在任务总览「操作约束」里维护的 allow/deny 条目)拼进对应 Agent 的系统提示,用来框定探索边界(如「仅测当前端口」「禁止爆破」)。<br></br>可分别控制注入到 <b>规划者(planner)</b>与 <b>执行者(worker)</b> ;默认都开。切换即时生效(下一轮读取),无需重建 Agent。关闭后该 Agent 不再看到约束。",
"injectPlanner": "注入规划者(planner)",
"injectWorker": "注入执行者(worker)"
},
"experimental": {
"title": "实验功能",
"desc": "尚在验证中的机制,默认关闭。可能改变 Agent 行为或影响稳定性,请在了解影响后启用。<br></br><b>noa 上下文压缩</b>:由模型主动压缩长对话历史(norma v0.4.0)。开启后平台接入的四类 Agent(<b>规划者 / 执行者 / 主 Agent / 对话</b>)改用 noa 接管上下文,取代内置压缩,压缩原文会归档到任务工作目录下便于回溯。切换即时生效(对之后启动的运行生效),无需重建 Agent;关闭后立即恢复内置压缩。",
"noaLabel": "noa 上下文压缩"
},
"webSearch": {
"title": "网络搜索",
"desc": "这是网络搜索的<b>总开关 + 来源配置</b>。开启后,才能在<b>每个 Agent 的配置</b>里单独选择是否启用 <b>web_search</b>(仅返回标题/链接/摘要,不抓取正文;抓取由 WebFetch 负责)。网络搜索<b>不走</b>记录代理,独立于流量捕获。<br></br>来源可选 <b>DuckDuckGo(ddgs)</b>(无需 Key)、<b>Brave(免费版)</b>(需填写 Brave API Key)、 <b>Tavily</b>(需填写 Tavily API Key)或 <b>DeepSeek</b>(复用当前 LLM 配置)。总开关关闭时,各 Agent 的网络搜索开关不可用。",
"on": "总开关已开启 · 可在各 Agent 配置里单独启用",
"off": "已关闭 · 各 Agent 无法启用网络搜索",
"sourceLabel": "搜索来源",
"sourcePlaceholder": "选择来源",
"sourceDdgs": "DuckDuckGo(ddgs · 免费无 Key)",
"sourceBrave": "Brave(免费版 · 需 Key)",
"sourceTavily": "Tavily(需 Key)",
"sourceDeepseek": "DeepSeek(官方)",
"deepseekTitle": "DeepSeek 官方联网搜索",
"deepseekDesc1": "该来源直接复用<b>当前激活的 LLM 配置</b>。因此它<b>仅支持 DeepSeek 官方模型</b>,且该配置<b>必须使用 anthropic 协议</b>——DeepSeek 的 OpenAI 协议端点不支持服务端搜索。切换 LLM 配置后此来源可能失效。",
"deepseekDesc2": "与其它来源不同,搜索由 <b>DeepSeek 服务端执行</b>:每次搜索会额外消耗一次模型调用(产生 Token 费用),搜索请求<b>不经过上面的出口代理</b>,也<b>不计入流量留痕</b>;返回结果<b>只有标题和链接</b>(无摘要),需要正文时由 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": "自定义 <b>script</b> 类型工具用它跑 Python。开机会自动检测(python3 优先);此处可手填 venv / 特定版本的绝对路径,留空则运行时自动检测。",
"placeholder": "/usr/bin/python3(留空=自动检测)",
"detect": "重新检测"
},
"workers": {
"title": "工作并发 · Work Agent 数",
"desc": "每个任务并发运行的工作 agent 数量(默认 3)。数值越大并发探测越多、消耗也越高。修改后<b>对之后启动的任务生效</b>,正在运行的任务不受影响。"
},
"sendKey": {
"title": "会话输入框发送键位",
"desc": "对话页与任务详情的主 Agent 会话输入框共用此设置,选择后立即生效、无需保存。<br></br>该偏好<b>只存在本浏览器</b>,不随账号同步,换浏览器或清理站点数据后需重新设置。",
"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 等工具链,且<code>docker compose up -d</code>重建容器后会退回镜像自带的版本。需要连镜像一起升级请执行<code>docker compose pull artex && docker compose up -d artex</code>。",
"restarting": "正在重启并应用新版本,请稍候(页面会自动刷新)…",
"check": "检查更新",
"updateToVersion": "更新到 {latest}",
"updateNow": "立即更新",
"rollback": "回滚到上一版本",
"footer": "一键更新依赖守护脚本重启程序。请通过 <code>start.sh</code>(Windows 为 <code>start.bat</code>)启动 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": "开启后,<b>未指定模型</b>的 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 头,头值自动填为 <b>当前会话的 session id</b>(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": "一次模型调用的失败会依次经过五层重试,由内到外:<chain> 建连 → 空响应 → 同 provider 安全窗口 → 轮询熔断 → 意图重跑</chain>。内层用尽才轮到外层,所以次数是<emph>相乘</emph>的——把每层都拉满,一次抖动能烧掉几十次请求。 全部留空即当前默认值,与没有这页时的行为完全一致。前三层可以在每个模型配置里单独覆盖。",
"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} 小时"
}
}
}