{
  "common": {
    "cancel": "Cancel",
    "confirm": "Confirm",
    "loading": "Loading…",
    "send": "Send",
    "rename": "Rename",
    "delete": "Delete",
    "close": "Close",
    "save": "Save",
    "copy": "Copy",
    "quote": "Quote",
    "quote_block": "Quote All",
    "copied": "Copied!",
    "generating": "Generating...",
    "starting": "Starting...",
    "yes": "yes",
    "connected": "Connected",
    "disconnected": "Disconnected",
    "reconnecting": "Reconnecting…",
    "refresh": "Refresh",
    "show": "Show",
    "hide": "Hide",
    "this_feature": "This feature"
  },
  "window": {
    "maximize": "Maximize",
    "restore": "Restore",
    "minimize": "Minimize",
    "close": "Close",
    "hide": "Hide"
  },
  "appUpdate": {
    "banner_title": "IM.codes has been updated",
    "banner_body": "Refresh to use the latest version. Your sessions will stay available.",
    "later": "Later",
    "refresh": "Refresh",
    "chunk_title": "Refresh required",
    "blocking_title": "Refresh before continuing",
    "chunk_body": "This page is running an older frontend and could not load a required app file. Refresh to recover cleanly.",
    "blocking_body": "{{feature}} needs the latest frontend after the server update. Refresh to continue without the panel getting stuck.",
    "refresh_continue": "Refresh and continue",
    "error_reload_message": "App updated — reload to continue",
    "error_retry_message": "Component error — tap to retry",
    "reload": "Reload",
    "retry": "Retry"
  },
  "chat": {
    "dpad": {
      "title": "Arrow keys — drag to move"
    },
    "sendFailedReason": {
      "daemonOffline": "Connection lost",
      "ackTimeout": "No response from agent",
      "daemonError": "Agent error"
    },
    "loading": "Loading chat...",
    "syncing": "↻ Syncing...",
    "no_events": "No events yet",
    "session_state": "Session {{state}}",
    "load_older": "Load older messages",
    "loading_older": "Loading...",
    "refreshing_history": "Updating history…",
    "timelineStatus": {
      "ok": "History updated",
      "empty": "No earlier timeline events",
      "partial": "Timeline loaded partially",
      "deferred": "Timeline is still being prepared",
      "canceled": "Timeline request was canceled",
      "payloadTruncated": "Timeline was shortened for faster loading",
      "cursorReset": "Timeline position changed; refresh history",
      "queueFull": "Timeline worker is busy",
      "deadlineExceeded": "Timeline request timed out",
      "timeout": "Timeline worker timed out",
      "unavailable": "Timeline history is unavailable",
      "projectionUnavailable": "Timeline index is unavailable",
      "malformedRequest": "Timeline request was invalid",
      "internalError": "Timeline history failed",
      "detailMissing": "Timeline detail is no longer available",
      "detailExpired": "Timeline detail expired",
      "detailUnauthorized": "Timeline detail is unavailable for this session",
      "detailOversized": "Timeline detail is too large",
      "detailMalformed": "Timeline detail request was invalid",
      "detailEpochMismatch": "Timeline detail expired after restart",
      "detailGenerationMismatch": "Timeline detail expired after refresh",
      "detailHydrated": "Timeline detail loaded",
      "pageCursorReset": "Timeline page expired; refresh history",
      "pageMalformed": "Timeline page request was invalid",
      "error": "Timeline history failed"
    },
    "thinking_running": "Thinking · {{sec}}s",
    "thinking_done": "Thought for {{sec}}s",
    "show_file_panel": "Open file panel",
    "hide_file_panel": "Close file panel",
    "sync_history": "Sync chat history",
    "sdk_agents_toggle": "Agents",
    "sdk_agents_toggle_aria": "Toggle SDK agents status, {{count}} running",
    "sdk_agents_badge_aria": "{{count}} SDK agents running",
    "sdk_agents_panel_title": "Agents",
    "sdk_agents_close": "Close Agents panel",
    "sdk_agents_running_count": "{{count}} running",
    "sdk_agents_active_section": "Active",
    "sdk_agents_recent_section": "Recent",
    "sdk_agents_diagnostics_section": "Diagnostics",
    "sdk_agents_provider_claude": "Claude SDK",
    "sdk_agents_provider_codex": "Codex SDK",
    "sdk_agents_provider_qwen": "Qwen",
    "sdk_agents_provider_gemini": "Gemini SDK",
    "sdk_agents_provider_unknown": "SDK agent",
    "sdk_agents_status_pending": "Pending",
    "sdk_agents_status_running": "Running",
    "sdk_agents_status_complete": "Complete",
    "sdk_agents_status_error": "Error",
    "sdk_agents_status_interrupted": "Interrupted",
    "sdk_agents_status_stale": "Stale",
    "sdk_agents_status_unknown": "Unknown",
    "sdk_agents_id": "ID",
    "sdk_agents_model": "Model",
    "sdk_agents_started_at": "Started",
    "sdk_agents_duration": "Duration",
    "sdk_agents_tokens": "Tokens",
    "sdk_agents_prompt": "Prompt",
    "sdk_agents_result": "Result",
    "sdk_agents_running_children": "{{count}} child running",
    "sdk_agents_receiver_count": "{{count}} receivers",
    "sdk_agents_diagnostic_unsupported_runtime": "Runtime does not expose agent status",
    "sdk_agents_diagnostic_unknown_runtime_support": "Runtime support is unknown",
    "sdk_agents_diagnostic_malformed_payload": "Malformed agent metadata",
    "sdk_agents_diagnostic_missing_id": "Missing agent identity",
    "sdk_agents_diagnostic_unknown_state": "Unknown provider state",
    "sdk_agents_diagnostic_stale_without_terminal": "Status went stale before completion",
    "sdk_agents_diagnostic_snapshot_only": "Snapshot-only provider status",
    "sdk_agents_diagnostic_generic": "Agent status diagnostic",
    "html_preview": "Render HTML",
    "html_preview_title": "Render HTML preview",
    "html_preview_open_new_window": "Open preview in new window",
    "html_preview_too_large": "HTML file is too large to render safely.",
    "html_preview_unavailable": "HTML preview unavailable",
    "html_preview_frame": "Rendered HTML preview",
    "tool_fold_more": "... {{count}} lines ...",
    "tool_fold_collapse": "collapse",
    "tool_group_more": "··· {{count}} more",
    "tool_group_collapse": "▲ collapse",
    "tool_calls_toggle_show": "Show tools and thinking",
    "tool_calls_toggle_hide": "Hide tools and thinking",
    "tool_calls_toggle_undecided": "Choose how to view AI activity",
    "tool_calls_choose_prompt": "Pick view ↓",
    "memory_summary_sync": "Sync recent summaries",
    "memory_summary_sync_busy": "Syncing summaries...",
    "memory_summary_sync_instruction": "Context sync only. Digest these recent summaries as background context. Do not execute tasks, change files, call tools, or respond to this message; wait for the next user instruction.",
    "memory_summary_sync_heading": "Recent summaries ({{count}}/{{limit}}, capped at ~{{maxChars}} chars):",
    "user_message_expand": "Show full",
    "user_message_collapse": "Collapse",
    "tool_chooser_title": "How should AI activity show?",
    "tool_chooser_subtitle": "Tool calls, file changes, and reasoning add detail but can feel busy.",
    "tool_chooser_simple_label": "Simple",
    "tool_chooser_simple_hint": "Just the AI's replies",
    "tool_chooser_developer_label": "Developer",
    "tool_chooser_developer_hint": "Show tools, files, reasoning",
    "tool_chooser_footnote": "Change anytime via the wrench icon.",
    "new_file": "New file",
    "new_file_name": "File name",
    "new_folder": "New folder",
    "new_folder_name": "Folder name",
    "create": "Create",
    "external_link_title": "Open External Link",
    "external_link_warning": "This link was generated by an AI agent. You are responsible for any risks associated with visiting external websites.",
    "external_link_cancel": "Cancel",
    "external_link_open": "Open Link",
    "zoom_title": "Message",
    "zoom_copy_all": "Copy all",
    "zoom_hint": "Long-press to select. Drag the handles to refine the selection, then use Copy.",
    "tool_detail_toggle": "details",
    "tool_detail_input": "input",
    "tool_detail_output": "output",
    "tool_detail_meta": "meta",
    "tool_detail_raw": "raw",
    "pinned_last_sent_label": "Last sent",
    "pinned_last_sent_aria": "Jump to your last sent message",
    "memory_context_title": "Related history",
    "memory_context_startup_title": "Historical context · injected",
    "memory_context_summary": "{{count}} recalled",
    "memory_context_query": "Query: {{query}}",
    "memory_context_score": "Score {{score}}",
    "memory_context_startup_reason": "Injected during session startup",
    "memory_context_section_preferences": "Preferences ({{count}})",
    "memory_context_section_durable": "Long-term memory ({{count}})",
    "memory_context_section_recent": "Recent summaries ({{count}})",
    "memory_context_section_master": "Master summaries ({{count}})",
    "memory_context_section_other": "Other context ({{count}})",
    "memory_context_collapse_bottom": "Collapse",
    "memory_context_status_no_matches": "No related memory found",
    "memory_context_status_deduped_recently": "{{count}} related memories found, but they were already injected recently",
    "memory_context_status_deduped_recently_detail": "Found {{count}} related memories. {{deduped}} were skipped because they were already injected in recent turns.",
    "memory_context_status_skipped_template_prompt": "Skipped memory recall for an internal/template prompt",
    "memory_context_status_skipped_template_prompt_detail": "This message matches a built-in workflow or template prompt, so related-memory lookup was skipped on purpose.",
    "memory_context_status_skipped_short_prompt": "Skipped memory recall because the prompt is too short",
    "memory_context_status_skipped_short_prompt_detail": "Short prompts are not specific enough to produce reliable related-memory matches.",
    "memory_context_status_skipped_control_message": "Skipped memory recall for a command message",
    "memory_context_status_skipped_control_message_detail": "Slash commands do not trigger related-memory lookup.",
    "memory_context_status_failed": "Related-memory lookup is temporarily unavailable",
    "memory_context_status_failed_detail": "The message was still sent, but memory lookup failed this time.",
    "file_change_title": "File changes ({{count}})",
    "file_change_patch_count": "{{count}} patch(s)",
    "file_change_provider_claude_code": "Claude Code",
    "file_change_provider_opencode": "OpenCode",
    "file_change_provider_codex_sdk": "Codex SDK",
    "file_change_provider_qwen": "Qwen",
    "file_change_provider_gemini": "Gemini",
    "file_change_operation_create": "create",
    "file_change_operation_update": "update",
    "file_change_operation_delete": "delete",
    "file_change_operation_rename": "rename",
    "file_change_operation_unknown": "change",
    "file_change_operation_mixed": "mixed",
    "file_change_confidence_exact": "exact",
    "file_change_confidence_derived": "derived",
    "file_change_confidence_coarse": "coarse",
    "file_change_confidence_mixed": "mixed fidelity",
    "file_change_removed": "Removed",
    "file_change_added": "Added",
    "file_change_truncated": "truncated",
    "file_change_no_before": "(no original text)",
    "file_change_no_after": "(no new text)",
    "file_change_derived_no_preview": "(no preview available)",
    "file_change_coarse_hint": "File path available, but no diff text was provided.",
    "file_change_renamed_from": "{{oldPath}} → {{newPath}}",
    "font": {
      "dialogLabel": "Font",
      "typeLabel": "Font type",
      "codeTab": "Code",
      "cjkTab": "CJK",
      "familyLabel": "Font family",
      "cjkFamilyLabel": "CJK font",
      "allBuiltInCjk": "All built-in CJK fonts",
      "cjkFamilies": {
        "system-cjk": "System CJK",
        "pingfang-sc": "PingFang SC",
        "songti-sc": "Songti SC",
        "kaiti-sc": "Kaiti SC",
        "stheiti": "STHeiti",
        "stsong": "STSong",
        "stkaiti": "STKaiti",
        "stfangsong": "STFangsong",
        "microsoft-yahei": "Microsoft YaHei",
        "simsun": "SimSun",
        "nsimsun": "NSimSun",
        "dengxian": "DengXian",
        "kaiti": "KaiTi",
        "fangsong": "FangSong",
        "microsoft-jhenghei": "Microsoft JhengHei"
      }
    }
  },
  "session": {
    "restart": "↺ Restart",
    "restart_plain": "Restart",
    "confirm_restart": "Confirm restart?",
    "new": "+ New",
    "start_fresh": "Start fresh",
    "confirm_new": "Confirm new?",
    "tab_pin": "📌 Pin",
    "tab_unpin": "📌 Unpin",
    "pin_plain": "Pin",
    "unpin_plain": "Unpin",
    "stop": "✕ Stop",
    "stop_session": "Stop session",
    "stop_main_title": "Stop main session?",
    "stop_main_body": "{{project}} is a main session. Stopping it will terminate all its tmux processes. This cannot be undone.",
    "really_stop_project": "⚠ REALLY stop {{project}}?",
    "stop_plain": "Stop",
    "unpin_to_stop": "Unpin tab first to stop",
    "state_stop_requested": "Stop requested",
    "state_stopping": "Stopping...",
    "state_compacting": "Compacting context...",
    "state_idle": "Agent idle — waiting for input",
    "state_running": "Agent working...",
    "state_started": "Session started",
    "state_starting": "Session starting...",
    "state_stopped": "Session stopped",
    "confirm_stop": "Confirm stop?",
    "confirm_stop_dialog": "Are you sure you want to stop this session? This action cannot be undone.",
    "confirm_sub_stop_2": "⚠ REALLY stop {{label}}?",
    "confirm_sub_restart_2": "⚠ REALLY restart {{label}}?",
    "confirm_sub_new_2": "⚠ REALLY replace {{label}}?",
    "confirm_sub_stop_dialog": "Stop sub-session?\n\nType: {{type}}\nLabel: {{label}}\nSession: {{name}}\n\nThis will terminate the agent and cannot be undone.",
    "confirm_sub_restart_dialog": "Restart sub-session?\n\nType: {{type}}\nLabel: {{label}}\nSession: {{name}}\n\nThe agent will be restarted.",
    "confirm_sub_new_dialog": "Start fresh sub-session?\n\nType: {{type}}\nLabel: {{label}}\nSession: {{name}}\n\nCurrent session will be replaced.",
    "confirm_restart_dialog": "Are you sure you want to restart this session?",
    "confirm_new_dialog": "Are you sure you want to start a fresh session? Current session will be replaced.",
    "settings": "Session Settings",
    "type": "Type",
    "label": "Label",
    "workingDir": "Working Directory",
    "parentSession": "Parent Session",
    "rename": "✎ Rename",
    "rename_plain": "Rename",
    "no_session": "No session",
    "send_queued": "Reconnecting… (send queued)",
    "transport_send_queued": "Queued — will send after the current reply finishes",
    "transport_send_queued_collapsed": "{{count}} queued · showing latest only",
    "transport_send_queued_count": "{{count}} queued",
    "send_placeholder": "Send to {{name}}…",
    "send_placeholder_desktop_upload": "{{placeholder}} Supports fast multi-file paste or drag upload",
    "actions": "Session actions",
    "new_btn": "New session",
    "clone": {
      "menu": "Copy session group",
      "title": "Copy Session Group",
      "source": "Source session",
      "targetProjectName": "Target project name",
      "targetProjectPlaceholder": "my-project-copy",
      "finalSessionName": "Final session",
      "previewUnavailable": "Enter a project name",
      "preserveDirectories": "Default: cloned sessions use the original working directories",
      "overrideDirectories": "Use a new working directory for cloned sessions",
      "cwdOverride": "Replacement working directory",
      "cwdOverridePlaceholder": "/work/new-checkout",
      "browseCwd": "Browse working directory",
      "daemonHostValidation": "Working directories are validated on the daemon host before anything is created.",
      "runningWarning": "The copied group starts fresh. Pending messages, terminal history, and running work from the source are not copied.",
      "capabilityMissing": "The connected daemon has not reported session group copy support yet. Update or reconnect the daemon, then try again.",
      "submit": "Copy group",
      "submitting": "Copying...",
      "blankProject": "Target project name is required.",
      "notConnected": "Connect to a server before copying a session group.",
      "daemonOffline": "The daemon is offline. Reconnect it before copying a session group.",
      "missingServer": "Select a server before copying a session group.",
      "cwdRequired": "Enter a replacement working directory or preserve source directories.",
      "progress": "Status: {{state}}",
      "subSessionProgress": "Sub-sessions: {{created}}/{{total}} copied",
      "operationId": "Operation: {{operationId}}",
      "success": "Copied group created as {{session}}. Switching to it now.",
      "cleanupRequired": "Cleanup required",
      "cleanupRequiredBody": "Some created resources may need manual cleanup. Review the daemon or server details before retrying.",
      "cleanupResourceDetail": "{{kind}}: {{id}}",
      "warningsTitle": "{{count}} warning(s)",
      "skippedMembersTitle": "{{count}} skipped member(s)",
      "skippedMemberDetail": "{{session}}: {{reason}}",
      "skippedCronJobs": "{{count}} scheduled task(s) were not copied.",
      "skippedOrchestrationRuns": "{{count}} discussion/orchestration run(s) were not copied.",
      "state": {
        "validating": "Validating",
        "reserving": "Reserving target name",
        "creating_main": "Creating main session",
        "creating_subs": "Creating sub-sessions",
        "writing_db": "Writing server records",
        "provider_create": "Creating provider sessions",
        "writing_pref": "Copying Team settings",
        "committing": "Committing",
        "rolling_back": "Rolling back",
        "succeeded": "Succeeded",
        "failed": "Failed",
        "cancelled": "Cancelled",
        "cleanup_required": "Cleanup required"
      },
      "errorCode": {
        "invalid_request": "The copy request was invalid.",
        "forbidden": "Only owners and admins can copy session groups.",
        "unsupported_command": "The daemon has not reported session group copy support. Update or reconnect it, then try again.",
        "source_not_found": "The source session was not found.",
        "source_not_role_compatible": "Only role-compatible main brain sessions can be copied.",
        "blank_target_project": "Target project name is required.",
        "name_taken": "That target session name is already in use.",
        "invalid_cwd": "The working directory could not be used on the daemon host.",
        "incomplete_clone_spec": "A running child session is missing copyable launch settings.",
        "unsupported_session_type": "One of the sessions cannot be copied yet.",
        "p2p_config_invalid": "The Team configuration could not be copied.",
        "persist_failed": "The copy could not be saved.",
        "idempotency_conflict": "This retry key was already used for a different copy request.",
        "server_commit_failed": "The server could not commit the copied sessions.",
        "server_p2p_commit_failed": "The server could not copy the Team settings.",
        "cancelled": "The copy was cancelled.",
        "cleanup_required": "The copy needs manual cleanup before retrying.",
        "internal_error": "The copy failed unexpectedly."
      },
      "warningCode": {
        "running_source_excluded_state": "Running source work is excluded",
        "p2p_prompt_session_reference": "Free-text Team reference may still mention the source",
        "p2p_skipped_participant_dropped": "Skipped Team participant was removed from the copy",
        "skipped_member": "A member was skipped",
        "scheduled_work_skipped": "Scheduled work was not copied",
        "p2p_config_missing": "No Team config was found to copy",
        "rollback_partial": "Rollback was partial"
      },
      "cleanupResourceKind": {
        "daemon_session": "daemon session",
        "daemon_p2p_scope": "daemon Team config",
        "server_db_session": "server session row",
        "server_p2p_pref": "server Team preference",
        "provider_session": "provider session"
      },
      "skippedReason": {
        "stopped": "stopped",
        "error": "error",
        "closed": "closed",
        "hidden": "hidden",
        "nested": "nested child",
        "server_only_orphan": "server-only orphan",
        "unsupported": "unsupported",
        "incomplete_spec": "incomplete settings"
      }
    },
    "agentType": {
      "openclaw": "OpenClaw",
      "qwen": "Qwen Code",
      "claude_code_sdk": "Claude Code SDK",
      "codex_sdk": "Codex SDK",
      "claude_code_cli": "Claude Code CLI",
      "codex_cli": "Codex CLI",
      "copilot_sdk": "Copilot",
      "cursor_headless": "Cursor",
      "gemini_sdk": "Gemini SDK",
      "kimi_sdk": "Kimi Code"
    },
    "agentGroup": {
      "transport_sdk": "SDK",
      "cli_process": "CLI"
    },
    "openclaw_not_connected": "not connected",
    "openclaw_connect_hint": "OpenClaw gateway is not connected. Run the following command on your daemon machine to connect:",
    "sessionMode": "Session Mode",
    "newSession": "New Session",
    "bindExisting": "Bind Existing OC Session",
    "selectSession": "Select a session",
    "loadingSessions": "Loading sessions...",
    "noSessions": "No available sessions",
    "description": "Description",
    "descriptionPlaceholder": "Session persona or purpose (optional)",
    "sessionKey": "Session Key",
    "autoGenerate": "Auto-generate",
    "codex_ctx_short": "ctx",
    "codex_5h_short": "5h",
    "codex_wk_short": "wk",
    "codex_ctx_title": "Context left {{percent}}%",
    "codex_limit_title": "{{label}} left {{percent}}% · resets {{reset}}",
    "provider_plan_title": "Plan: {{value}}",
    "provider_quota_title": "Quota: {{value}}",
    "weekly_quota_authorize": "Show weekly limit",
    "weekly_quota_authorize_hint": "Authorize reading your local Claude token to show the weekly (7-day) limit",
    "weekly_quota_confirm": "This reads your local Claude login token to fetch the weekly (7-day) limit. Authorize?",
    "provider_quota_usage_title": "Quota usage: {{value}}",
    "history_loading_label": "History",
    "history_step_cache": "cache",
    "history_step_text_tail": "fast tail",
    "history_step_daemon": "daemon",
    "history_step_http": "backfill",
    "history_step_older": "older",
    "provider_plan_free": "Free",
    "provider_plan_paid": "Paid",
    "provider_plan_byo": "BYO",
    "qwen_tier_free": "Free",
    "qwen_tier_paid": "Paid",
    "qwen_tier_byo": "BYO",
    "qwen_source_title": "Qwen source: {{tier}}",
    "qwen_model_title": "Qwen source: {{tier}} · Model: {{model}}",
    "p2p_tag": "Team",
    "thinking": "Level",
    "thinking_title": "Level: {{value}}",
    "supervision": {
      "title": "Session supervision",
      "help": "Set global defaults for new Auto-enabled sessions, then override them for this session when needed.",
      "globalDefaultsTitle": "Global defaults",
      "globalDefaultsHelp": "Used to prefill new Auto-enabled transport sessions. Saving here updates your default supervisor backend, model, and timeout.",
      "sessionConfigTitle": "This session",
      "sessionConfigHelp": "Applies only to the current session. Backend/model/timeout can override the defaults here, while audit mode and custom instructions stay session-only.",
      "intro": {
        "title": "What Auto does",
        "howToUseTitle": "How to use it",
        "howToUseBody": "Choose Off, Supervised, or Supervised + audit. Then select a supervisor backend and model, save the settings, and leave Auto enabled for this session. Audit mode adds an audit pipeline and a rework-loop limit.",
        "purposeTitle": "What it is for",
        "purposeBody": "Auto lets a supervisor model decide whether the current task is complete, should continue automatically, or needs a human. Audit mode adds a second pass that reviews the implementation before handing control back.",
        "howItWorksTitle": "How it works",
        "howItWorksBody": "When the session reaches idle, IM.codes sends the latest task context to the configured supervisor, parses a structured decision, and then either stops, sends a continue prompt, or falls back to manual handling. If audit mode is enabled, the completed turn can also enter an automated audit and rework loop.",
        "expandHint": "Show details",
        "collapseHint": "Hide"
      },
      "mode": {
        "off": "Off",
        "supervised": "Supervised",
        "supervised_audit": "Supervised + audit"
      },
      "backend": "Backend",
      "model": "Model",
      "timeout": "Timeout (s)",
      "selectBackend": "Select backend",
      "selectModel": "Select model",
      "customInstructionsLabel": "Custom instructions",
      "customInstructionsPlaceholder": "Example: Require tests and verification before marking the task complete.",
      "customInstructionsHelp": "Optional. These instructions are appended to Auto's supervision and continue prompts for this session only.",
      "globalCustomInstructionsLabel": "Global custom instructions",
      "globalCustomInstructionsPlaceholder": "Example: Always prefer tests over commenting-out failing code.",
      "globalCustomInstructionsHelp": "Optional. Applies to every Auto-enabled session unless that session overrides it below.",
      "customInstructionsOverrideLabel": "Override global custom instructions",
      "customInstructionsOverrideHelp": "When checked, only this session's instructions above are used. When unchecked, the global value is prepended with a blank line.",
      "customInstructionsMergedPreviewHeading": "Merged instructions sent to the supervisor:",
      "presetLabel": "Preset (env bundle)",
      "presetHelp": "Routes the supervisor through a preset endpoint with its own base URL, API key, and pinned model. Manage presets in the Shared Context panel.",
      "presetNone": "(none)",
      "auditMode": {
        "audit": "Audit",
        "review": "Review",
        "audit_plan": "Audit → plan",
        "review_plan": "Review → plan",
        "audit_review_plan": "Audit → review → plan"
      },
      "selectAuditMode": "Select audit mode",
      "maxAuditLoops": "Max audit loops",
      "maxAutoContinueStreak": "Max repeated auto-continues",
      "maxAutoContinueStreakHelp": "Stops Auto after this many consecutive continue decisions of the same type. 0 = unlimited.",
      "maxAutoContinueTotal": "Hard max auto-continues",
      "maxAutoContinueTotalHelp": "Absolute cap on all auto-continue dispatches for one task run. 0 = unlimited.",
      "summaryTitle": "Resolved supervision",
      "summaryMode": "Mode: {{value}}",
      "summaryBackendModel": "Backend: {{backend}} · Model: {{model}}",
      "summaryUnset": "unset",
      "summaryDisabled": "Supervision off",
      "summaryTimeout": "Timeout: {{value}}",
      "summaryContinueLimits": "Continue limits: streak {{streak}} · hard {{total}}",
      "summaryCustomInstructions": "Custom instructions: {{value}}",
      "summaryCustomInstructionsSet": "set",
      "summaryAudit": "Audit: {{auditMode}} · loops {{loops}}",
      "summaryMeta": "Prompt {{promptVersion}}, repair {{repairVersion}}, parse retries {{parseRetries}}, task-run {{taskRunVersion}}",
      "disabledHint": "Supervision is only available for transport sessions.",
      "unsupported": "Supervision settings are not available for process sessions.",
      "validation": {
        "backendRequired": "Select a supervision backend.",
        "modelRequired": "Select or enter a supervision model.",
        "modelInvalid": "Model is not valid for {{backend}}.",
        "auditModeRequired": "Select an audit mode."
      },
      "modeLabel": "Mode",
      "auditModeLabel": "Audit mode",
      "invalidStoredConfig": "Stored supervision config is invalid. Automation is disabled until you repair and save it.",
      "quickLabel": "Auto",
      "quickTitle": "Auto mode"
    },
    "approval": {
      "pending": "Approval required",
      "allow": "Allow",
      "deny": "Deny",
      "tool": "{{tool}} wants approval"
    },
    "workingDirPlaceholder": "~/projects/myapp"
  },
  "server": {
    "upgrade_daemon": "↑ Upgrade Daemon",
    "upgrade_all": "↑ Upgrade All Devices",
    "delete": "✕ Delete server",
    "upgrade_sent": "Upgrade command sent to \"{{name}}\". The daemon will install the latest version and restart.",
    "upgrade_failed": "Failed to send upgrade command. The daemon may be offline.",
    "delete_title": "Delete server: {{name}}",
    "delete_warning": "This will remove all bindings and session records from the server, and notify the daemon to stop and delete local credentials.",
    "delete_tmux_note": "tmux sessions will not be closed",
    "delete_tmux_suffix": ", but the daemon will no longer auto-start.",
    "delete_confirm_prompt": "Type the server name to confirm deletion:",
    "delete_confirm": "Confirm Delete"
  },
  "quick_input": {
    "title": "Quick input",
    "commands": "Quick Commands",
    "phrases": "Quick Phrases",
    "history": "History",
    "this_session": "This Session",
    "all": "All",
    "no_history_session": "No history for this session",
    "no_history": "No history yet — messages are saved automatically",
    "clear_history": "Clear history",
    "add_command": "＋ Command",
    "add_phrase": "＋ Phrase",
    "label_command": "Command",
    "label_phrase": "Phrase",
    "placeholder_phrase": "fix this issue",
    "newer": "← Newer",
    "older": "Older →",
    "loading": "Loading…",
    "tab_quick": "Quick",
    "tab_files": "Files",
    "confirm_delete": "Delete this item?"
  },
  "file_browser": {
    "title_dir": "Select Directory",
    "title_file": "Select Files",
    "select": "Select",
    "insert": "Insert {{count}}",
    "browse": "Browse",
    "show_hidden": "Hidden",
    "this_pc": "This PC",
    "home": "Home",
    "selected_count": "{{count}} selected",
    "timeout": "Request timed out",
    "timeout_detail": "Could not read directory. This may be caused by slow or unavailable network drives.",
    "preview_loading": "Loading…",
    "preview_too_large": "File too large to preview (> 100 MB)",
    "preview_error": "Preview unavailable",
    "preview_binary": "Binary file — preview unavailable",
    "preview_video_unsupported": "Your browser cannot play this video format.",
    "mkdir_failed": "Failed to create folder",
    "create_file_failed": "Failed to create file",
    "file_exists": "File already exists",
    "view_diff": "Diff",
    "view_source": "Source",
    "view_rendered": "Rendered",
    "tab_files": "Files",
    "tab_changes": "Changes",
    "changes_title": "Changes ({{count}})",
    "no_changes": "No changes"
  },
  "toast": {
    "finished": "finished",
    "upgrade_blocked_title": "Upgrade blocked",
    "upgrade_blocked_p2p_active": "Team is still running. Stop it before upgrading the daemon.",
    "upgrade_blocked_transport_busy": "A transport session is still in a turn. Wait until it goes idle before upgrading the daemon.",
    "upgrade_blocked_toolchain_unavailable": "Node is missing on the daemon host (toolchain removed). Reinstall Node — auto-upgrade is disabled until then."
  },
  "discussion": {
    "role_critic": "Critic",
    "role_pragmatist": "Pragmatist",
    "role_innovator": "Innovator",
    "role_custom": "Custom...",
    "arbiter": "Arbiter",
    "arbiter_active": "⚖️ Arbiter",
    "starting": "Starting…",
    "start_failed_title": "Couldn't start discussion",
    "start_failed_offline": "You're offline — reconnect and try again.",
    "dialog_title": "Start Discussion",
    "start_button": "Start Discussion",
    "field_topic": "Topic",
    "topic_placeholder": "Describe what you want the agents to discuss…",
    "field_cwd": "Working Directory",
    "field_participants": "Participants",
    "add_participant": "+ Add",
    "field_max_rounds": "Max Rounds",
    "team_label": "Team",
    "complete_status": "Complete",
    "failed_status": "Failed",
    "error": {
      "missing_fields": "Missing required fields (topic and at least two participants).",
      "generic": "Failed to start the discussion. Please try again."
    }
  },
  "new_session": {
    "project_required": "Project name is required",
    "dir_required": "Working directory is required",
    "not_connected": "Not connected to daemon",
    "daemon_offline": "Daemon is offline — check that imcodes daemon is running",
    "start": "Start",
    "starting": "Starting...",
    "timeout": "Timed out waiting for session to start. Check daemon logs.",
    "title": "Start New Session",
    "project_name": "Project name",
    "working_directory": "Working directory",
    "browse": "Browse",
    "agent_type": "Agent type",
    "agent_flavor_cli": "CLI: native interface for users who prefer the original UI. Chat mode does not support streaming.",
    "agent_flavor_sdk": "SDK: supports streaming and uses a simpler UI.",
    "qwen_provider_hint": "Need third-party Coding Plan support? Choose Qwen Code.",
    "qwen_provider_selected_hint": "Qwen Code can use Anthropic-compatible third-party Coding Plan providers through the API Provider presets below.",
    "custom_provider_sdk": "Custom provider SDK",
    "custom_provider_sdk_help": "Use the Qwen SDK transport as the compatibility layer, then choose an API Provider preset below.",
    "custom_provider_preset": "Custom provider preset",
    "custom_provider_preset_required": "Choose or add an API Provider preset for the custom provider SDK.",
    "compatible_api_via_qwen": "Compatible API (via Qwen)",
    "api_provider": "API Provider",
    "api_provider_add_edit": "+ Add / Edit",
    "api_provider_default": "Default (Anthropic)",
    "api_provider_default_help": "Default (Anthropic) — click \"+ Add / Edit\" to configure",
    "api_provider_import_json": "Import JSON",
    "api_provider_export_json": "Export JSON",
    "api_provider_import_error": "Failed to import preset JSON from clipboard",
    "api_provider_export_success": "Preset JSON copied to clipboard",
    "api_provider_export_error": "Failed to copy preset JSON to clipboard"
  },
  "api_key": {
    "copy": "Copy",
    "copied": "Copied!",
    "label_placeholder": "Label (optional)",
    "generate": "Generate Key",
    "generating": "Generating...",
    "revoke": "Revoke",
    "save_once": "Save this key — it will not be shown again",
    "raw_key": "API key",
    "bind_url": "Bind URL",
    "bind_command": "Bind command",
    "copy_bind_command": "Copy bind command",
    "dismiss": "Dismiss"
  },
  "getting_started": {
    "step1_pending": "Step 1: Generate an API Key",
    "step1_done": "✓ Step 1: API Key ready"
  },
  "language": {
    "label": "Language",
    "en": "English",
    "zh_CN": "中文（简体）",
    "zh_TW": "中文（繁體）",
    "es": "Español",
    "ru": "Русский",
    "ja": "日本語",
    "ko": "한국어"
  },
  "login": {
    "subtitle": "Remote control your AI coding agents",
    "passkey_signin": "Sign in with Passkey",
    "passkey_create": "Create account with Passkey",
    "passkey_register_hint": "Give yourself a name and register your device passkey (Face ID, Touch ID, Windows Hello…)",
    "passkey_register_btn": "Register Passkey",
    "passkey_error": "Passkey authentication failed. Please try again.",
    "passkey_not_found": "No passkey found for this site. Please register first or use GitHub login.",
    "display_name_placeholder": "Your name (e.g. Alice)",
    "device_name_placeholder": "Device label (optional, e.g. MacBook Pro)",
    "or": "or",
    "github_signin": "Sign in with GitHub",
    "password_signin": "Sign in with Password",
    "username_placeholder": "Username",
    "password_placeholder": "Password",
    "signin": "Sign In",
    "remember_password": "Remember password on this device",
    "invalid_credentials": "Invalid username or password",
    "account_pending": "Your account is pending admin approval. Please contact the administrator.",
    "account_disabled": "Your account has been disabled. Please contact the administrator.",
    "must_change_password": "You must change your password before continuing",
    "new_password_placeholder": "New password",
    "confirm_password_placeholder": "Confirm new password",
    "change_password_btn": "Change Password",
    "passwords_mismatch": "Passwords do not match",
    "password_too_short": "Password must be at least 8 characters",
    "password_missing_uppercase": "Password must contain at least one uppercase letter",
    "password_missing_lowercase": "Password must contain at least one lowercase letter",
    "password_missing_digit": "Password must contain at least one number",
    "password_register": "Create account with Password",
    "password_register_btn": "Create Account",
    "password_register_hint": "Choose a username and a strong password (at least 8 characters with uppercase, lowercase, and a number).",
    "username_taken": "This username is already taken",
    "registration_disabled": "Registration is currently disabled",
    "invalid_username_format": "Username must be 3-32 characters, start and end with a letter or number",
    "nonce_exchange_failed": "Authentication completed but connection failed. Please try again.",
    "native_callback_fallback": "Tap here if not redirected automatically",
    "native_status_getting_challenge": "Getting challenge…",
    "native_status_authenticating": "Authenticating…",
    "native_status_getting_api_key": "Getting API key…",
    "native_status_redirecting": "Redirecting…",
    "native_status_creating_passkey": "Creating passkey…",
    "native_status_registering": "Registering…",
    "native_status_saving": "Saving…",
    "native_status_logging_in": "Logging in…"
  },
  "serverSetup": {
    "title": "Choose a Server",
    "description": "Enter your IM.codes server address",
    "placeholder": "https://your-server.com",
    "connect": "Connect",
    "useDefault": "Use default server",
    "verifying": "Verifying...",
    "error": "Cannot reach server. Check the URL and try again.",
    "errorNotHttps": "Server URL must use HTTPS",
    "changeServer": "Change Server",
    "addServer": "+ Add Server",
    "httpWarning": "Warning: HTTP connections are not secure. Use HTTPS for non-localhost servers."
  },
  "passkey": {
    "title": "Passkeys",
    "none": "No passkeys registered",
    "add": "Add Passkey",
    "add_error": "Failed to add passkey. Please try again.",
    "delete_error": "Failed to remove passkey.",
    "unnamed": "Unnamed device",
    "added": "Added",
    "last_used": "last used",
    "device_name_placeholder": "Device label (optional)"
  },
  "account": {
    "delete_title": "Delete Account",
    "delete_warning": "This action is permanent. All your servers, sessions, API keys, passkeys, and other data will be permanently deleted.",
    "delete_btn": "Delete Account",
    "delete_confirm_prompt": "Type DELETE to confirm account deletion:",
    "delete_confirm": "Permanently Delete",
    "delete_error": "Failed to delete account. Please try again."
  },
  "voice": {
    "listening": "Listening...",
    "paused": "Paused",
    "speak_now": "Speak now...",
    "voice_input": "Voice input",
    "stop_voice": "Stop voice input",
    "send": "Send",
    "mic_permission_failed": "Failed to start — check microphone/speech permissions in Settings",
    "error": "Voice error: {{error}}"
  },
  "p2p": {
    "final_original_request_reminder": "After synthesizing the discussion, directly address and fulfill the user's original request instead of stopping at a discussion summary.\nThe original user request is: \"{{request}}\"",
    "post_summary_execute_prompt": "The Team discussion is complete. Use the discussion file as context, then directly fulfill the user's original request in this session.\nDiscussion file: {{discussionFile}}\nThe original user request is: \"{{request}}\"\nDo not stop at another discussion summary.",
    "discussion_language_instruction": "Reply in {{language}}.",
    "ring": {
      "active": "R{{round}}/{{totalRounds}}",
      "label_active": "Round {{round}}/{{totalRounds}}",
      "active_hops": "R{{round}}/{{totalRounds}} H{{hop}}/{{totalHops}}"
    },
    "status": {
      "done": "Done",
      "active": "Active",
      "pending": "Pending",
      "skipped": "Skipped",
      "queued": "Queued",
      "dispatched": "Dispatching",
      "running": "Running",
      "awaiting_next_hop": "Awaiting next hop",
      "completed": "Completed",
      "failed": "Failed",
      "timed_out": "Timed out",
      "cancelled": "Cancelled",
      "setup": "Setup"
    },
    "discussions": {
      "title": "Discussions",
      "live_progress": "Live progress",
      "slogan": "IM.codes - the IM for agents",
      "hide": "Hide",
      "show": "Show",
      "untitled": "Discussion",
      "empty": "No Team discussions yet. Use @@all(discuss) or @agent to start one.",
      "select": "Select a discussion to view",
      "load_failed": "(Failed to load)",
      "phase_initial": "Initial",
      "phase_hop": "Hop",
      "phase_summary": "Summary",
      "phase_execution": "Execute",
      "phase_queued": "Queued",
      "round_label": "Round",
      "hop_label": "Hop",
      "auto_follow_latest": "Auto-follow latest",
      "copy_path": "Copy path",
      "copy_content": "Copy content",
      "scroll_top": "Scroll to top",
      "scroll_bottom": "Scroll to bottom"
    },
    "mode_solo": "Solo",
    "mode_audit": "Audit",
    "mode_review": "Review",
    "mode_plan": "Plan",
    "mode_brainstorm": "Brainstorm",
    "mode_discuss": "Discuss",
    "combo_label": "Combo",
    "combo_presets": "Preset Combos",
    "combo_custom": "My Combos",
    "combo_custom_empty": "No custom combos yet.",
    "combo_builder": "Add New Combo",
    "combo_recommended_hint": "Recommended for most audit tasks.",
    "exclude_same_type": "Exclude same type",
    "picker": {
      "back": "Back",
      "files": "Files",
      "agents": "Agents",
      "search_project_files": "Search project files",
      "quick_discussion_with_agent": "Quick Discussion with an agent",
      "team": "Team",
      "team_desc": "Start a Team discussion",
      "select_mode": "Select Mode",
      "all_agents": "All Agents",
      "sessions": "sessions",
      "type_to_search": "type to search",
      "keep_typing": "Keep typing...",
      "no_files_found": "No files found",
      "no_agents_available": "No agents available",
      "you": "You",
      "busy": "Busy"
    },
    "mode": {
      "audit": "Audit",
      "review": "Review",
      "plan": "Plan",
      "brainstorm": "Brainstorm",
      "discuss": "Discuss"
    },
    "team_button": "Team",
    "mode_config": "Config",
    "dropdown": {
      "tab_combos": "Combos",
      "tab_workflows": "Workflows",
      "solo_hint": "Select a flow below to start a workflow",
      "team_intro_title": "Team discussion",
      "team_intro_body": "Agents discuss, summarize, implement, then review the result. Extra rounds repeat the loop to harden the outcome.",
      "team_intro_tooltip": "Discussion → summary → implementation → review. More rounds repeat the loop on the previous result.",
      "workflows_empty": "No saved workflows yet. Open Settings → Advanced Workflow to design one.",
      "workflows_manage": "Manage workflows"
    },
    "settings_button": "Settings",
    "settings_title": "Team Discussion Settings",
    "settings_process_title": "Team discussion flow",
    "settings_process_body": "Team mode runs a discussion-summary-implementation-review loop. One round completes the loop once; additional rounds use the previous implementation result as context for another audit/review pass so agents can catch missed requirements, regression risks, edge cases, and test gaps before the work is considered done.",
    "alpha_badge": "Alpha",
    "alpha_hint": "Experimental capability; not formally validated yet.",
    "cross_session": "Include sessions from other projects",
    "tab": {
      "advanced_workflow": "Advanced Workflow",
      "advanced_workflow_intro": "Design a directed Team workflow. Nodes are agent rounds (LLM, script, or logic gates); edges control routing. Edits here override the simple round/mode pipeline configured under Agents.",
      "advanced_workflow_alpha_notice": "Experimental capability; not formally validated yet. Prefer preset combos for critical work.",
      "advanced_workflow_empty_hint": "Initializing a blank workflow draft. Add nodes and edges in the canvas below to design your Team pipeline.",
      "advanced_workflow_starter_title": "Untitled workflow",
      "advanced_workflow_starter_node_title": "Start"
    },
    "settings_filter_sdk": "SDK",
    "settings_filter_cli": "CLI",
    "settings_save": "Save",
    "settings_save_and_close": "Save & Close",
    "settings_close": "Close",
    "confirm_cancel": "Sure to cancel?",
    "combo_send_confirm_title": "Confirm combo send",
    "combo_send_confirm_body": "This message will be sent directly with the combo flow {{mode}}. Continue?",
    "combo_send_confirm_skip": "Don't ask again, send directly next time",
    "combo_empty_message_warning": "Combo send requires a real message. Add some prompt text before sending.",
    "combo_requires_participants_hint": "Choose Team participants in Settings to enable combo modes.",
    "member_cannot_initiate_discussion": "This session is a Team member, so it can't start a discussion. Start it from another session — a top-tier model is recommended.",
    "settings_enabled": "Participate",
    "settings_mode": "Mode",
    "settings_skip": "Skip",
    "settings_default_hint": "New sessions default to: enabled + audit",
    "settings_rounds": "Rounds",
    "settings_rounds_hint": "Review cycles",
    "settings_rounds_explanation": "Each round is a complete multi-agent analysis loop: discuss the request, execute it, then run another composite audit/review cycle to catch omissions, regression risks, and edge cases before further hardening.",
    "settings_hop_timeout": "Hop Timeout",
    "settings_hop_timeout_unit": "minutes per hop",
    "settings_hop_timeout_hint": "How long to wait for each agent to respond. Increase for complex tasks.",
    "settings_extra_prompt": "Extra Instructions",
    "settings_extra_prompt_hint": "Additional instructions for all participants (e.g. \"Reply in Chinese\")",
    "settings_advanced_title": "Advanced workflow",
    "settings_advanced_preset": "Advanced preset",
    "settings_advanced_run_timeout": "Whole-run timeout",
    "settings_advanced_run_timeout_unit": "minutes total",
    "settings_advanced_rounds": "Advanced rounds",
    "settings_context_reducer_mode": "Reducer mode",
    "settings_context_reducer_reuse": "Reuse existing SDK participant",
    "settings_context_reducer_clone": "Clone SDK session template",
    "settings_context_reducer_session": "Reducer participant",
    "settings_context_reducer_template": "Template participant",
    "settings_single_main": "Single main",
    "settings_multi_dispatch": "Multi-dispatch",
    "settings_round_timeout": "Round timeout",
    "settings_verdict_policy": "Verdict policy",
    "settings_smart_gate": "Smart gate",
    "settings_forced_rework": "Forced rework",
    "settings_jump_target": "Jump target",
    "settings_jump_marker": "Jump marker",
    "settings_min_triggers": "Min triggers",
    "settings_max_triggers": "Max triggers",
    "settings_artifact_outputs": "Artifact outputs",
    "settings_prompt_append": "Prompt append",
    "all_label": "All",
    "all_rounds": "{{count}} round",
    "all_rounds_plural": "{{count}} rounds",
    "all_plus": "All + custom rounds",
    "all_preview_empty": "No sessions configured",
    "single_agent_prompt": {
      "title": "Add more agents?",
      "body": "You selected only one agent.",
      "tip_multi": "Using multiple agents from different types/providers helps break fixed thinking patterns and usually gives the best results.",
      "tip_rounds": "For Team discussions, 2 rounds usually work best.",
      "dont_show_again": "Don't remind me again for this account",
      "more_agents": "@ More",
      "send_anyway": "Send Anyway",
      "tip_history": "Multi-agent discussions share files and keep fuller history. One-to-one discussions are treated as one-off discussions."
    },
    "settings_workflow_migration_title": "Workflow migration",
    "settings_workflow_migration_body": "This saved advanced config uses the old rounds format. Save to create a workflow launch envelope before launching advanced Team.",
    "settings_workflow_migration_ready": "A workflow launch envelope is ready for advanced Team launches.",
    "settings_workflow_migration_error": "Advanced workflow migration failed. Review the saved rounds before launching.",
    "workflow": {
      "diagnostics": {
        "forbidden_envelope_field": "The launch envelope contains a forbidden private field.",
        "unsupported_schema_version": "This workflow schema version is not supported.",
        "unknown_future_schema_read_only": "This future workflow version is read-only here.",
        "mixed_advanced_schema_fields": "Old and new advanced workflow fields are mixed.",
        "static_policy_mismatch_recompiled": "Daemon policy changed, so the workflow was recompiled.",
        "missing_required_capability": "The daemon is missing a required workflow capability.",
        "capability_stale": "Lost contact with the daemon — saved configs still work, but new advanced workflow launches are paused until the daemon reconnects (usually <30s).",
        "capability_downgraded_during_run": "A required capability was downgraded during the run.",
        "invalid_launch_envelope": "The workflow launch envelope is invalid.",
        "invalid_workflow_graph": "The workflow graph is invalid.",
        "invalid_routing_authority": "The workflow routing authority is invalid.",
        "invalid_edge_condition": "A workflow edge condition is invalid.",
        "loop_budget_exhausted": "The workflow loop budget was exhausted.",
        "invalid_workflow_variable": "A workflow variable is invalid.",
        "invalid_prompt_append": "A workflow prompt append is invalid.",
        "missing_context_source": "A required workflow context source is missing.",
        "context_source_too_large": "A workflow context source is too large.",
        "unsafe_artifact_path": "A workflow artifact path is unsafe.",
        "artifact_identity_collision_resolved": "An artifact identity collision was resolved.",
        "artifact_baseline_too_large": "An artifact baseline is too large.",
        "artifact_baseline_mismatch": "An artifact baseline did not match.",
        "artifact_contract_not_satisfied": "An artifact contract was not satisfied.",
        "invalid_script_contract": "A workflow script contract is invalid.",
        "script_executable_denied": "The script executable is not allowed.",
        "script_machine_output_invalid": "Script machine output is invalid.",
        "script_timeout": "The script timed out.",
        "script_cancelled": "The script was cancelled.",
        "daemon_busy": "The daemon is busy with other advanced workflows.",
        "workflow_stale_after_restart": "The workflow became stale after daemon restart.",
        "private_projection_field_dropped": "A private projection field was dropped.",
        "legacy_progress_snapshot_sanitized": "A legacy progress snapshot was sanitized.",
        "unknown_p2p_message": "An unknown Team workflow message was ignored.",
        "unmatched_edge_route": "No outgoing conditional edge matched the route and no default edge exists."
      },
      "editor": {
        "title": "Advanced workflow draft",
        "add_node": "Add node",
        "remove_node": "Remove node",
        "remove_edge": "Remove edge",
        "normalize_banner_one": "{{count}} legacy node needs preset/scope alignment for logic/script. Click Apply to fix.",
        "normalize_banner_other": "{{count}} legacy nodes need preset/scope alignment for logic/script. Click Apply to fix.",
        "normalize_banner": "{{count}} legacy node(s) need preset/scope alignment for logic/script. Click Apply to fix.",
        "normalize_apply": "Apply",
        "normalize_dismiss": "Dismiss",
        "diagnostics_header": "Diagnostics",
        "read_only_notice": "This workflow uses a future schema and is read-only here.",
        "canvas_hint": "Drag nodes to position. Drag from the right anchor (●) to another node to create an edge. Mouse wheel or pinch to zoom.",
        "zoom_in": "Zoom in",
        "zoom_out": "Zoom out",
        "zoom_reset": "Reset zoom",
        "inspector_empty": "Select a node or edge to edit its properties.",
        "node": {
          "section_label": "Node",
          "preset_label": "Preset",
          "permission_scope_label": "Permission scope",
          "dispatch_style_label": "Dispatch style",
          "summary_prompt_label": "Round summary prompt (auto-runs after this node)",
          "script_argv_label": "Script command (one argv entry per line; first line is the executable)",
          "script_argv_placeholder": "/usr/bin/python3\n/abs/path/to/script.py\n--flag\nvalue"
        },
        "edge": {
          "section_label": "Edge",
          "from_label": "From",
          "to_label": "To",
          "condition_label": "Condition value"
        }
      },
      "allowed_executables": {
        "title": "Allowed script executables",
        "hint": "Hard-enforced at script spawn time. Add absolute paths (e.g. /usr/bin/jq) or PATH-relative names that script nodes are permitted to invoke. LLM-only workflows do not need any entries here.",
        "placeholder": "/usr/bin/jq",
        "input_label": "New executable path",
        "add": "Add",
        "remove": "Remove",
        "empty": "No executables allowed yet. Script nodes in this workflow will be rejected at bind time until you add at least one entry.",
        "script_nodes_need_entries": "Required for script nodes"
      },
      "library": {
        "title": "Workflow library",
        "hint": "Saved workflows for this session. The active one is sent to Team launches. Up to {{max}} entries.",
        "new": "+ New",
        "duplicate": "Duplicate",
        "delete": "Delete",
        "delete_confirm": "Delete workflow \"{{title}}\"? This cannot be undone.",
        "copy_suffix": " (copy)",
        "active_badge": "Active",
        "name_label": "Workflow name",
        "name_placeholder": "e.g. Audit + plan workflow"
      }
    }
  },
  "openspec": {
    "title": "OpenSpec",
    "changes": "Changes",
    "empty": "No OpenSpec changes found",
    "load_timeout": "OpenSpec changes took too long to load. Try again after the daemon reconnects.",
    "load_unavailable": "OpenSpec changes are unavailable until the daemon connection is ready.",
    "load_error": "Unable to scan OpenSpec changes",
    "audit_action": "Audit",
    "audit_implementation_action": "Audit Implementation",
    "audit_spec_action": "Audit Spec",
    "implement_action": "Implement",
    "achieve_action": "Achieve",
    "propose_action": "Propose",
    "propose_from_discussion_action": "From Recent Discussion",
    "propose_from_description_action": "From Description Below",
    "audit_implementation_prompt": "Perform a strict implementation audit for {{reference}} against its OpenSpec artifacts. Identify every mismatch, omission, regression risk, edge-case gap, and missing test; then fix the code, tests, and any required supporting changes. If the change artifacts need to move with the implementation, update the relevant OpenSpec files under {{reference}} in the same task. Do not stop at a report. Deliver the implementation in full spec compliance.",
    "audit_spec_prompt": "Perform a strict specification audit for {{reference}}. Strengthen scope, requirements, acceptance criteria, edge cases, failure modes, dependencies, and testability; remove ambiguity and internal inconsistency; then directly update the change artifacts under {{reference}} (proposal, design, specs, tasks) until they are implementation-ready. Do not stop at review notes.",
    "implement_prompt": "Drive the implementation of {{reference}} aggressively. Break the work into concrete sub-tasks, dispatch sub-agents with clear ownership, integrate their output, resolve gaps against the spec, add or update tests, and verify the finished result. Keep the OpenSpec artifacts under {{reference}} aligned with the implementation as you go instead of leaving follow-up notes. You own orchestration, technical decisions, and final acceptance.",
    "achieve_prompt": "Take {{reference}} to done using the full OpenSpec workflow. Inspect all remaining tasks and artifacts, complete the required implementation and spec work, directly update proposal/design/specs/tasks under {{reference}} where needed, close outstanding gaps, sync affected specs if needed, and archive the change once it meets completion criteria. Do not stop at status reporting.",
    "propose_from_discussion_prompt": "Generate an OpenSpec change from the recent discussion. Extract the goal, scope, key requirements, and acceptance criteria, list unclear points as follow-ups, and write the actual change artifacts under openspec/changes/ (proposal, design, specs, tasks) instead of stopping at a draft note.",
    "propose_from_description_prompt": "Generate an OpenSpec change from the description below. Organize the goal, scope, key requirements, and acceptance criteria, list missing details as follow-ups, and write the actual change artifacts under openspec/changes/ (proposal, design, specs, tasks) instead of stopping at a draft note."
  },
  "upload": {
    "upload_file": "Upload file",
    "uploading": "Uploading...",
    "upload_failed": "Upload failed",
    "file_too_large": "File too large (max {{max}}MB)",
    "long_text_attached": "Large pasted text attached as {{name}}",
    "long_text_requires_attachment": "Paste is too large for inline input here. Upload it as a file instead.",
    "drop_overlay_title": "Drop files to upload",
    "drop_overlay_hint": "Release anywhere in this session window",
    "download_file": "Download",
    "downloading": "Downloading...",
    "preview_unavailable": "Preview unavailable",
    "download_expired": "Download link expired",
    "download_timeout": "Download timed out",
    "download_failed": "Download failed",
    "daemon_offline": "Daemon is offline"
  },
  "settings": {
    "title": "Settings",
    "back": "← Back",
    "team_discussion_label": "Team discussion mode",
    "team_discussion_title": "Use multiple agents for complex work",
    "team_discussion_body": "Team discussion is not just for code. It also works well for complex documents, proposals, audits, and decisions. Different models challenge and complement each other, producing more rigorous results.",
    "team_discussion_point_1": "Write the topic in the input box first, then choose a discussion mode to start.",
    "team_discussion_point_2": "For difficult work, add rounds so the previous conclusion is reviewed and hardened.",
    "team_discussion_point_3": "OpenSpec audits, complex proposals, code reviews, and architecture decisions are good fits for finding single-model blind spots.",
    "display_name": "Display Name",
    "no_name": "Not set",
    "edit": "Edit",
    "save": "Save",
    "name_placeholder": "Enter display name",
    "name_saved": "Display name updated",
    "name_error": "Failed to update display name",
    "change_password": "Change Password",
    "old_password": "Current password",
    "new_password": "New password",
    "confirm_password": "Confirm new password",
    "change_password_btn": "Change Password",
    "password_changed": "Password changed successfully",
    "password_error": "Failed to change password. Check your current password.",
    "passwords_mismatch": "Passwords do not match",
    "password_too_short": "Password must be at least 8 characters",
    "password_missing_uppercase": "Password must contain at least one uppercase letter",
    "password_missing_lowercase": "Password must contain at least one lowercase letter",
    "password_missing_digit": "Password must contain at least one number",
    "privacy_policy": "Privacy Policy",
    "terms_of_service": "Terms of Service",
    "account_identity": "Account Identity",
    "username": "Username",
    "no_username": "Not set",
    "username_placeholder": "Choose a username",
    "username_required": "Username is required",
    "username_invalid": "Use 3-32 chars: lowercase letters, numbers, dot, underscore, hyphen",
    "username_taken": "That username is already taken",
    "set_password_login": "Set Password Login",
    "set_password_hint": "Passkey accounts do not have a username or password by default. Verify your passkey once, then set both so you can also sign in with a password.",
    "set_password_btn": "Verify Passkey and Set Password",
    "password_setup_success": "Password login is ready",
    "password_setup_error": "Failed to set password login. Verify your passkey and try again.",
    "passkey_verify_browser_only": "Passkey verification for password setup is currently only available in the web browser.",
    "passkey_verify_wrong_account": "That passkey belongs to a different account. Verify with the passkey registered to this account.",
    "passkey_verify_no_passkeys": "No passkeys are registered for this account.",
    "native_status_verifying_passkey": "Verifying passkey…",
    "native_status_saving_password": "Saving password login…"
  },
  "admin": {
    "title": "Admin Panel",
    "back": "← Back",
    "settings": "Settings",
    "users": "Users",
    "load_error": "Failed to load admin data",
    "action_error": "Action failed",
    "registration_enabled": "Registration Enabled",
    "registration_enabled_desc": "Allow new users to register",
    "require_approval": "Require Approval",
    "require_approval_desc": "New registrations require admin approval",
    "require_approval_disabled": "Enable registration first to configure approval",
    "col_username": "Username",
    "col_display_name": "Display Name",
    "col_status": "Status",
    "col_role": "Role",
    "col_created": "Created",
    "col_actions": "Actions",
    "status_active": "Active",
    "status_pending": "Pending",
    "status_disabled": "Disabled",
    "approve": "Approve",
    "disable": "Disable",
    "confirm_delete_title": "Delete User",
    "confirm_delete_msg": "Are you sure you want to permanently delete user \"{{name}}\"? This cannot be undone.",
    "confirm_disable_title": "Disable User",
    "confirm_disable_msg": "Are you sure you want to disable user \"{{name}}\"? They will no longer be able to log in."
  },
  "repo": {
    "title": "Repository",
    "back": "← Back",
    "refresh": "Refresh",
    "last_refresh": "Last refresh: {{time}}s ago",
    "tab_issues": "Issues",
    "tab_prs": "PRs",
    "tab_branches": "Branches",
    "tab_commits": "Commits",
    "tab_cicd": "CI/CD",
    "overview_branch": "{{default}} ← {{current}}",
    "cli_ok": "{{cli}} {{version}} ✓",
    "cli_not_installed": "CLI not installed",
    "load_more": "Load more",
    "loading": "Loading...",
    "retry": "Retry",
    "current_branch": "current",
    "error_cli_missing": "Install {{cli}} to use repo features",
    "error_cli_missing_hint": "Install the GitHub CLI to use repo features:",
    "error_cli_outdated": "Update {{cli}} to version {{version}}+",
    "error_unauthorized": "Run `{{command}}` to authenticate",
    "error_unauthorized_hint": "Authenticate with the CLI:",
    "error_rate_limited": "API rate limit reached. Try again later.",
    "error_generic": "Failed to load data",
    "empty_issues": "No issues found",
    "empty_prs": "No pull requests found",
    "empty_branches": "No branches found",
    "empty_commits": "No commits found",
    "empty_actions": "No workflow runs found",
    "state_open": "Open",
    "state_closed": "Closed",
    "state_merged": "Merged",
    "draft": "Draft",
    "default_branch": "default",
    "ahead": "{{count}} ahead",
    "behind": "{{count}} behind",
    "actions_refresh": "Refresh",
    "actions_last_updated": "Updated {{time}}",
    "actions_view": "View",
    "detail_loading": "Loading details...",
    "detail_error": "Failed to load details",
    "detail_retry": "Retry",
    "files": "files",
    "more_files": "More files — view full list on GitHub",
    "view_on_platform": "View on GitHub",
    "body_truncated": "Content truncated — view full on GitHub",
    "checks_success": "Checks passed",
    "checks_failure": "Checks failed",
    "checks_pending": "Checks pending",
    "mergeable": "Mergeable",
    "conflicts": "Has conflicts",
    "comments_count": "comments",
    "comments_header": "{{count}} comments",
    "no_comments": "No comments",
    "show_changed_files": "Show changed files",
    "refresh_tab": "Refresh",
    "branch_summary_title": "Current branch: {{branch}}",
    "branch_summary_label": "Open repository information for branch {{branch}}",
    "info_title": "Repository information",
    "info_current_branch": "Branch",
    "info_project_dir": "Project",
    "info_repository": "Repository",
    "info_provider": "Provider",
    "info_default_branch": "Default",
    "branch_local_label": "Local branch",
    "branch_local_short": "local",
    "branch_remote_label": "Remote branch",
    "branch_remote_short": "remote",
    "checkout_switch": "Switch",
    "checkout_switching": "Switching...",
    "checkout_switch_to": "Switch to {{branch}}",
    "checkout_pending": "Switching to {{branch}}",
    "checkout_success": "Switched to {{branch}}.",
    "checkout_remote_only_disabled": "Remote-only branches cannot be switched in this version.",
    "checkout_dirty_worktree": "Clean or commit local changes before switching branches.",
    "checkout_git_operation_in_progress": "Finish the current git operation before switching branches.",
    "checkout_invalid_target": "Only existing local branches can be switched.",
    "checkout_in_progress": "A branch switch is already in progress for this repository.",
    "checkout_busy": "Repository operations are busy. Try again shortly.",
    "checkout_branch_in_use": "That branch cannot be switched right now.",
    "checkout_detached_head": "Checkout is blocked while HEAD is detached.",
    "checkout_not_a_git_repo": "This project is not a git repository.",
    "checkout_failed": "Branch switch failed.",
    "local_commit_fallback_loading": "Loading local git history...",
    "local_commit_fallback_error": "Failed to load local git history."
  },
  "transport_chat": {
    "inputPlaceholder": "Type a message...",
    "send": "Send",
    "streaming": "Thinking...",
    "error": "Error",
    "connectionLost": "Connection lost",
    "empty": "No messages yet"
  },
  "sidebar": {
    "collapse": "Collapse sidebar",
    "expand": "Expand sidebar",
    "noSessions": "No sessions",
    "sessionTree": "Session tree",
    "unpin": "Unpin panel",
    "pinned_repo": "Files",
    "session_unavailable": "Session unavailable",
    "drop_to_pin": "Drop to pin",
    "pin_to_sidebar": "Pin to sidebar",
    "expand_all": "Expand all",
    "collapse_all": "Collapse all",
    "drag_to_resize": "Drag to resize"
  },
  "subsessionBar": {
    "show": "Show",
    "hide": "Hide",
    "layout_double": "Double row",
    "layout_single": "Single row",
    "card_size": "Card size",
    "subs_count": "Subs ({{count}})",
    "new_sub_session": "New sub-session",
    "add_sub_session_short": "+ sub-session",
    "close_all_open": "Close all open sub-session windows",
    "quick_close_open": "Quick close open sub-session windows",
    "restore_quick_closed": "Restore recently closed sub-session windows",
    "quick_close_unavailable": "Open a sub-session window first",
    "p2p_discussions": "Team discussions",
    "p2p_compact_show": "Show compact Team bar",
    "p2p_compact_hide": "Compact Team bar",
    "p2p_compact_expand": "Show detailed Team bar",
    "p2p_discussions_with_running_one": "{{count}} running discussion — view all",
    "p2p_discussions_with_running_other": "{{count}} running discussions — view all",
    "p2p_discussions_with_running": "{{count}} running discussions — view all",
    "p2p_running_count_aria_one": "{{count}} Team discussion running",
    "p2p_running_count_aria_other": "{{count}} Team discussions running",
    "p2p_running_count_aria": "{{count}} Team discussions running",
    "repository": "Repository",
    "scheduled_tasks": "Scheduled Tasks",
    "width_short": "W",
    "height_short": "H",
    "apply": "Apply",
    "reset": "Reset",
    "empty_prefix": "No sub-sessions — click",
    "empty_suffix": "to add one"
  },
  "localWebPreview": {
    "title": "Local Web Preview",
    "port": "Port",
    "path": "Path",
    "open": "Open",
    "refresh": "Refresh",
    "openInNewTab": "Open in new tab",
    "closePreview": "Close preview",
    "sandboxNote": "The preview runs in a sandboxed iframe. Some apps may work better in a new tab.",
    "invalidPort": "Enter a port between 1 and 65535.",
    "openFailed": "Failed to open local preview.",
    "opening": "Opening preview…",
    "empty": "Enter a localhost port and path, then open the preview.",
    "noServer": "Select a server first.",
    "previewing": "Previewing:",
    "initialPathNote": "Path sets only the initial page. After load, navigation is scoped by port, not by this path.",
    "portHistoryLabel": "Recent ports",
    "pathHistoryLabel": "Recent paths"
  },
  "cron": {
    "title": "Scheduled Tasks",
    "create": "New Task",
    "edit": "Edit Task",
    "name": "Task Name",
    "name_placeholder": "e.g., Daily CI check",
    "schedule": "Schedule",
    "schedule_help": "Cron expression (e.g., 0 9 * * 1-5 = weekdays at 9am)",
    "mode_picker": "Visual picker",
    "mode_advanced": "Advanced (cron)",
    "advanced_help": "Format: minute hour day month weekday — e.g., 0 9 * * 1-5 = weekdays at 9am",
    "field_minute": "Minute",
    "field_hour": "Hour",
    "field_day": "Day",
    "field_month": "Month",
    "field_weekday": "Weekday",
    "every_hour": "Every hour",
    "any": "Any",
    "target": "Target Session",
    "action_type": "Action Type",
    "action_command": "Command",
    "action_p2p": "Team Discussion",
    "send_target": "Recipient",
    "send_target_placeholder": "Exact session name, label, or agent type",
    "send_message": "Message",
    "send_message_placeholder": "Enter the message to send...",
    "send_reply": "Ask recipient to reply",
    "send_broadcast": "Broadcast to sibling sessions",
    "command": "Command",
    "command_placeholder": "Enter command for the agent...",
    "shell_hint": "Tip: Shell sessions can run scripts directly — just enter the script path (e.g. /path/to/script.sh)",
    "p2p_topic": "Discussion Topic",
    "p2p_topic_placeholder": "Enter discussion topic...",
    "p2p_mode": "Discussion Mode",
    "p2p_participants": "Participants",
    "p2p_rounds": "Rounds",
    "expires_at": "Expires",
    "expires_never": "Never",
    "status": "Status",
    "active": "Active",
    "paused": "Paused",
    "expired": "Expired",
    "error": "Error",
    "last_run": "Last Run",
    "next_run": "Next Run",
    "no_tasks": "No scheduled tasks",
    "confirm_delete": "Delete this scheduled task?",
    "pause": "Pause",
    "resume": "Resume",
    "save": "Save",
    "cancel": "Cancel",
    "invalid_cron": "Invalid cron expression",
    "interval_too_short": "Minimum interval is 5 minutes",
    "history": "Execution History",
    "no_history": "No executions yet",
    "no_detail": "No output captured",
    "status_sent": "Sent",
    "status_skipped_offline": "Skipped (offline)",
    "status_skipped_busy": "Skipped (busy)",
    "status_error": "Error",
    "no_participants": "No other sessions available",
    "show_all_projects": "All projects",
    "show_all_servers": "All servers",
    "exec_latest": "Latest",
    "exec_all": "All",
    "view_discussion": "View Team Discussion →",
    "confirm_trigger": "Run this task now?",
    "status_manual_trigger": "Manual",
    "go_to_session": "Go to session",
    "go_and_quote": "Go & quote result",
    "read_only": "Read-only",
    "read_only_scope": "This cron job belongs to another server or tab and is temporarily read-only here."
  },
  "fileBrowser": {
    "edit": "Edit",
    "preview": "Preview",
    "save": "Save",
    "saving": "Saving…",
    "unsavedChanges": "You have unsaved changes. Discard them?",
    "conflictTitle": "File modified externally",
    "conflictKeepMine": "Keep my changes",
    "conflictUseDisk": "Use disk version",
    "conflictCancel": "Cancel",
    "saveSuccess": "Saved",
    "saveError": "Save failed",
    "fileTooLarge": "File too large to save (> 1 MB)",
    "saveTimeout": "Save timed out — please reload file",
    "copyPath": "Copy path",
    "copied": "Copied!",
    "insertPath": "Insert path"
  },
  "onboarding": {
    "prompt": {
      "title": "Enable the new-user guide?",
      "body_1": "Your first main session is ready. If you are new, this short guide will walk you through the core controls.",
      "body_2": "It starts with the basic buttons, then ends with how multi-agent discussions work best.",
      "beginner": "I'm new, start guide",
      "expert": "I'm experienced, don't show again",
      "later": "Close, remind me next time"
    },
    "team_discussion_guide": {
      "title": "Team discussion mode lives here",
      "body_1": "Discussion mode is not just for code; use it for complex documents, proposals, OpenSpec audits, code reviews, and architecture decisions.",
      "body_2": "Different models challenge and complement each other, often producing more rigorous results than a single model alone.",
      "body_3": "Enter what you want discussed, choose a discussion mode, then start. For hard problems, add rounds to harden the conclusion.",
      "dismiss": "Got it"
    },
    "step_counter": "Step {{current}} / {{total}}",
    "prev": "Back",
    "next": "Next",
    "finish": "Finish",
    "steps": {
      "new_main": {
        "title": "Create a main session here",
        "body_1": "Use this button to create a new main session for a project.",
        "body_2": "Main sessions are the entry point for terminal, chat, repo, and discussion workflows."
      },
      "new_sub": {
        "title": "Create a sub-session here",
        "body_1": "Use this button to add a worker or helper sub-session under the current project.",
        "body_2": "Sub-sessions are useful for side tasks, reviews, experiments, and parallel work."
      },
      "discussions": {
        "title": "Open discussion history here",
        "body_1": "This opens your discussion history so you can review previous discussion runs and results."
      },
      "repo": {
        "title": "Open the repository panel here",
        "body_1": "Use this button to inspect repository status, branches, commits, PRs, and CI."
      },
      "cron": {
        "title": "Open scheduled tasks here",
        "body_1": "Use this button to create and manage scheduled tasks for the current project."
      },
      "view_toggle": {
        "title": "Switch between chat and terminal here",
        "body_1": "Use this toggle to switch between chat view and live terminal view for the current session."
      },
      "p2p_defaults": {
        "title": "Configure default discussion participants here",
        "body_1": "Open this menu and choose Config when you want to set which sessions join @all by default.",
        "body_2": "That is also where you quickly choose default discussion rounds."
      },
      "p2p_send": {
        "title": "Start discussions from the input box",
        "body_1": "Type @@all(discuss), @@all(review), or another mode to start a shared discussion quickly.",
        "body_2": "Agent discussions work best with 2 or more agents from different providers or types. That helps break fixed thinking patterns and usually gives better results.",
        "body_3": "Multi-agent discussions share files and preserve fuller history. One-to-one discussions are treated more like one-off discussions. In practice, 2 rounds are a strong default."
      }
    }
  },
  "sharedContext": {
    "loading": "Loading shared context…",
    "refresh": "Refresh",
    "empty": "Nothing yet",
    "roles": {
      "owner": "owner",
      "admin": "admin",
      "member": "member"
    },
    "notice": {
      "enterpriseCreated": "Enterprise created",
      "inviteCreated": "Invite created",
      "joinedEnterprise": "Joined enterprise",
      "memberUpdated": "Member updated",
      "memberRemoved": "Member removed",
      "workspaceCreated": "Workspace created",
      "projectEnrolled": "Project enrolled",
      "policySaved": "Policy saved",
      "projectPendingRemoval": "Project marked pending removal",
      "projectRemoved": "Project removed",
      "documentCreated": "Document created",
      "versionCreated": "Version created",
      "versionActivated": "Version activated",
      "bindingCreated": "Binding created",
      "processingConfigSaved": "Processing config saved",
      "memoryPreferenceSaved": "Preference saved",
      "memoryPreferenceDeleted": "Preference deleted",
      "memorySkillRegistryRebuilt": "Skill registry rebuilt",
      "memorySkillDeleted": "Skill deleted",
      "memoryMdIngestCompleted": "Markdown ingest completed",
      "memoryObservationPromoted": "Observation promoted",
      "memoryFeatureEnabled": "{{flag}} enabled",
      "memoryFeatureDisabled": "{{flag}} disabled",
      "memoryPreferenceUpdated": "Preference updated",
      "memoryObservationUpdated": "Observation updated",
      "memoryObservationDeleted": "Observation deleted",
      "memoryCreated": "Memory saved.",
      "memoryUpdated": "Memory updated.",
      "memoryPinned": "Memory pinned for future summaries."
    },
    "management": {
      "title": "Shared Context",
      "heroDescription": "Manage shared enterprises, enrolled projects, authored knowledge, and processing behavior from one place.",
      "inviteDescription": "Invite people into the enterprise as members. Promote them to admin later from the Members tab if needed.",
      "inviteFlowTitle": "Invitation flow",
      "memberRolesDescription": "Owners can promote admins. Admins manage projects and knowledge but cannot appoint other admins.",
      "workspaceDescription": "Use workspaces to group shared projects. They are optional and do not change ownership.",
      "enrollDescription": "Enroll a canonical repository to make its processed context and authored knowledge shareable in this enterprise.",
      "policyDescription": "Set the runtime guardrails for a shared project. These affect how shared context is allowed to flow into live sends.",
      "knowledgeDescription": "Author coding standards, architecture guidance, and reusable knowledge as versioned shared context.",
      "versionDescription": "Draft a new version for the selected document and promote it when ready.",
      "bindingDescription": "Attach document versions to the enterprise, workspace, or enrolled project with optional language and path filters.",
      "selectEnterprise": "Select enterprise",
      "enterpriseNamePlaceholder": "New enterprise name",
      "createEnterprise": "Create enterprise",
      "invites": "Invites",
      "inviteEmailPlaceholder": "Invite email (optional)",
      "createInvite": "Create invite",
      "inviteToken": "Invite token",
      "joinTokenPlaceholder": "Invite token",
      "joinEnterprise": "Accept invite",
      "members": "Members",
      "promoteAdmin": "Promote to admin",
      "demoteMember": "Demote to member",
      "removeMember": "Remove",
      "workspaces": "Workspaces",
      "workspaceNamePlaceholder": "Workspace name",
      "createWorkspace": "Create workspace",
      "projects": "Projects",
      "projectRelationshipTitle": "How shared project context works",
      "projectRelationshipLine1": "Personal memory works without any enterprise.",
      "projectRelationshipLine2": "Shared project context starts only after you enroll a repository into the currently selected enterprise.",
      "projectRelationshipLine3": "Workspace is optional and always belongs to that same enterprise. It is a grouping layer, not a separate owner.",
      "projectRelationshipLine4": "Scope controls how far a project shares context inside the enterprise. It does not change which enterprise owns it.",
      "belongsToTitle": "Belongs to",
      "belongsToEnterprise": "Enterprise:",
      "belongsToWorkspace": "Workspace:",
      "belongsToWorkspaceValue": "Optional subgroup inside the selected enterprise.",
      "belongsToProject": "Project:",
      "belongsToProjectValue": "The enrolled canonical repository.",
      "sharesWithTitle": "Shares with",
      "sharesWithProjectValue": "Only this enrolled repository shares context.",
      "sharesWithWorkspaceValue": "Projects in the same workspace share context together.",
      "sharesWithEnterpriseValue": "All enrolled projects in the current enterprise can share context.",
      "chooseSharingLevelTitle": "Choose a sharing level",
      "chooseSharingLevelProject": "One repository, one shared context boundary. Use this for most teams.",
      "chooseSharingLevelWorkspace": "Several related repositories inside one workspace share context together.",
      "chooseSharingLevelEnterprise": "The broadest scope. Use only when all enrolled projects should share the same context pool.",
      "scopeProjectLabel": "Project only",
      "scopeProjectDescription": "Share context only for this enrolled repository.",
      "scopeWorkspaceLabel": "Workspace",
      "scopeWorkspaceDescription": "Share across projects grouped under the same workspace.",
      "scopeEnterpriseLabel": "Enterprise",
      "scopeEnterpriseDescription": "Share at the enterprise level across all enrolled projects.",
      "scopeSourceWithWorkspace": "Workspace source: {{workspace}} under {{enterprise}}.",
      "scopeSourceWithoutWorkspace": "No workspace selected. This project still belongs to {{enterprise}}.",
      "selectedEnterprise": "the selected enterprise",
      "notSelected": "Not selected",
      "canonicalRepoId": "Canonical repo ID",
      "displayName": "Display name",
      "noWorkspace": "No workspace",
      "workspaceLabel": "Workspace",
      "noWorkspaceAssigned": "No workspace",
      "enrollProject": "Enroll project",
      "editPolicy": "Edit policy",
      "pendingRemoval": "Pending removal",
      "removeProject": "Remove project",
      "selectProject": "Select project",
      "allowDegraded": "Allow degraded provider",
      "allowLocalFallback": "Allow local fallback",
      "requireFullSupport": "Require full support",
      "savePolicy": "Save policy",
      "documents": "Knowledge & standards",
      "documentTitle": "Document title",
      "createDocument": "Create document",
      "selectDocument": "Select document",
      "selectVersion": "Select version",
      "documentContent": "Document content",
      "createVersion": "Create version",
      "bindings": "Bindings",
      "required": "Required",
      "advisory": "Advisory",
      "language": "Language",
      "pathPattern": "Path pattern",
      "createBinding": "Create binding",
      "tabs": {
        "enterprise": "Enterprise",
        "members": "Members",
        "projects": "Projects",
        "knowledge": "Knowledge",
        "processing": "Processing",
        "memory": "Memory",
        "mcp": "MCP"
      },
      "policyTitle": "Project policy",
      "policyLoading": "Loading saved policy…",
      "policyExplainTitle": "What this policy controls",
      "policyExplainLine1": "These settings control how this shared project behaves when a provider cannot fully support shared context or when the remote shared state is unavailable.",
      "policyExplainLine2": "Use the stricter options for team-owned codebases. Use the more permissive options only when you need continuity over strict consistency.",
      "allowDegradedHelp": "Allow providers that can only inject shared context in a reduced or message-side form. Turn this off if the team requires consistent behavior across providers.",
      "allowLocalFallbackHelp": "Allow this machine to keep using its local processed context when shared remote context is stale or temporarily unavailable.",
      "requireFullSupportHelp": "Only allow providers that fully support normalized shared-context injection. This is the strictest setting.",
      "requireFullProviderSupportHelp": "Only allow providers that fully support normalized shared-context injection. This is the strictest setting.",
      "processingSummaryTitle": "Processing flow",
      "processingSummaryLine1": "Raw activity is staged locally, then materialized into processed local context on delayed jobs.",
      "processingSummaryLine2": "Shared projects can replicate processed context to the remote shared store after local materialization succeeds.",
      "processingSummaryLine3": "This panel manages enterprise policy and authored knowledge. It does not directly run the materializer.",
      "processingModelTitle": "Materialization model selection",
      "processingPrimaryCardTitle": "Primary processing path",
      "processingPrimaryBackend": "Primary SDK / backend",
      "processingPrimaryModel": "Default primary model",
      "processingPrimaryPreset": "Primary preset",
      "processingBackupCardTitle": "Backup processing path",
      "processingBackupBackend": "Backup SDK / backend",
      "processingBackupModel": "Backup model",
      "processingBackupPreset": "Backup preset",
      "processingBackupPlaceholder": "Optional fallback model",
      "processingPresetNone": "No preset",
      "processingSave": "Save processing config",
      "processingSaving": "Saving…",
      "processingReload": "Reload cloud config",
      "processingSavedPrimaryBackend": "Saved primary backend",
      "processingSavedPrimary": "Saved primary model",
      "processingSavedBackupBackend": "Saved backup backend",
      "processingSavedBackup": "Saved backup model",
      "processingUnsetValue": "unset",
      "processingCloudSyncNote": "This setting is saved in the cloud for the selected server and synced into the daemon when it is connected or restarts.",
      "processingServerRequired": "Select a server before managing processing settings.",
      "processingPrimaryOverride": "Primary override env",
      "processingBackupOverride": "Backup override env",
      "processingServerScope": "Current server scope",
      "processingProviderNote": "Choose both the SDK/backend and the model. The daemon will use this pair when it runs local shared-context materialization jobs.",
      "processingBackendNote": "The backend decides which runtime executes the model. The model alone is not enough.",
      "processingUiGap": "This setting is server-scoped, not enterprise-global.",
      "processingOperationalTitle": "Operational notes",
      "processingOperationalLine1": "If no server-saved value exists, the primary model defaults to \"sonnet\".",
      "processingOperationalLine2": "The backup model is optional and defaults to unset.",
      "processingOperationalLine3": "Different servers can still use different saved processing models. This panel edits the selected server only.",
      "memorySummaryTitle": "Memory visibility",
      "memorySummaryLine1": "Local personal memory keeps both pending raw events and processed summaries so you can see what is still waiting and what has already been compressed.",
      "memorySummaryLine2": "When personal cloud sync is enabled, only processed summaries replicate to your user-scoped cloud memory pool for cross-device continuity.",
      "memorySummaryLine3": "Shared memory stats show enterprise-scoped processed context that other enrolled projects can reuse.",
      "personalSyncTitle": "Personal cloud sync",
      "personalSyncDescription": "Choose whether processed personal memory should replicate to your account-wide cloud memory pool.",
      "personalSyncToggle": "Enable cloud sync for personal memory",
      "personalSyncHelp": "Enabled by default so summaries can power cross-device continuity and related-history recall. Turn it off only if you want personal memory to stay local-only.",
      "personalSyncDisableConfirm": "Turn off personal cloud sync? Cross-device memory, recent summary sync, and related-history recall may be affected until you turn it back on.",
      "memoryRecallThresholdTitle": "Related-history recall threshold",
      "memoryRecallThresholdDescription": "Adjust the minimum composite score required before related history is injected into a message.",
      "memoryRecallThresholdLabel": "Minimum relevance score",
      "memoryRecallThresholdHelp": "Lower values inject more history. Higher values are stricter. Default: {{defaultValue}}.",
      "memoryRecallThresholdReset": "Reset to saved",
      "memoryRecallThresholdSaved": "Saved threshold",
      "memoryAdvancedScoringTitle": "Advanced scoring settings",
      "memoryAdvancedScoringDescription": "Adjust how similarity, recency, recall frequency, and project affinity contribute to memory ranking.",
      "memoryAdvancedScoringShow": "Show advanced scoring controls",
      "memoryAdvancedScoringHide": "Hide advanced scoring controls",
      "memoryAdvancedScoringHelp": "These controls are for advanced tuning. Values are normalized to sum to 1.0 before scoring.",
      "memoryAdvancedScoringSum": "Current weight sum before normalization: {{value}}",
      "memoryAdvancedScoringReset": "Reset advanced weights",
      "memoryWeightSimilarity": "Similarity weight",
      "memoryWeightRecency": "Recency weight",
      "memoryWeightFrequency": "Recall-count weight",
      "memoryWeightProject": "Project-affinity weight",
      "personalSyncSave": "Save sync setting",
      "memoryTabLocalProcessed": "Local processed",
      "memoryTabLocalPending": "Local pending",
      "memoryTabCloud": "Personal cloud",
      "memoryTabShared": "Enterprise shared",
      "memoryTabPersonal": "Personal",
      "memoryTabEnterprise": "Enterprise",
      "memoryTabUnprocessed": "Unprocessed",
      "memoryTabProcessed": "Processed",
      "memoryTabSharedMemory": "Shared Memory",
      "memoryTabAuthoredContext": "Authored Context",
      "memoryAuthoredTitle": "Authored Enterprise Context",
      "memoryAuthoredDescription": "Enterprise-managed documents bound to shared projects. Managed in the Knowledge tab.",
      "memoryAuthoredSeeKnowledge": "Authored context bindings are managed in the Knowledge tab above. This view shows which bindings apply to your current project scope.",
      "memoryQueryTitle": "Query processed memory",
      "memoryQueryDescription": "Search local personal memory, cloud personal memory, and enterprise shared memory using the same filters.",
      "memoryProjectPlaceholder": "Filter by canonical repo ID",
      "memoryQueryPlaceholder": "Search summaries and compressed content",
      "memoryAllClasses": "All record classes",
      "memoryRecentSummary": "Recent summaries",
      "memoryRecentDescription": "Turn-level compressed summaries generated from recent local activity.",
      "memoryDurableCandidate": "Durable memory candidates",
      "memoryDurableDescription": "Condensed long-lived preferences, constraints, and pinned decisions.",
      "memoryLocalTitle": "Local personal memory",
      "memoryCloudTitle": "Global personal cloud memory",
      "memoryProcessedNote": "Processed memory uses semantic vector search. Raw pending events stay local and use text filtering only; cloud personal memory and enterprise shared memory store processed summaries, not raw chat transcripts.",
      "memorySharedTitle": "Enterprise shared memory",
      "memoryStatTotal": "Total records",
      "memoryStatHits": "Matched records",
      "memoryStatRecent": "Recent summaries",
      "memoryStatDurable": "Durable candidates",
      "memoryStatPending": "Unprocessed events",
      "memoryStatDirtyTargets": "Dirty targets",
      "memoryStatPendingJobs": "Queued jobs",
      "memoryStatProjects": "Projects",
      "memoryRecordProject": "Project",
      "memoryRecordStatus": "Status",
      "memoryStatusProcessed": "Processed summary",
      "memoryStatusPending": "Pending raw event",
      "memoryRecordClass": "Class",
      "memoryRecordSources": "Source events",
      "memoryRecordUpdated": "Updated",
      "memoryRecordOwner": "Owner",
      "memoryRecordCreatedBy": "Created by",
      "memoryRecordUpdatedBy": "Updated by",
      "memoryPendingTitle": "Pending raw events",
      "memoryPendingDescription": "These events have not been materialized yet. They remain local raw activity and only support text filtering, not semantic vector search.",
      "memoryPendingEventType": "Event type",
      "memoryPendingSession": "Session",
      "memoryProcessedTitle": "Processed memory",
      "memoryProcessedDescription": "These entries are processed memory summaries ranked with semantic vector search. Local views show processed summaries beside local pending events; cloud and enterprise views contain processed summaries only.",
      "memoryProcessedEmptyPending": "No processed summaries yet. Only pending raw events are available below.",
      "memoryExpand": "Expand",
      "memoryCollapse": "Collapse",
      "memoryRecalls": "{{count}} recalls",
      "memoryNeverRecalled": "Never recalled",
      "memoryLastRecalled": "Last recalled: {{time}}",
      "memoryArchive": "Archive",
      "memoryRestore": "Restore",
      "memoryDelete": "Delete",
      "memoryDeleteConfirm": "Delete this memory permanently? This cannot be undone.",
      "memoryDeleteFailed": "Failed to delete memory",
      "memoryArchived": "Archived",
      "memoryShowArchived": "Show archived",
      "memoryMasterSummary": "Master summary",
      "memoryPost11AdminTitle": "Post-1.1 memory management",
      "memoryPost11AdminDescription": "Manage runtime-visible preferences, skill registry entries, markdown ingest, and observation promotion from the daemon that owns the local memory store.",
      "memoryAdminDaemonRequired": "Connect to a daemon to manage local preferences, skills, markdown ingest, and observations.",
      "memoryAdminActionFailed": "Memory management action failed",
      "memoryPreferencesTitle": "User preferences",
      "memoryPreferencesDescription": "Manage @pref entries that are injected into provider context for matching user scopes.",
      "memoryPreferenceUserPlaceholder": "Preference user id",
      "memoryPreferenceTextPlaceholder": "Preference text",
      "memoryPreferenceSave": "Save preference",
      "memoryPreferenceUser": "User",
      "memoryPreferenceDeleteConfirm": "Delete this preference? It will no longer be injected into future turns.",
      "memoryPreferencesEmpty": "No stored preferences found.",
      "memorySkillsTitle": "Skills",
      "memorySkillsDescription": "Inspect the lightweight skill registry used at startup. Full skill bodies are read only when previewed or when the agent asks for a matching skill.",
      "memoryProjectDirPlaceholder": "Project directory (for project skills / MD ingest)",
      "memorySkillRebuildRegistry": "Rebuild registry",
      "memorySkillName": "Skill",
      "memorySkillLayer": "Layer",
      "memorySkillPath": "Path",
      "memorySkillPreview": "Preview",
      "memorySkillPreviewTitle": "Skill preview",
      "memorySkillDeleteConfirm": "Delete this skill file and remove it from the registry?",
      "memorySkillsEmpty": "No registry entries found. Rebuild after installing or creating skills.",
      "memoryMdIngestTitle": "Markdown ingest",
      "memoryMdIngestDescription": "Run a bounded manual ingest for trusted project markdown files. Unsupported cross-scope ingest fails closed instead of silently downgrading.",
      "memoryMdIngestRun": "Run ingest",
      "memoryMdFilesChecked": "Files checked",
      "memoryMdObservationsWritten": "Observations written",
      "memoryMdIngestEmpty": "No manual ingest result yet.",
      "memoryObservationsTitle": "Observation store",
      "memoryObservationsDescription": "Inspect typed durable observations and promote scope only through an explicit audited UI action.",
      "memoryAllScopes": "All scopes",
      "memoryScopeLabel": "Scope",
      "memoryPromotionReasonPlaceholder": "Promotion reason (optional)",
      "memoryObservationPromote": "Promote",
      "memoryObservationsEmpty": "No observations found for the selected filters.",
      "memoryScope": {
        "user_private": "User private",
        "personal": "Personal project",
        "project_shared": "Project shared",
        "workspace_shared": "Workspace shared",
        "org_shared": "Org shared"
      },
      "memoryObservationClass": {
        "fact": "Fact",
        "decision": "Decision",
        "bugfix": "Bug fix",
        "feature": "Feature",
        "refactor": "Refactor",
        "discovery": "Discovery",
        "preference": "Preference",
        "skill_candidate": "Skill candidate",
        "workflow": "Workflow",
        "code_pattern": "Code pattern",
        "note": "Note"
      },
      "memoryFeatureStatusTitle": "Feature flags",
      "memoryFeatureStatusDescription": "User-global online memory feature flags for post-1.1 memory. Changes are stored in your account and applied to every server you own; local daemon/env config is only a fallback.",
      "memoryFeatureEnabled": "Enabled",
      "memoryFeatureDisabled": "Disabled",
      "memoryFeatureUnknown": "Unknown",
      "memoryFeatureDisabledNotice": "This feature is disabled; management writes are blocked until the feature flag is enabled.",
      "error": {
        "missing_observation_text": "Observation text is required.",
        "observation_not_found": "Observation not found.",
        "observation_mutation_forbidden": "You are not authorized to modify this observation.",
        "missing_memory_text": "Memory text is required.",
        "memory_not_found": "Memory record was not found."
      },
      "memoryToolsTitle": "Memory tools",
      "memoryToolsDescription": "Manage preferences, skills, markdown ingest, observations, and daemon memory feature status with the selected project identity.",
      "memoryToolTabStatus": "Status",
      "memoryToolTabPreferences": "Preferences",
      "memoryToolTabSkills": "Skills",
      "memoryToolTabMdIngest": "Markdown",
      "memoryToolTabObservations": "Observations",
      "mcpTitle": "Model Context Protocol",
      "mcpSummaryLine1": "Managed providers can expose eleven runtime-scoped MCP tools through the daemon-controlled server: memory search/recent summaries/source lookup, observation and preference writes, scoped Send, and Cron scheduling.",
      "mcpSummaryLine2": "Memory tools return compact hits with refs and projectionId values; list_memory_summaries pulls recent digests, and get_memory_sources expands relevant hits when exact prior instructions, bug details, or source evidence matter.",
      "mcpSummaryLine3": "Send tools discover sibling sessions and send scoped text, file references, reply requests, or broadcasts through the guarded imcodes send pipeline.",
      "mcpSummaryLine4": "Cron tools create, list, update, and delete scheduled structured sends for reminders, recurring checks, delegated reviews, and follow-ups.",
      "mcpSummaryLine5": "This view shows provider readiness, degraded setup reasons, feature gates, and recent redacted tool calls; missing MCP reports stay explicit instead of assuming the tools are healthy.",
      "mcpProviderStatusTitle": "Provider MCP status",
      "mcpProviderStatusDescription": "Six managed providers are tracked for the eleven-tool stdio MCP MVP.",
      "mcpToolGatesTitle": "Tool family gates",
      "mcpToolGatesDescription": "Memory, Send, and Cron tools must pass both their underlying feature gates and the MCP kill-switches.",
      "mcpRecentCallsTitle": "Recent redacted MCP calls",
      "mcpRecentCallsDescription": "Only daemon-redacted request and result snippets are shown here.",
      "mcpNoDaemon": "Connect the local daemon to load MCP status.",
      "mcpStatusLoading": "Waiting for MCP status from the daemon…",
      "mcpStatusTimeout": "No MCP status response yet. The backend may not expose this view on the current daemon.",
      "mcpStatusError": "MCP status could not be loaded.",
      "mcpUpdatedAt": "Updated",
      "mcpUpdatedNever": "Not reported",
      "mcpProvidersReported": "Providers reported",
      "mcpCallsReported": "Calls reported",
      "mcpProviderConnected": "Provider connected",
      "mcpProviderDisconnected": "Provider disconnected",
      "mcpProviderNoSignal": "No provider signal",
      "mcpProviderNoDegradedReasons": "No degraded reasons reported.",
      "mcpProviderStatusHint": "MCP-specific status is reported separately from provider connectivity.",
      "mcpProviderClaudeSdk": "Claude SDK",
      "mcpProviderGeminiAcp": "Gemini ACP",
      "mcpProviderKimiAcp": "Kimi ACP",
      "mcpProviderCopilotSdk": "Copilot SDK",
      "mcpProviderCodexSdk": "Codex SDK",
      "mcpProviderCursorHeadless": "Cursor headless",
      "mcpProviderQwen": "Qwen",
      "mcpProviderUnknown": "{{provider}}",
      "mcpDisabledFlag": "Disabled flag: {{flag}}",
      "mcpDisabledFlagNone": "No disabled flag reported",
      "mcpDegradedReasons": "Reasons: {{reasons}}",
      "mcpGateNoDetails": "No gate details reported.",
      "mcpRecentCallsEmpty": "No redacted MCP calls have been reported yet.",
      "mcpCallProvider": "Provider",
      "mcpCallTool": "Tool",
      "mcpCallStatus": "Status",
      "mcpCallDuration": "Duration",
      "mcpCallDurationValue": "{{ms}} ms",
      "mcpCallTime": "Time",
      "mcpCallFamily": "Family",
      "mcpCallInput": "Redacted input",
      "mcpCallResult": "Redacted result",
      "mcpStatus": {
        "ready": "Ready",
        "degraded": "Degraded",
        "disabled": "Disabled",
        "unknown": "Unknown"
      },
      "mcpToolFamily": {
        "memory": "Memory",
        "send": "Send",
        "cron": "Cron"
      },
      "mcpCallStatusValue": {
        "ok": "OK",
        "error": "Error",
        "disabled": "Disabled",
        "unknown": "{{status}}"
      },
      "mcpReason": {
        "env_forwarding_unverified": "Per-session MCP env forwarding is not proven.",
        "feature_disabled": "A required feature gate is disabled.",
        "mcp_registration_failed": "Managed MCP registration failed.",
        "provider_not_connected": "Provider is not connected.",
        "status_not_reported": "MCP status has not been reported.",
        "unknown": "{{reason}}"
      },
      "memoryProjectPickerTitle": "Project selector",
      "memoryProjectPickerDescription": "Browse memory across all projects by default. Choose a project only to filter the browse list or to run local file-backed tools.",
      "memoryProjectSearchPlaceholder": "Search project name, canonical ID, or directory",
      "memoryProjectSelected": "Selected project",
      "memoryProjectEmpty": "No known projects yet. Open a session in the project or use the advanced resolver fallback.",
      "memoryProjectCanonicalId": "Canonical ID",
      "memoryProjectDirectory": "Directory",
      "memoryProjectSourceLabel": "Source",
      "memoryProjectNeedsResolve": "Needs daemon resolution before local tools can run.",
      "memoryProjectResolving": "Resolving project…",
      "memoryProjectCanonicalOnlyNotice": "This project can filter memory; actions that read/write local files need a resolved local directory.",
      "memoryProjectAdvanced": "Advanced resolver fallback",
      "memoryProjectAdvancedDescription": "Manual values are an advanced fallback. Prefer selecting a known project so the daemon can validate the directory-to-ID mapping.",
      "memoryProjectLocalToolsDisabled": "Local file-backed tools need a selected project with a validated directory and canonical ID. Browsing still works without selecting a project.",
      "memoryProjectUnknown": "Unknown project",
      "memoryPreferenceSearchPlaceholder": "Search preferences",
      "memorySkillSearchPlaceholder": "Search skills by name, layer, path, or description",
      "memoryObservationSearchPlaceholder": "Search loaded observations",
      "memoryProjectStatus": {
        "resolved": "Resolved",
        "needs_resolution": "Needs resolution",
        "canonical_only": "Canonical ID only",
        "directory_only": "Directory only",
        "no_repo": "No repository",
        "multiple_remotes": "Multiple remotes",
        "unauthorized": "Unauthorized",
        "invalid_dir": "Invalid directory",
        "mismatch": "ID mismatch",
        "error": "Resolve failed"
      },
      "memoryProjectSource": {
        "active_session": "Active session",
        "recent_session": "Recent session",
        "enterprise_enrollment": "Enterprise project",
        "resolved_directory": "Resolved directory",
        "manual_resolved": "Manual resolved",
        "memory_index": "Memory index"
      },
      "memoryFeatureLabel": {
        "preferences": "Preferences",
        "mdIngest": "Markdown ingest",
        "skills": "Skills",
        "skillAutoCreation": "Skill auto-creation",
        "observationStore": "Observation store",
        "namespaceRegistry": "Namespace registry"
      },
      "memoryFeatureUnavailable": "Server unavailable",
      "memoryFeatureUnavailableDetail": "Connect to the server to load your account-level feature flags and enable management actions.",
      "memoryFeatureLoading": "Loading",
      "memoryFeatureLoadingDetail": "Waiting for the server feature-status response…",
      "memoryFeatureNoResponse": "No response",
      "memoryFeatureNoResponseDetail": "The server did not answer the feature-status request. Refresh or reconnect.",
      "memoryFeatureError": "Error",
      "memoryFeatureErrorDetail": "Feature status could not be loaded.",
      "memoryFeatureUnknownDetail": "The server response did not include this feature flag.",
      "memoryFeatureEnabledDetail": "This feature is enabled for your account and will apply across your servers.",
      "memoryFeatureDisabledHint": "Disabled for your account. Use Enable here to persist it online for all your servers; {{env}} remains a daemon bootstrap fallback. {{behavior}}",
      "memoryBrowseProjectFilter": "Memory browse filter",
      "memoryBrowseAllProjects": "All projects (default)",
      "memoryAllProjectsActive": "All projects",
      "memoryActiveProjectFilter": "Filtered by {{project}}",
      "memoryClearProjectFilter": "Clear filter",
      "memoryToolProjectSelector": "Local action project (directory required)",
      "memoryToolProjectNone": "Select a project for local tools",
      "memoryProjectPickerSplitHelp": "Top filter controls memory browsing and defaults to all projects. The local action project is only for tools such as Markdown ingest or skill rebuild/read that need a directory.",
      "memoryProjectKnownProjects": "Known projects",
      "memoryProjectNoCanonicalId": "no canonical ID",
      "memoryProjectNoDirectory": "no local directory",
      "memoryPersonalBreakdown": "Personal total breakdown: {{processed}} local processed · {{pending}} local pending · {{cloud}} cloud.",
      "memoryFilteredByProject": "Showing results filtered by {{project}}.",
      "memoryProcessedEmptyWithCloud": "No local processed summaries. Personal cloud has {{count}} records available.",
      "memoryViewPersonalCloud": "View personal cloud",
      "memoryUnprocessedEmptyWithData": "No local pending raw events. Existing processed/cloud records are available in the other tabs.",
      "memoryLocalStatusLoading": "Loading local daemon memory…",
      "memoryLocalStatusUnavailable": "Local daemon is unavailable; local processed and pending counts cannot be loaded.",
      "memoryLocalStatusNoResponse": "No response from the local daemon; local counts may be stale or unavailable.",
      "memoryLocalStatusError": "Local daemon returned an error while loading personal memory.",
      "memoryToolDisabledNoDaemon": "Connect the local daemon before using this management action.",
      "memoryToolDisabledFeature": "This feature is disabled. Use the Feature flags status tab to enable it globally for your account; {{env}} remains a daemon bootstrap fallback.",
      "memoryToolDisabledFeatureUnknown": "Feature status is not loaded yet; refresh the management panel first.",
      "memoryToolDisabledProjectRequired": "Select a resolved project with both canonical ID and local directory before running this local tool.",
      "memoryFeatureEnableAction": "Enable",
      "memoryFeatureDisableAction": "Disable",
      "memoryFeatureToggleSaving": "Saving…",
      "memoryFeatureDependencyBlockedHint": "Requested on, but dependencies are still disabled: {{deps}}. Enable the dependencies first. {{behavior}}",
      "memoryFeatureBlocked": "Blocked",
      "processingPresetLabel": "Preset",
      "processingPresetNoneTitle": "No preset — use the default provider endpoint",
      "processingPresetBundleModelTitle": "Preset bundle → model: {{model}}",
      "processingPresetBundleTitle": "Preset bundle: {{preset}}",
      "processingModelLabel": "Model",
      "processingModelPresetTitle": "Model is set by the active preset. Clear the preset to pick another.",
      "processingModelDefinedByPreset": "(defined by preset)",
      "relativeLessThanOneMinute": "<1m ago",
      "relativeMinutesAgo": "{{count}}m ago",
      "relativeHoursAgo": "{{count}}h ago",
      "relativeDaysAgo": "{{count}}d ago",
      "serverUnbound": "Unbound",
      "statEnterprise": "Enterprise",
      "noneValue": "None",
      "statRole": "Role: {{role}}",
      "statChooseOrCreateEnterprise": "Choose or create one",
      "statMembers": "Members",
      "statProjects": "Projects",
      "statKnowledgeDocs": "Knowledge Docs",
      "statServer": "Server",
      "statCloudSyncedRuntimeSettings": "Cloud-synced runtime settings",
      "statSelectServerToSync": "Select a server to sync processing config",
      "inviteFlowLine1": "New invitations create member access only.",
      "inviteFlowLine2": "Admin role changes happen after join, from the member management section.",
      "workspaceId": "Workspace ID",
      "activeCount": "{{count}} active",
      "role": "Role",
      "joined": "Joined",
      "statusLabel": "Status",
      "scopeLabel": "Scope",
      "meaningLabel": "Meaning",
      "documentKind": {
        "coding_standard": "Coding standard",
        "architecture_guideline": "Architecture guideline",
        "repo_playbook": "Repository playbook",
        "knowledge_doc": "Knowledge document"
      },
      "versions": "Versions",
      "activeVersion": "Active",
      "documentLabel": "Document",
      "versionLabel": "Version",
      "anyValue": "Any",
      "pathLabel": "Path",
      "memoryFeatureDisabledBehavior": {
        "preferences": "@pref lines pass through as plain text and are not persisted or stripped.",
        "mdIngest": "No markdown files are read, parsed, or ingested.",
        "skills": "The loader returns an empty set; skill rendering is skipped; admin writes are rejected or disabled.",
        "skillAutoCreation": "No skill-review jobs are claimed or created. Existing skills still load when Skills is enabled.",
        "observationStore": "No new observation rows are written; processed projections remain readable.",
        "namespaceRegistry": "No new namespace records are written outside migration/backfill; legacy projection reads remain available."
      },
      "memoryPromotionTargetLabel": "Promotion target scope",
      "memoryPromotionReasonLabel": "Promotion reason",
      "memoryPromotionHelp": "Promotion is a two-step audited action. Choose a target scope, review the exact from/to change on the record, then confirm. Confirming may make the observation available under the target scope authorization rules.",
      "memoryPromotionNotAllowed": "Cannot promote from {{from}} to {{to}}.",
      "memoryObservationPromoteTitle": "Review promotion from {{from}} to {{to}}",
      "memoryObservationPromoteTo": "Promote to {{scope}}…",
      "memoryPromotionConfirmTitle": "Confirm observation promotion",
      "memoryPromotionConfirmBody": "This will promote the observation from {{from}} to {{to}} and write a promotion audit entry. The original source text is not edited, but future memory selection may use the target scope visibility rules.",
      "memoryPromotionReasonPreview": "Reason: {{reason}}",
      "memoryPromotionNoReason": "No reason provided. The audit entry will still record actor, source scope, target scope, and time.",
      "memoryPromotionCancel": "Cancel",
      "memoryPromotionConfirmAction": "Confirm promotion",
      "memoryPreferenceUpdate": "Update preference",
      "memoryEdit": "Edit",
      "memoryEditCancel": "Cancel edit",
      "memoryObservationEditTextLabel": "Observation text",
      "memoryObservationUpdate": "Update observation",
      "memoryObservationDeleteConfirm": "Delete this observation and its linked projection when present?",
      "memoryPin": "Pin",
      "memoryUpdate": "Update memory",
      "memoryEditTextLabel": "Memory text",
      "memoryManualAddTitle": "Add memory manually",
      "memoryManualAddDescription": "Save a project-bound personal memory without waiting for automatic compaction.",
      "memoryManualAddClassLabel": "Memory type",
      "memoryManualAddTextLabel": "Manual memory text",
      "memoryManualAddPlaceholder": "Write a durable note, decision, or summary to remember for this project…",
      "memoryManualAddSave": "Save memory",
      "memoryManualAddProjectRequired": "Choose a project in the project selector or browse filter before adding memory."
    },
    "diagnostics": {
      "title": "Diagnostics",
      "load": "Load diagnostics",
      "workspaceId": "Workspace ID",
      "enrollmentId": "Enrollment ID",
      "filePath": "File path",
      "mode": "Retrieval mode",
      "visibility": "Visibility",
      "remoteProcessed": "Remote processed present",
      "derivedOnDemand": "Derived on demand",
      "persistedSnapshotAvailable": "Persisted snapshot available",
      "appliedVersions": "Applied versions",
      "runtimeBindings": "Runtime authored context",
      "snapshotTitle": "Persisted snapshot",
      "snapshotBindings": "Snapshot bindings"
    }
  },
  "embedding": {
    "status_unknown": "Embedding status unknown (older daemon or disconnected)",
    "status_ready": "Embedding ready — semantic search runs locally",
    "status_loading": "Embedding model loading…",
    "status_fallback": "Embedding: local pipeline unavailable, using server fallback",
    "status_unavailable": "Embedding unavailable — semantic search disabled on this daemon",
    "status_idle": "Embedding idle (not yet used this session)"
  },
  "memory": {
    "quickSearch": {
      "disabled": "Memory search is disabled",
      "noResults": "No authorized memory results",
      "citationUnavailable": "Citation unavailable"
    },
    "skills": {
      "disabled": "Skills are disabled",
      "loadFailed": "Skill failed to load",
      "renderDropped": "Skill was omitted from context",
      "layerDiagnostics": "Skill layer diagnostics",
      "enforced": "Enforced",
      "additive": "Additive"
    }
  },
  "todos": {
    "title": "Tasks",
    "progress": "{{done}}/{{total}}",
    "collapse": "Collapse",
    "expand": "Expand"
  }
}
