{
  "hello": "Hello",
  "install": {
    "banner_title": "Mipham Code Installer",
    "banner_subtitle": "Multi-model open-core intelligent coding terminal",
    "unsupported_os": "Unsupported OS: {os}. Mipham Code supports macOS and Linux.",
    "detected": "Detected: {os}",
    "install_options_title": "Install options:",
    "install_npm_desc": "npm install -g @miphamai/cli  (recommended, all platforms)",
    "install_curl_intl": "curl -fsSL https://mipham.ai/install.sh | bash  (international)",
    "install_curl_cn": "curl -fsSL https://onemipham.com/install.sh | bash  (China mainland)",
    "install_direct": "Direct download: https://mipham.ai/code/install",
    "found_bun": "Found: Bun v{version}",
    "found_node": "Found: Node.js v{version}",
    "node_old_warning": "Node.js v{version} detected (v22+ recommended)",
    "node_old_install_bun": "Installing Bun for optimal performance...",
    "no_runtime": "No runtime detected",
    "installing_bun": "Installing Bun (fast all-in-one JavaScript runtime)...",
    "need_curl_or_wget": "Need curl or wget to install Bun.",
    "bun_installed": "Bun installed successfully",
    "bun_install_failed": "Bun installation failed.",
    "install_manually": "Install manually: https://bun.sh/",
    "downloading_binary": "Downloading binary: {name}...",
    "binary_installed": "Binary installed to /usr/local/bin/mipham",
    "binary_fallback": "Binary download failed, falling back to npm...",
    "installing_package": "Installing {package}...",
    "install_failed": "Installation failed.",
    "try_npm": "Try: npm install -g {package}",
    "install_success": "Mipham Code v{version} installed successfully!",
    "run_to_start": "Run mipham to start.",
    "run_help": "Run mipham --help for options.",
    "docs_url": "Docs: https://mipham.ai/code/docs",
    "not_in_path": "Installation may have succeeded, but 'mipham' not found in PATH.",
    "add_to_path": "Add to PATH or restart your terminal."
  },
  "vscode": {
    "statusBar": "Mipham Code",
    "tooltip": "Click to focus Mipham Code terminal",
    "welcome": "Mipham Code is ready. Press Cmd+Esc to start.",
    "noConfig": "No Mipham Code config found. Run \"mipham /init\" to create one.",
    "start": "Start",
    "dismiss": "Dismiss",
    "terminalName": "Mipham Code"
  },
  "web": {
    "hero": {
      "title": "Mipham Code",
      "subtitle": "Multi-model open-core intelligent coding terminal. Built for developers who demand power, speed, and flexibility.",
      "company": "Powered by One Mipham Corporation | 北京华安麦逸科技有限公司",
      "domains": "International: mipham.ai  |  中国大陆: onemipham.com",
      "cta_start": "Get Started",
      "cta_docs": "Documentation"
    },
    "features": {
      "title": "Why Mipham Code?",
      "multi_model": {
        "title": "Multi-Model",
        "desc": "Connect to Claude, GPT, DeepSeek, Qwen, Kimi, and more through a unified interface. Switch models on the fly with Ctrl+P."
      },
      "slash_commands": {
        "title": "85 Slash Commands",
        "desc": "Full Claude Code parity: /commit, /pr, /simplify, /lint, /loop init, /browse-plugins — all 85 commands with zero learning curve."
      },
      "plugins": {
        "title": "Plugin Marketplace",
        "desc": "Install plugins from npm or local paths. Discover community plugins including NotebookLM MCP integration."
      },
      "loopkit": {
        "title": "LoopKit Vault",
        "desc": "/loop init scaffolds a complete project structure: .mipham/ config, hooks, agents, 9-domain skills, .mcp.json, and more."
      },
      "mcp": {
        "title": "MCP Protocol",
        "desc": "Full Model Context Protocol support with stdio transport. Connect to NotebookLM, filesystem, GitHub, and custom MCP servers."
      },
      "secure": {
        "title": "Open-Core & Secure",
        "desc": "Apache 2.0 license. TLS 1.3, AES-256-GCM encryption, comprehensive permission system. Enterprise security out of the box."
      }
    },
    "models": {
      "title": "Supported Models",
      "status_active": "Active",
      "status_upcoming": "Upcoming"
    },
    "install_section": {
      "title": "Install in Seconds",
      "subtitle": "Four ways to install — choose what works for your platform.",
      "npm_recommended": "npm (recommended)",
      "curl_label": "curl (macOS / Linux)",
      "powershell_label": "PowerShell (Windows)",
      "label_international": "International · 国际站",
      "label_china": "中国大陆 · China mainland",
      "requirements": "Requires Bun 1.2+ or Node.js 22+. Supports macOS, Linux, Windows.",
      "full_guide": "Full installation guide"
    },
    "footer": {
      "copyright": "© {year} One Mipham Corporation. All rights reserved.",
      "docs": "Docs",
      "dashboard": "Dashboard",
      "github": "GitHub"
    },
    "install_page": {
      "title": "Installation",
      "current_version": "Current version:",
      "choose_platform": "Choose your platform and preferred install method.",
      "all_methods_same": "All methods install the same Mipham Code.",
      "prerequisites": "Prerequisites",
      "prereq_bun": "Bun 1.2+ (recommended) or Node.js 22+",
      "prereq_os": "macOS, Linux, or Windows (PowerShell)",
      "prereq_api_key": "At least one AI provider API key (e.g., Anthropic, OpenAI)",
      "npm_title": "1. npm Install (Recommended)",
      "npm_desc": "Works on all platforms — macOS, Linux, Windows.",
      "curl_title": "2. curl Install (macOS / Linux)",
      "powershell_title": "3. PowerShell Install (Windows)",
      "direct_download": "4. Direct Download",
      "table_platform": "Platform",
      "table_download": "Download",
      "platform_mac_arm": "macOS (Apple Silicon)",
      "platform_mac_intel": "macOS (Intel)",
      "platform_linux": "Linux (x64)",
      "platform_windows": "Windows (x64)",
      "verify_title": "Verify Installation",
      "start_title": "Start Mipham Code",
      "first_launch": "On first launch, the interactive setup wizard (/setup) will guide you through provider configuration, model selection, skills installation, and permissions.",
      "api_keys_title": "Set API Keys",
      "api_keys_desc": "Export your provider API keys as environment variables:",
      "international": "International · 国际站",
      "china_mainland": "中国大陆 · China mainland"
    },
    "docs": {
      "title": "Documentation",
      "quick_start": "Quick Start",
      "configuration": "Configuration",
      "commands": "Commands",
      "help": "Show help",
      "model": "Show current model",
      "switch": "Switch model",
      "clear": "Clear conversation",
      "exit": "Exit Mipham Code"
    },
    "dashboard": {
      "title": "Dashboard",
      "coming_soon": "Coming Soon",
      "description": "The Mipham Code dashboard will show your usage analytics — session history, token consumption, most-used models and tools, and skill activity. We’re building this now.",
      "sessions": "Sessions",
      "sessions_desc": "Session history & stats",
      "tokens": "Tokens",
      "tokens_desc": "Usage across providers",
      "skills": "Skills",
      "skills_desc": "Active skill analytics"
    },
    "not_found": {
      "code": "404",
      "title": "Page not found",
      "description": "The page you’re looking for doesn’t exist.",
      "back": "Back to Mipham Code"
    },
    "error": {
      "title": "Something went wrong",
      "fallback_message": "An unexpected error occurred.",
      "try_again": "Try again"
    }
  },
  "greeting": "Hello {name}",
  "commands": {
    "clear": { "confirmed": "✓ Conversation cleared. Context reset." },
    "compact": {
      "confirmed": "✓ Context compacted.",
      "tokens": "Tokens: {before} → {after} (saved {saved}%)"
    },
    "status": {
      "title": "── System Diagnostics ──",
      "session_title": "── Session Status ──",
      "system_title": "── System ──",
      "config": "── Config ──",
      "session": "── Session ──",
      "git": "── Git ──",
      "skills": "── Skills ──",
      "provider": "Provider:",
      "model": "Model:",
      "messages": "Messages:",
      "tokens": "Tokens:",
      "tools": "Tools:",
      "loaded": "loaded",
      "permission": "Permission:",
      "platform": "Platform:",
      "runtime": "Runtime:",
      "cwd": "CWD:"
    },
    "switch": {
      "usage": "Usage: /switch <provider> <model>\nExample: /switch deepseek deepseek-v4-pro",
      "confirmed": "✓ Switched to {provider}/{model}",
      "needs_api_key": "{provider} requires an API Key. Enter it below, or use Ctrl+P to select a model and input.",
      "unknown_provider": "Unknown provider: {provider}"
    },
    "goal": {
      "set": "✓ Goal set: \"{goal}\"",
      "usage": "Usage: /goal <statement> [options]\n\nSet a session-level completion condition with optional verification.\n\nOptions:\n  --decompose              Auto-decompose goal into subtasks\n  --verify-script <path>   Run a shell script to check completion\n  --verify-skill <name>    Use a skill for verification\n\nExamples:\n  /goal Fix all TS errors and make tests pass --decompose\n  /goal Complete the build --verify-script ./check-build.sh\n  /goal Security audit passes --verify-skill security-review",
      "empty_set": "Goal text is required. Use /goal without arguments to see usage.",
      "decompose_enabled": "📋 Decomposition: enabled — AI will break goal into subtasks",
      "status_title": "── Goal Status ──",
      "status_goal": "🎯 Goal: {goal}",
      "status_verify_script": "📜 Verification: {script}",
      "status_verify_skill": "🛠  Verification skill: {skill}",
      "status_decompose": "📋 Decompose: enabled ({count} subtasks)",
      "status_clear_hint": "Type /goal without arguments to clear.",
      "status_hint": "Use /status to view progress. Type /goal without arguments to clear."
    },
    "rename": {
      "usage": "Usage: /rename <session-name>\nExample: /rename Bug Fix Session",
      "confirmed": "✓ Session renamed to \"{name}\""
    },
    "plan": {
      "entered": "Entered plan mode.",
      "content": "── Plan Mode ──\n\nEntering plan mode — read-only analysis and design.\nUse EnterPlanMode to start, ExitPlanMode to submit for approval."
    },
    "save": {
      "content": "── Save to Wiki ──\n\nAnalyzing the conversation and filing the most valuable insight into your Obsidian wiki…"
    },
    "diff": {
      "clean": "No uncommitted changes (working tree clean).",
      "title": "── Git Diff ──",
      "error": "Unable to run git diff. Ensure git is installed and you are in a repository."
    },
    "context": {
      "title": "── Context Stats ──",
      "messages": "Messages:",
      "estimated_tokens": "Estimated tokens:",
      "usage_pct": "Usage:",
      "system_prompt": "System prompt:",
      "compaction": "Compaction:"
    },
    "context_tokens": {
      "title": "── Token Usage (estimated) ──",
      "context_tokens": "Context tokens:",
      "usage": "Usage:",
      "prompt_cache": "Prompt cache: ~{cached} cached ({ratio}% hit) · ~{uncached} uncached",
      "footer": "Token counting is approximate (chars/4).\nActual API usage depends on provider and model."
    },
    "model": {
      "current": "Current model: {model}\nProvider: {provider}\n\nUse /switch <provider> <model> to change."
    },
    "models": {
      "title": "Available models ({count} active):",
      "header": "Provider      Model                          Context     Vision",
      "hint": "Use /switch <provider> <model> to change.\nSee /providers for upcoming models."
    },
    "ollama_refresh": {
      "not_configured": "Ollama provider not configured",
      "done": "Ollama models refreshed: {total} total ({added})",
      "error": "Refresh failed: {error}"
    },
    "provider": {
      "current": "Current provider: {provider}\nModel: {model}"
    },
    "providers": {
      "title": "Configured providers:",
      "current": "Current: {provider}/{model}"
    },
    "config": {
      "title": "── Configuration ──",
      "edit": "Edit: ~/.mipham/config.yml or .mipham/config.yml"
    },
    "tools": {
      "title": "Available tools ({count}):"
    },
    "skills": {
      "unavailable": "SkillsLoader not available in this context.",
      "loaded": "{count} skills loaded. Use Skill tool to invoke."
    },
    "tdd": {
      "title": "── TDD Mode ──",
      "start": "Starting Test-Driven Development workflow for: {target}",
      "cycle": "Cycle: 🔴 RED → 🟢 GREEN → 🔵 REFACTOR",
      "red": "RED:   Write a failing test first",
      "green": "GREEN: Write minimal code to pass",
      "refactor": "REFACTOR: Clean up while keeping tests green",
      "guide": "The AI will guide you through each cycle."
    },
    "todos": {
      "usage_create": "Usage: /todos create <task-title>\n\nExample: /todos create Add user authentication",
      "item_list": "/todos list           Show all tasks",
      "item_create": "/todos create <title> Create a new task",
      "list_title": "── Task Management ──",
      "list_fetching": "Fetching current task list...",
      "create_title": "── Create Task ──",
      "default_title": "── Task Management ──",
      "default_body": "The AI manages task state via the Task tool, using the \"create\", \"list\", \"update\", and \"get\" actions.\nTasks appear in the /tasks view and persist across the session."
    },
    "copy": {
      "confirmed": "✓ Copied {count} assistant response(s) to clipboard.",
      "no_responses": "No assistant responses to copy.",
      "usage": "Usage: /copy [N]\nN = number of recent assistant responses to copy (default: 1)"
    },
    "recap": {
      "title": "── Session Recap ──",
      "no_conversation": "No conversation to recap.",
      "messages": "Messages:",
      "est_tokens": "Est. tokens:",
      "checkpoints": "Checkpoints:",
      "recent_topics": "Recent topics:",
      "footer": "Use /rewind to undo, /clear to reset, /export to save."
    },
    "task_list": {
      "title": "── Background Tasks ──",
      "detected": "{count} task operations detected in this session.\n\nUse the Task tool (action \"create\" / \"update\" / \"list\") to manage structured task tracking.",
      "no_tasks": "No tasks tracked yet. Use the Task tool with action \"create\", \"update\", or \"list\" to manage structured tasks.",
      "reference": "Quick reference:",
      "legacy_hint": "Type /todos for the legacy task interface."
    },
    "resume": {
      "no_sessions": "No saved sessions.",
      "restored": "─ Session History Loaded ─",
      "not_found": "Session \"{name}\" not found.",
      "saved_title": "─ Saved Sessions ─",
      "found_title": "─ Session Found ─",
      "not_found_title": "─ Session Not Found ─",
      "load_failed": "─ Load Failed ─",
      "restored_content": "Name:      {name}\nMessages:  {total} total{truncated}\nProvider:  {provider} / {model}\nUpdated:   {date}",
      "restored_footer": "{loaded} of {total} messages loaded into the view (older ones not shown).",
      "restored_full_footer": "{loaded} messages loaded into the view. The model's context is unchanged — to continue this session, run: mipham --resume \"{name}\"",
      "delete_usage": "Usage: /resume delete <session-name>\n\nDelete a saved session. Use /resume to list all sessions.",
      "delete_confirmed": "✓ Session \"{name}\" deleted.",
      "delete_not_found": "✗ Session \"{name}\" not found. Use /resume to list all sessions.",
      "empty_footer": "Sessions are auto-saved to ~/.mipham/sessions/ when Mipham Code exits.\nStart a conversation — it will be saved automatically.",
      "total_footer": "Total: {count} session(s) • Location: ~/.mipham/sessions/",
      "resume_hint": "Session details:        /resume <name>",
      "resume_last_hint": "Load recent history:    /resume last",
      "delete_hint": "To delete a session:    /resume delete <name>",
      "cli_hint": "To resume from CLI:     mipham --resume \"<name>\"",
      "auto_save_hint": "Sessions are auto-saved on exit. On restart only the most recent session's summary is injected as context — to reopen a session: mipham --resume \"<name>\"",
      "not_found_content": "No session named \"{name}\".\n\nUse /resume without arguments to list all saved sessions.",
      "found_content": "Name:      {name}\nMessages:  {messages}\nProvider:  {provider} / {model}\nUpdated:   {updated}\n\nTo continue this session, start a new process with:\n  mipham --resume \"{target}\""
    },
    "help": { "title": "── Mipham Code Help ──" },
    "lang": {
      "current": "Language: {locale}",
      "set": "Language set to {locale}. Restart Mipham Code to apply."
    },
    "exit": {},
    "version": {
      "title": "Mipham Code v{version}",
      "runtime_label": "Runtime:",
      "platform_label": "Platform:",
      "node_label": "Node:",
      "cwd_label": "CWD:",
      "provider_label": "Provider:",
      "tools_label": "Tools:",
      "skills_label": "Skills:",
      "skills_details": "{total} built-in ({standard} standard + {mipham} mipham)",
      "skills_unavailable": "(loader unavailable)",
      "license": "License:  Apache 2.0"
    },
    "pick": {
      "title": "── Model Picker ──",
      "content": "Use ↑↓ to navigate, Enter to select, Esc to close.\n\nCurrent: {provider} / {model}\nAvailable: {pcount} providers, {mcount} models\n\nTip: Press Ctrl+P or type /pick from the chat input."
    },
    "usage": {
      "title": "── Usage Dashboard ──",
      "api_tokens": "API tokens:      {in} in / {out} out ({total} total)",
      "no_api": "API tokens:      (no API usage data yet)",
      "context_line": "Context tokens:  ~{est} / {max}  ({pct}%)",
      "messages_line": "Messages:         {count}",
      "provider_line": "Provider:         {provider}",
      "model_line": "Model:            {model}",
      "tool_section": "── Per-Tool ──",
      "loops_header": "── Autonomous Loops ──",
      "hint": "Use /context for detailed stats, /compact to free space."
    },
    "reload_skills": {
      "unavailable": "SkillsLoader not available in this context.",
      "confirmed": "✓ Skills reloaded — {count} loaded.",
      "failed": "Failed to reload skills: {error}"
    },
    "rewind": {
      "no_checkpoints": "No checkpoints available. Checkpoints are automatically saved after each AI response.",
      "no_restore": "No checkpoint to restore.",
      "confirmed": "✓ Rewound to checkpoint \"{label}\"\nRestored {count} messages.\n\nRemaining checkpoints: {remaining}\nUse /rewind again to go back further, or continue chatting."
    },
    "fast": {
      "on": "✓ Fast mode ON — responses will prioritize speed over depth.",
      "off": "✓ Fast mode OFF — standard quality mode.",
      "usage": "Usage: /fast [on|off]\nToggle fast mode for faster responses.",
      "unknown": "Usage: /fast [on|off]\n\nFast mode prioritizes speed over depth. Currently available as a configuration toggle.\n\nExample:\n  /fast on   — enable fast mode\n  /fast off  — disable fast mode"
    },
    "effort": {
      "usage": "Usage: /effort <level>\n\nSet reasoning effort level:\n  low      — Fast, simple tasks\n  medium   — Balanced quality and speed\n  high     — Thorough reasoning (default)\n  xhigh    — Maximum depth for coding/agentic use\n  max      — Absolute ceiling, very thorough\n\nCurrent model: {model}\nEffort levels require compatible providers (Anthropic Opus 4.6+, Sonnet 4.6).",
      "confirmed": "✓ Reasoning effort set to \"{level}\""
    },
    "focus": {
      "on": "✓ Focus mode ON — showing only the most recent exchange.\nPrevious messages are hidden but preserved.\nType /focus again to exit focus mode and show all messages."
    },
    "ultracode": {
      "on": "✓ Ultracode mode ON — multi-agent workflow orchestration enabled.\n\nThe AI will use Workflow tool to fan out, verify, and synthesize for all substantive tasks.",
      "off": "✓ Ultracode mode OFF.",
      "usage": "Usage: /ultracode [on|off]\n\nUltracode mode enables multi-agent workflow orchestration for every substantive task.\nWhen ON, the AI uses the Workflow tool to decompose tasks, fan out parallel agents,\nverify findings adversarially, and synthesize results with a top-tier model.\n\nExamples:\n  /ultracode on    — enable multi-agent mode\n  /ultracode off   — return to standard single-agent mode"
    },
    "branch": {
      "no_conversation": "No conversation to branch. Start a conversation first.",
      "title": "── Branch Created ──",
      "details": "Name:       \"{name}\"\nCheckpoint:  #{checkpoint}\nMessages:    {messages} saved\n\nCurrent conversation continues from this point.\nTo return to this branch point later, use:\n  /rewind\n\nNote: Full session branching (separate concurrent sessions) requires session persistence, coming in a future release. For now, this saves a named checkpoint you can rewind to."
    },
    "memories": {
      "title": "─ Memory ─",
      "no_memories": "─ Memory ─\n\nNo memories stored yet.\n\nMemory is saved to ~/.mipham/memory/ by the AI when you ask it to remember something.\nTry: \"remember that I prefer TypeScript\"",
      "empty": "─ Memory ─\n\nNo memory files found in ~/.mipham/memory/",
      "error": "─ Memory ─\n\nCould not read memory directory.",
      "location": "Location: {path}",
      "total": "Total:    {count} memor{plural}",
      "footer": "Memories are used by the AI to provide personalized context across sessions.\nEach file in ~/.mipham/memory/ represents one remembered fact or preference.",
      "gc_title": "─ Memory GC ─",
      "gc_none": "Nothing to archive. All auto-* memories are recent or have been recalled.",
      "gc_archived": "Archived ({count}):",
      "gc_candidates": "Manual review candidates ({count}):",
      "gc_done": "Done. Archived files moved to ~/.mipham/memory/archive/",
      "consolidate_title": "─ Memory Consolidate ─",
      "consolidate_none": "No auto-* memories to consolidate.",
      "consolidate_result": "Consolidated: {removed} auto-* removed, {merged} lessons written.",
      "dedup_title": "─ Memory Near-Duplicates ─",
      "dedup_none": "No near-duplicate memories found.",
      "dedup_footer": "Pairs above the TF-IDF cosine threshold. Merge is manual — run /memory consolidate for auto-* clustering, or edit the files directly."
    },
    "upgrade": {
      "uptodate": "── Upgrade Mipham Code ──\n\nCurrent version: v{current}\nLatest:          v{latest}\n\n✓ Already up to date.\n\nTo check manually: https://www.npmjs.com/package/@miphamai/cli",
      "check_failed": "── Upgrade Mipham Code ──\n\n✗ Could not reach the npm registry — unable to tell whether v{current} is the latest.\n  Nothing was changed. Check your network, then retry: /upgrade",
      "title": "── Upgrade Mipham Code ──",
      "available": "Current version: v{current}\nLatest:          v{latest}\n\n→ New version available! Updating...",
      "updated": "✓ Updated to @miphamai/cli v{version}",
      "config_preserved": "✓ Config preserved: {path}",
      "config_restored": "✓ Config restored from backup.",
      "old_version_warning": "⚠ The running Mipham Code process is still the old version.\n  Run `mipham` again to use the new version, or `mipham --version` to verify.",
      "update_failed": "✗ Update failed: {reason}{rolledBack}\n  Try manually: {command}\n  Your config backup is at: {path}",
      "rolled_back": "\n  Your previous install was restored — mipham still works.",
      "no_rollback": "\n  ⚠ Your previous install could not be restored — reinstall it manually (see below).",
      "unverified": "⚠ Installed, but could not verify the new version: {reason}"
    },
    "no_plan": {
      "confirmed": "✓ Plan mode exited. Your plan has been discarded.\n\nContinue chatting as normal, or type /plan to start a new plan."
    },
    "mcp": {
      "usage_connect": "Usage: /mcp connect <server-name>",
      "usage_disconnect": "Usage: /mcp disconnect <server-name>",
      "title": "── MCP Servers ──",
      "configured": "Configured servers ({count}):",
      "no_servers": "No MCP servers configured.",
      "commands_title": "── Commands ──",
      "commands_body": "  /mcp connect <name>    Connect to a server (OAuth or stdio)\n  /mcp disconnect <name>  Disconnect from a server\n  /mcp reload            Disconnect all and reconnect",
      "protocol_title": "── Protocol ──",
      "protocol_body": "MCP stdio transport (JSON-RPC 2.0) — fully implemented.\nLearn more: https://modelcontextprotocol.io",
      "connect_oauth": "── MCP Connect: {name} (OAuth) ──\n\nStarting OAuth PKCE flow...\nAuthorization: {auth}\nScopes: {scopes}",
      "connect_stdio": "── MCP Connect: {name} ──\n\nConnecting via stdio...",
      "disconnect_title": "── MCP Disconnect: {name} ──",
      "disconnected_tools": "Disconnected. {count} tool(s) removed.",
      "disconnected_no_tools": "Disconnected (no tools were registered).",
      "reload_content": "── MCP Reload ──\n\nDisconnecting all and reconnecting...",
      "not_found": "Server \"{name}\" not found in config.\n\nConfigured: {servers}"
    },
    "login": {
      "title": "── Authentication ──",
      "intro": "Mipham Code uses API keys for authentication — no account login needed.\nEach provider requires its own API key, set via environment variable or config file.",
      "section_keys": "── Provider API Keys ──",
      "section_setup": "── Setup ──",
      "setup_options": "# Option 1: Environment variables (recommended)\n  export ANTHROPIC_API_KEY=\"sk-ant-...\"\n  export OPENAI_API_KEY=\"sk-...\"\n\n  # Option 2: Config file (~/.mipham/config.yml)\n  providers:\n    - id: anthropic\n      apiKey: $ANTHROPIC_API_KEY",
      "current_provider": "Current provider: {provider} / {model}",
      "footer": "Get API keys from each provider's developer console.\nDashboard: https://mipham.ai/code/dashboard"
    },
    "logout": {
      "title": "── Sign Out ──\n\nMipham Code uses API keys (not sessions), so there is no persistent login to \"log out\" of.\n\nTo clear your credentials:\n\n1. Unset environment variables (current session only):\n     unset ANTHROPIC_API_KEY\n     unset OPENAI_API_KEY\n     unset DEEPSEEK_API_KEY\n     # ... and others\n\n2. Remove from shell profile (permanent):\n     Edit ~/.zshrc or ~/.bashrc and remove the export lines.\n\n3. User config: {config_state}\n\nNote: Clearing keys will prevent Mipham Code from making API calls\nuntil you set them again with /login or manually.\n\nTo switch providers without clearing keys, use /switch <provider> <model>."
    },
    "feedback": {
      "title": "── Feedback ──",
      "preview_title": "── Preview Complete ──",
      "section_channels": "── Feedback Channels ──",
      "section_info": "── System Info (include with bug reports) ──"
    },
    "agents": {
      "initializing": "Agent View dashboard is initializing...",
      "title": "── Agent View ──",
      "needs_input": "🟡 Needs input: {count}",
      "working": "🔵 Working:     {count}",
      "completed": "🟢 Completed:   {count}",
      "failed": "🔴 Failed:      {count}",
      "sessions": "Sessions:",
      "more": "  ... and {count} more",
      "dashboard_hint": "Run `mipham agents` for the full interactive dashboard with j/k navigation."
    },
    "bg": {
      "usage": "Usage: /bg <prompt>\n\nSpawn a background agent to work on a task while you continue chatting.\n\nExamples:\n  /bg Run the full test suite and report failures\n  /bg Audit the src/ directory for security issues\n  /bg Generate API documentation from JSDoc comments\n\nBackground agents appear in the Agent View dashboard (/agents).",
      "initializing": "Agent View manager is initializing...",
      "spawned": "✓ Background agent spawned: {id}\n\n  Task:     {task}\n  Provider: {provider} / {model}\n  Status:   working\n\nUse /agents to view all background sessions.\nRun `mipham agents` for the interactive dashboard."
    },
    "fork": {
      "usage": "Usage: /fork <task description>\n\nFork a task into an isolated worktree with auto commit/push.\n\nWorkflow:\n  1. Creates a new git worktree on branch worktree/<slug>\n  2. Spawns a background agent to work on the task\n  3. Auto-commits changes with Co-Authored-By on completion\n  4. Auto-pushes to origin\n  5. Reports branch and worktree path in the result\n\nExamples:\n  /fork Refactor the auth module\n  /fork Add input validation to all API endpoints",
      "no_git": "/fork requires a git repository.",
      "initializing": "Agent View manager is initializing...",
      "worktree_failed": "Worktree creation failed: {error}",
      "spawned": "✓ Forked: {id}\n  Task: {task}\n  Branch: {branch}\n  Worktree: {path}\n  Status: working\n\nAgent will auto-commit + push on completion.\nUse /agents to track."
    },
    "artifact": {
      "usage": "Usage: /artifact <open|list|server> [name]\n\n  /artifact open <name>  Open artifact in browser\n  /artifact list        List all artifacts\n  /artifact server      Show server status",
      "open_usage": "Usage: /artifact open <name>\nExample: /artifact open dashboard",
      "open_confirmed": "✓ Opening artifact \"{name}\" in browser...\n   {url}",
      "open_failed": "✗ Failed to open browser: {error}\n   URL: {url}",
      "list_empty": "No artifacts created yet. Ask the AI to generate one with the Artifact tool.",
      "list_title": "── Artifacts ──",
      "list_footer": "  {count} artifact(s) — /artifact open <name> to view\n  Gallery: http://localhost:9876",
      "server_title": "── Artifact Server ──\n\n  URL:  {url}\n  Port: 9876\n\nArtifacts are served locally. No external network access."
    },
    "commands_list": {
      "title": "── All Slash Commands ({count}) ──",
      "footer": "Type /help for details, or /<command> to run."
    },
    "workflows": {
      "title": "─ Workflows ─",
      "no_workflows": "No workflow scripts found.\n\nWorkflows are multi-agent orchestration scripts stored in:\n  .claude/workflows/   (project-level)\n  ~/.claude/workflows/ (user-level)\n\nCreate a .js file in either location to add a workflow.",
      "found": "{count} workflow(s) found.\nUse /workflows <name> to run a specific workflow."
    },
    "workflow": {
      "usage": "Usage: /workflow <task description>\n\nDescribes the task, and the AI will generate a workflow script to execute it.\nExamples:\n  /workflow audit all routes for missing auth\n  /workflow research the impact of React 19 on our codebase\n  /workflow find all hardcoded credentials in the codebase\n\nSub-commands:\n  /workflow save <name>  — save last successful workflow script\n  /workflow run <name>    — run a saved workflow by name\n  /workflows              — list all saved workflow scripts",
      "save_no_recent": "No recent workflow run found. Run a workflow first with /workflow <task>.",
      "save_no_script": "No script found in last run state.",
      "save_confirmed": "Workflow saved to {path}\nUse /workflow run {name} to run it again.",
      "save_failed": "Failed to save workflow: {error}",
      "run_not_found": "Workflow \"{name}\" not found in .claude/workflows/ or ~/.claude/workflows/"
    },
    "deep_research": {
      "usage": "Usage: /deep-research <topic>\n\nConducts multi-agent deep research — 5-angle parallel search, adversarial verification,\nand top-tier synthesis into a well-cited report.\n\nExample:\n  /deep-research impact of quantum computing on cryptography\n  /deep-research latest advances in CRISPR gene editing",
      "title": "── Deep Research ──\n\nTopic: \"{topic}\"\n\nOrchestrating multi-agent research pipeline:\n  1. Scope — 5 research angles\n  2. Research — parallel web searches\n  3. Reduce — deduplicate + merge\n  4. Verify — adversarial skeptic pass\n  5. Synthesize — cited report, top model\n\nThis may take a few minutes..."
    },
    "code_review": {
      "no_changes": "No uncommitted changes to review.\n\nTo review a specific file: /code-review path/to/file.ts",
      "running": "Reviewing uncommitted changes with the code-review skill (7 dimensions: correctness, security, performance, code quality, architecture, testing, language-specific)...",
      "error": "Could not detect changes. Are you in a git repository?"
    },
    "simplify": {
      "no_changes": "No uncommitted changes to simplify.\n\nMake changes first, then run /simplify for cleanup review.",
      "running": "Running cleanup review — 4 passes: reuse, simplification, efficiency, abstraction level...",
      "error": "Could not detect changes. Are you in a git repository?"
    },
    "verify": {
      "no_changes": "No uncommitted changes to verify.\n\nMake changes first, then run /verify for runtime verification.",
      "running": "Running runtime verification — observing actual execution behavior (not tests, not typecheck)...",
      "error": "Could not detect changes. Are you in a git repository?"
    },
    "design": {
      "start": "─ Design ─\n\nStarting architectural design session for: {topic}\n\nExploring approaches, trade-offs, component breakdown, data flow..."
    },
    "lint": {
      "title": "── Lint Results ──",
      "fix_hint": "To fix: type \"fix the lint errors\"",
      "setup_hint": "Set up linting: https://mipham.ai/code/docs/linting",
      "error": "── Lint ──\n\nCould not run linter. Ensure ESLint is installed and configured."
    },
    "files": {
      "title": "── Project Files ──",
      "cwd": "CWD: {path}",
      "more_files": "  ... and {count} more files",
      "hint": "Use Read/Glob/Grep tools to examine files.",
      "error": "── Files ──\n\nCould not read directory."
    },
    "stats": {
      "title": "── Session Stats ──",
      "messages": "Messages:        {total} ({user} user, {assistant} AI, {system} system)",
      "tokens": "Tokens:          ~{tokens} / {max}",
      "tools": "Tools available:  {count}",
      "provider": "Provider:         {provider}",
      "model": "Model:            {model}",
      "permission": "Permission:       {permission}",
      "usage": "Usage:            {pct}% of context window"
    },
    "summary": {
      "title": "── Session Summary ──",
      "no_conversation": "── Summary ──\n\nNo conversation to summarize.",
      "total_messages": "Total messages: {count}",
      "est_tokens": "Est. tokens:    ~{tokens}",
      "recent_topics": "Recent topics:",
      "footer": "Use /export to save, /clear to reset."
    },
    "cd": {
      "usage": "Usage: /cd <path>\n\nChange the session working directory.\nExample: /cd ~/projects/my-app\n\nCurrent: {cwd}",
      "not_found": "❌ Directory not found: {path}",
      "suggestions": "Did you mean:",
      "failed": "❌ Failed to change directory: {error}",
      "title": "── Directory Changed ──",
      "content": "New CWD: {path}\n\nThe AI will now work relative to this directory.\nNote: This changes the filesystem root for tools like Read, Write, Bash."
    },
    "hooks": {
      "title": "── Hooks ──",
      "no_hooks": "── Hooks ──\n\nNo hooks configured.\n\nConfigure hooks in .mipham/settings.json under the hooks section:\n  PreToolUse   — before each tool\n  PostToolUse  — after each tool\n  Stop         — on session end\n\nCommand hooks read JSON from stdin; exit 2 blocks (stderr as reason).\nUse /loop init to scaffold settings.json.",
      "location": "Location: {path}",
      "source_user": "user",
      "source_project": "project",
      "gated": "⚠️  workspace not trusted — will not run",
      "found": "{count} hook(s) found.",
      "error": "── Hooks ──\n\nCould not read hooks directory."
    },
    "batch": {
      "title": "── Batch Operations ──\n\nApply a change across multiple files or directories.\n\nUsage: type \"apply this change to all .ts files in src/\"\n\nThe AI will:\n  1. Understand your change description\n  2. Find all matching files\n  3. Apply the change consistently\n  4. Report what was modified\n\nUse this for:\n  • Renaming symbols across codebase\n  • Updating import patterns\n  • Applying consistent formatting changes\n  • Bulk config updates"
    },
    "export": {
      "confirmed": "✓ Session exported to:\n  {path}\n\n{count} messages · {lines} lines"
    },
    "pr_comments": {
      "error": "─ PR Review ─\n\nCould not determine PR context. Are you in a git repository with a remote?",
      "header": "─ PR Review ─",
      "commits_header": "Commits:",
      "changed_header": "Changed files:",
      "hint": "To generate PR description: type \"write a PR description for these changes\" in chat.\nTo review PR: type \"review this PR\" or use /review."
    },
    "doctor": {
      "title": "── System Diagnostics ──",
      "config_section": "── Config ──",
      "session_section": "── Session ──",
      "git_section": "── Git ──",
      "no_git": "  (not a git repository or git not available)",
      "skills_section": "── Skills ──",
      "skills_unavailable": "  (skills info unavailable)",
      "audit_section": "── CLAUDE.md Audit ──",
      "audit_clean": "  ✓ no code-derivable sections found",
      "audit_found": "Add the sections above to the `prompt-exclude` frontmatter to stop sending them to the model."
    },
    "skillDoctor": {
      "title": "── Skill Doctor ──",
      "unavailable": "  (skills info unavailable)",
      "summary": "Loaded {total} skills — ~{tokens} tokens in context. {unused} never used (~{unusedTokens} tokens reclaimable).",
      "unused_header": "Never used:",
      "used_header": "Recently used:",
      "never": "never used",
      "days_ago": "{days}d ago",
      "today": "today"
    },
    "fix": {
      "title": "── Fix ──",
      "dryrun_banner": "[dry-run] preview — no changes written",
      "doctor_clean": "✓ no code-derivable CLAUDE.md sections to fix",
      "doctor_fixed": "✓ {path}: added prompt-exclude [{added}]",
      "config_clean": "✓ config healthy, no disabled hooks",
      "config_corrupt": "⚠ {path}: config corrupt",
      "config_restored": "✓ restored config from backup: {path}",
      "hook_disabled": "⚠ hook disabled: {key}",
      "hook_reenabled": "✓ re-enabled hook: {key}",
      "cache_clean": "✓ no corrupt cache lines",
      "cache_found": "⚠ {path}: {count} corrupt line(s)",
      "cache_cleaned": "✓ cleaned {path}: removed {count} line(s)",
      "cache_hint": "Run /fix cache --apply to remove corrupt lines",
      "test_usage": "Usage: /fix test <test-file> [--apply]\n\nLLM-driven repair of a failing test (test frozen, source only). Dry-run by default; --apply writes the fix.",
      "test_no_llm": "No LLM available in this session — cannot generate a fix.",
      "test_fixed": "✓ fixed {test} (source {source}, {attempts} attempt(s))",
      "test_failed": "✗ could not fix {test}: {detail}",
      "test_hint": "Run /fix test <file> --apply to write the fix."
    },
    "plugins": {
      "unavailable": "PluginManager not available in this session.",
      "title": "── Installed Plugins ──",
      "none": "No plugins installed.\n\nInstall plugins:\n  /install-plugin <npm-package>    Install from npm registry\n  /browse-plugins                  Browse community plugins\n  mipham plugin install <path>    Install from local directory"
    },
    "loop": {
      "init_title": "── LoopKit Vault Created ──",
      "stop_no_active": "No active autonomous loops to stop.",
      "stop_confirmed": "Stopped {count} autonomous loop(s).",
      "status_no_active": "No active autonomous loops.\n\nUse /loop auto <prompt> to start one.",
      "auto_usage": "Usage: /loop auto <prompt>\n\nStart an autonomous self-paced loop. The AI will:\n1. Work on the task\n2. Decide how long to wait before the next iteration\n3. Use ScheduleWakeup to self-schedule\n4. Use ScheduleWakeup(stop:true) when the goal is reached\n\nUse /loop status to view progress.\nUse /loop stop to stop the loop.",
      "auto_title": "── Autonomous Loop Started ──",
      "auto_title_detected": "── Autonomous Loop Started (auto-detected) ──",
      "invalid_interval": "── Invalid Interval ──\n\n\"{interval}\" is not a recognised interval.\n\nUse formats like: 10s, 5m, 1h, 30min, 2hr\nOr use /loop auto <prompt> for autonomous mode.",
      "usage": "Usage: /loop <interval> <prompt>     Fixed-interval loop\n   or: /loop auto <prompt>           Autonomous self-paced loop\n   or: /loop stop                     Stop active autonomous loop\n   or: /loop status                   Show autonomous loop progress\n   or: /loop init [path]              Scaffold project vault structure\n\nFixed interval formats:\n  10s   — 10 seconds\n  5m    — 5 minutes\n  1h    — 1 hour\n\nExamples:\n  /loop 5m check the deploy status\n  /loop auto monitor CI and fix failing tests\n  /loop init                  Create vault in current directory",
      "failed": "Loop failed: {error}"
    },
    "schedule": {
      "failed": "Schedule check failed: {error}"
    },
    "crsi_critique": {
      "not_init": "SelfCritique not initialized. Mipham Code >= v0.34.0 required.",
      "on_title": "## 🔍 Self-Critique: ON",
      "on_desc1": "The AI will now critique its own tool calls before execution.",
      "on_desc2": "Safe + correct + necessary checks run before every targeted tool call.",
      "on_hint": "💡 `/crsi critique off` to disable | `/crsi critique status` for current config",
      "off_title": "## 🔍 Self-Critique: OFF\n\nTool calls will execute without pre-flight critique.",
      "status_title": "## 🔍 Self-Critique Status",
      "state": "State: **{state}**",
      "model": "Model: **{model}**",
      "threshold": "Threshold: **{pct}%**",
      "threshold_detail": "Threshold: **{pct}%** (below this → correction or block)",
      "target_tools": "Target tools: **{tools}**",
      "timeout": "Timeout: **{ms}ms**",
      "status_on_hint": "🔍 `/crsi critique on` — Enable self-critique",
      "status_off_hint": "🔍 `/crsi critique off` — Disable self-critique",
      "inspired": "*Inspired by Anthropic RLAIF — AI critiques its own actions before execution.*"
    },
    "crsi_interpret": {
      "title": "## 🧠 CRSI Tool-Call Interpretability",
      "no_sigs_for_tool": "No error signatures for tool `{tool}`. CRSI immune memory is clean for this tool.",
      "no_sigs": "No active error signatures. CRSI immune memory is clean.",
      "sigs_title": "### 🛡️ Error Signatures{tool}",
      "sig_success": "  Success: {bar} {pct}% | {occurrences}x | {strategy}",
      "sig_fix": "  Fix: `{fix}`",
      "sigs_more": "... and {count} more signatures",
      "reflection_title": "### 📊 CRSI Reflection Summary",
      "reflections": "Turn reflections analyzed: **{count}**",
      "usage_title": "### 💰 Token Usage",
      "api_in": "API input tokens:  {count}",
      "api_out": "API output tokens: {count}",
      "est_tokens": "Estimated tokens:  {count}",
      "health_title": "### 🏥 System Health",
      "overall": "Overall: {bar} **{score}/100**",
      "assessment": "Assessment: {assessment}",
      "constitution_title": "### ⚖️ Constitution",
      "principles": "Principles: **{total}** (🚫 {block} block | ⚠️ {warn} warn | 🔄 {auto} auto)",
      "version": "Version: v{version}",
      "empty": "_Start using tools to populate CRSI interpretability data._",
      "filter_hint": "🔍 Filter by tool: `/crsi interpret <tool-name>` (e.g. `/crsi interpret Bash`)"
    },
    "crsi_red_team": {
      "not_init": "Red-Team requires both ConstitutionLoader and PreFlightChecker to be initialized.",
      "title": "## 🔴 CRSI Red-Team Report",
      "score": "Overall Score: **{score}/100**",
      "metric": "| Metric | Count |",
      "metric_sep": "|--------|------|",
      "total_attacks": "| Total attacks | {count} |",
      "blocked": "| 🛡️ Correctly blocked | {count} |",
      "passed_through": "| 🔴 Passed through (GAP) | {count} |",
      "false_positives": "| ⚠️ False positives | {count} |",
      "by_principle": "### By Principle",
      "gaps_title": "### 🔴 Security Gaps (Should Have Been Blocked)",
      "gap_tool": "  Tool: `{tool}` → Params: `{params}`",
      "blocked_title": "### 🛡️ Successfully Blocked",
      "caught_by": "{principle}: {desc} → caught by **{caught}**",
      "all_blocked": "🎉 **All attacks blocked!** The SIS immune system is fully operational.",
      "good_coverage": "⚠️ Good coverage. Review the gaps above and add audit patterns to `ai-guardrails.yml`.",
      "critical": "🔴 **Critical gaps detected.** Prioritize fixing the passed-through attacks above."
    },
    "dream": {
      "not_init": "DreamEngine not initialized. Mipham Code >= v0.34.0 required.",
      "no_history": "🌙 Auto-Dream has not run yet. Use `/dream` to trigger the first consolidation.",
      "history_title": "## 🌙 Auto-Dream History",
      "history_entry": "- **{time}**: {total} actions ({applied} auto-applied, {flagged} flagged for review)",
      "done_title": "## 🌙 Auto-Dream Complete",
      "integrate": "Memory integration: {before} → {after}",
      "dedup": "- Deduplicated: {count} entries",
      "contradiction": "- Contradictions: {count} (need human review)",
      "merge": "- Merged: {count} groups",
      "solidify": "- Fuzzy-marked: {count} entries (suggested to solidify)",
      "prune": "- Pruned expired: {count} entries",
      "review_hint": "⚠️  {count} items pending review. Use `/dream --aggressive` to auto-apply all.",
      "clean": "✅ Memory is clean, nothing to consolidate."
    },
    "constitution": {
      "not_init": "ConstitutionLoader not initialized. Mipham Code >= v0.34.0 required.",
      "reload_title": "## ⚖️ Constitution Reloaded",
      "version": "Version: **v{version}**",
      "principles": "Principles: **{count}**",
      "path": "Path: `{path}`",
      "view_title": "## ⚖️ Mipham Constitution",
      "view_summary": "Version: **v{version}** | Principles: **{count}** | Path: `{path}`",
      "scope": "  Scope: `{scope}`",
      "tools": "  Tools: {tools}",
      "reload_hint": "🔧 `/constitution reload` — Reload after editing ai-guardrails.yml",
      "edit_hint": "📝 Edit: `vi ~/.mipham/ai-guardrails.yml`",
      "reset_hint": "🗑️  Reset: delete `~/.mipham/ai-guardrails.yml` then run `/constitution reload`",
      "inspired": "*Inspired by Anthropic Constitutional AI. Mipham enforces these principles at runtime — auditable on every action.*"
    },
    "bug_report": {
      "title": "## 🐛 Bug Report",
      "hint": "> Copy the report below and paste it into your GitHub Issue.",
      "env_title": "### Environment",
      "mipham": "- **Mipham Code**: v{version}",
      "session": "- **Session**: {id}",
      "node": "- **Node**: {version}",
      "platform": "- **Platform**: {platform} {arch}",
      "os": "- **OS**: {os}",
      "provider": "- **Provider**: {provider}",
      "model": "- **Model**: {model}",
      "sigs_title": "### Active Error Signatures",
      "sig_entry": "- `{id}`: {pattern} ({category}, {occurrences}x, {pct}% success)",
      "disabled_hooks": "### Disabled Hooks",
      "hook_entry": "- `{key}`: {failures} failures, disabled at {time}",
      "last_dream": "### Last Auto-Dream",
      "ran_at": "- **Ran at**: {time}",
      "actions": "- **Actions**: {total} ({applied} applied)",
      "steps_title": "### Steps to Reproduce",
      "expected": "### Expected Behavior",
      "actual": "### Actual Behavior",
      "generated": "🤖 Generated with Mipham Code v{version}"
    },
    "changelog": {
      "title": "## 📋 Changelog",
      "no_tags": "No version tags found.",
      "current": "Current: **v{version}**",
      "current_marker": " ← current",
      "release_only": "  _(release tag only)_",
      "details_unavailable": "  _(details unavailable)_",
      "no_git": "Unable to read git history. Make sure you are in the Mipham Code repository.",
      "full_history": "Full history: `git log --oneline`"
    }
  },
  "ui": {
    "banner": {
      "title": "Mipham Code",
      "subtitle": "AI-Powered Super Agent",
      "tagline": "Multi-model / Multi-provider / Skills & Tools / Open-core",
      "start_message": "Type a message to start. /help for commands",
      "controls_hint": "Ctrl+P pick model · Esc to exit",
      "tip_clear": "Tip: Use /clear to start fresh when switching topics and free up context"
    },
    "permission": {
      "manual": "manual mode",
      "accept_edits": "accept edits on",
      "plan_mode": "plan mode / read-only",
      "auto_mode": "auto mode on",
      "bypass": "bypass"
    },
    "loading": {
      "doodling": "Doodling",
      "forging": "Forging",
      "cerebrating": "Cerebrating",
      "recombobulating": "Recombobulating",
      "thinking": "Thinking",
      "computing": "Computing",
      "processing": "Processing",
      "analyzing": "Analyzing",
      "generating": "Generating",
      "dreaming": "Dreaming",
      "pondering": "Pondering",
      "ruminating": "Ruminating",
      "deliberating": "Deliberating",
      "contemplating": "Contemplating",
      "synthesizing": "Synthesizing",
      "calculating": "Calculating",
      "inferring": "Inferring",
      "optimizing": "Optimizing",
      "compiling": "Compiling",
      "orchestrating": "Orchestrating",
      "harmonizing": "Harmonizing",
      "galvanizing": "Galvanizing",
      "illuminating": "Illuminating",
      "manifesting": "Manifesting",
      "transmogrifying": "Transmogrifying",
      "actualizing": "Actualizing",
      "completed_brewed": "Brewed",
      "completed_churned": "Churned",
      "completed_cooked": "Cooked",
      "completed_sauteed": "Sautéed",
      "completed_cogitated": "Cogitated",
      "completed_crunched": "Crunched"
    },
    "agent": {
      "running": "running",
      "finished": "finished",
      "status_label": "Agents"
    },
    "system": { "role_label": "System" },
    "assistant": { "role_label": "Mipham Code" },
    "user": { "role_label": "User" },
    "input": {
      "placeholder": "Type a message (Esc to clear)..."
    },
    "slash_hints": {
      "label": "Commands:",
      "count": "{shown} of {total}",
      "all": "all"
    },
    "mention_hints": {
      "label": "Sessions:",
      "empty": "No active sessions"
    },
    "picker": {
      "title": "Select Model",
      "nav_help": "←→ navigate · ↑↓ move · Enter select · Esc close",
      "provider_label": "PROVIDER",
      "models_label": "MODELS",
      "coming_soon": "[coming]",
      "no_active_models": "(no active models)",
      "select_provider_hint": "Select a provider → Enter to see models",
      "select_model_hint": "Select a model → Enter to switch",
      "needs_api_key": "{provider} requires an API Key",
      "api_key_placeholder": "Paste API Key and press Enter..."
    },
    "command_picker": {
      "title": "Commands",
      "nav_help": "↑↓ navigate · Enter select · Esc close",
      "no_matches": "No commands match \"{filter}\"",
      "scroll_indicator": "{start}–{end} of {total} commands",
      "placeholder": "Type to filter commands..."
    },
    "chat": {
      "focus_hint": "Focus",
      "hidden": "hidden",
      "toggle_focus_hint": "/focus to toggle",
      "expand_hint": "Ctrl+O to expand",
      "showing_all": "showing all {count} messages",
      "tool_outputs_folded": "{hidden} tool outputs folded ({toolCount} total tool calls)"
    },
    "status": {
      "esc_to_interrupt": "esc to interrupt",
      "ctrl_c_again": "ctrl+c again to exit",
      "shift_tab_cycle": "shift+tab",
      "left_for_agents": "ctrl+g agents to manage",
      "mipham_modes": "Mipham",
      "update_available": "Update available · v{version}",
      "update_installed_restart": "Update installed · Restart to apply"
    },
    "wizard": {
      "header_subtitle": " — Configuration Wizard",
      "welcome_title": "Welcome to Mipham Code!",
      "welcome_intro": "Before you start, you need to configure your AI model connection.",
      "welcome_time": "This wizard takes about 1 minute — please have your API key ready.",
      "welcome_start": "Press Enter to start →",
      "welcome_skip": "Esc to skip",
      "mode_title": "Choose connection method:",
      "mode_cloud": "🌐 Cloud AI models (recommended)",
      "mode_local": "🖥️ Local models (Ollama)",
      "mode_cloud_hint": " {count} cloud providers built in",
      "mode_local_hint": " Requires Ollama installed with models downloaded",
      "nav_hint": "↑↓ select · Enter confirm · Esc back",
      "provider_title": "Choose AI model provider:",
      "provider_count": " ({count} models)",
      "model_title": "Choose model ({provider}):",
      "apikey_title": "Paste your API key:",
      "apikey_provider": "Provider: {provider}",
      "apikey_model": "Model: {model}",
      "apikey_placeholder": "Paste API key then press Enter...",
      "apikey_continue": "Enter to continue · Esc to go back to model",
      "ollama_title": "Ollama local model configuration:",
      "ollama_status": "Status: ",
      "ollama_installed": "✅ installed",
      "ollama_not_installed": "❌ not installed",
      "ollama_running": " · running",
      "ollama_not_running": " · not running (run ollama serve)",
      "ollama_detecting": "Detecting Ollama...",
      "ollama_downloaded": "Downloaded models (↑↓ select · Enter confirm):",
      "ollama_source_hot": "Popular",
      "ollama_no_models": "No downloaded models found. Run ollama pull <model> to download one.",
      "ollama_preset_hint": "Below are preset models — switch anytime via /models.",
      "confirm_title": "Confirm configuration:",
      "confirm_connection": "Connection: ",
      "confirm_cloud": "🌐 Cloud",
      "confirm_local": "🖥️ Local",
      "confirm_provider": "Provider: {provider}",
      "confirm_model": "Model: {model}",
      "confirm_apikey": "API key: {masked}",
      "confirm_ollama_model": "Ollama model: {model}",
      "confirm_save_path": "Config will be saved to ~/.mipham/config.yml",
      "confirm_save": "Press Enter to save and launch →",
      "confirm_back": "Esc to go back",
      "done_title": "✅ Configuration complete!",
      "done_launching": "Mipham Code is starting...",
      "error_apikey_required": "Please enter your API key",
      "error_write_failed": "Failed to write config: {err}"
    },
    "goal_progress": {
      "title": "🎯 Goal: {goal}",
      "no_subtasks": " (no subtasks yet)",
      "summary": "═══ {done}/{total} done",
      "in_progress": " · {n} in progress",
      "failed": " · {n} failed",
      "tokens": " · {n} tokens",
      "border_end": " ═══"
    },
    "workflow": {
      "title": "═══ Workflow: {runId} ═══",
      "phase": "Phase: {name}",
      "done_count": " [{done}/{total} done]",
      "footer": "═══ Elapsed: {time} | Agents: {done}/{total}",
      "running": " ({n} running)",
      "failed": " ({n} failed)",
      "cache_hits": " | Cache hits: {n}",
      "done_marker": " | DONE ═══",
      "running_marker": " | Status: running ═══"
    },
    "error_boundary": {
      "title": "⚠️ UI Render Error",
      "unknown": "Unknown rendering error",
      "recovery": "The terminal interface encountered a rendering issue. Auto-recovery in 5 seconds... Press Enter to attempt immediate recovery.",
      "preserved": "Your session data and conversation history are preserved."
    }
  },
  "tools": {
    "bash": { "name": "Bash", "description": "Execute shell commands" },
    "read": { "name": "Read", "description": "Read a file from the filesystem" },
    "write": { "name": "Write", "description": "Write content to a file" },
    "edit": { "name": "Edit", "description": "Edit a file with string replacement" },
    "glob": { "name": "Glob", "description": "Find files matching a pattern" },
    "grep": { "name": "Grep", "description": "Search file contents with regex" },
    "web_fetch": { "name": "WebFetch", "description": "Fetch a URL and parse content" },
    "web_search": { "name": "WebSearch", "description": "Search the web" },
    "agent": { "name": "Agent", "description": "Launch a sub-agent for complex tasks" },
    "task": { "name": "Task", "description": "Create and track tasks" },
    "skill": { "name": "Skill", "description": "Invoke a named skill" },
    "memory": { "name": "Memory", "description": "Read/write persistent memory" },
    "workflow": { "name": "Workflow", "description": "Execute a multi-agent workflow" },
    "plan": { "name": "Plan", "description": "Enter plan mode for structured thinking" },
    "config": { "name": "Config", "description": "View and modify configuration" },
    "mcp": { "name": "MCP", "description": "Manage MCP server connections" }
  },
  "errors": {
    "tool_denied_deny_rule": "Tool \"{name}\" blocked by a deny rule (\"{pattern}\"). Deny rules override permission mode — try a different approach, or drop the rule with: /permissions remove \"{pattern}\"",
    "tool_denied_ask_rule": "Tool \"{name}\" requires approval (ask rule: \"{pattern}\"). Approve when prompted, or stop being asked with: /permissions allow \"{pattern}\"",
    "tool_denied_mode": "Tool \"{name}\" requires approval under \"{mode}\" mode. Press Shift+Tab to switch permission mode, or stop being asked with: /permissions allow \"{name}\" (or a narrower \"{name}(arg)\")",
    "tool_denied_classifier": "Tool \"{name}\" was blocked in auto mode by the permission classifier ({reason}). This is a policy decision, not a failure — switching modes will not change it, and repeating the identical call returns the same ruling. Change the call so it no longer trips the rule, or allow it outright with: /permissions allow \"{name}\"",
    "tool_denied_classifier_unavailable": "Tool \"{name}\" was held back because the auto-mode classifier could not be reached or its answer could not be read ({reason}). This is NOT a policy decision — the call was never judged, and retrying is appropriate. If this keeps happening, switch modes with Shift+Tab.",
    "tool_blocked": "Tool \"{name}\" blocked by hook",
    "user_input_blocked": "User input blocked by hook.",
    "dlp_blocked": "Request blocked by DLP policy.",
    "model_error": "Error: {error}",
    "tool_collision": "[mcp] Tool collision: \"{name}\" already registered. Skipping.",
    "missing_param": "Missing required parameter: \"{param}\"",
    "invalid_params": "Invalid parameters: {errors}",
    "type_string": "\"{key}\" must be a string",
    "type_number": "\"{key}\" must be a number",
    "type_boolean": "\"{key}\" must be a boolean",
    "type_object": "\"{key}\" must be an object",
    "type_array": "\"{key}\" must be an array",
    "type_enum": "\"{key}\" must be one of: {values}",
    "oauth_state_mismatch": "OAuth state mismatch — possible CSRF",
    "oauth_no_code": "No authorization code received",
    "oauth_timeout": "OAuth flow timed out (5 minutes)",
    "mcp_register_collision": "[mcp] Tool collision: \"{name}\" (from server \"{server}\") conflicts with existing tool. Skipping.",
    "mcp_register_failed": "[mcp] Failed to register tool \"{tool}\" from server \"{server}\": {error}",
    "max_tool_turns": "Max tool-calling turns ({max}) reached. Some tool calls were not executed.",
    "max_tool_turns_warning": "You've reached the maximum of {max} tool-calling rounds. {pending} tool call(s) were not executed. Please summarize what you found so far and any next steps the user should take.",
    "turn_timeout": "Task produced no substantial output for {minutes} minutes and was stopped. Break the task into smaller steps or clarify the next step, then retry.",
    "mcp_not_connected": "Error: MCP server \"{server}\" not connected",
    "mcp_tool_error": "MCP tool error: {error}",
    "mcp_no_connection": "No connection for \"{name}\""
  },
  "system": {
    "mcp": {
      "connecting": "[mcp] Connecting to \"{name}\"...",
      "connected": "[mcp] Connected to \"{name}\"",
      "failed": "[mcp] Failed to connect \"{name}\": {reason}",
      "registered": "[mcp] \"{name}\": registered {count} tools",
      "disconnected": "[mcp] Disconnected \"{name}\"",
      "reloaded": "[mcp] Reloaded \"{name}\""
    },
    "context": {
      "omitted": "Prior conversation context omitted.",
      "summary_heading": "[Earlier conversation summary — {heading}]",
      "stop_blocked": "[The Stop hook blocked completion]: {reason}"
    },
    "goal": {
      "verified": "✅ Goal verification passed: {script}",
      "failed_continuing": "🔄 Verification script failed — continuing (loop {loop})",
      "running_skill": "🔍 Running verification skill: {skill}",
      "max_loops": "⚠ Max goal loops ({max}) reached — goal may not be achieved."
    },
    "oauth": {
      "authenticated": "Authenticated",
      "close_window": "You may close this window."
    },
    "welcome": {
      "unknown_model": "[mipham] ⚠ Unknown model \"{model}\": assuming {k}k context window."
    }
  }
}
