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

清空后会顺带压实存储,把索引占用的磁盘空间还给系统;这期间流量录制会短暂暂停。", "descSelected": "将永久删除 个目标()的所有流量记录(含请求/响应原文),此操作不可撤销。", "descFilter": "将永久删除 host 包含 的所有流量记录(含请求/响应原文),此操作不可撤销。", "cancel": "取消", "confirmPurge": "确认清空", "confirmDelete": "确认删除", "purging": "清空中…", "deleting": "删除中…" } }, "chat": { "live": "实时", "custom": "自定义", "emptyStart": "开始和「{agent}」对话", "turnsTooltip": "agent 循环轮次(模型调用次数)", "turnsCount": "{turns} 轮", "loadEarlierHint": "向上滚动加载更早的消息…", "running": "运行中", "untitledConversation": "新对话", "newConversation": "新建对话", "filterByAgentAria": "按 Agent 筛选对话", "allAgents": "全部 Agent", "agentOption": "{name}({count})", "selectAllAria": "选择当前筛选的全部对话", "selectedCount": "已选 {count} 个", "done": "完成", "multiSelect": "多选", "emptyAll": "暂无对话", "emptyForAgent": "该 Agent 暂无对话", "loadMore": "加载更多", "deletedConversation": "对话已被删除", "loadingConversation": "正在加载对应对话…", "totalCount": "共 {count} 个", "filteredCount": "{shown} / {total} 个", "conversationNotFound": "对话不存在", "bulkDeleted": "已删除 {count} 个对话", "bulkDeleteFailDetail": "#{id}({error})", "bulkDeleteFailed": "{count} 个对话删除失败:{details}", "andMore": " 等", "bulkDeleteError": "批量删除失败:{msg}", "bulkDeleteTitle": "删除选中的 {count} 个对话?", "bulkDeleteDesc": "对话消息和执行记录将一并删除,此操作不可撤销。", "deleting": "删除中", "confirmDelete": "确认删除", "composer": { "removeAttachment": "移除", "uploadFile": "上传文件", "sendSideQuestion": "发送旁路问题", "stopRun": "停止本次运行", "sendMessage": "发送消息", "placeholder": "输入消息,@ 引用记录,Enter 发送", "placeholderRunning": "Agent 正在回复,可输入 /btw 提问…" }, "llmProfile": { "default": "默认", "defaultNamed": "默认({name})", "change": "更换", "select": "选择 LLM 配置" }, "agentPicker": { "placeholder": "选择 Agent…" }, "item": { "selectAria": "选择对话「{title}」", "renameHint": "双击重命名", "pinnedAria": "已置顶", "runningTooltip": "Agent 正在运行", "manageAria": "管理对话「{title}」", "rename": "重命名", "pin": "置顶", "unpin": "取消置顶", "delete": "删除", "deleteTitle": "删除对话「{title}」?", "deleteDesc": "此操作不可撤销。", "cancel": "取消" }, "group": { "expand": "展开「{name}」", "collapse": "收起「{name}」", "activeInside": "当前对话在此分组内", "runningAria": "{count} 个对话运行中" }, "toast": { "sendFailed": "发送失败:{msg}", "uploadFailed": "上传失败:{msg}", "switchLlmFailed": "切换 LLM 失败:{msg}", "stopFailed": "停止失败:{msg}", "deleteFailed": "删除失败:{msg}", "renameFailed": "重命名失败:{msg}", "pinFailed": "置顶失败:{msg}", "unpinFailed": "取消置顶失败:{msg}" } }, "linkTraffic": { "title": "关联到漏洞", "description": "将所选 {count} 条流量保存为已有漏洞的证据。", "findLabel": "查找漏洞", "searchPlaceholder": "名称 / 摘要 / 漏洞类别", "loading": "加载中…", "empty": "没有匹配的漏洞,请先登记漏洞", "prevPage": "上一页", "nextPage": "下一页", "pageInfo": "第 {page} 页 · 共 {total} 条", "selected": "已选漏洞:#{id} {name}", "selectPrompt": "请选择一个漏洞", "cancel": "取消", "saving": "保存中…", "confirm": "确认关联", "boundToast": "已关联 {count} 条流量到漏洞 #{id}" }, "sortableHead": { "sortBy": "按{label}倒序排序", "active": "{label}当前{direction, select, asc {正序} other {倒序}},点击切换排序方向" }, "sessions": { "token": { "inShort": "入", "cacheShort": "缓", "outShort": "出", "inLong": "input", "cacheLong": "cache", "outLong": "output" }, "item": { "sourceTask": "来源 #{id}", "deleted": "已删除", "live": "实时", "deleteTitle": "删除该意图(需填写原因,可选假删除/真删除)" }, "asset": { "current": "当前资产:{label}", "sourceTask": "来源任务 #{id}", "type": { "app": "应用", "endpoint": "接口", "ip": "IP", "root_domain": "根域名", "service": "服务", "subdomain": "子域名" }, "source": { "agent": "Agent 发现", "anchor": "黑板锚点", "api": "资产 API", "company": "企业关联", "legacy": "历史关联", "manual": "人工加入", "system": "系统关联", "task": "任务初始化" } }, "toast": { "uploadFailed": "上传失败:{msg}", "createSessionFailed": "新建会话失败:{msg}", "reasonRequired": "请填写删除原因", "workerPaused": "Worker #{id} 已暂停", "workerResumed": "Worker #{id} 已恢复,等待重新领取", "hardDeleteExtra": "(含 {intents} 意图 / {facts} 事实 / {findings} 漏洞)", "workerHardDeleted": "Worker #{id} 及其独占下游已彻底删除{extra}", "workerSoftDeleted": "Worker #{id} 已删除(原因已记录,规划者将据此重新规划)", "workerActionFailed": "Worker 操作失败:{msg}", "loadFailed": "加载失败", "sendFailed": "发送失败:{msg}", "retryLater": "请稍后重试", "messageTooLong": "消息不能超过 {max} 个字符", "workerMessageSent": "消息已发送给 Worker #{id},已立即继续执行" }, "role": { "mainagent": "主 Agent", "planner": "规划 Planner", "worker": "Workers", "system": "系统审计" }, "title": { "main": "主 Agent · 会话 #{n}", "planner": "规划 Planner · 态势研判", "system": "系统事件 · LLM 故障转移" }, "resolution": { "unnamed": "未命名配置", "current": "当前配置:{label}", "unavailable": "模型不可用", "noConfig": "没有可用的 LLM 配置" }, "list": { "title": "会话列表" }, "sse": { "live": "实时", "reconnecting": "重连中", "titleLive": "实时连接正常", "titleDown": "实时连接中断,正在自动重连(历史仍可见)" }, "taskTotal": "任务总计", "tokens": { "full": "输入 {input} · 输出 {output} · 缓存读取 {cacheRead} · 缓存写入 {cacheWrite}" }, "newMain": { "title": "新建主 Agent 会话(清空上下文,任务状态保留)", "aria": "新建主 Agent 会话", "label": "新建" }, "worker": { "loadOlder": "加载更早的 Worker", "noRunning": "暂无运行中的 Worker 会话。", "execSession": "Worker 执行会话" }, "header": { "sourceTask": "来源任务 #{id} · 只读历史", "interactive": "可交互", "runDurationTitle": "运行时长(首步 → 末步)", "olderHistoryTitle": "向上滚动加载更早历史", "olderHistoryLabel": "↑ 更早历史" }, "deletedNotice": { "heading": "此意图已被用户删除", "detail": "(已停止执行,规划者已收到通知;意图与产出保留,可在下方查看历史)", "reason": "删除原因:" }, "transcript": { "loadingMore": "加载更早历史…", "loadingActivity": "加载活动流…", "loadError": "加载失败:{error}", "retry": "重试", "emptyMain": "还没有对话。在下方给主 Agent 发消息,引导探索方向或介入流程。", "emptyWorker": "暂无活动记录。" }, "composer": { "attachmentRemove": "移除", "mainAria": "给主 Agent 发消息", "mainBusyPlaceholder": "主 Agent 正在运行,可输入 /btw 提问…", "mainPlaceholder": "给主 Agent 发消息,@ 引用漏洞、资产等…", "uploadTitle": "上传文件", "sideQuestion": "发送旁路问题", "stopTitle": "停止当前执行", "sendTitle": "发送消息", "workerAria": "给 Worker #{id} 发消息", "workerPlaceholder": "给 Worker #{id} 发消息,@ 引用记录,调整执行方向…", "pauseTitle": "暂停当前 Worker", "resumeTitle": "不发消息,直接继续执行", "resumeAria": "直接继续执行", "resumeLabel": "直接继续" }, "deleteDialog": { "title": "删除 Worker #{id}?", "hardDesc": "真删除会物理移除该意图,以及仅由它支撑的下游节点(级联到叶子,避免留下孤立数据);共享节点、目标和任务根事实会保留。此操作不可恢复。规划者会收到删除通知并据此重新规划。", "softDesc": "假删除会把该意图置为「已删除」并记录删除原因,意图节点、执行记录、已登记的事实和漏洞都会保留。规划者会收到「该意图由用户删除 + 原因」并据此重新规划。", "softLabel": "假删除", "softHint": "保留数据,可追溯", "hardLabel": "真删除", "hardHint": "级联移除,不可恢复", "reasonLabel": "删除原因(必填)", "reasonPlaceholder": "说明为什么删除这条意图,例如:方向判断错误 / 目标已失效 / 与其他意图重复…", "back": "返回", "confirmHard": "彻底删除", "confirmSoft": "确认删除" }, "newSession": { "title": "开启新会话?", "desc": "当前会话会被归档(可随时切回),主 Agent 将以干净的上下文继续。任务的图谱、资产、目标不受影响。", "cancel": "取消", "starting": "开启中…", "start": "开启新会话" } }, "settingsPage": { "title": "系统配置", "subtitle": "全局运行时开关", "save": "保存", "configured": "已配置", "onSuffix": " · 已开启", "offSuffix": " · 已关闭", "toast": { "saveFailed": "保存失败:{error}", "workersInvalid": "并发数必须是大于 0 的整数", "workersSaved": "已保存并发工作 agent 数(对之后启动的任务生效)", "pythonSaved": "已保存 Python 解释器配置", "bindingOn": "已开启 Agent 自动绑定流量", "bindingOff": "已关闭 Agent 自动绑定流量", "noaOn": "已开启 noa 上下文压缩(对之后启动的运行生效)", "noaOff": "已关闭 noa 上下文压缩(恢复内置压缩)", "webSearchSaved": "已保存网络搜索配置", "braveKeySaved": "已保存 Brave API Key", "tavilyKeySaved": "已保存 Tavily API Key", "proxySaved": "已保存出口代理", "proxyCleared": "已清除出口代理(改为直连)", "globalProxySaved": "已保存全局代理", "globalProxyCleared": "已清除全局代理(改为直连)", "testSuccess": "搜索测试成功 · {backend} 返回 {count} 条结果", "testFailed": "搜索测试失败:{error}", "testUnknownError": "未知错误" }, "trafficCapture": { "title": "流量捕获", "desc": "开启后,所有 Agent 的 HTTP 流量经记录代理全量落库,并向 Agent 注入 traffic_search / traffic_get 工具与代理配置(提示词含代理说明)。

