/**
 * English dictionary (constrained by the `Strings` type to the same shape as zh):
 * locale switching goes through state/locale.tsx. Keep domain term capitalization
 * consistent with zh — Agent, Workspace, Token, Task, Skill, Trace, etc.
 */
import type { Strings } from "./strings";

export const en: Strings = {
  siteName: "PenguinHarness",

  announcement: {
    label: "Announcements",
    prev: "Previous announcement",
    next: "Next announcement",
    k3AndFree: "Kimi K3 and free models like Ling 3.0 Flash are now available in PenguinHarness",
    fireworks: "Claim $50 in Fireworks API credits with the AMD Developer Program",
  },

  nav: {
    highlights: "Highlights",
    quickstart: "Quick start",
    cases: "Cases",
    scenarios: "Scenarios",
    benchmark: "Benchmark",
    contract: "CONTRACT.md",
    features: "Features",
    blog: "Blog",
    download: "Download",
    docs: "Docs",
    github: "GitHub",
    openMenu: "Open menu",
    closeMenu: "Close menu",
  },

  theme: {
    label: "Theme",
    light: "Light",
    dark: "Dark",
    system: "System",
  },

  lang: {
    label: "Language",
    zh: "中文",
    en: "English",
    system: "System",
  },

  hero: {
    // The trailing space lives in the PREFIX (a breakable space before the nowrap
    // span) — inside titleNoWrap it would glue "Builder," to the unbreakable chunk.
    titlePrefix: "Your Automated Agent Builder, ",
    titleNoWrap: "Right on Your ",
    titleWords: ["Desktop", "Server"],
    titleSuffix: "",
    subtitle: "Create Self-Evolving Agents in One Click",
    /** Primary CTA: base label, and the platform-aware variant once the OS is detected. */
    downloadCta: "Download the desktop app",
    downloadCtaFor: (platform: string) => `Download for ${platform}`,
    ctaQuickstart: "Get started",
    ctaGithub: "GitHub",
    /** Line under the CTAs: all installers on /download, CLI / self-hosted below the fold. */
    downloadAll: "All platforms (macOS / Windows / Linux)",
    cliAlt: "CLI and self-hosted install ↓",
    stats: [
      { value: "1000+", label: "supported models" },
      { value: "1×CPU", label: "minimum footprint" },
      { value: "100%", label: "open source, local deploy" },
      { value: "First native", label: "recursively self-improving harness" },
    ],
  },

  install: {
    linux: "Linux",
    macos: "macOS",
    windows: "Windows",
    online: "Online install",
    offline: "Offline package",
    offlineNote:
      "Every GitHub Release attaches one package per target (Linux / macOS in x64 and arm64, Windows in x64) and the same file serves online and offline installation. Each package seals the program payload, its SHA256 checksum and the installer: download that one file on a networked machine, copy it to the target, extract once and install with no network at all.",
    offlineHints: {
      linux: "On arm64 machines, use penguin-linux-arm64.tar.gz.",
      macos: "Apple silicon uses the arm64 package; on Intel, use penguin-darwin-x64.tar.gz.",
      windows: "After unzipping you can also just double-click install.cmd.",
    },
    offlineRelease: "Download offline packages from GitHub Releases",
    desktopNote:
      "Already on the desktop app? A CLI install shares the same local data with it, and the two can be used side by side.",
    desktopPage: "Go to the desktop download page",
  },

  download: {
    eyebrow: "Download",
    title: "Download the desktop app",
    subtitle:
      "The full Web experience as a standalone application: it embeds the server and opens already signed in — no terminal, no login page; data lives in the same ~/.penguin/data root as a CLI install.",
    recommended: "Your system",
    platforms: {
      mac: { name: "macOS", require: "macOS 11 or later, dmg disk image (pick your chip)" },
      windows: { name: "Windows", require: "Windows 10 or later (x64), NSIS installer" },
      linux: {
        name: "Linux",
        require: "x64 — AppImage runs in place, deb goes to your package manager",
      },
    },
    statusOss: (version: string) =>
      `Connected to the OSS mirror (${version}) — downloads are served from the mirror.`,
    statusGithub: "Downloads point at the latest GitHub Release.",
    altGithub: "Download from GitHub instead",
    altOss: "Use the OSS mirror instead",
    checksums: "Checksums (SHA256SUMS.desktop)",
    allReleases: "All releases",
    /** First-launch FAQ: one collapsible item per platform, the visitor's own pre-expanded. */
    faq: {
      title: "First-launch FAQ",
      intro:
        "Current builds are not signed yet, so the system may block the very first launch — the fix for your platform below is needed only once.",
      mac: {
        question: "macOS says “PenguinHarness” is damaged and can’t be opened?",
        why: "macOS quarantines files downloaded from the internet, and the missing signature makes that flag surface as a false “damaged” alert. Deleting the flag clears it:",
        stepDrag: "Open the downloaded dmg and drag PenguinHarness into the Applications folder.",
        stepTerminal: "Open Terminal (Launchpad → Other → Terminal).",
        stepPaste:
          "Paste this command into Terminal and press Enter, then type your login password (nothing shows while you type; press Enter when done):",
        stepOpen: "Once it finishes, double-click the app — it now opens normally.",
      },
      windows: {
        question: "Windows SmartScreen says “Windows protected your PC”?",
        answer:
          "The installer is not signed yet, so SmartScreen holds the first run: click “More info”, then “Run anyway” to continue installing — first run only.",
      },
      linux: {
        question: "Nothing happens when double-clicking the AppImage on Linux?",
        answer:
          "Browsers download AppImages without the execute permission. Grant it once and the app starts normally from then on (the deb package installs through the package manager and is not affected):",
      },
    },
    cliHint: "Just need the CLI, or the Web UI in a browser?",
    cliHintLink: "See the quick start",
  },

  copy: {
    copy: "Copy",
    copied: "Copied",
  },

  pillars: {
    eyebrow: "Three pillars",
    title: "Built for building — and evolving — agents",
    subtitle:
      "PenguinHarness is the first open-source harness to ship “agents building agents” and recursive self-improvement.",
    root: "PenguinHarness",
    concepts: ["Penguin Message", "Penguin SDK", "Penguin Skills"],
    diagramLabel:
      "PenguinHarness radiates into Penguin Message, Penguin SDK and Penguin Skills, each extending into one pillar",
    items: [
      {
        title: "Simplest Is the Best",
        tag: "",
        desc: "A deliberately minimal toolset over clean low-level interfaces: fewer tool calls, fewer Tokens, complex tasks done efficiently.",
      },
      {
        title: "Harness for Building Agents",
        tag: "",
        desc: "With the PenguinHarness SDK, an Agent builds complete Agent applications for you — autonomously, from scratch.",
      },
      {
        title: "Harness for Recursive Self-Improvement",
        tag: "",
        desc: "With PenguinHarness Skills, an Agent evaluates and optimizes itself, improving recursively over time.",
      },
    ],
  },

  compare: {
    eyebrow: "vs. LangChain",
    title: "Building Agents with Agents",
    subtitle: [
      "With LangChain, you build agents by hand — at 1× speed.",
      "With PenguinHarness, agents build agents — at 100×.",
    ],
    langchain: {
      name: "LangChain",
      speed: "1×",
      mode: "Agents built by hand",
      note: "Chains, tools and prompts written line by line — every app starts from zero.",
    },
    penguin: {
      name: "PenguinHarness",
      speed: "100×",
      mode: "Agents built by agents",
      note: "One sentence in — an Agent delivers scaffold, code and run instructions end to end.",
    },
  },

  selfImprove: {
    eyebrow: "The self-improvement loop",
    title: "Multi-agent collaboration makes evolution automatic",
    subtitle:
      "The Optimizer orchestrates multiple Evaluators to score the Target Agent in parallel, uses the scores and run traces to find where points were lost, and upgrades the Agent from version N to N+1 — with a snapshot before every round.",
    videoLabel: "Self-improvement demo video",
    videoCaption:
      "The self-improvement loop end to end: run the benchmark, find the lost points, ship the next version.",
    nodeOptimizer: "Optimizer",
    nodeEvaluator: "Evaluator × N",
    nodeTarget: "Target Agent",
    badgeOld: "vN",
    badgeNew: "vN+1",
    edgeSpawn: "spawn parallel evaluations",
    edgeBench: "run Benchmarks",
    edgeFeedback: "scores & traces",
    edgeImprove: "update prompts & Skills",
    trends: [
      { label: "Score", hint: "keeps rising" },
      { label: "Cost", hint: "keeps falling" },
      { label: "Time", hint: "keeps shrinking" },
    ],
    diagramLabel:
      "Self-improvement loop: the Optimizer orchestrates Evaluators to score, then upgrades the Target Agent from vN to vN+1 via scores and traces",
  },

  quickstart: {
    eyebrow: "Quick start",
    title: "Your first task in three steps",
    subtitle:
      "Install with one command and let the Agent work from a desktop-grade interface — all data stays in your local ~/.penguin/data directory.",
    step1: "Install",
    step1Desc:
      "Pick your OS and method — the online one-liner, or an offline package; the bundle carries its own Node runtime, and upgrades never touch your data.",
    tabWeb: "Web UI",
    tabCli: "CLI",
    webStep2: "Open the web interface",
    webStep2Desc:
      "penguin web starts the local service and opens your browser; sign in as the built-in admin “admin” with the initial password printed in the terminal on first start (looks like penguin-1234; change it right after).",
    webCmd: "penguin web   # opens http://127.0.0.1:7364",
    webStep3: "Configure a model in the UI and start chatting",
    webStep3Desc:
      "Open the Models page, paste an API key under the DeepSeek or OpenRouter group and set it as default; then head back to Chat and hand the Agent its first task — e.g. “Analyze data.csv and summarize quarterly sales”.",
    getKeyPrefix: "Get an API key: ",
    getDeepseekKey: "DeepSeek console",
    getOpenrouterKey: "OpenRouter console",
    cliStep2: "Configure a model",
    cliStep2Desc:
      "Using the DeepSeek official API or the OpenRouter gateway as examples — one command configures it and sets the default.",
    tabDeepseek: "DeepSeek",
    tabOpenrouter: "OpenRouter",
    deepseekCmd: `penguin config model add \\
  --provider deepseek \\
  --model-id deepseek-v4-pro \\
  --api-key sk-your-deepseek-key \\
  --set-default`,
    deepseekNote:
      "A model is always referenced by the (provider, model_id) pair, so --provider is required; omit --api-key to fall back to the DEEPSEEK_API_KEY environment variable.",
    openrouterCmd: `penguin config model add \\
  --provider openrouter \\
  --model-id deepseek/deepseek-v4-pro \\
  --api-key sk-or-your-key \\
  --set-default`,
    openrouterNote:
      "Gateway groups pre-fill the OpenAI-compatible protocol and base URL — one key unlocks a thousand models.",
    cliStep3: "Run",
    cliStep3Desc:
      "penguin run executes a single task; penguin chat drops you into an interactive REPL.",
    runCmd: `penguin run --approve allow-all \\
  --message "Analyze data.csv and summarize quarterly sales"`,
  },

  cases: {
    eyebrow: "Cases",
    title: "From one sentence to a running app",
    subtitle:
      "Hand the requirement to an Agent and get a runnable result end to end — more cases are on the way.",
    tabs: [
      {
        label: "RAG app",
        prompt:
          "Collect the docs from https://github.com/ericbuess/claude-code-docs and build a RAG app that answers Claude Code questions as a configuration expert, citing its sources.",
        caption:
          "The generated RAG app: a Claude Code docs expert answering with cited, clickable sources and example questions",
        cost: "And generating this entire RAG app burned just $0.02 (¥0.2) of tokens — on DeepSeek V4 Pro.",
      },
      {
        label: "2D penguin sled game",
        prompt:
          "Build a cute Antarctic penguin sledding game: Space to jump the rocks, with speed and difficulty ramping up over time.",
        caption:
          "The generated mini game: an Antarctic penguin sleds and jumps rocks, with live scoring and rising difficulty",
        cost: "",
      },
    ],
  },

  scenarios: {
    eyebrow: "Scenarios",
    title: "From screening centers to factory floors",
    subtitle: "Real deployments in production — not concept demos.",
    items: [
      {
        title: "Screening-report QC",
        alt: "A CT scanner room at a health screening center",
        body: "A health-screening group handed report QC to an agent on a locally deployed Qwen3 14B — data never leaves the facility. A review round that took 30 minutes by hand now clears 30 reports a minute, with findings in line with medical experts and several times the review capacity.",
      },
      {
        title: "Production-line inspection",
        alt: "An automated semiconductor production line",
        body: "A manufacturer runs inspection agents across its production lines, watching equipment around the clock and trying automated recovery first when something goes wrong. Downtime is down 65%; output roughly doubled.",
      },
    ],
  },

  contract: {
    eyebrow: "A contract for stable evolution",
    title: "CONTRACT.md",
    subtitle:
      "PenguinHarness treats this contract as the boundary and bedrock of evolution: capability may grow, the boundary never drifts.",
    intro:
      "Evolution needs boundaries. The contract is the covenant between harness and Agent: capability grows within; the boundary holds without.",
    items: [
      {
        term: "Working boundary",
        text: "Every Agent runs on the same harness: Sessions are created under an Agent, Tasks run inside a Session; self-improvement happens only inside Workspace and Skills, while the harness kernel and its safety mechanisms never change.",
      },
      {
        term: "Editable files",
        text: "An Agent's prompts, Skills and configuration live as editable files on disk, never as constants baked into code. What you can see, the Agent can improve; what you can edit, it can learn.",
      },
      {
        term: "Full tracing",
        text: "Every model request and every tool call is written to the Trace in full: how many Tokens it spent, how long it took, why it failed — all replayable line by line afterwards.",
      },
      {
        term: "Approvals & audit",
        text: "Every tool call passes approval before it runs, and every decision leaves an audit record — what the Agent did is never a mystery.",
      },
      {
        term: "Version control",
        text: "Before each optimization, the Agent State is snapshotted. If a round fails or regresses, restore any historical version in one step.",
      },
      {
        term: "Progressive loading",
        text: "Content for the model is indexed first and read on demand — never dumped wholesale into context. The cleaner the context, the steadier the behavior.",
      },
      {
        term: "Error handling",
        text: "Errors split into retryable and fatal: retryable ones retry automatically, fatal ones converge into messages the model can see and react to. No task dies of a single failure.",
      },
      {
        term: "Credential isolation",
        text: "API keys and other credentials live in hidden files and move only through system interfaces — never entering model context, never shown in plain text.",
      },
      {
        term: "Model decoupling",
        text: "Models are not bound to Agents: switch to a stronger or cheaper model at any time without rewriting the Agent.",
      },
      {
        term: "Recoverable trajectories",
        text: "Any Session can be fully restored from its Trace: restart the process or move machines without losing context.",
      },
    ],
    outro: "The contract does not cap what an Agent can become — only how it gets there.",
  },

  benchmark: {
    eyebrow: "Benchmark",
    title: "Outstanding results at tens of times less cost",
    subtitle:
      "Every product runs the model it is normally paired with, head-to-head against Claude Code and OpenAI Codex on two suites: comparable accuracy, tens of times the difference in spend.",
    higherBetter: "higher is better",
    lowerBetter: "lower is better",
    dimScore: "Accuracy",
    dimTokens: "Tokens",
    dimCost: "Cost",
    dataTitle: "Complex data analysis",
    dataDesc:
      "Best accuracy of the three (66.67%, against 53.33% for both rivals), at 1/35 of OpenAI Codex's cost and 1/70 of Claude Code's.",
    dataFootnote:
      "15 complex data-analysis tasks · single run · Tokens and cost are suite totals · estimated at official pricing.",
    codeTitle: "Coding tasks",
    codeDesc:
      "Ties OpenAI Codex on accuracy (71.25%) and trails Claude Code (86.25%) — at 1/58 and 1/39 of their cost.",
    codeFootnote:
      "40 coding tasks × 2 runs (accuracy over all 80 outcomes) · Tokens and cost are suite totals · estimated at official pricing.",
    colFramework: "Framework",
    colModel: "Model",
    colAccuracy: "Accuracy (%)",
    colTokens: "Tokens (M)",
    colCost: "Cost ($)",
  },

  features: {
    eyebrow: "Features",
    title: "The full capability set, one desktop-grade UI",
    subtitle: "One-to-one with the web interface's menu — installed means ready.",
    more: "and more…",
    items: [
      {
        title: "Multi-session chat",
        desc: "Any number of sessions per Agent — streaming output, tool approvals and image paste out of the box.",
      },
      {
        title: "Agent hub",
        desc: "Create and manage Agents in one click; names, descriptions and prompts stay editable.",
      },
      {
        title: "Skill library",
        desc: "Browse, install and quick-invoke Skills — Agents can write and optimize their own.",
      },
      {
        title: "Scheduled tasks",
        desc: "Cron-style schedules run Agents on time, fully traced, unattended.",
      },
      {
        title: "Subagents",
        desc: "Delegate work to parallel Subagents — independent and isolated from each other.",
      },
      {
        title: "Cost center",
        desc: "Daily trends for Tokens, requests and cost, with per-model success rates and anomalies.",
      },
      {
        title: "Trace view",
        desc: "Replay every request and tool call round by round, with Token breakdown and timing.",
      },
      {
        title: "Agent evaluation",
        desc: "Built-in Benchmark suites and scoreboards — scores keep climbing as Agents evolve.",
      },
      {
        title: "Multi-user management",
        desc: "Admins provision users; each gets an independent Project with isolated data.",
      },
    ],
  },

  skills: {
    eyebrow: "Built-in Skills",
    title: "The built-in Skill library at a glance",
    subtitle: "Four Skill groups out of the box — Agents can write and optimize their own, too.",
    groups: [
      { title: "Office Productivity", skills: ["data-analysis", "firecrawl"] },
      { title: "Software Development", skills: ["web-design", "software-engineering"] },
      {
        title: "AI App Development",
        skills: ["penguin-sdk", "penguin-cli", "agenthub-models", "vllm", "ollama", "llamafactory"],
      },
      {
        title: "Agent Tuning",
        skills: ["agent-creation", "benchmark-design", "agent-evaluation", "agent-optimization"],
      },
    ],
  },

  security: {
    eyebrow: "Security",
    title: "Evolution within bounds, data within walls",
    subtitle: "A runtime boundary designed for enterprise data security.",
    items: [
      {
        title: "Open source, local deployment",
        desc: "A fully auditable open-source kernel; data lives in local directories and never passes through third-party services.",
      },
      {
        title: "Bounded evolution",
        desc: "Self-improvement is strictly confined to Workspace and Skills — the harness core security boundary is never modified.",
      },
      {
        title: "Approvals & audit",
        desc: "Tool calls require user approval first, and every decision is written to the Trace as an audit event.",
      },
      {
        title: "Credential isolation",
        desc: "Credentials land as hidden 0600 files, are barred from the system prompt, and stay masked throughout the UI.",
      },
    ],
  },

  community: {
    eyebrow: "Community",
    title: "Join the community and build with us",
    subtitle: "Discuss, ask, contribute — your first Issue is the best way to start.",
    items: {
      discord: { name: "Discord", desc: "Chat with us and other developers in real time." },
      x: { name: "X (Twitter)", desc: "Follow the latest product and team updates." },
      wechat: { name: "WeChat group", desc: "Chinese community discussions and support." },
      github: { name: "GitHub", desc: "Stars, Issues, and PRs all welcome." },
    },
  },

  cta: {
    title: "Complex AI development, made ever simpler",
    subtitle:
      "Through continuous evolution, PenguinHarness gives you a more efficient, more reliable, lower-hallucination and lower-cost Agent productivity engine.",
    download: "Download the desktop app",
    quickstart: "Get started",
    docs: "Read the docs",
  },

  footer: {
    tagline: "Efficient Self-Improving Harness for Everyone.",
    product: "Product",
    resources: "Resources",
    quickstart: "Quick start",
    features: "Features",
    benchmark: "Benchmark",
    blog: "Blog",
    repo: "GitHub repository",
    docs: "Documentation",
    releases: "Releases",
    license: "Apache-2.0 License",
    copyright: "© 2026 Prism Shadow · Open source under Apache-2.0",
  },

  blog: {
    title: "Blog",
    subtitle: "Product news, tech practices, perspectives and release notes",
    all: "All",
    news: "Product news",
    practice: "Tech practice",
    perspectives: "Perspectives",
    changelog: "Release notes",
    pinned: "Pinned",
    copyLink: "Copy page link",
    linkCopied: "Copied",
    back: "Back to blog",
    empty: "No posts in this category yet",
    notFound: "Post not found",
    backHome: "Back to home",
    toc: "On this page",
  },
};
