{
    "agents.add":  "+ Add subagent",
    "agents.desc":  "Description",
    "agents.descPh":  "Description shown to the model",
    "agents.effort":  "Model effort",
    "agents.effortCustom":  "Custom effort",
    "agents.effortDefault":  "(default)",
    "agents.effortHint":  "Leave empty for the provider/model default; choose common low / medium / high values, or enter a provider-specific effort. Fallbacks use provider/model@effort.",
    "agents.effortPh":  "e.g. xhigh",
    "agents.fallbackCount":  "{n} fallback(s)",
    "agents.fallbacks":  "Independent fallbacks",
    "agents.fallbacksHint":  "On failure, restart this role in order; focus the field to pick configured provider/models quickly. Empty disables role-level fallback; the global HA backup list is not used.",
    "agents.fallbacksLoading":  "Loading available models…",
    "agents.fallbacksNoMatch":  "No matching provider/model",
    "agents.fallbacksPh":  "provider/model@effort, comma-separated, e.g. openai/gpt-4o@high, ollama/qwen2.5@low",
    "agents.errBusy":  "The current session is busy (agent not idle), please retry later",
    "agents.emptyHint":  "Use \"+ Add subagent\" to create one manually, or \"AI Generate\" from a one-sentence requirement",
    "agents.emptyTitle":  "No custom subagents yet",
    "agents.errGenFailed":  "Generation failed ({status}); please retry or shorten the requirement",
    "agents.errNoAgent":  "No available Agent context",
    "agents.errParse":  "Failed to parse model output; please retry. Raw output: {out}",
    "agents.errRequire":  "Requirement cannot be empty",
    "agents.gen":  "AI Generate",
    "agents.genFieldDesc":  "\"description\": \"One-sentence description shown to the orchestration model, explaining this subagent's responsibility\"",
    "agents.genFieldModel":  "\"model\": \"optional; leave empty to inherit the default\"",
    "agents.genFieldName":  "\"name\": \"English identifier, 2-20 characters, e.g. reviewer, critic, planner\"",
    "agents.genFieldProvider":  "\"provider\": \"optional; leave empty to inherit the default; available providers: {providers}\"",
    "agents.genFieldSp":  "\"systemPrompt\": \"This subagent's system prompt ({lang}, within 80 words, describing role and output requirements)\"",
    "agents.genIntro":  "You are a subagent config generator. User requirement: ",
    "agents.genLang":  "English",
    "agents.genModelHint":  ", current default model: {model}",
    "agents.genSuffix":  ". Generate one subagent definition; output ONLY a JSON object (no markdown code blocks, no other text), fields: ",
    "agents.model":  "Model",
    "agents.name":  "Name*",
    "agents.namePh":  "e.g. reviewer",
    "agents.provider":  "Model provider",
    "agents.req":  "Requirement*",
    "agents.reqPh":  "Describe the new subagent, e.g. a senior frontend designer skilled in React component review and UX improvements; or a data analyst in charge of metrics and chart interpretation",
    "agents.sp":  "System prompt",
    "agents.spPh":  "The subagent system prompt (persona), e.g. \"You are a senior code reviewer…\"",
    "agents.subtitle":  "Reusable orchestration roles: name / model / system prompt",
    "agents.title":  "Custom Subagents",
    "agents.toolsAllow":  "Tool allowlist",
    "agents.toolsDeny":  "Tool denylist",
    "agents.toolsPh":  "comma or space separated, e.g. read, web_fetch",
    "agents.toolsHint":  "Either list non-empty enables scoping (silently ignored when the provider lacks support). Names must exactly match host-registered tools.",
    "agents.toolsHostList":  "Host tools: {names}",
    "common.add":  "Add",
    "common.cancel":  "Cancel",
    "common.clear":  "Clear",
    "common.defaultInherit":  "(default / inherit)",
    "common.defaultModel":  "default model",
    "common.delete":  "Delete",
    "common.edit":  "Edit",
    "common.emptyGenerate":  "Empty generation result, please retry",
    "common.enable":  "Enable",
    "common.generate":  "Generate",
    "common.generating":  "Generating…",
    "common.loading":  "Loading…",
    "common.loadingModelList":  "Loading model list…",
    "common.loadingModels":  "Loading models…",
    "common.none":  "(none)",
    "common.noneYet":  "(none yet)",
    "common.moveDown":  "Move down",
    "common.moveUp":  "Move up",
    "common.refresh":  "Refresh",
    "common.requiredName":  "Name is required",
    "common.save":  "Save",
    "common.selectModel":  "Select a model…",
    "common.unknown":  "Unknown",
    "common.unnamed":  "(unnamed)",
    "ctx.custom":  "Injected content",
    "ctx.customHint":  "Once customized, only your content is injected (verbatim, not translated); leave empty to inject the default auto-orchestration hint",
    "ctx.evalCustom":  "custom content",
    "ctx.evalDefault":  "default orchestration hint",
    "ctx.evalEmpty":  "empty",
    "ctx.evalNone":  "not evaluated yet",
    "ctx.evalOff":  "disabled",
    "ctx.hint":  "Injects plugin context into the system prompt (default auto-orchestration hint, customizable); when off, the model gets none of it",
    "ctx.injectSubagents":  "Also inject into subagents",
    "ctx.injectSubagentsHint":  "When enabled, subagents receive the same plugin context; off by default to prevent subagents from starting nested orchestration",
    "ctx.lastEval":  "Last injected",
    "ctx.status":  "Injection status",
    "ctx.statusFail":  "Section NOT registered: {reason}",
    "ctx.statusHint":  "Prompt section registration and effective injected content (live; registration happens at plugin startup)",
    "ctx.statusOk":  "Section registered (order {order})",
    "ctx.title":  "Context injection",
    "debug.enabled":  "Debug mode",
    "debug.enabledHint":  "Records internal events to memory (cap 500)",
    "debug.logsCount":  "Logs ({n}, newest first)",
    "debug.noLogs":  "(No logs yet; recorded automatically once debug mode is on)",
    "debug.persist":  "Config persistence",
    "debug.saved":  "Saved → {path}",
    "debug.show":  "Show debug card",
    "debug.showHint":  "For troubleshooting plugin internals; hidden by default",
    "debug.subtitle":  "Internal event logs (recorded once enabled)",
    "debug.title":  "Development Debug",
    "debug.writeFailed":  "Write failed: {error}",
    "diag.available":  "available",
    "diag.configLoaded":  "Config loaded",
    "diag.cursors":  "Cursors ({n})",
    "diag.failures":  "Failure counts ({n})",
    "diag.ha":  "HA state",
    "diag.haState":  "HA state restored",
    "diag.injection":  "Context injection",
    "diag.lang":  "Language",
    "diag.missing":  "missing",
    "diag.no":  "no",
    "diag.noRuns":  "No runs yet",
    "diag.persist":  "Config persistence",
    "diag.persistFail":  "failed",
    "diag.probes":  "Probes ({n})",
    "diag.runs":  "Recent runs ({n})",
    "diag.runAborted":  "Aborted",
    "diag.runOk":  "Completed",
    "diag.runPartial":  "Partial",
    "diag.runTasks":  "{n} subtasks",
    "diag.runTruncated":  "Completed (truncated)",
    "diag.subtitle":  "HA runtime / failures / cursors / probes / recent runs",
    "diag.title":  "Diagnostics",
    "diag.yes":  "yes",
    "ha.addFromConfig":  "+ Add backup model (from config)",
    "ha.advanced":  "Advanced",
    "ha.advancedHint":  "Advanced settings; defaults are usually fine",
    "ha.backupList":  "Backup models (rotated in order; auto-recover after cooldown)",
    "ha.backupN":  "Backup {n}",
    "ha.burstWindow":  "Burst window (ms)",
    "ha.burstWindowHint":  "Failures count toward the threshold only within the window; 0 = off",
    "ha.circuitClosed":  "Circuit closed: {key} ({reason})",
    "ha.circuitOpened":  "Circuit opened: {key} ({level})",
    "ha.cmdDesc":  "View/reset model HA status, run probe recovery",
    "ha.codes":  "Failover error codes",
    "ha.codesHint":  "Empty = failover on all error codes",
    "ha.cooldown":  "Quarantine cooldown (ms)",
    "ha.cooldownHint":  "ms; auto-recovers when expired",
    "ha.currentDefault":  "Current default model",
    "ha.degrade":  "Context-overflow degrade",
    "ha.degradeHint":  "Retry without reasoningEffort on CONTEXT_WINDOW_EXCEEDED; when off, leave it to platform compaction and do not fail over",
    "ha.emptyHint":  "No backup models yet: failover is unavailable. Use \"Recommended backups\" to add some.",
    "ha.emptyTitle":  "No backup models configured",
    "ha.persist":  "Persist selection",
    "ha.phEffort":  "effort (optional)",
    "ha.phLabel":  "label",
    "ha.phModel":  "model",
    "ha.phProvider":  "provider",
    "ha.pickBackup":  "Pick a backup model",
    "ha.probe":  "Probe recovery",
    "ha.probeFail":  "Probe failed: {provider}/{model} ({reason})",
    "ha.probeHint":  "Verify recovery with a cheap call after cooldown; auto-closes the circuit when ok",
    "ha.probeOk":  "Probe ok: {provider}/{model}",
    "ha.probeUsage":  "Usage: /ha probe <provider> <model>",
    "ha.providerThreshold":  "Provider circuit threshold",
    "ha.providerThresholdHint":  "Quarantine the whole provider after that many models are quarantined; 0 = off",
    "ha.quarantined":  "Quarantined models ({n})",
    "ha.recent":  "Recent failovers",
    "ha.recommend":  "Recommended backups",
    "ha.reload":  "Reload config",
    "ha.reset":  "Clear quarantine & history",
    "ha.resetDone":  "Quarantine, failures, cursors and history cleared",
    "ha.runBackup":  "{n} backup(s)",
    "ha.runDisabled":  "Model HA disabled",
    "ha.runEnabled":  "Model HA enabled",
    "ha.runLast":  "Last switch: {from} → {to} ({code})",
    "ha.runLoading":  "HA Orchestrator running…",
    "ha.runQuarantine":  "{n} quarantined",
    "ha.runtime":  "Runtime status",
    "ha.statusCursors":  "Cursors ({n})",
    "ha.statusDisabled":  "disabled",
    "ha.statusEnabled":  "enabled",
    "ha.statusFailures":  "Failure counts ({n})",
    "ha.statusHead":  "HA status",
    "ha.statusHistory":  "Switch history ({n})",
    "ha.statusProbes":  "Probes ({n})",
    "ha.statusQuarantine":  "Quarantine ({n})",
    "ha.steer":  "Steer after stop",
    "ha.steerText":  "[HA] Model call failed; switched to a backup model automatically. Please continue the current task.",
    "ha.subtitle":  "Falls back to backup models when the current model fails",
    "ha.suggestNone":  "No candidates: check provider and model lists",
    "ha.thCode":  "Reason",
    "ha.thFrom":  "From",
    "ha.thRemaining":  "Cooldown left",
    "ha.threshold":  "Failure threshold",
    "ha.thTime":  "Time",
    "ha.thTo":  "To",
    "ha.title":  "Model High Availability",
    "ha.unnamedBackup":  "(unnamed backup)",
    "hero.activeRuns":  "{n} running",
    "hero.activeRunsLabel":  "Active orchestration",
    "hero.backupCount":  "{n} backups",
    "hero.backups":  "Backup models",
    "hero.ha":  "Model high availability",
    "hero.healthy":  "All healthy",
    "hero.noActiveRuns":  "No active runs",
    "hero.orch":  "Subagent orchestration",
    "hero.quarantined":  "{n} quarantined",
    "orch.autoFirst":  "Auto (first available)",
    "orch.advanced":  "Advanced",
    "orch.advancedHint":  "Delegation depth and input/output truncation; defaults are usually fine",
    "orch.autoResume":  "Auto-resume incomplete runs",
    "orch.autoResumeHint":  "When retrying the same tasks, automatically reuse completed subtasks from a partially completed run within 30 minutes in the same session, running only the rest (can be disabled)",
    "orch.cardDone":  "Completed",
    "orch.cardError":  "Failed",
    "orch.cardRunning":  "Running… ({n} subtasks)",
    "orch.cardRunningProgress":  "Running {running} · Done {done}/{total} · Errors {error}",
    "orch.statDone":  "Done {n}",
    "orch.statError":  "Errors {n}",
    "orch.statRunning":  "Running {n}",
    "orch.statTotal":  "Total {n}",
    "orch.taskLabel":  "Task",
    "orch.taskAgent":  "Agent",
    "orch.taskStatus":  "Status",
    "orch.taskLastKey":  "lastKey",
    "orch.cmdDesc":  "View/search orchestrate run records (runs / show <runId> / presets); resume incomplete runs with /ha-orch-resume <runId>",
    "orch.result":  "Result",
    "orch.resumeCmdDesc":  "Resume an incomplete orchestration run by runId (reuses completed subtasks, runs only the rest)",
    "orch.resumeDone":  "Resumed and completed: {from} → {runId}\n\n{summary}",
    "orch.resumeInjected":  "[ha-orch-resume] Resumed and completed: {from} → {runId} (mode: {mode}). Full subtask results and summary of the resumed run follow. Use them to continue your original orchestrated task.\n\n{output}",
    "orch.resumeUsage":  "Usage: /ha-orch-resume <runId> (list run ids with /orchestrate runs)",
    "orch.concurrency":  "Default concurrency",
    "orch.concurrencyHint":  "Subagents run in parallel within one orchestrate run",
    "orch.enabledHint":  "Gives the model the orchestrate tool",
    "orch.groupAdvanced":  "Advanced",
    "orch.groupBasic":  "Basics",
    "orch.groupLimits":  "Concurrency & budgets",
    "orch.errBudget":  "Subagent invocation budget exhausted ({n}), orchestration aborted",
    "orch.errPartialHint":  "\n[orchestrate runId: {runId}] This run recorded {done} completed subtask(s) ({names}) with {pending} pending. On retry, call orchestrate with resume: \"{runId}\" to reuse the completed results and run only the remaining tasks.",
    "orch.errDisabled":  "orchestrate: orchestration is disabled in the config page",
    "orch.errNoNested":  "orchestrate: subagents cannot start nested orchestration; hand the task back to the main agent",
    "orch.errNoAgentCtx":  "orchestrate: missing caller Agent context",
    "orch.errNoPreset":  "Preset not found: {name}",
    "orch.errNoProvider":  "orchestrate: no available subagent provider",
    "orch.errNoResumeData":  "Old run record lacks task definitions, cannot resume: {runId}",
    "orch.errAborted":  "Orchestration call was aborted",
    "orch.errNoRun":  "Run not found: {runId}",
    "orch.errNoService":  "orchestrate: subagent service unavailable",
    "orch.errNoTasks":  "orchestrate: at least one task is required",
    "orch.errPresetName":  "Preset name is required",
    "orch.errRunDone":  "This run is already complete: {runId}",
    "orch.errUnknownAgent":  "orchestrate: unknown subagent(s) {names} (available: {available})",
    "orch.globalConcurrency":  "Global concurrency cap",
    "orch.globalConcurrencyHint":  "Concurrency cap shared by all orchestrations (0 = unlimited)",
    "orch.hintSection":  "[dsh-ha-orchestrator plugin context] You are equipped with the subagent orchestration tool orchestrate (fanout parallel / pipeline staged / supervisor review-merge / map-reduce parallel-reduce / router candidate routing). When the task meets ANY of the following, call orchestrate directly and automatically in the first turn — no explicit user request needed, and do not serially handle each item yourself (especially when reading or understanding a large project or codebase, do not start with sequential read/glob browsing): (1) it decomposes into 2+ independent subtasks (e.g. reading a large project, multi-file research, batch review, comparing options, multi-repo checks); (2) it needs staged progress (requirements → design → implementation plan); (3) it needs a senior review gate (code review, design review, QA); (4) it needs one suitable task routed from a candidate list. Decompose the goal into tasks yourself (each task with a clear, self-contained prompt); a task may include outputHint or an object-root outputSchema when the provider supports it, and supervisor runs may use reviewers/reviewRounds or budgetAgents; even if you do not know the project yet, roughly split tasks by module/directory/doc/code area and let subagents read in parallel before you summarize; this is the unified orchestration entry point, preferred over one-by-one dispatch with subagent/subagent_fork; for custom subagents, query the roster (name/provider/model/description) via the list-subagents tool first. For multi-target research (e.g. several GitHub repos, npm packages, competitors), split tasks one per target (never merge them into a single task) and require evidence with source URLs and observation dates in each prompt; keep every citation when merging (use researcher/research-merger or mergeInstructions if available).",
    "orch.maxAgents":  "Max subagents",
    "orch.maxAgentsHint":  "Task limit per orchestrate run",
    "orch.mergeDefault":  "Review all subtask outputs and merge them into one accurate, complete, deduplicated conclusion; note anything still missing or uncertain.",
    "orch.mergedPrefix":  "(carrying over the previous stage output)",
    "orch.outputSeparator":  "--- Subtask outputs ---",
    "orch.presetNone":  "No presets yet",
    "orch.presetNotFound":  "Preset not found: {name}",
    "orch.presetSaved":  "Preset saved: {name}",
    "orch.presetsHead":  "Presets ({n})",
    "orch.provider":  "Subagent provider",
    "orch.rosterHead":  "Available custom subagents (referenced by name via tasks[].agent or the top-level agent):",
    "orch.rosterHint":  "Query the available custom subagent list (name/provider/description) via the list-subagents tool.",
    "orch.routerDefault":  "Pick the most suitable task below, complete it, and output only its result:",
    "orch.runNone":  "No runs yet",
    "orch.runNotFound":  "Run not found: {runId}",
    "orch.runsHead":  "Recent {n} runs",
    "orch.showHead":  "Run",
    "orch.stageRetry":  "Pipeline stage retry",
    "orch.stageRetryHint":  "Retries per failed pipeline stage (0 = fail-fast, stop later stages)",
    "orch.maxDepth":  "Delegation depth cap",
    "orch.maxDepthHint":  "0 = off; 1 = subagents cannot delegate further (platform-level hard cap, applies when the provider supports it)",
    "orch.mergeBodyLimit":  "Merge input · per-task cap",
    "orch.mergeTotalLimit":  "Merge input · total cap",
    "orch.mergeLimitsHint":  "Characters, 0 = default (8000 / 48000): truncation of subtask bodies fed to merge/supervisor",
    "orch.renderRunLimit":  "Result render · per-task cap",
    "orch.renderTotalLimit":  "Result render · total cap",
    "orch.renderLimitsHint":  "Characters, 0 = default (8000 / 60000): truncation of the orchestrate tool result display",
    "orch.sumDone":  "Orchestration done, {n} subtask(s):",
    "orch.sumMerged":  "Merged: {out}",
    "orch.sumNoOutput":  "(no output)",
    "orch.sumPipeline":  "pipeline done, final output: {out}",
    "orch.sumPipelineFailed":  "Pipeline stage failed: {reason} (carry so far: {out})",
    "orch.sumRouter":  "Routed result: {out}",
    "orch.sumSupervisor":  "supervisor conclusion: {out}",
    "orch.title":  "Subagent Orchestration",
    "orch.subtitle":  "Global settings for fanout / pipeline / supervisor / map-reduce / router runs",
    "orch.toolAgentField":  "Each task may name a custom subagent via the agent field; the top-level agent sets the default subagent; supervisorAgent names the supervisor; reviewers names parallel reviewers; tasks may also include outputHint/outputSchema;",
    "orch.toolAutoUse":  "Auto-call this tool without waiting for an explicit user request, and do not handle items serially yourself, when the task meets ANY of: it can be split into 2+ independent subtasks (including reading a large project, multi-file research, batch review, comparing options, multi-repo checks); it needs staged pipeline progress; it needs a senior review gate; or it needs one suitable task routed from a candidate list. For large-project reading, call this tool in the first turn to split the work into parallel subtasks instead of browsing sequentially with read/glob; even if you do not know the project yet, roughly split tasks by module/directory/doc/code area and let subagents read in parallel before you summarize. Tasks may include outputHint/outputSchema, and supervisor runs may configure reviewers/reviewRounds. For multi-target research (e.g. several GitHub repos, npm packages, competitors), split tasks one per target (never merge them into a single task) and require evidence with source URLs and observation dates in each prompt; keep every citation when merging (use researcher/research-merger or mergeInstructions if available). This is the unified orchestration entry point; do not manually fan out with subagent/subagent_fork one by one.",
    "orch.toolDefault":  "Uses the default model when unspecified.",
    "orch.toolFanout":  "fanout: run tasks in parallel across subagents and summarize;",
    "orch.toolIntro":  "Orchestrate multiple subagents.",
    "orch.toolListSubagents":  "List the currently available custom subagents (name / provider / model / description). Subagents are referenced by name in orchestrate (tasks[].agent, top-level agent, supervisorAgent, reviewers) — query this list first to pick one.",
    "orch.toolMapReduce":  "map-reduce: run tasks in parallel, then reduce into one result",
    "orch.toolPipeline":  "pipeline: run sequentially, each task output feeding the next task as input context;",
    "orch.toolRouter":  "router: pick the single most suitable candidate task and run it",
    "orch.toolSupervisor":  "supervisor: run all tasks in parallel first, then a supervisor subagent reviews and merges per mergeInstructions.",
    "orch.toolYouAre":  "You are the orchestrator: break the goal into tasks yourself (each task has a clear, self-contained prompt).",
    "orch.usageHowto":  "The model calls orchestrate automatically on tasks suited to parallel decomposition (e.g. reading a large project, multi-file research), multi-stage work, or review.",
    "subagent.title":  "Subagents",
    "subagent.count":  "{n} subagents",
    "subagent.running":  "Running",
    "subagent.recentDone":  "Recently completed",
    "subagent.idle":  "No subagents running",
    "subagent.runningCount":  "Running {n}",
    "subagent.finishedCount":  "Recently completed {n}",
    "subagent.empty":  "No orchestration runs yet",
    "subagent.refresh":  "Refresh",
    "subagent.close":  "Close",
    "subagent.openSession":  "Open session record",
    "subagent.sessionUnavailable":  "Legacy record has no session link",
    "subagent.statusRunning":  "Running",
    "subagent.statusCompleted":  "Completed",
    "subagent.statusError":  "Error",
    "subagent.statusPending":  "Waiting",
    "subagent.model":  "Model",
    "subagent.tokens":  "tokens",
    "subagent.syncing":  "Syncing",
    "subagent.notTracked":  "Not collected",
    "subagent.more":  "{n} more subagents",
    "subagent.noRole":  "Unassigned role",
    "subagent.lastRun":  "Latest run",
    "section.label":  "HA & Orchestration",
    "skill.body":  "# dsh-ha-orchestrator usage & troubleshooting\n\n## Capabilities\n\n- Model high availability (HA): on request failure, models are quarantined (threshold/cooldown) and traffic fails over to backups; two-level circuits (model + provider), burst-window counting, real probe recovery, and optional context-window degradation.\n- Orchestration: fanout / pipeline / supervisor (multiple reviewers + review rounds) / map-reduce / router; global concurrency, per-run subagent budgets, resume, presets, tool allow/deny, structured outputSchema, and delegation-depth limits. Unsupported provider capabilities are stripped before start.\n- Research presets: built-in researcher and research-merger agents for multi-target research with official URLs, observation dates, preserved evidence, and explicit conflicts.\n- Observability: /ha status|diag|reset|probe, /orchestrate runs|show <runId>|presets, /ha-orch-resume <runId>; JSONL run records plus one Markdown artifact per run containing full subtask output.\n\n## Usage\n\n1. Configure backups: use \"Recommended backups\" in the Model High Availability settings card, or fill provider/model manually; without backups there is no automatic failover.\n2. Let the model orchestrate: just describe the task — the injected context guides the model to call the orchestrate tool automatically (fanout/pipeline/supervisor/map-reduce/router) when the task splits well.\n3. Inspect runs: /orchestrate runs lists recent runs (with a result summary), /orchestrate show <runId> shows details; after an interruption, resume unfinished subtasks directly with /ha-orch-resume <runId>, or use the orchestrate resume parameter to reuse completed results.\n4. Probe a model manually: /ha probe <provider> <model> verifies availability immediately (a quarantined model is released when the probe succeeds).\n5. For a fixed output shape, add outputHint or an object-root outputSchema to a task; for review, use supervisor reviewers/reviewRounds.\n\n## Troubleshooting\n\n- No failover: check ha.enabled, non-empty backups, the codes error-code filter, and that the provider is registered in llm.listProviders.\n- Model stays quarantined: /ha diag shows service availability and persistence state; failed probes extend cooldown (60s-5min), use /ha probe to verify manually.\n- Structured output or tool filtering has no effect: confirm the provider declares the corresponding capability; unsupported fields are stripped before start so the subtask can still run.\n- /ha or /orchestrate commands missing: deployments without the commands service skip commands automatically (rest of the plugin keeps working); /ha diag flags missing services.\n- Config not applied: /ha diag shows configLoaded, haStateLoaded, and the persistence path; config lives in dsh-ha-orchestrator.config.json (plus .backup.json) and can be exported/imported from the System settings card.",
    "skill.desc":  "dsh-ha-orchestrator plugin usage & troubleshooting: HA failover, orchestration, commands, diagnostics",
    "skill.whenToUse":  "Use when configuring/troubleshooting model HA backups and failover, orchestrating subtasks, or checking /ha, /orchestrate commands and run records",
    "sys.copyFailed":  "Copy failed: clipboard access denied by browser",
    "sys.copied":  "Copied to clipboard",
    "sys.copy":  "Copy",
    "sys.dictFailed":  "failed",
    "sys.dictLoaded":  "loaded",
    "sys.dictStatus":  "Dictionary status",
    "sys.dshLocale":  "DSH language",
    "sys.dshNone":  "(unset, defaults to Chinese)",
    "sys.effective":  "Effective language",
    "sys.export":  "Export config",
    "sys.exportBtn":  "Export",
    "sys.exported":  "Exported — copy and save it",
    "sys.exportHint":  "Export the full config as JSON to copy or migrate",
    "sys.import":  "Import config",
    "sys.importBtn":  "Import & apply",
    "sys.imported":  "Imported and applied, refreshing",
    "sys.importHint":  "Paste full config JSON to replace (missing sections fall back to defaults)",
    "sys.importInvalid":  "Invalid config JSON, check and retry",
    "sys.lang":  "Plugin language",
    "sys.langAuto":  "Follow system",
    "sys.langEn":  "English",
    "sys.langHint":  "Follow system = switch with the DSH language automatically; or pin a language manually",
    "sys.langZh":  "Chinese",
    "sys.rollback":  "Auto-rollback",
    "sys.rollbackEvent":  "Rolled back ({reason})",
    "sys.rollbackHint":  "Rolls back to Chinese (zh) automatically if the target language config fails to load",
    "sys.rollbackNo":  "Not triggered",
    "sys.startupNote":  "Language switches automatically to the DSH current selection at startup",
    "sys.subtitle":  "Plugin language & runtime status",
    "sys.title":  "System"
}