关闭(默认)时不记录任何流量:Agent不会拿到代理配置与流量工具,提示词也不含代理相关内容。切换后会即时重建 Agent 生效。", "on": "已开启 · 正在记录流量并注入代理", "off": "已关闭 · 不记录、不注入代理" }, "agentBinding": { "title": "Agent 自动绑定流量", "desc": "默认关闭。开启后,漏洞入库时触发的报告 Agent 会核对已有 HTTP 请求/响应,关联对应流量后再编写报告。查阅数据包及额外的工具调用会增加 Token 消耗。

TCP、未抓包或没有匹配流量时仍可正常上报。此开关不影响流量捕获、人工绑定及已保存证据的查看。 对下一轮 Agent 生效;关闭后会立即拒绝新的自动绑定。", "on": "已开启 · 会增加 Token 消耗", "off": "已关闭 · 可继续人工绑定" }, "globalProxy": { "title": "全局代理", "desc": "所有 Agent 的目标流量经此代理出网(隐藏源 IP / 走跳板)。支持 http / https / socks5,可带 user:pass 认证。留空=直连。

开启流量捕获时,它作为记录代理的上游(流量仍全量落库,再经此代理出网);关闭捕获时,直接注入 Agent 的 bash / WebFetch 出网。与网络搜索代理、LLM 代理相互独立。

