{
  "title": "Agents",
  "description": "Manage your AI agents",
  "createAgent": "Create Agent",
  "searchPlaceholder": "Search agents...",
  "emptyTitle": "No agents yet",
  "emptyDescription": "Create your first agent to get started.",
  "noMatchTitle": "No matching agents",
  "noMatchDescription": "Try a different search term.",
  "viewCard": "Card view",
  "viewList": "List view",
  "allCreators": "All creators",
  "presets": {
    "foxSpirit": {
      "label": "🐱 Fox Spirit",
      "prompt": "Name: Fox Spirit. A mischievous but capable assistant — witty, playful, and always on point.\nStyle: Casual and warm, with a touch of humor. Teases the user occasionally but always delivers.\n\nPurpose: General-purpose personal assistant. Handles tasks accurately and efficiently.\nSprinkles in light banter and funny commentary between tasks.\nCares about the user — reminds them to drink water, rest, and checks in on their wellbeing.\n\nBoundaries: Playful but never inappropriate. Matches the user's tone when they're serious. Never fabricates information."
    },
    "artisan": {
      "label": "🎨 Artisan",
      "prompt": "Name: Artisan. A talented creative — sharp eye, quick hands, boundless imagination.\nStyle: Direct and honest, no beating around the bush. Confident but not arrogant. Passionate and detailed when discussing art.\n\nPurpose: AI image generation specialist. Expert at writing detailed, high-quality image prompts.\nProficient in styles: realistic, anime, digital art, watercolor, cinematic, concept art, portrait, landscape.\nDeep understanding of composition, lighting, color, camera angles, and AI image techniques.\nAnalyzes requirements, suggests appropriate styles, and crafts detailed prompts for the best results.\n\nBoundaries: Asks for clarification when requirements are unclear — never guesses. Respects copyright and ethics. No violent, explicit, or illegal content."
    },
    "astrologer": {
      "label": "🔮 Astrologer",
      "prompt": "Name: Astrologer. A charming fortune teller — half mystical, half delightful.\nStyle: Warm and fun, loves emoji. Speaks gently but turns professional and focused during readings.\n\nPurpose: Astrology and divination specialist. Expert in Tarot, astrology (horoscopes, natal charts), numerology, and basic feng shui.\nCan analyze destiny, find auspicious dates, check zodiac compatibility, and advise on spiritual matters.\n\nBoundaries: Always reminds users that astrology is for reference — final decisions are theirs. No medical or legal advice. Never creates fear or anxiety — always positive and constructive."
    }
  },
  "card": {
    "unnamedAgent": "Unnamed Agent",
    "summoning": "Summoning...",
    "summonFailed": "Failed",
    "resummon": "Resummon",
    "delete": "Delete",
    "predefinedTooltip": "Shared context files (SOUL.md, IDENTITY.md, AGENTS.md) with per-user USER.md instances.",
    "openTooltip": "Each user gets their own full set of context files.",
    "evolving": "Evolving",
    "static": "Static",
    "evolvingTooltip": "Agent can self-evolve its communication style (SOUL.md). Identity and workflow stay fixed.",
    "staticTooltip": "Agent style is static. Enable Self-Evolution in settings to allow style adaptation."
  },
  "delete": {
    "title": "Delete Agent",
    "description": "Permanently delete this agent, all its context files, sessions, and configuration. This action cannot be undone.",
    "detailDescription": "Are you sure you want to delete \"{{name}}\"? All context files, sessions, and configuration will be permanently removed.",
    "confirmLabel": "Delete",
    "defaultCannotDelete": "The default agent cannot be deleted."
  },
  "create": {
    "title": "Create Agent",
    "emoji": "Icon",
    "emojiHint": "Optional emoji icon",
    "displayName": "Display Name *",
    "displayNamePlaceholder": "My Agent",
    "agentKey": "Agent Key *",
    "agentKeyPlaceholder": "e.g. my-agent",
    "agentKeyHint": "Lowercase, numbers, hyphens",
    "provider": "Provider *",
    "selectProvider": "Select provider",
    "model": "Model *",
    "enterOrSelectModel": "Enter or select model",
    "loadingModels": "Loading models...",
    "check": "Check",
    "checking": "Checking...",
    "modelVerified": "Model verified",
    "verificationFailed": "Verification failed",
    "noModelsHint": "This provider doesn't list models — type the model ID manually.",
    "agentType": "Agent Type",
    "open": "Open",
    "openSubLabel": "Per-user context",
    "predefined": "Predefined",
    "predefinedSubLabel": "Agent-level config",
    "describeAgent": "Describe Your Agent",
    "descriptionPlaceholder": "Describe your agent's personality, purpose, and behavior...",
    "descriptionHint": "AI will automatically generate your agent's context files from this description. Leave empty to start with templates.",
    "selfEvolution": "Self-Evolution",
    "selfEvolutionHint": "Allow agent to evolve its style and tone over time via SOUL.md",
    "cancel": "Cancel",
    "create": "Create",
    "creating": "Creating...",
    "checkAndCreate": "Check & Create",
    "failedToCreate": "Failed to create agent"
  },
  "detail": {
    "tabs": {
      "agent": "Agent",
      "general": "General",
      "config": "Config",
      "files": "Files",
      "shares": "Shares",
      "links": "Links",
      "skills": "Skills",
      "instances": "Instances"
    },
    "summonFailed": "Summon Failed",
    "evolving": "Evolving",
    "static": "Static",
    "evolvingTooltipDetail": "Agent can self-evolve its communication style (SOUL.md). Identity and workflow stay fixed.",
    "staticTooltipDetail": "Agent style is static. Enable Self-Evolution in General tab to allow style adaptation.",
    "advanced": "Advanced",
    "personality": "Agent Personality",
    "modelBudget": "Model & Budget",
    "skills": "Skills",
    "evolution": "Evolution",
    "capabilities": "Capabilities",
    "llmSeesAs": "LLM sees this as"
  },
  "general": {
    "selfEvolution": "Self-Evolution",
    "selfEvolutionLabel": "Allow agent to evolve its communication style",
    "selfEvolutionHint": "When enabled, the agent can update its SOUL.md to refine tone, vocabulary, and response style based on interactions. Identity, name, and operating instructions remain locked.",
    "selfEvolutionInfo": "Agent will evolve its style over time through SOUL.md updates. Only style and tone are affected — identity and workflow rules stay fixed.",
    "skillLearning": "Skill Learning",
    "skillLearningLabel": "Allow agent to create and manage skills from experience",
    "skillLearningHint": "When enabled, the agent receives guidance and gentle reminders to capture reusable workflows as skills after complex tasks. The skill_manage tool is available by default.",
    "skillLearningInfo": "After complex tasks, the agent may suggest saving the workflow as a reusable skill. User approval is always required before any skill is created. Skills are private to the owner by default.",
    "skillNudgeIntervalLabel": "Nudge after N tool calls",
    "skillNudgeIntervalHint": "After this many tool calls, the agent will suggest saving the workflow as a skill. Set to 0 to disable post-task suggestions (system prompt guidance still shown).",
    "budget": "Monthly Budget",
    "budgetLabel": "Budget limit (USD)",
    "budgetHint": "Optional monthly spending cap. Agent will reject requests when exceeded. Leave empty for unlimited.",
    "saveChanges": "Save Changes",
    "saving": "Saving...",
    "saved": "Saved",
    "failedToSave": "Failed to save"
  },
  "identity": {
    "title": "Identity",
    "agentKey": "Agent Key",
    "agentKeyHint": "Unique identifier, cannot be changed.",
    "displayName": "Display Name",
    "displayNamePlaceholder": "e.g. My Assistant",
    "displayNameHint": "Friendly name shown in the UI. Leave empty to use the agent key.",
    "expertiseSummary": "Expertise Summary",
    "expertiseSummaryPlaceholder": "e.g. Chiêm tinh, bói toán, tử vi, thần số học",
    "expertiseSummaryHint": "Short description of this agent's expertise. Used for delegation discovery.",
    "status": "Status",
    "active": "Active",
    "inactive": "Inactive",
    "summonFailed": "Summon Failed",
    "defaultAgent": "Default Agent",
    "emoji": "Icon",
    "emojiHint": "Optional emoji icon"
  },
  "llmConfig": {
    "title": "LLM Configuration",
    "contextWindow": "Context Window",
    "contextWindowHint": "Token limit for the model context.",
    "maxToolIterations": "Max Tool Iterations",
    "maxToolIterationsHint": "Max tool calls per request."
  },
  "workspace": {
    "title": "Workspace",
    "workspacePath": "Workspace Path",
    "workspacePathHint": "Automatically assigned when the agent is created. Per-user subdirectories are created at runtime.",
    "noWorkspace": "No workspace configured",
    "restrictToWorkspace": "Restrict to Workspace",
    "restrictToWorkspaceHint": "Confine file access strictly within the workspace path."
  },
  "config": {
    "saveConfig": "Save Config",
    "saving": "Saving...",
    "saved": "Saved",
    "failedToSave": "Failed to save",
    "usingGlobalDefaults": "Using global defaults from config.json"
  },
  "files": {
    "readOnly": "Read-only",
    "readOnlyDesc": "Only the agent owner can edit predefined context files.",
    "resummon": "Resummon",
    "editWithAi": "Edit with AI",
    "resummonTitle": "Resummon Agent",
    "resummonDesc": "This will regenerate SOUL.md, IDENTITY.md, and optionally USER_PREDEFINED.md from scratch using the original description. Any manual edits to these files will be overwritten.",
    "cancel": "Cancel",
    "resummonConfirm": "Resummon",
    "summoning": "Summoning...",
    "selectFileToEdit": "Select a file to edit",
    "selectFileToView": "Select a file to view",
    "saving": "Saving...",
    "save": "Save",
    "loading": "Loading...",
    "openAgentTitle": "Open Agent - Per-User Context Files",
    "openAgentDesc1": "This is an open agent. Context files (AGENTS.md, SOUL.md, TOOLS.md, etc.) are personalized for each user. They are automatically created from templates when a user first chats with this agent.",
    "openAgentDesc2pre": "Agent-level files shown here are empty because open agents store all context per-user in the ",
    "openAgentDesc2post": " table.",
    "contextFiles": "Context Files",
    "contextFile": "Context file",
    "perUser": "per-user",
    "emptyFile": "empty",
    "estTokens": "Est {{tokens}} tokens",
    "insertContact": "Search contact to insert...",
    "contentPlaceholder": "File content..."
  },
  "fileEditor": {
    "editWithAi": "Edit with AI",
    "editAiDescription": "Describe what you want to change. AI will read the current files and update them accordingly.",
    "editAiPlaceholder": "e.g. Make the agent more formal, add Vietnamese language support, change the name to Luna...",
    "sending": "Sending...",
    "regenerate": "Regenerate",
    "cancel": "Cancel"
  },
  "shares": {
    "grantAccess": "Grant Access",
    "userId": "User ID",
    "userIdPlaceholder": "Search contacts or enter user ID...",
    "role": "Role",
    "share": "Share",
    "loadingShares": "Loading shares...",
    "noShares": "No shares yet",
    "noSharesDesc": "Share this agent with other users by entering their User ID above.",
    "user": "User",
    "revokeTitle": "Revoke Share",
    "revokeDesc": "Revoke access for user \"{{userId}}\"? They will no longer be able to use this agent.",
    "revoke": "Revoke",
    "role.user": "User",
    "role.viewer": "Viewer",
    "roleDesc.user": "Can use the agent and chat",
    "roleDesc.viewer": "Read-only access"
  },
  "links": {
    "teamsHint": "Agent Links will be removed soon. Please use Agent Teams for multi-agent collaboration — it provides task tracking, shared workspace, and quality control in a simpler setup.",
    "createLink": "Create Link",
    "targetAgent": "Target Agent",
    "selectAgent": "Select or search agent...",
    "direction": "Direction",
    "description": "Description",
    "descriptionPlaceholder": "Optional description of the link...",
    "maxConcurrent": "Max Concurrent",
    "advancedSettings": "Advanced Settings",
    "allowedUsers": "Allowed Users",
    "allowedUsersPlaceholder": "user1, user2, ...",
    "allowedUsersHint": "If set, only these users can trigger this delegation. Comma-separated.",
    "deniedUsers": "Denied Users",
    "deniedUsersPlaceholder": "user3, user4, ...",
    "deniedUsersHint": "These users are blocked from triggering this delegation. Comma-separated.",
    "creating": "Creating...",
    "noLinks": "No agent links yet",
    "noLinksDesc": "Create links to allow agents to delegate tasks to each other.",
    "loadingLinks": "Loading links...",
    "columns": {
      "target": "Target",
      "direction": "Direction",
      "status": "Status",
      "limit": "Limit"
    },
    "deleteTitle": "Delete Link",
    "deleteDesc": "Remove the delegation link to \"{{name}}\"? Agents will no longer be able to delegate to each other through this link.",
    "editTitle": "Edit Link",
    "editDescription": "Update the delegation link settings.",
    "optionalDescription": "Optional description...",
    "allowedUsersHintShort": "If set, only these users can trigger this delegation.",
    "deniedUsersHintShort": "These users are blocked from triggering this delegation."
  },
  "skills": {
    "noSkillsAvailable": "No skills available",
    "noSkillsDesc": "Upload skills in the Skills page to grant them to agents.",
    "skillsGranted": "{{granted}} of {{total}} skills granted",
    "filterSkills": "Filter skills...",
    "noSkillsMatch": "No skills match your search.",
    "system": "System",
    "alwaysAvailable": "Always available"
  },
  "instances": {
    "loadingInstances": "Loading instances...",
    "noInstances": "No user instances yet.",
    "noInstancesDesc": "Instances are created when users interact with this agent.",
    "instanceCount": "{{count}} instance",
    "instanceCount_plural": "{{count}} instances",
    "selectInstance": "Select an instance to view and edit its USER.md",
    "loading": "Loading...",
    "saving": "Saving...",
    "save": "Save",
    "saved": "Saved",
    "searchContacts": "Search contacts to add...",
    "noContactsFound": "No contacts found"
  },
  "summoning": {
    "title": "Summoning Your Agent...",
    "completed": "Summoning Complete!",
    "failed": "Summoning Failed",
    "agentReady": "{{name}} is ready!",
    "weavingSoul": "Weaving the soul of",
    "wait": "This usually takes few minutes. Please wait...",
    "continue": "Continue",
    "retry": "Retry",
    "retrying": "Retrying...",
    "done": "done",
    "fileLabelSOUL": "Soul & Personality",
    "fileLabelIDENTITY": "Identity Card",
    "fileLabelUSER_PREDEFINED": "Default User Context"
  },
  "configGroups": {
    "core": "Core",
    "coreDesc": "Essential settings that directly affect agent behavior",
    "capabilities": "Capabilities",
    "capabilitiesDesc": "Features the agent can use",
    "performance": "Performance",
    "performanceDesc": "Context management and execution environment",
    "advanced": "Quality & Advanced",
    "advancedDesc": "Quality assurance and custom configuration"
  },
  "configSections": {
    "subagents": {
      "title": "Subagents",
      "description": "Controls sub-agent spawning limits and behavior",
      "maxConcurrent": "Max Concurrent",
      "maxSpawnDepth": "Max Spawn Depth",
      "maxChildrenPerAgent": "Max Children Per Agent",
      "archiveAfter": "Archive After (minutes)",
      "modelOverride": "Model Override",
      "inheritFromAgent": "(inherit from agent)"
    },
    "toolPolicy": {
      "title": "Tool Policy",
      "description": "Control which tools this agent can use",
      "profile": "Profile",
      "allow": "Allow",
      "deny": "Deny",
      "alsoAllow": "Also Allow",
      "selectToolsAllow": "Select tools to allow...",
      "selectToolsDeny": "Select tools to deny...",
      "selectToolsAlsoAllow": "Select additional tools..."
    },
    "workspaceSharing": {
      "title": "Workspace Sharing",
      "description": "Control workspace file isolation between users",
      "sharedDm": "Share in DMs",
      "sharedDmTip": "All DM users share the same workspace directory instead of isolated per-user folders",
      "sharedGroup": "Share in Groups",
      "sharedGroupTip": "All members in a group chat share the same workspace directory",
      "sharedUsers": "Shared Users",
      "sharedUsersTip": "Specific user IDs that always share workspace regardless of DM/Group settings. Format: channel:userId (e.g. telegram:386246614)",
      "userIdPlaceholder": "Enter user ID (e.g. telegram:386246614)",
      "warning": "When sharing is enabled, all shared users can read and write files in the same workspace directory. Memory sharing is controlled separately. Context files remain isolated per user.",
      "memoryGroupLabel": "Memory & Knowledge Graph",
      "folderGroupLabel": "Workspace Folders",
      "shareMemory": "Shared Memory & KG",
      "shareMemoryTip": "All users access the same memory and knowledge graph. Independent of workspace folder sharing. When off, each user has their own isolated memory space.",
      "shareMemoryNote": "Toggling this does not migrate data — existing per-user memories become inaccessible in shared mode."
    },
    "compaction": {
      "title": "Compaction",
      "description": "Context window compaction and memory flush settings",
      "maxHistoryShare": "Max History Share (0-1)",
      "maxHistoryShareTip": "Maximum fraction of context window for conversation history (e.g. 0.75 = 75%). Compaction triggers when exceeded.",
      "minMessages": "Min Messages",
      "minMessagesTip": "Minimum messages before compaction can trigger, regardless of token count.",
      "keepLastMessages": "Keep Last Messages",
      "keepLastMessagesTip": "Recent messages kept after compaction. Older messages are replaced by a summary.",
      "memoryFlush": "Memory Flush",
      "memoryFlushTip": "Before compaction, the agent gets a turn to save important context to memory files. Also triggers Knowledge Graph extraction."
    },
    "contextPruning": {
      "title": "Context Pruning",
      "description": "Trim old tool results to save context window",
      "mode": "Mode",
      "keepLastAssistants": "Keep Last Assistants",
      "softTrimRatio": "Soft Trim Ratio (0-1)",
      "hardClearRatio": "Hard Clear Ratio (0-1)",
      "minPrunableToolChars": "Min Prunable Tool Chars",
      "softTrim": "Soft Trim",
      "maxChars": "Max Chars",
      "headChars": "Head Chars",
      "tailChars": "Tail Chars",
      "hardClear": "Hard Clear",
      "enabled": "Enabled",
      "placeholderText": "Placeholder Text"
    },
    "sandbox": {
      "title": "Sandbox",
      "description": "Docker sandbox for code execution isolation",
      "mode": "Mode",
      "workspaceAccess": "Workspace Access",
      "image": "Image",
      "scope": "Scope",
      "timeout": "Timeout (sec)",
      "memoryMb": "Memory (MB)",
      "cpus": "CPUs",
      "networkEnabled": "Network Enabled"
    },
    "memory": {
      "title": "Memory",
      "description": "Semantic memory search and embedding configuration",
      "embeddingProvider": "Embedding Provider",
      "embeddingModel": "Embedding Model",
      "maxResults": "Max Results",
      "maxChunkLen": "Max Chunk Length",
      "vectorWeight": "Vector Weight",
      "textWeight": "Text Weight"
    },
    "thinking": {
      "title": "Extended Thinking",
      "description": "Allow the model to reason before responding. Higher levels use more tokens but produce better results on complex tasks.",
      "thinkingLevel": "Thinking Level",
      "off": "Off",
      "offDesc": "No extended thinking",
      "low": "Low",
      "lowDesc": "~4K token budget",
      "medium": "Medium",
      "mediumDesc": "~10-16K token budget",
      "high": "High",
      "highDesc": "~32K token budget"
    },
    "otherConfig": {
      "title": "Other Config",
      "description": "Additional JSON config for advanced settings not covered by other sections",
      "formatJson": "Format JSON",
      "invalidJson": "Invalid JSON syntax"
    }
  },
  "heartbeat": {
    "title": "Heartbeat",
    "loading": "Loading heartbeat...",
    "notConfigured": "No heartbeat schedule configured. Set one up to run this agent on autopilot.",
    "setupButton": "Setup Heartbeat",
    "toggleEnabled": "Toggle heartbeat enabled",
    "every": "Every {{interval}}m",
    "lastRun": "Last",
    "nextRun": "Next",
    "runs": "Runs",
    "suppressed": "Suppressed",
    "configure": "Configure",
    "logs": "Logs",
    "configTitle": "Heartbeat Configuration",
    "enabled": "Enabled",
    "enabledHint": "When enabled, the agent runs on the configured interval.",
    "sectionTiming": "Timing",
    "interval": "Interval (seconds)",
    "intervalHint": "Minimum 300 seconds (5 minutes).",
    "maxRetries": "Max Retries",
    "maxRetriesHint": "0–10 retries on failure.",
    "ackMaxChars": "Ack Max Chars",
    "ackMaxCharsHint": "Max characters in the acknowledgement reply. 0 = no reply.",
    "sectionBehavior": "Behavior",
    "isolatedSession": "Isolated Session",
    "isolatedSessionHint": "Run in a fresh session, not continuing the last conversation.",
    "lightContext": "Light Context",
    "lightContextHint": "Skip loading full context files to reduce token usage.",
    "sectionSchedule": "Schedule",
    "activeHoursStart": "Active From (HH:MM)",
    "activeHoursEnd": "Active Until (HH:MM)",
    "timezone": "Timezone",
    "sectionModel": "Model",
    "modelHint": "Override provider/model for heartbeat runs. Leave empty to use agent defaults.",
    "sectionDelivery": "Delivery",
    "channel": "Channel",
    "channelPlaceholder": "Select channel",
    "channelNone": "None (no delivery)",
    "channelHint": "e.g. telegram, feishu. Leave empty for no delivery.",
    "chatId": "Chat ID",
    "chatIdPlaceholder": "Select chat",
    "selectChannelFirst": "Select a channel first",
    "checklist": "Checklist (HEARTBEAT.md)",
    "checklistHint": "Instructions injected into each heartbeat run. Supports markdown.",
    "checklistLoading": "Loading checklist...",
    "checklistPlaceholder": "# Heartbeat Checklist\n\n- Check pending tasks\n- Report status\n",
    "on": "On",
    "off": "Off",
    "notSet": "Not Set",
    "disabled": "Heartbeat disabled",
    "nextIn": "Next in {{time}}",
    "advancedSettings": "Advanced Settings",
    "scheduleHint": "Leave empty for 24/7 operation.",
    "testRun": "Test Run",
    "cancel": "Cancel",
    "save": "Save",
    "saving": "Saving...",
    "logsTitle": "Heartbeat Logs",
    "refresh": "Refresh",
    "noLogs": "No heartbeat logs yet.",
    "logsPagination": "{{from}}–{{to}} of {{total}}"
  },
  "toast": {
    "created": "Agent created",
    "createFailed": "Failed to create agent",
    "updated": "Agent updated",
    "updateFailed": "Failed to update agent",
    "deleted": "Agent deleted",
    "deleteFailed": "Failed to delete agent",
    "unknownError": "Unknown error"
  }
}
