Localize user-facing UI, agent output, and backend messages to Simplified Chinese
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
docs / links (push) Waiting to run
web / web (push) Waiting to run
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
docs / links (push) Waiting to run
web / web (push) Waiting to run
This commit is contained in:
+30
-30
@@ -41,38 +41,38 @@ var BuildVersion = "dev"
|
||||
// 최종 사용자 응답만 한국어로 둔다. (F3b, 번역어는 완료 파일·web i18n 과 동일 표기)
|
||||
const (
|
||||
// 의도 제어·재실행 (controlIntent / rerunIntent / rerunBlocked)
|
||||
errTaskDeletingIntentControl = "작업을 삭제하는 중이라 의도를 제어할 수 없습니다"
|
||||
errTaskDeletingIntentRerun = "작업을 삭제하는 중이라 의도를 재실행할 수 없습니다"
|
||||
errIntentNotRerunnable = "재실행할 수 있는 상태가 아닙니다(blocked·exhausted·stopped 만 재실행할 수 있습니다)"
|
||||
errTaskDeletingIntentControl = "正在删除任务,无法控制意图"
|
||||
errTaskDeletingIntentRerun = "正在删除任务,无法重新执行意图"
|
||||
errIntentNotRerunnable = "当前状态无法重新执行(只有 blocked·exhausted·stopped 可以重新执行)"
|
||||
|
||||
// 작업 생성 (createTask) — 소스 작업·기업·분류·작업 수준 가로채기 규칙 검증
|
||||
errCreateTaskSourceLimit = "소스 작업은 최대 %d개까지 연결할 수 있습니다"
|
||||
errCreateTaskSourceInvalid = "소스 작업 id가 올바르지 않거나 중복되었습니다"
|
||||
errCreateTaskSourceNotFound = "소스 작업 #%d를 찾을 수 없습니다"
|
||||
errCreateTaskCompanyLimit = "연결 기업이 올바르지 않습니다: 유효한 기업은 최대 %d개까지 선택할 수 있습니다"
|
||||
errCreateTaskInterceptRules = "작업 수준 가로채기 규칙이 올바르지 않습니다: "
|
||||
errCreateTaskCategoryInvalid = "작업 분류를 찾을 수 없거나 올바르지 않습니다"
|
||||
errCreateTaskCompanyInvalid = "연결 기업을 찾을 수 없거나 올바르지 않습니다"
|
||||
errCreateTaskSourceLimit = "最多关联 %d 个来源任务"
|
||||
errCreateTaskSourceInvalid = "来源任务 id 无效或重复"
|
||||
errCreateTaskSourceNotFound = "找不到来源任务 #%d"
|
||||
errCreateTaskCompanyLimit = "关联企业无效:有效企业最多可以选择 %d 个"
|
||||
errCreateTaskInterceptRules = "任务级拦截规则无效:"
|
||||
errCreateTaskCategoryInvalid = "找不到任务分类或分类无效"
|
||||
errCreateTaskCompanyInvalid = "找不到关联企业或企业无效"
|
||||
|
||||
// LLM 설정 검증 (validateTaskProfileIDs → createTask/updateTaskLLMProfiles writeErr)
|
||||
errLLMProfileInvalid = "LLM 설정 id가 올바르지 않거나 중복되었습니다"
|
||||
errLLMProfileNotFound = "LLM 설정 #%d를 찾을 수 없거나 API Key가 설정되어 있지 않습니다"
|
||||
errLLMProfileInvalid = "LLM 配置 id 无效或重复"
|
||||
errLLMProfileNotFound = "找不到 LLM 配置 #%d,或未设置 API Key"
|
||||
|
||||
// 자산 저장소·커버리지 (taskCoverage / taskCoverageGraph / taskAssetRefs …)
|
||||
errAssetStoreDisabled = "자산 저장소가 활성화되어 있지 않습니다"
|
||||
errAssetIDRequired = "asset_id가 필요합니다"
|
||||
errAssetStoreDisabled = "资产存储未启用"
|
||||
errAssetIDRequired = "需要 asset_id"
|
||||
|
||||
// 파이썬 인터프리터 탐지 (pgDetectPython)
|
||||
errPythonNotDetected = "python을 찾을 수 없습니다(python3·python 모두 PATH에 없습니다)"
|
||||
errPythonNotDetected = "找不到 python(python3·python 都不在 PATH 中)"
|
||||
|
||||
// 알림 전역 설정 (링크 기준 주소·요약 주기 — web notify.global 라벨과 동일 표기)
|
||||
errNotifyBaseURLScheme = "링크 기준 주소는 http:// 또는 https://로 시작해야 합니다"
|
||||
errNotifyDigestRange = "요약 주기는 1~1440분 사이여야 합니다"
|
||||
errNotifyBaseURLScheme = "链接基准地址必须以 http:// 或 https:// 开头"
|
||||
errNotifyDigestRange = "摘要周期必须在 1~1440 分钟之间"
|
||||
|
||||
// 메인 에이전트 대화·세션 (newMainSession / chat)
|
||||
errTaskDeletingNewSession = "작업을 삭제하는 중이라 새 세션을 만들 수 없습니다"
|
||||
errTaskDeletingNewMessage = "작업을 삭제하는 중이라 새 메시지를 보낼 수 없습니다"
|
||||
errMainAgentBusy = "메인 에이전트가 이전 메시지를 처리하는 중입니다. 잠시 후 다시 시도해 주세요"
|
||||
errTaskDeletingNewSession = "正在删除任务,无法创建新会话"
|
||||
errTaskDeletingNewMessage = "正在删除任务,无法发送新消息"
|
||||
errMainAgentBusy = "主 Agent 正在处理上一条消息,请稍后重试"
|
||||
)
|
||||
|
||||
// 사용자에게 노출되지만 writeErr 를 거치지 않는 응답 문구(한국어). writeJSON 의 error
|
||||
@@ -80,13 +80,13 @@ const (
|
||||
// nav 경로는 web i18n 라벨(nav.system="시스템", llmConfig="LLM 설정")과 동일 표기. (F34)
|
||||
const (
|
||||
// 채팅 LLM 부재 사유 (chatUnavailableReason → writeErr 503 / 대화 종료 사유)
|
||||
errChatNoLLMProfile = "아직 LLM 설정이 없습니다: 시스템 → LLM 설정에서 설정을 하나 추가해 주세요"
|
||||
errChatNoActiveLLMProfile = "활성화된 LLM 설정이 없습니다: 시스템 → LLM 설정에서 하나를 활성화하거나, 이 대화에서 사용할 설정을 지정해 주세요"
|
||||
errChatLLMNotReady = "LLM이 준비되지 않아 대화할 수 없습니다: 시스템 → LLM 설정에 사용할 수 있고 활성화된 설정이 있는지 확인해 주세요"
|
||||
errChatNoLLMProfile = "还没有 LLM 配置:请在 系统 → LLM 配置 中添加一个配置"
|
||||
errChatNoActiveLLMProfile = "没有已启用的 LLM 配置:请在 系统 → LLM 配置 中启用一个,或为本对话指定要使用的配置"
|
||||
errChatLLMNotReady = "LLM 尚未就绪,无法对话:请检查 系统 → LLM 配置 中是否有可用且已启用的配置"
|
||||
|
||||
// LLM 연결 테스트·웹 검색 프로브 (writeJSON {ok:false, error:…}, 설정 화면 점검 결과)
|
||||
errLLMTestNoAPIKey = "API Key가 제공되지 않았습니다"
|
||||
errWebSearchProbeNoResults = "검색 결과가 0건입니다(요청이 제한되었거나 프록시가 연결되지 않았을 수 있습니다)"
|
||||
errLLMTestNoAPIKey = "未提供 API Key"
|
||||
errWebSearchProbeNoResults = "搜索结果为空(请求可能被限制,或代理未连接)"
|
||||
)
|
||||
|
||||
// 규칙 모드 채팅(LLM 미설정 시 사람이 직접 조종하는 fallbackChat) 사용자 응답(한국어).
|
||||
@@ -95,9 +95,9 @@ const (
|
||||
// 순수 입력 파싱이고 와이어 포맷이 아니므로 중국어·영어 트리거를 유지한 채 더하기만 한다.
|
||||
// 용어는 web i18n·GLOSSARY 와 정합: intent→의도, hint→힌트, finding→취약점, planner→플래너. (F34 d)
|
||||
const (
|
||||
fallbackIntentInjected = "우선순위 높은 의도를 하나 주입했습니다: "
|
||||
fallbackHintRecorded = "힌트를 기록했습니다. 플래너가 다음에 읽습니다: "
|
||||
fallbackChatStatus = "(규칙 모드, LLM 미설정) 현재 현황: 자산 %d개, 대기 의도 %d개, 확인된 취약점 %d개.\n사용 가능한 명령: \"의도 ...\"로 의도를 주입하고, \"힌트 ...\"로 플래너에게 힌트를 전달합니다."
|
||||
fallbackIntentInjected = "已注入一个高优先级意图:"
|
||||
fallbackHintRecorded = "已记录提示,规划器下次会读取:"
|
||||
fallbackChatStatus = "(规则模式,未配置 LLM)当前状态:资产 %d 个,待处理意图 %d 个,已确认漏洞 %d 个。\n可用命令:用 \"意图 ...\" 注入意图,用 \"提示 ...\" 向规划器传递提示。"
|
||||
)
|
||||
|
||||
// Server exposes the ARTEX backend over a JSON HTTP API for the shadcn/ui
|
||||
@@ -301,7 +301,7 @@ func New(ctx context.Context, m *Manager, skillDir string, dataDir string, keyDi
|
||||
} else {
|
||||
// 핵심 기능(취약점 IM 알림 전송)을 끄는 분기라 시작 로그를 남긴다. 이 변수는
|
||||
// 통합 테스트 전용이므로, 운영에서 켜져 있으면 실수나 환경 상속을 의심할 단서가 된다.
|
||||
log.Printf("[notify] 백그라운드 알림 전송 루프가 %s 로 꺼졌습니다(테스트 전용) — 취약점 IM 알림이 전송되지 않습니다", notifyBackgroundDisabledEnv)
|
||||
log.Printf("[notify] 后台通知发送循环已因 %s 关闭(仅测试用)——漏洞 IM 通知将不会发送", notifyBackgroundDisabledEnv)
|
||||
}
|
||||
// Fill the tool cache for any enabled MCP that has none yet (notably the
|
||||
// seeded browser MCP on first run). Async so it never blocks startup.
|
||||
@@ -3823,7 +3823,7 @@ func (s *Server) chat(w http.ResponseWriter, r *http.Request) {
|
||||
_, err := ma.Chat(ctx, maTaskID, mainSeg, s.m.Assets(), t.Store, t.Goal, agentMsg, emit, t.Notify, resume, t.NotifyGoal, t.NotifyHint)
|
||||
s.engine.EndLLMCall(t.ID)
|
||||
if err != nil && ctx.Err() == nil {
|
||||
s.engine.emitActivity(t, db.Activity{Worker: "mainagent", Kind: "text", IsError: true, Summary: transcriptErrorSummary("메인 에이전트", err.Error()), MainSeg: segPtr})
|
||||
s.engine.emitActivity(t, db.Activity{Worker: "mainagent", Kind: "text", IsError: true, Summary: transcriptErrorSummary("主 Agent", err.Error()), MainSeg: segPtr})
|
||||
}
|
||||
}()
|
||||
writeJSON(w, 202, map[string]any{"status": "accepted", "mode": "llm"})
|
||||
|
||||
Reference in New Issue
Block a user