提示:socks5 在关闭捕获时依赖各命令行工具对 ALL_PROXY 的支持(curl 可用,部分工具可能忽略); 若主要用 socks5,建议开启流量捕获——此路径由 MITM 亲自拨号,工具无感知、稳定生效。", "addrLabel": "代理地址", "placeholder": "socks5://user:pass@host:1080 或 http://host:port(留空=直连)", "configured": "已配置 · 所有目标流量经此代理出网", "notConfigured": "未配置 · 目标流量直连出网" }, "constraints": { "title": "操作约束注入", "desc": "开启后,把每个任务的操作约束(在任务总览「操作约束」里维护的 allow/deny 条目)拼进对应 Agent 的系统提示,用来框定探索边界(如「仅测当前端口」「禁止爆破」)。

可分别控制注入到 规划者(planner)与 执行者(worker) ;默认都开。切换即时生效(下一轮读取),无需重建 Agent。关闭后该 Agent 不再看到约束。", "injectPlanner": "注入规划者(planner)", "injectWorker": "注入执行者(worker)" }, "experimental": { "title": "实验功能", "desc": "尚在验证中的机制,默认关闭。可能改变 Agent 行为或影响稳定性,请在了解影响后启用。

noa 上下文压缩:由模型主动压缩长对话历史(norma v0.4.0)。开启后平台接入的四类 Agent(规划者 / 执行者 / 主 Agent / 对话)改用 noa 接管上下文,取代内置压缩,压缩原文会归档到任务工作目录下便于回溯。切换即时生效(对之后启动的运行生效),无需重建 Agent;关闭后立即恢复内置压缩。", "noaLabel": "noa 上下文压缩" }, "webSearch": { "title": "网络搜索", "desc": "这是网络搜索的总开关 + 来源配置。开启后,才能在每个 Agent 的配置里单独选择是否启用 web_search(仅返回标题/链接/摘要,不抓取正文;抓取由 WebFetch 负责)。网络搜索不走记录代理,独立于流量捕获。

