{
  "cli.usage.usage_prefix": "Usage:",
  "cli.usage.header": "cortex-spm — Cortex Service Project Manager",
  "cli.usage.commands": "Commands:",
  "cli.usage.flags": "Flags:",
  "cli.usage.examples": "Examples:",
  "cli.usage.command.start": "Start the service daemon",
  "cli.usage.command.stop": "Stop the service daemon",
  "cli.usage.command.restart": "Restart the service daemon",
  "cli.usage.command.status": "Show the current daemon status",
  "cli.usage.command.token": "Manage authentication tokens",
  "cli.usage.flag.port": "Port to bind (default: 16888)",
  "cli.usage.flag.host": "Host address to bind (default: 0.0.0.0)",
  "cli.usage.flag.log_level": "Log level: debug, info, warn, error (default: info)",
  "cli.usage.flag.verbose": "Enable verbose output",
  "cli.usage.flag.lang": "Language: en, zh (default: en)",
  "cli.usage.flag.help": "Show this help",
  "cli.usage.flag.version": "Show version",
  "cli.usage.env": "Environment Variables:",
  "cli.usage.env.port": "Default port",
  "cli.usage.env.host": "Default host",
  "cli.usage.env.log_level": "Default log level",
  "cli.usage.env.lang": "Default language (en|zh)",

  "cli.startup.starting_daemon": "Starting daemon...",
  "cli.startup.daemon_started": "Daemon started successfully on port {port}",
  "cli.startup.daemon_started_verbose": "Daemon started successfully (PID: {pid}, port: {port}, host: {host}, log-level: {logLevel})",
  "cli.startup.daemon_stopped": "Daemon stopped successfully (PID: {pid})",
  "cli.startup.daemon_restarted": "Daemon restarted successfully",
  "cli.startup.pid_file_missing": "Error: Daemon started but PID file was not written",

  "cli.error.already_running": "Error: cortex-spm is already running (PID: {pid})",
  "cli.error.not_running": "Info: No running daemon found",
  "cli.error.bind_failed": "Error: Failed to bind to port {port}: {reason}",
  "cli.error.token_missing": "Authentication token is required. Run: cortex-spm token generate",
  "cli.error.token_invalid": "Invalid or expired authentication token",
  "cli.error.command_failed": "Command failed: {message}",
  "cli.error.unknown_command": "Error: Unknown command: {command}",
  "cli.error.invalid_flag": "Error: {detail}",
  "cli.error.fatal": "Fatal error: {message}",
  "cli.error.daemon_failed": "Error: Daemon failed to start (exit code: {code})",
  "cli.error.start_failed": "Error: Failed to start daemon: {message}",
  "cli.error.stop_failed": "Error: Failed to stop daemon (PID: {pid})",
  "cli.error.force_kill": "Warning: Daemon did not stop gracefully, force-killed (PID: {pid})",
  "cli.error.invalid_port": "Error: Invalid port: {port}",
  "cli.error.invalid_log_level": "Error: Invalid log level: {level}. Must be one of: {allowed}",
  "cli.error.unknown_flag": "Error: Unknown flag: {flag}",
  "cli.error.flag_missing_value": "Error: {flag} requires a value",
  "cli.error.unknown_subcommand": "Error: Unknown token subcommand: {subcommand}",
  "cli.error.subcommand_required": "Error: Token command requires a subcommand: generate, list, revoke",
  "cli.error.token_file_read": "Error: Cannot read token file: {message}",
  "cli.error.no_token_to_revoke": "Error: No token value provided for revocation",
  "cli.error.invalid_language": "Error: Invalid language code: {lang}. Must be one of: en, zh",
  "cli.error.token_revoked": "Token revoked successfully",
  "cli.error.cli_not_found": "ERROR: cortex-cli not found. Please install cortex-cli via:\n  npm install -g @lwelliott/cortex-cli",
  "cli.error.cli_timeout_startup": "ERROR: cortex-cli not found (timeout). Please install cortex-cli via:\n  npm install -g @lwelliott/cortex-cli",
  "cli.warn.cli_empty_registry": "WARNING: No projects registered in cortex-cli. The dashboard will show an empty project list.",

  "cli.status.running": "Status: RUNNING (PID: {pid}, port: {port}, uptime: {uptime})",
  "cli.status.stopped": "Status: STOPPED",
  "cli.status.version": "cortex-spm version {version}",

  "cli.token.no_active": "No active tokens",
  "cli.token.list_header": "Active tokens:",
  "cli.token.list_entry": "  [{id}] {label} (created: {created})",
  "cli.token.revoked": "Token revoked successfully",

  "server.error.unauthorized": "Unauthorized. Please provide a valid authentication token.",
  "server.error.empty_token": "Unauthorized: empty token",
  "server.error.token_too_long": "Unauthorized: token too long",
  "server.error.invalid_token": "Unauthorized: invalid or revoked token",
  "server.error.missing_token": "Unauthorized. Please provide a valid authentication token.",
  "server.error.not_found": "The requested resource was not found.",
  "server.error.internal_error": "An internal server error occurred. Please try again or check the logs.",
  "server.error.invalid_request": "Invalid request: {detail}",
  "server.error.parse_failure": "Failed to parse server response. Check the logs for details.",
  "server.error.cli_unavailable": "The cortex-cli command could not be executed. Ensure it is installed and available in the system PATH.",
  "server.error.cli_timeout": "cortex-cli timed out after {seconds}s",
  "server.error.cli_error": "cortex-cli returned an error (exit code {code}): {message}",
  "server.error.parse_error": "Failed to parse cortex-cli output. The CLI returned data in an unexpected format.",
  "server.error.invalid_json": "Invalid JSON in request body",
  "server.error.missing_field": "Missing required field: {field}",
  "server.error.missing_path": "Missing required path parameter: {id}",
  "server.error.missing_field_or_id": "Missing required field: {field} or {altField}",
  "server.error.update_required": "At least one field to update is required ({fields})",
  "server.error.cli_token_missing": "Please enter a token",
  "server.error.cli_token_invalid": "Invalid or revoked token",
  "server.error.cli_token_expired": "Token has expired. Please generate a new token.",
  "server.error.source_not_found": "Source file not found: {path}",
  "server.error.source_read_error": "Could not read source file: {path} ({message})",
  "server.error.project_root_not_configured": "Project root not configured. Pass a project query parameter or ensure cortex-cli is installed with registered projects.",
  "server.error.project_context_not_specified": "Project context not specified. Pass a project query parameter to scope the request.",
  "server.error.project_not_found": "Project \"{name}\" not found in cortex-cli registry.",
  "server.status.ok": "OK",
  "server.status.healthy": "Service is healthy.",

  "login.subtitle": "Sprint-based project management dashboard with AI-powered sprint coordination, stage-gated reviews, and real-time team collaboration.",
  "login.feature1": "Kanban & Tasks — Real-time sprint tracking with status-based task management",
  "login.feature2": "AI Agent — Chat with AI for sprint coordination, status updates, and recommendations",
  "login.feature3": "Review Gates — Stage-gated quality assurance with automated review reports",
  "login.feature4": "Documents — URD, SS, SAD, test cases, and traceability in one place",
  "login.welcomeBack": "Welcome Back",
  "login.desc": "Enter your access token to continue to the dashboard.",
  "login.serverUrl": "Server URL",
  "login.accessToken": "Access Token",
  "login.tokenPlaceholder": "cspm-xxxx-xxxx-xxxx-xxxx",
  "login.rememberMe": "Remember token",
  "login.signIn": "Sign In",
  "login.footerHint": "Generate a token with: {code}",
  "login.error": "Invalid token. Please check and try again.",
  "login.tokenExpired": "Token has expired. Please generate a new token using the CLI.",
  "login.advanced": "Advanced",
  "login.authenticating": "Authenticating...",

  "chat.drop_zone_label": "Drop files here to attach",
  "chat.attachment_remove": "Remove attachment",
  "chat.attachment_size_bytes": "{count} bytes",
  "chat.attachment_size_kb": "{count} KB",
  "chat.attachment_size_mb": "{count} MB",
  "chat.connection.idle": "Not connected",
  "chat.connection.connecting": "Connecting…",
  "chat.connection.connected": "Connected",
  "chat.connection.error": "Connection error",
  "chat.connection.disconnected": "Disconnected",
  "chat.connection.retryButton": "Retry",
  "chat.connection.error.authentication_failed": "Authentication failed",
  "chat.connection.error.backend_unreachable": "Backend unreachable",
  "chat.connection.error.connection_timed_out": "Connection timed out",
  "chat.connection.error.connection_closed_unexpectedly": "Connection closed unexpectedly",
  "chat.connection.error.agent_command_not_configured": "Agent command is not configured",
  "chat.connection.error.subprocess_failed_to_start": "Subprocess failed to start",
  "chat.connection.error.handshake_failed": "Handshake failed",
  "chat.connection.error.connection_lost": "Connection lost",
  "chat.connection.error.fallback": "An unexpected error occurred",
  "chat.sessions": "Sessions",
  "chat.input.notConnected": "Not connected",
  "chat.input.send": "Send",
  "chat.input.emptyTooltip": "Type a message first",
  "chat.input.sending": "Sending…",
  "chat.input.sendingTooltip": "Waiting for response",
  "chat.input.placeholder": "Type a message (Enter to send, Shift+Enter for newline)",
  "chat.input.attachFile": "Attach file",
  "chat.input.fileTooLarge": "File too large: {name} (max {maxSize} MB)",
  "chat.markdown.copyButton": "Copy",
  "chat.markdown.copied": "Copied!",
  "chat.markdown.failed": "Failed",
  "chat.markdown.copyCodeLabel": "Copy code",
  "chat.thinking.label": "Thinking",
  "chat.question.title": "Agent question",
  "chat.question.submit": "Submit",
  "chat.question.dismiss": "Dismiss",
  "chat.question.multiSelect": "Multi-select",
  "chat.question.ariaLabel": "Agent question — arrow keys to select, space to toggle, enter to submit",
  "chat.tasks.title": "Agent tasks",
  "chat.tasks.empty": "No agent tasks in this session yet",
  "chat.tasks.blockedBy": "Blocked by",
  "chat.tasks.noSubject": "(no subject)",
  "chat.resume.fallbackNotice": "This response started from a fresh session (resume was unavailable).",
  "chat.draft.restorePrompt": "A previous message could not be completed and was preserved as a draft.",
  "chat.draft.restore": "Restore draft",
  "chat.draft.discard": "Discard"
}
