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
detections / detections (push) Waiting to run
web / web (push) Waiting to run
docs / links (push) Canceled after 0s
3695 lines
158 KiB
JSON
3695 lines
158 KiB
JSON
{
|
||
"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} 小时"
|
||
}
|
||
}
|
||
}
|