来源可选 DuckDuckGo(ddgs)(无需 Key)、Brave(免费版)(需填写 Brave API Key)、 Tavily(需填写 Tavily API Key)或 DeepSeek(复用当前 LLM 配置)。总开关关闭时,各 Agent 的网络搜索开关不可用。", "on": "总开关已开启 · 可在各 Agent 配置里单独启用", "off": "已关闭 · 各 Agent 无法启用网络搜索", "sourceLabel": "搜索来源", "sourcePlaceholder": "选择来源", "sourceDdgs": "DuckDuckGo(ddgs · 免费无 Key)", "sourceBrave": "Brave(免费版 · 需 Key)", "sourceTavily": "Tavily(需 Key)", "sourceDeepseek": "DeepSeek(官方)", "deepseekTitle": "DeepSeek 官方联网搜索", "deepseekDesc1": "该来源直接复用当前激活的 LLM 配置。因此它仅支持 DeepSeek 官方模型,且该配置必须使用 anthropic 协议——DeepSeek 的 OpenAI 协议端点不支持服务端搜索。切换 LLM 配置后此来源可能失效。", "deepseekDesc2": "与其它来源不同,搜索由 DeepSeek 服务端执行:每次搜索会额外消耗一次模型调用(产生 Token 费用),搜索请求不经过上面的出口代理,也不计入流量留痕;返回结果只有标题和链接(无摘要),需要正文时由 WebFetch 抓取。", "deepseekDesc3": "是否满足上述条件由你自行确认,系统不做拦截;可用下方「测试搜索」按钮实际跑一次来验证。", "braveKeyLabel": "Brave Search API Key", "braveKeyPlaceholderSet": "已配置(留空则不变)", "braveKeyPlaceholderUnset": "输入 Brave API Key", "braveNeedsKey": "已选择 Brave 但尚未配置 Key —— 在保存 Key 之前,搜索工具不会启用。", "braveQuota": "免费版额度约 2,000 次/月。前往 https://brave.com/search/api/ 获取 Key。", "tavilyKeyLabel": "Tavily Search API Key", "tavilyKeyPlaceholderSet": "已配置(留空则不变)", "tavilyKeyPlaceholderUnset": "输入 Tavily API Key(tvly-…)", "tavilyNeedsKey": "已选择 Tavily 但尚未配置 Key —— 在保存 Key 之前,搜索工具不会启用。", "tavilyGetKey": "前往 https://tavily.com 注册并获取 API Key。", "proxyLabel": "出口代理(可选)", "proxyPlaceholder": "http://host:port 或 socks5://host:port(留空=直连)", "proxyHint": "独立出口代理,仅用于访问搜索端点(VPN/SOCKS 等)。与记录流量的 MITM 代理无关;网络不通时经此代理访问。", "testHint": "用当前配置(来源 + 代理 + Key)实际搜索一次「test」,验证是否可用。", "testRunning": "测试中…", "testButton": "测试搜索" }, "python": { "title": "自定义脚本 · Python 解释器", "desc": "自定义 script 类型工具用它跑 Python。开机会自动检测(python3 优先);此处可手填 venv / 特定版本的绝对路径,留空则运行时自动检测。", "placeholder": "/usr/bin/python3(留空=自动检测)", "detect": "重新检测" }, "workers": { "title": "工作并发 · Work Agent 数", "desc": "每个任务并发运行的工作 agent 数量(默认 3)。数值越大并发探测越多、消耗也越高。修改后对之后启动的任务生效,正在运行的任务不受影响。" }, "sendKey": { "title": "会话输入框发送键位", "desc": "对话页与任务详情的主 Agent 会话输入框共用此设置,选择后立即生效、无需保存。

该偏好只存在本浏览器,不随账号同步,换浏览器或清理站点数据后需重新设置。", "label": "发送方式" }, "update": { "title": "版本与更新", "desc": "从 GitHub 检查并安装新版本。更新会重启程序,正在运行的任务会被中断。", "currentVersion": "当前版本", "latestVersion": "最新版本", "modeDocker": "Docker", "modeStandalone": "独立程序", "changelog": "更新日志", "connectError": "无法连接 GitHub:{error} 可在上方配置全局代理后重试。", "noAsset": "{latest} 没有提供 {os}/{arch} 的发布包(缺少 {asset}),无法自动更新。", "willDownloadPrefix": "将下载 ", "willDownloadSize": "({size})", "willDownloadSuffix": ",校验 SHA256 并冒烟测试后才会替换,失败自动保留当前版本。", "upToDate": "当前已是最新版本。", "dockerNote": "Docker 下的更新只替换程序本身,不更新镜像里的 playwright / nmap 等工具链,且docker compose up -d重建容器后会退回镜像自带的版本。需要连镜像一起升级请执行docker compose pull artex && docker compose up -d artex。", "restarting": "正在重启并应用新版本,请稍候(页面会自动刷新)…", "check": "检查更新", "updateToVersion": "更新到 {latest}", "updateNow": "立即更新", "rollback": "回滚到上一版本", "footer": "一键更新依赖守护脚本重启程序。请通过 start.sh(Windows 为 start.bat)启动 ARTEX;直接运行 artex 本体时,程序退出后不会被自动拉起。", "toast": { "checkFailed": "检查更新失败:{error}", "found": "发现新版本 {latest}", "upToDate": "当前已是最新版本", "updated": "已更新到 {version},正在重新加载页面", "restartTimeout": "等待服务重启超时。请检查后端日志,或确认 artex 是通过 start.sh / start.bat 启动的。", "updateFailed": "更新失败:{error}", "startFailed": "启动更新失败:{error}", "rollbackSwitched": "已切换到上一版本,正在重启…", "rollbackFailed": "回滚失败:{error}", "preparing": "准备中…" }, "confirm": { "title": "确定更新到 {latest}?", "restart": "更新会重启程序,正在运行的任务会被中断。", "docker": "注意:容器内更新只替换程序本身,不会更新镜像里的 playwright / nmap 等工具链;若新版本依赖新工具,请改用 docker compose pull。", "rollback": "回滚到上一版本?\n\n程序会重启,正在运行的任务会被中断。\n注意:数据库结构不会回退,旧版本可能无法识别新版写入的数据。" } } }, "llmPage": { "page": { "subtitle": "全 Agent 共享的格式 / 模型 / 限速配置。点击卡片编辑,星标为当前激活配置。", "poolConfig": "轮询配置", "enabled": "已开启", "new": "新建", "tab": { "profiles": "模型配置", "retry": "重试与退避" }, "empty": "还没有模型配置,点击右上角「新建」创建第一个。", "toast": { "activated": "已激活:{name}", "activateFailed": "激活失败:{msg}", "cannotDeleteActive": "无法删除当前激活的配置", "deleted": "已删除:{name}", "deleteFailed": "删除失败:{msg}" } }, "card": { "proxy": "代理 {proxy}", "thinking": "思考 {effort}", "thinkingOff": "关", "excluded": "不参与轮询", "priority": "优先级 {priority}", "active": "已激活", "activate": "设为激活", "deleteAria": "删除配置" }, "health": { "noKey": { "label": "未配置 Key", "hint": "未填 API Key,无法调用" }, "tripped": "已熔断", "trippedCooldown": "已熔断 · {cooldown}", "degraded": "异常 · 失败 {fails} 次", "ok": "正常" }, "pool": { "title": "LLM 轮询 · 故障转移", "desc": "开启后,未指定模型的 Agent 在当前配置不可用(余额不足 / Key 失效 / 限流 / 服务异常)时自动切到下一个配置。", "enable": { "label": "启用轮询", "hint": "默认关闭。关闭时始终只用激活配置,失败即失败。", "aria": "LLM 轮询开关" }, "bindFallback": { "label": "指定模型失败时也兜底", "hint": "默认关闭:Agent 或任务指定了某个配置就只用它,失败即失败(不会悄悄换成别的模型)。开启后,指定的配置失败时也会回落到下面的轮询链。", "aria": "绑定配置失败兜底开关" }, "order": { "label": "轮询顺序", "tooFew": "当前只有 {n} 个可用配置,轮询不会生效——至少需要 2 个已填 API Key 且参与轮询的配置。" }, "recoverAll": "全部恢复", "badge": { "active": "激活", "excluded": "不参与轮询" }, "cooldown": "冷却 {cooldown}", "consecutiveFails": "连续失败 {fails} 次", "recoverNow": { "aria": "立即恢复", "title": "立即恢复:清除熔断,下次调用重试该配置" }, "priority": "优先级 {priority}", "empty": "暂无配置", "note": "激活配置恒为第 1 顺位,其余按优先级从高到低(在各配置里设置)。某个配置失败后进入冷却 (60s → 5min → 30min),冷却期内被跳过,恢复后自动切回。上下文窗口装不下当前请求的配置会被跳过。 指定了模型的 Agent 与任务默认不参与轮询。", "toast": { "enabled": "已开启 LLM 轮询", "disabled": "已关闭 LLM 轮询", "fallbackUpdated": "已更新兜底设置", "setFailed": "设置失败:{msg}", "recoveredOne": "已恢复该配置", "recoveredAll": "已恢复全部配置", "recoverFailed": "恢复失败:{msg}" } }, "profile": { "titleNew": "新建模型配置", "titleEdit": "编辑:{name}", "activeBadge": "激活中", "descNew": "新建后不会自动激活,请在卡片上「设为激活」以启用。", "descEdit": "修改后点击保存;激活配置保存后对全部 Agent 立即生效。", "name": { "label": "名称", "placeholder": "例如:OpenAI 生产" }, "format": { "label": "格式", "placeholder": "选择格式" }, "model": { "label": "模型", "loadTitle": "从 API 加载可用模型" }, "baseUrl": { "label": "Base URL(可选)" }, "proxy": { "label": "代理(可选)", "hint": "仅 LLM 出站请求走此代理,支持 http/https/socks5,可带账号密码(如 socks5://user:pass@host:port,密码含特殊字符需 URL 编码);留空表示不使用代理(直连)。" }, "sessionHeader": { "label": "自定义会话头(可选)", "placeholder": "如 x-session-id(留空=不发送)", "hint": "填写头名后,每次请求都会带上这个 HTTP 头,头值自动填为 当前会话的 session id(chat 会话如 conv-12、worker 如 exp3-worker-i87)。用于按 session-id 头做提示缓存 / 粘性路由的网关;同一会话多轮稳定、不同会话互不相同。留空则不发送。" }, "apiKey": { "placeholderSet": "已设置({hint}),留空保持不变" }, "rps": "每秒限速", "rpm": "每分钟限速", "cw": "上下文窗口(K)", "rateHint": "限速 0 = 不限,全 Agent 共享。上下文窗口单位 K(千 token),0 = 默认 200K,上限 1000(即 1M);设太高会导致压缩不触发。", "priority": { "label": "轮询优先级", "hint": "数字越大越先被选中;激活配置恒为第 1 顺位,与本值无关。相同优先级的配置会轮流打头,天然分摊额度。" }, "exclude": { "label": "不参与轮询", "hint": "开启后不会被当作故障转移目标(仍可被 Agent / 任务显式指定使用)。 适合「只给某个 Agent 专用、不希望别人失败时烧掉」的昂贵配置。", "aria": "不参与轮询" }, "streaming": { "label": "流式输出 · streaming", "hint": "开启(默认)走流式 SSE,有运行中实时进度与实时 token 计数。 关闭则走真·非流式(stream:false,一次性返回完整响应)——可绕开部分网关糟糕的 SSE 实现(空帧 / 思考字段丢帧),代价是失去运行中的实时进度。", "aria": "流式输出" }, "maxTokens": { "label": "输出上限 · max tokens", "hint": "单次回复最多生成多少 token,随每次请求发出。0(默认)= 不发送该字段,由服务端默认值决定。 这与上面的「上下文窗口」是两回事:那是模型总容量,只在本地用来算压缩阈值。 设太小会让推理模型在思考阶段就被截断,一个字答案都出不来。" }, "maxTokensField": { "label": "上限字段名", "opt": { "default": "max_tokens(默认)" } }, "maxTokensFieldHint": { "openai": "上限发哪个键。max_tokens 是默认,绝大多数兼容网关只认它;OpenAI 官方推理模型(o 系列 / GPT-5)反过来只认 max_completion_tokens,收到 max_tokens 会直接报 unsupported_parameter。", "anthropic": "仅 openai 格式可选。Anthropic 的字段名固定为 max_tokens。", "openai-responses": "仅 openai 格式可选。Responses API 的字段名固定为 max_output_tokens。" }, "thinkingType": { "label": "思考开关 · thinking.type", "hint": "控制是否发送 thinking 字段。不发送=不带该字段(兼容 MiniMax 等不支持 的模型);关闭=发 disabled;开启=发 enabled。与下面的强度互相独立。", "opt": { "none": "不发送(默认)", "disabled": "关闭", "enabled": "开启" } }, "effort": { "label": "思考强度 · reasoning_effort", "hint": "独立的强度档位(OpenAI reasoning_effort / Anthropic output_config.effort)。 有些接口没有 thinking 字段、只靠强度即可激活思考,故可单独设置、不发送思考开关。", "opt": { "none": "不发送(默认)" } }, "testing": "测试中…", "testConnection": "测试连接", "create": "新建", "save": "保存", "toast": { "modelsLoaded": "已加载 {n} 个模型", "loadModelsFailed": "加载模型失败:{error}", "noModels": "未获取到模型", "loadModelsError": "加载模型出错:{msg}", "testOk": "连接成功 · {latency}ms · {model}", "testReply": "回复:{reply}", "testFailed": "连接失败:{error}", "unknown": "未知", "testError": "测试出错:{msg}", "nameModelRequired": "请填写名称与模型", "created": "已新建:{name}(在卡片上「设为激活」以启用)", "savedActive": "已保存,激活配置即时生效,无需重启", "saved": "已保存", "saveFailed": "保存失败:{msg}" } }, "retryLayer": { "connect": { "title": "建连重试", "where": "SDK · 拿到 200 之前", "trigger": "连不上或还没拿到 200:连接重置 / 读写超时 / DNS 失败等网络层错误,以及 HTTP 408、429、500、502、503、504。", "skips": "其余状态码(400 / 401 / 403 / 404 / 413 / 422 等)都是确定性拒绝,重发也一样失败,直接上抛。", "desc": "原样重发同一个请求。流一旦开始(已经拿到 200),中途断开就不归这层管了。", "attemptsLabel": "重试次数", "defInterval": "0.5s→1s→2s 指数(封顶 8s)", "offHint": "-1 = 一次都不重试,失败立刻上抛" }, "empty": { "title": "空响应重试", "where": "SDK · 仅 openai 格式", "trigger": "HTTP 200、finish_reason 是正常 stop,但整条响应一个内容块都没有——网关空帧、思考字段丢帧、采样打嗝都会长这样。", "skips": "因 max_tokens 截断而没有内容的不算(那要靠调高输出上限解决,重发只会再撞一次)。", "desc": "重发整个 prompt,所以在长上下文上比较贵,次数不宜给大。", "attemptsLabel": "重试次数", "defInterval": "0.5s→1s→2s 指数(封顶 8s)", "offHint": "-1 = 空响应直接原样交出" }, "stream": { "title": "同 provider 安全窗口重试", "where": "本项目 · 未交付输出前", "trigger": "流已经建立(拿到 200)之后才出问题:连接中途断开、供应商 overloaded、流内的 429 / 5xx 错误事件——且一个 token 都还没交给调用方。", "skips": "额度耗尽(402 / insufficient_quota,交给轮询换配置)、上下文过长(413 / context length,交给压缩)、400 / 401 / 403 / 404 / 422 确定性拒绝,都不重试。", "desc": "在同一个配置上重放同一个请求。因为还没交付任何输出,重放不会重复模型输出或工具执行。", "attemptsLabel": "重试次数", "defInterval": "0.5s→1s 指数(封顶 4s)", "offHint": "-1 = 断流直接交给外层的意图重跑" }, "breaker": { "title": "轮询熔断", "where": "本项目 · 进程级,全局一份", "trigger": "瞬时失败(429、5xx、网络错误)连续累计到阈值时熔断;余额不足(402)、密钥失效(401 / 403)、模型不存在(404)这类确定性失败不看阈值,第一次就熔断。", "skips": "成功一次即清零,所以偶尔抽风的配置不会被慢慢攒到熔断。", "desc": "熔断后进入冷却,冷却期内轮询直接跳过这个配置。状态落库,重启不丢。", "attemptsLabel": "连续失败几次熔断", "defInterval": "1min→5min→30min 梯度", "offHint": "-1 = 瞬时失败永不熔断(确定性失败仍然熔断)" }, "intent": { "title": "意图重跑", "where": "本项目 · 进程级,全局一份", "trigger": "前面几层都没兜住:worker 以 model_error 收场——内层重试全部用尽,或者流已经开始交付输出后才断掉(那时重放不安全,只能整条重来)。", "skips": "额度耗尽已经由轮询换配置处理,不在这里重跑;任务被暂停 / 终止 / 进入收尾时立即让位,不占用退避时间。", "desc": "整条意图从头再跑一遍。它是最外层,一次重跑意味着里面几层的次数会再乘一遍。", "attemptsLabel": "重跑次数", "defInterval": "固定 3s", "offHint": "-1 = 不重跑,该意图直接判为 blocked" } }, "retry": { "defaultN": "默认 {n}", "triggerLabel": "触发", "skipsLabel": "不走这层", "intervalMs": "间隔 ms", "defaultBackoff": "默认退避", "fixed": "固定 {human}", "emptyLine": "留空 = 用默认;{hint}。", "override": { "label": "重试覆盖", "hint": "只对这个配置生效,覆盖「重试与退避」里的全局默认。每格留空 = 跟随全局;次数填 -1 = 关掉这层重试;间隔填了就用固定间隔取代指数退避。熔断与意图重跑是进程级的,只能在全局那页调。" }, "loading": "读取重试策略…", "intro": "一次模型调用的失败会依次经过五层重试,由内到外: 建连 → 空响应 → 同 provider 安全窗口 → 轮询熔断 → 意图重跑。内层用尽才轮到外层,所以次数是相乘的——把每层都拉满,一次抖动能烧掉几十次请求。 全部留空即当前默认值,与没有这页时的行为完全一致。前三层可以在每个模型配置里单独覆盖。", "save": "保存", "resetAll": "全部恢复默认", "toast": { "loadFailed": "读取重试策略失败:{msg}", "saved": "已保存,即时生效(正在跑的这一轮调用仍用旧参数)", "saveFailed": "保存失败:{msg}" } } }, "notifyPage": { "title": "通知推送", "subtitle": "发现漏洞时推送到钉钉 / 飞书 / 企业微信等渠道 · 每个渠道可独立设推送时机与过滤规则", "globalSwitch": "总开关", "addChannel": "添加渠道", "disabled": "已停用", "aria": { "globalSwitch": "推送总开关", "enable": "启用", "delete": "删除", "statusChange": "接收状态变更" }, "toast": { "loadConfigFailed": "读取推送配置失败:{msg}", "loadChannelsFailed": "读取渠道列表失败:{msg}", "nameRequired": "请填写渠道名称", "saved": "已保存", "channelAdded": "已添加渠道", "saveFailed": "保存失败:{msg}", "testSent": "已发出测试消息({ms} ms),请到群里确认", "testFailed": "测试失败:{msg}", "deleted": "已删除:{name}", "deleteFailed": "删除失败:{msg}", "actionFailed": "操作失败:{msg}", "globalOn": "推送已开启", "globalOff": "推送已暂停" }, "stats": { "channels": "渠道", "channelsHint": "启用 / 总数", "sentToday": "今日送达", "pending": "待发送", "failed": "失败", "backlog": "最久积压", "backlogStuck": "推送可能卡住了" }, "global": { "title": "全局设置", "baseUrl": "回链地址", "baseUrlHint": "消息里「查看详情」按钮指向的地址。留空则不带按钮。", "digest": "汇总周期(分钟)", "digestHint": "仅对「汇总」模式的渠道生效。", "save": "保存全局设置" }, "tab": { "channels": "渠道", "deliveries": "投递记录" }, "mode": { "realtime": "实时", "digest": "汇总" }, "kind": { "dingtalk": "钉钉", "feishu": "飞书", "wecom": "企业微信", "webhook": "通用 Webhook", "telegram": "Telegram", "email": "邮件" }, "sheet": { "addTitle": "添加通知渠道", "rateLimited": " · 默认限流 {rate} 条/分钟", "rateUnlimited": " · 不限流", "kindLabel": "渠道类型", "kindLocked": "渠道类型不可修改——改了类型等于换一套凭据,请新建渠道。", "nameLabel": "渠道名称", "namePlaceholder": "应急响应群 / 日常播报群", "noFields": "该渠道的表单尚未定义(前端缺 CHANNEL_FIELDS 条目),请补全后再试。", "modeLabel": "推送时机", "modeRealtime": "实时 · 每条漏洞单独发一条", "modeDigest": "汇总 · 按周期合并成一条", "modeHint": "想做「高危实时、其余汇总」就建两个渠道:一个实时 + 门槛高危,一个汇总 + 不限级别。", "rateLabel": "限流(条/分钟)", "ratePlaceholder": "0 = 不限", "rateHint": "留空用渠道默认值;0 表示不限流。超限不会丢消息,只会推迟发送。", "enable": "启用该渠道", "save": "保存", "add": "添加", "sendTest": "发送测试消息" }, "filter": { "title": "过滤规则(留空即不过滤)", "minSeverity": "最低级别", "includeLabel": "只推这些漏洞类型", "includePlaceholder": "SQL注入\n命令执行", "includeHint": "每行一个关键词,大小写不敏感的子串匹配。留空=全部类型。", "excludeLabel": "排除这些漏洞类型", "excludePlaceholder": "信息泄露", "excludeHint": "排除优先于包含:同时命中时会被排除。", "taskIds": "限定任务 ID", "assetIds": "限定资产 ID", "idsHint": "任务/资产留空=不限;填写后要求与漏洞有交集。", "onStatusChange": "漏洞处置状态变更时也推送(仅实时模式)" }, "severityOpt": { "all": "不限", "low": "低危及以上", "medium": "中危及以上", "high": "高危及以上", "critical": "仅严重" }, "masked": { "savedTail": "已保存(尾号 {tail}) · 填入新值即覆盖,清空则删除该项", "saved": "已保存 · 填入新值即覆盖,清空则删除该项" }, "summary": { "includeCount": "类型含 {n} 词", "excludeCount": "排除 {n} 词", "taskCount": "{n} 个任务", "assetCount": "{n} 个资产", "statusChange": "含状态变更", "all": "全部漏洞" }, "field": { "dingtalk": { "webhook": { "label": "Webhook 地址" }, "secret": { "label": "加签密钥", "help": "机器人安全设置选「加签」时填写;选「自定义关键词」或未开启安全设置则留空" } }, "feishu": { "webhook": { "label": "Webhook 地址" }, "secret": { "label": "签名校验密钥", "help": "机器人开启「签名校验」时填写,否则留空" } }, "wecom": { "webhook": { "label": "Webhook 地址" } }, "webhook": { "url": { "label": "目标 URL" }, "method": { "label": "请求方法", "opt": { "POST": "POST(带请求体)", "PUT": "PUT(带请求体)", "PATCH": "PATCH(带请求体)", "GET": "GET(不带请求体)" } }, "headers": { "label": "自定义请求头", "help": "每行 KEY=VALUE,例如 Authorization=Bearer xxx" }, "body_template": { "label": "请求体模板", "help": "留空用内置默认模板。变量:'{{.Title}} {{.Batch}} {{.Count}} {{.HomeURL}} {{.SentAt}}',以及 range .Items 下的 .Name/.VulnClass/.Severity/.Summary/.Assets/.DetailURL/.StatusLabel。插入字符串请用 '{{json .Xxx}}' 而不是 '{{.Xxx}}',否则标题里的引号会破坏 JSON。" } }, "telegram": { "bot_token": { "label": "Bot Token" }, "chat_id": { "label": "Chat ID" }, "base_url": { "label": "API 地址", "help": "留空用官方地址;自建 Bot API 反代时填写" } }, "email": { "host": { "label": "SMTP 服务器" }, "port": { "label": "端口", "help": "587 走 STARTTLS;465 请把「隐式 TLS」打开" }, "username": { "label": "账号" }, "password": { "label": "密码 / 授权码" }, "from": { "label": "发件人" }, "to": { "label": "收件人", "help": "多个地址用逗号分隔" }, "tls": { "label": "隐式 TLS", "help": "465 端口打开;587 保持关闭(会自动 STARTTLS)" } } }, "delivery": { "loadFailed": "读取投递记录失败:{msg}", "requeued": "已重新入队", "resendFailed": "重发失败:{msg}", "allChannels": "全部渠道", "allStates": "全部状态", "refresh": "刷新", "totalCount": "共 {total} 条", "colTime": "时间", "colFinding": "漏洞", "colChannel": "渠道", "colState": "状态", "colAttempts": "尝试", "colError": "错误", "loading": "加载中…", "empty": "暂无投递记录", "noTitle": "(无标题)", "statusChanged": "状态变更", "resend": "重发" }, "unit": { "sec": "{n} 秒", "min": "{n} 分钟", "hour": "{n} 小时" } } }