open-design/apps/web/src/i18n/locales/en.ts
2026-05-31 01:23:28 -04:00

2608 lines
148 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { Dict } from '../types';
export const en: Dict = {
'chat.amrCard.switchTitle': "Model call failed — this run is paused",
'chat.amrCard.switchBody': "Switch to Open Design's official AMR model service — no API key setup needed. After you sign in, authorize, and top up, this run retries automatically.",
'chat.amrCard.chipOfficial': "Official hosting",
'chat.amrCard.chipNoKey': "No API key",
'chat.amrCard.chipAutoRetry': "Auto-retry after sign-in",
'chat.amrCard.switchCta': "Switch to AMR & retry",
'chat.amrError.authMessage': "Your AMR account isn't authorized yet. Authorize it and this run retries automatically.",
'chat.amrError.balanceMessage': "Your AMR balance has run out. Top up to keep this run going.",
'chat.amrError.authorizeCta': "Authorize & retry",
'chat.amrError.rechargeCta': "Top up AMR",
'chat.antigravityError.launchTerminalCta': "Sign in via terminal",
'chat.antigravityError.launchSwitchModelCta': "Switch model in terminal",
'common.cancel': 'Cancel',
'common.save': 'Save',
'common.close': 'Close',
'common.delete': 'Delete',
'common.rename': 'Rename',
'common.edit': 'Edit',
'common.preview': 'Preview',
'common.share': 'Share',
'common.search': 'Search',
'common.searchEllipsis': 'Search…',
'common.loading': 'Loading…',
'common.all': 'All',
'common.none': 'None',
'common.default': 'Default',
'common.installed': 'installed',
'common.notInstalled': 'not installed',
'common.active': 'active',
'common.offline': 'offline',
'common.selected': 'selected',
'common.create': 'Create',
'common.openPreview': 'Open preview',
'common.exitFullscreen': 'Exit fullscreen',
'common.fullscreen': 'Fullscreen',
'common.openInNewTab': 'Open in new tab',
'common.exportPdf': 'Export as PDF',
'common.exportZip': 'Download as .zip',
'common.exportHtml': 'Export as standalone HTML',
'common.exportImage': 'Export as image',
'common.exportImageFailed': "Image capture failed. Please try again or use your browser's screenshot tool.",
'common.justNow': 'just now',
'common.minutesAgo': '{n}m ago',
'common.hoursAgo': '{n}h ago',
'common.daysAgo': '{n}d ago',
'common.weeksAgo': '{n}w ago',
'common.now': 'now',
'common.minutesShort': '{n}m',
'common.hoursShort': '{n}h',
'common.daysShort': '{n}d',
'common.untitled': 'Untitled',
'plugins.availableDetails.provenance': 'Provenance',
'plugins.availableDetails.provenanceLine': 'from {source} · {trust} · {resolved}',
'plugins.availableDetails.provenanceLineWithIntegrity': 'from {source} · {trust} · {resolved} · {integrity}',
'plugins.availableDetails.install': 'Install',
'plugins.availableDetails.version': 'Version',
'plugins.availableDetails.pluginVersion': 'Plugin version',
'plugins.availableDetails.copyInstallCommand': 'Copy install command',
'plugins.availableDetails.copied': 'Copied',
'plugins.availableDetails.deprecatedPrefix': 'Deprecated: {message}',
'plugins.availableDetails.deprecatedFallback': 'This version has been marked deprecated.',
'plugins.availableDetails.yanked': 'Yanked.',
'plugins.availableDetails.yankedWithReason': 'Yanked: {reason}',
'plugins.availableDetails.versionDeprecatedSuffix': ' (deprecated)',
'plugins.availableDetails.versionYankedSuffix': ' (yanked)',
'plugins.availableDetails.ref': 'Ref',
'plugins.availableDetails.integrity': 'Integrity',
'plugins.availableDetails.permissions': 'Permissions',
'plugins.availableDetails.capabilitySummary': 'Capability summary',
'plugins.actions.copyInstallCommand': 'Copy install command',
'plugins.actions.copyPluginId': 'Copy plugin ID',
'plugins.actions.copyReadmeBadge': 'Copy README badge',
'plugins.actions.openSourceGithub': 'Open source on GitHub',
'plugins.actions.openSource': 'Open source',
'plugins.actions.openHomepage': 'Open homepage',
'plugins.actions.openMarketplace': 'Open in marketplace',
'app.brand': 'Open Design',
'app.brandPill': 'Research Preview',
'app.brandSubtitle': 'by Nexu Labs',
'app.welcomeLoading': 'Loading workspace…',
'settings.welcomeKicker': "",
'settings.welcomeTitle': "Welcome",
'settings.welcomeSubtitle': "",
'settings.onboardingCreateTitle': 'Start from a brief',
'settings.onboardingCreateBody':
'Describe the site, app, deck, image, or video you want. Open Design will create a project and keep the work editable.',
'settings.onboardingMemoryTitle': 'Save working context',
'settings.onboardingMemoryBody':
'Add preferences, project facts, and recurring rules so future chats pick up the right context.',
'settings.onboardingSystemsTitle': 'Bring your design system',
'settings.onboardingSystemsBody':
'Pick or create a brand system so generated work follows real colors, typography, and product language.',
'settings.onboardingExecutionTitle': 'Choose how generation runs',
'settings.onboardingExecutionBody':
'Official CLI with one-click setup and ready-to-use defaults. Use one key to choose from many models with better pricing.',
'settings.onboardingAmrCloudBenefitOfficial': 'Officially recommended',
'settings.onboardingAmrCloudBenefitReady': 'No deploy needed',
'settings.onboardingAmrCloudBenefitModels': 'Supports Claude Opus 4.8',
'settings.onboardingAmrCloudBenefitPricing': 'SOTA Harness',
'settings.onboardingAmrCloudUpcomingLabel': 'Coming soon',
'settings.onboardingAmrCloudUpcomingImageVideo': 'Image & video',
'settings.onboardingAmrCloudUpcomingSkills': 'Massive skills',
'settings.onboardingAmrCloudUpcomingRouting': 'Smart routing',
'settings.onboardingAmrModelSourceLabel': 'AMR CLI',
'settings.onboardingAmrCloudAuthorizeAction': 'Authorize AMR',
'settings.onboardingAmrCloudAuthorizedAction': 'Authorized',
'settings.onboardingStepConnect': "Connect",
'settings.onboardingStepDesignSystem': "Design system",
'settings.onboardingStepProfile': "About you",
'settings.onboardingConnectTitle': "Choose a runtime",
'settings.onboardingConnectBody': "",
'settings.onboardingRecommended': "Recommended",
'settings.onboardingAmrCloudOfficialBadge': "Official",
'settings.onboardingLocalTitle': "Local coding agent",
'settings.onboardingLocalBody': "Use an installed CLI such as Claude Code, Codex, Cursor, Gemini, or OpenCode.",
'settings.onboardingLocalAction': "Open CLI settings",
'settings.onboardingCliScanHint': "This usually takes 5-10 seconds.",
'settings.onboardingByokTitle': "Bring your own key",
'settings.onboardingByokBody': "Use your own model provider credentials.",
'settings.onboardingByokAction': "Open BYOK settings",
'settings.onboardingDesignTitle': "Design system",
'settings.onboardingDesignBody': "Generate once, reuse everywhere.",
'settings.onboardingDesignIntroGenerateTitle': "Generate from existing work",
'settings.onboardingDesignIntroGenerateBody': "Upload your design system from GitHub or local code repositories, Figma files, images, and other content assets.",
'settings.onboardingDesignIntroReuseTitle': "Reuse in future work",
'settings.onboardingDesignIntroReuseBody': "Future prototypes, slides, and other content can reference your existing fonts, spacing, logo style, and color tone.",
'settings.onboardingDesignIntroSkipTitle': "Optional for now",
'settings.onboardingDesignIntroSkipBody': "Skip this step if you want to start without generating a design system.",
'settings.onboardingGithubTitle': "Import from GitHub",
'settings.onboardingGithubBody': "Use a frontend repository.",
'settings.onboardingUploadTitle': "Upload local files",
'settings.onboardingUploadBody': "Add project files, screenshots, CSS, docs, or assets.",
'settings.onboardingPromptTitle': "Generate from prompt",
'settings.onboardingPromptBody': "Describe the product or brand.",
'settings.onboardingProfileTitle': "About you",
'settings.onboardingProfileBody': "Optional details for better defaults.",
'settings.onboardingRoleLabel': "Your role",
'settings.onboardingOrgSizeLabel': "Organization size",
'settings.onboardingUseCaseLabel': "Use case",
'settings.onboardingSourceLabel': "Where did you hear about us?",
'settings.onboardingSelectPlaceholder': "Select one",
'settings.onboardingSelectMultiplePlaceholder': "Select one or more",
'settings.onboardingOrgSolo': "Solo / personal (1)",
'settings.onboardingOrgTeam': "Small team (2-10)",
'settings.onboardingOrgStartup': "Startup / SMB (11-50)",
'settings.onboardingOrgGrowth': "Growth company (51-200)",
'settings.onboardingOrgMidMarket': "Mid-market (201-1000)",
'settings.onboardingOrgEnterprise': "Enterprise (1000+)",
'settings.onboardingRolePm': "📋 Product manager",
'settings.onboardingRoleDesigner': "🎨 Designer",
'settings.onboardingRoleEngineer': "💻 Engineer",
'settings.onboardingRoleMarketing': "📣 Marketing",
'settings.onboardingRoleGrowth': "📈 Growth",
'settings.onboardingRoleOps': "⚙️ Operations",
'settings.onboardingRoleFounder': "🚀 Founder / executive",
'settings.onboardingRoleStudent': "🎓 Student / educator",
'settings.onboardingRoleOther': "✨ Other",
'settings.onboardingUseProduct': "🎨 Product design",
'settings.onboardingUseDesignSystem': "🧩 Design system",
'settings.onboardingUsePrototype': "📱 Prototype / app UI",
'settings.onboardingUseLanding': "🌐 Landing pages",
'settings.onboardingUseAds': "📣 Ads / social content",
'settings.onboardingUseDashboard': "📊 Dashboards / internal tools",
'settings.onboardingUseDeck': "🖥️ Presentation / deck",
'settings.onboardingUseMarketing': "📈 Marketing / growth",
'settings.onboardingUseEngineering': "🤝 Engineering handoff",
'settings.onboardingUseAgency': "💼 Agency / client work",
'settings.onboardingSourceGithub': "🐙 GitHub",
'settings.onboardingSourceFriend': "👥 Friend or coworker",
'settings.onboardingSourceSocial': "📱 Social media",
'settings.onboardingSourceProductHunt': "🅿️ Product Hunt",
'settings.onboardingSourceCommunity': "💬 Design / AI community",
'settings.onboardingSourceYoutube': "▶️ YouTube",
'settings.onboardingSourceBlog': "📰 Blog or newsletter",
'settings.onboardingSourceAiTool': "✨ AI tool recommendation",
'settings.onboardingSourceSearch': "🔍 Search",
'settings.onboardingSourceEvent': "🎤 Event or community",
'settings.onboardingBack': "Back",
'settings.onboardingContinue': "Continue",
'settings.onboardingFinish': "Finish setup",
'settings.onboardingSkip': "Skip for now",
'settings.kicker': 'Settings',
'settings.title': 'Execution mode',
'settings.subtitle': 'Choose Local CLI or BYOK.',
'settings.modeAria': 'Execution mode',
'settings.protocolAria': 'API protocol',
'settings.modeDaemon': 'Local CLI',
'settings.modeDaemonHelp': 'Run via a code-agent CLI on your machine',
'settings.modeDaemonOffline': 'Daemon is not running',
'settings.modeDaemonOfflineMeta': 'daemon offline',
'settings.modeDaemonInstalledMeta': '{count} installed',
'settings.modeApi': 'API provider',
'settings.modeApiMeta': 'BYOK',
'settings.byokNoFileToolsNotice':
"BYOK mode talks to the model directly and can't read, write, or edit files in your project — the agent will reply with text or HTML instead of applying changes. Switch to Local CLI mode (Claude Code, Codex, …) if you want the agent to edit project files.",
'settings.codeAgent': 'Code agent',
'settings.codeAgentHint': 'Pick the CLI that runs your prompts.',
'settings.rescan': '↻ Rescan',
'settings.rescanTitle': 'Re-scan PATH',
'settings.rescanRunning': 'Scanning...',
'settings.rescanSuccess': 'Scan complete. {count} available.',
'settings.designSystemRenameFailed': 'Rename failed. Check that the daemon is running and try again.',
'settings.rescanFailed': 'Scan failed. Check the daemon and try again.',
'settings.test': 'Test',
'settings.testTitle': 'Send a tiny test prompt to verify the connection',
'settings.testRunning': 'Testing connection…',
'settings.testCancel': 'Cancel',
'settings.testRetry': 'Retry test',
'settings.required': 'required',
'settings.testMissingFields': 'Fill {fields} to test the connection.',
'settings.testSuccessApi': 'Connected. Replied in {ms} ms — \'{sample}\'',
'settings.testSuccessCli': '{agentName} replied in {ms} ms — \'{sample}\'',
'settings.testAuthFailed': 'Authentication failed. Check your API key.',
'settings.testForbidden': 'Access forbidden. Verify your account, region, or organization.',
'settings.testNotFoundModel': 'Model \'{model}\' not found on this endpoint.',
'settings.testInvalidModelId': 'Model id \'{model}\' is invalid. Custom ids must start with a letter or number and contain no spaces.',
'settings.testInvalidBaseUrl': 'Base URL is invalid or unreachable.',
'settings.testRateLimited': 'Provider rate-limited the test. Configuration looks valid.',
'settings.testUpstream': 'Provider returned {status}. Try again in a moment.',
'settings.testTimeout': 'Test timed out after {ms} ms.',
'settings.testAgentMissing': '{agentName} is not installed or not in PATH.',
'settings.testAgentSpawn': 'Could not start {agentName}: {detail}.',
'settings.testUnknown': 'Test failed: {detail}',
'settings.agentInstall.install': 'Install',
'settings.agentInstall.docs': 'Docs',
'settings.agentInstall.pathHint':
'If you installed a CLI with npm or Homebrew and it still shows as not installed, ensure the tool\'s bin directory is on the PATH the Open Design daemon inherits (Terminal vs GUI apps can differ on macOS). See QUICKSTART.md (section "Local agent CLI and PATH").',
'settings.agentInstall.stepOpenLinks': 'Open Install or Docs for your preferred agent.',
'settings.agentInstall.stepAuth':
'Authenticate with the vendor CLI (sign in or add API credentials) before returning to Open Design.',
'settings.agentInstall.stepRescan': 'Click Rescan in this section.',
'settings.agentInstall.stepSelect': 'Select the agent card once it appears as installed.',
'settings.noAgentsDetected':
'No agents detected yet. Install one of Claude Code, Codex, Devin for Terminal, Gemini CLI, OpenCode, Cursor Agent, Qwen, or GitHub Copilot CLI, then click Rescan.',
'settings.agentInstalledGroup': 'Your CLIs ({count})',
'settings.agentInstallGroup': 'Available to install ({count})',
'settings.agentAuthRequired': 'Authentication required',
'settings.agentAuthUnknown': 'Auth status unknown',
'settings.amrCloud': 'Open Design AMR',
'settings.amrAuthorize': 'Authorize',
'settings.amrBenefitOfficial': 'Official',
'settings.amrBenefitLowerPrice': 'Lower cost',
'settings.amrBenefitManyModels': 'Many models',
'settings.amrPromoBonus': 'Limited bonus: +100%',
'settings.amrSignInToContinue': 'Sign in to continue',
'settings.amrSignIn': 'Sign in',
'settings.amrSignedIn': 'Signed in',
'settings.amrNotSignedIn': 'Not signed in',
'settings.amrSigningIn': 'Signing in…',
'settings.amrCancelSignIn': 'Cancel sign-in',
'settings.amrAccountStatus': 'AMR account status',
'settings.amrLoginErrorCompact': 'AMR sign-in failed.',
'settings.advanced': 'Advanced',
'settings.amrLogin': 'Sign in',
'settings.amrLogout': 'Sign out',
'settings.amrLoggingIn': 'Signing in…',
'settings.amrLoggingOut': 'Signing out…',
'settings.amrLoggedInAs': 'Signed in as {email}',
'settings.amrLoggedInWithPlan': 'Signed in as {email} · {plan}',
'settings.amrLoggedInPill': 'Signed in',
'settings.amrNotLoggedIn': 'Not signed in',
'settings.apiSection': 'Anthropic API',
'settings.quickFillProvider': 'Quick fill provider',
'settings.customProvider': 'Custom provider',
'settings.apiKey': 'API key',
'settings.apiKeyGetLink': 'Get your key at {host} ↗',
'settings.showKey': 'Show key',
'settings.hideKey': 'Hide key',
'settings.show': 'Show',
'settings.hide': 'Hide',
'settings.model': 'Model',
'settings.apiKeyInvalid': 'Invalid API key.',
'settings.modelsLoadedFromAccount': '✓ Loaded {count} models from your account.',
'settings.fetchModels': 'Fetch models',
'settings.fetchModelsTitle': 'Fetch available models from this provider',
'settings.fetchModelsRunning': 'Fetching models…',
'settings.fetchModelsMissingFields': 'Fill {fields} to fetch models.',
'settings.fetchModelsInvalidBaseUrl': 'Enter a valid Base URL to fetch models.',
'settings.fetchModelsUnsupportedAzure':
'Azure OpenAI uses deployment names, so model discovery is not available here.',
'settings.fetchModelsUnsupportedOllama':
'Ollama Cloud model discovery is not available yet. Choose or type a model.',
'settings.fetchModelsSuccess': 'Fetched {count} models.',
'settings.fetchModelsEmpty': 'No compatible text models were returned.',
'settings.fetchModelsUnsupported': 'Model discovery is not available for this protocol.',
'settings.fetchModelsFailed': 'Could not fetch models: {detail}',
'settings.suggestedModelsHint':
'These are suggested models for this protocol. Your provider may support different models.',
'settings.baseUrl': 'Base URL',
'settings.baseUrlInvalid': 'Enter a valid public http:// or https:// URL. Localhost is allowed; private network IPs are blocked.',
'settings.baseUrlCustomize': 'Customize',
'settings.baseUrlDefaultHint': 'Default endpoint. Usually no need to change this.',
'settings.azureBaseUrlPlaceholder': 'https://my-resource.openai.azure.com',
'settings.azureBaseUrlHint': 'Find this in Azure portal → your resource → Endpoint.',
'settings.azureDeploymentModel': 'Deployment name',
'settings.azureDeploymentModelHint':
'For Azure OpenAI, this field is used as the deployment name in /openai/deployments/<model>. Enter the deployment name you created in Azure.',
'settings.azureModelFetchHint':
'For Azure OpenAI, enter the deployment name you created in Azure. Automatic deployment discovery is not available from this BYOK endpoint.',
'settings.apiVersion': 'API version',
'settings.byokImageModel': 'Image generation model',
'settings.maxTokens': 'Max tokens (optional)',
'settings.maxTokensHint':
'Cap on the response length. Each model has a tuned default (shown as a placeholder); leave blank to use it, or enter a number to override.',
'settings.apiHint': 'Stored only in this browser.',
'settings.skipForNow': 'Skip for now',
'settings.getStarted': 'Get started',
'settings.envConfigure': 'Execution mode',
'settings.localCli': 'Local CLI',
'settings.anthropicApi': 'Anthropic API',
'settings.noAgentSelected': 'no agent selected',
'settings.language': 'Language',
'settings.languageHint': 'Switch the interface language. Saved to this browser.',
'settings.appearance': 'Appearance',
'settings.appearanceHint': 'Choose light, dark, or follow your system setting.',
'settings.themeSystem': 'System',
'settings.themeLight': 'Light',
'settings.themeDark': 'Dark',
'settings.agentModelHead': 'Model for:',
'settings.modelPicker': 'Model',
'settings.modelSourceLive': 'Live from CLI',
'settings.modelSourceFallback': 'Built-in list',
'settings.reasoningPicker': 'Reasoning effort',
'settings.modelPickerHint':
'Default uses the CLIs own config. Custom… lets you type any model id.',
'settings.modelPickerLiveHint':
"Model list comes from this CLI. Default uses the CLI's own config.",
'settings.modelPickerFallbackHint':
'Showing built-in defaults. Click Rescan to pull live models from the CLI.',
'settings.cliEnvTitle': 'Advanced: proxy & custom paths',
'settings.cliEnvHint':
'Use these only if you route CLI traffic through your own proxy or installed the binary in a non-standard location. Secrets stay in local app config and only the selected CLI sees them.',
'settings.cliEnvClaudeConfigDir': 'Claude Code config directory',
'settings.cliEnvClaudeBaseUrl': 'Claude proxy base URL',
'settings.cliEnvClaudeApiKey': 'Claude proxy API key',
'settings.cliEnvCodexHome': 'Codex home',
'settings.cliEnvCodexBin': 'Codex executable path',
'settings.cliEnvCodexBaseUrl': 'Codex/OpenAI proxy base URL',
'settings.cliEnvCodexApiKey': 'Codex/OpenAI proxy API key',
'settings.modelCustom': 'Custom (type below)…',
'settings.modelCustomLabel': 'Custom model id',
'settings.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4-6',
'settings.mediaProviders': 'Media providers',
'settings.mediaProvidersHint':
'API keys for image, video, and audio generation.',
'settings.mcpServerTitle': 'MCP server',
'settings.mcpServerHint': 'Expose Open Design as an MCP server for your coding agent.',
'settings.externalMcpTitle': 'External MCP',
'settings.externalMcpHint': 'Add MCP tools from external services (Higgsfield, GitHub, …).',
'settings.mediaProviderApiKey': 'API key',
'settings.mediaProviderBaseUrl': 'Base URL',
'settings.mediaProviderConfigured': 'Configured',
'settings.mediaProviderUnset': 'Unset',
'settings.mediaProviderClear': 'Clear',
'settings.mediaProviderClearConfirm': 'Clear saved {name} settings? You\'ll need to enter them again to use {name}.',
'settings.mediaProviderPlaceholder': 'Paste API key',
'settings.mediaProviderBaseUrlPlaceholder': 'Override default base URL',
'settings.mediaProviderReload': 'Reload from daemon',
'settings.mediaProviderReloadError': 'Could not reload media provider settings from the local daemon.',
'settings.mediaProviderReloadSuccess': 'Reloaded media provider settings from the local daemon.',
'settings.mediaProviderLoadError': 'Could not load media provider settings from the local daemon. Using browser-saved settings for now.',
'settings.mediaProviderComingSoonHint': 'We track these for the roadmap; the daemon doesn\'t ship a client yet, so there\'s nothing to configure.',
'settings.privacy': 'Privacy',
'settings.privacyHint': 'What data is shared with the Open Design team',
'settings.privacyConsentKicker': 'Help us improve Open Design',
'settings.privacyConsentLead': 'Open Design can share usage data with our team to help us improve. This includes:',
'settings.privacyConsentFooter': 'You can change either of these any time in Settings → Privacy. We never upload the contents of your generated artifact files.',
'settings.privacyConsentShare': 'Share usage data',
'settings.privacyConsentDecline': "Don't share",
'settings.privacyConsentAccept': 'I get it',
'settings.privacyConsentBannerFooter':
'Data sharing is on by default. You can turn it off any time in Settings → Privacy. We never upload the contents of your generated artifact files.',
'settings.privacyConsentPolicyLink': 'Read the privacy policy',
'settings.privacyMetrics': 'Anonymous metrics',
'settings.privacyMetricsHint': 'Run counts, token usage, error rate, duration. No prompts, no project data.',
'settings.privacyContent': 'Conversation and tool content',
'settings.privacyContentHint': "Your prompts, assistant responses, tool inputs, and tool outputs (truncated before send). API keys, tokens, JWTs, emails, IPs, and credit-card numbers are stripped automatically before send.",
'settings.privacyArtifacts': 'Project artifacts manifest',
'settings.privacyArtifactsHint': 'Filenames, types, sizes of generated files. File contents are never sent.',
'settings.privacyInstallationId': 'Anonymous ID',
'settings.privacyOptedOut': 'opted out',
'settings.privacyDataDeletion': 'Delete my data',
'settings.privacyDataDeletionHint': 'Rotates your anonymous ID and stops sending. Existing traces age out under our retention policy.',
'settings.about': 'About',
'settings.aboutHint': 'Version and runtime details',
'settings.appVersion': 'Version',
'settings.appChannel': 'Channel',
'settings.appRuntime': 'Runtime',
'settings.appPlatform': 'Platform',
'settings.appArchitecture': 'Architecture',
'settings.runtimePackaged': 'Packaged app',
'settings.runtimeDevelopment': 'Development',
'settings.versionUnavailable': 'Version details are unavailable while the daemon is offline.',
'settings.installLatest': 'Install latest',
'settings.alreadyLatest': 'You\'re on the latest version',
// MCP server settings
'settings.mcpTitle': 'MCP server',
'settings.mcpHint': 'Let coding agents (Cursor, Claude Code, VS Code…) read your Open Design projects directly.',
'settings.mcpDaemonError':
"Couldn't reach the local daemon to resolve install paths ({error}). Make sure Open Design is running, then reopen this panel.",
'settings.mcpBuildDaemon': 'Build the daemon first.',
'settings.mcpNodeMissing': 'Node binary is missing.',
'settings.mcpBuildHint':
'apps/daemon/dist/cli.js is missing. Run `pnpm --filter @open-design/daemon build` and refresh.',
'settings.mcpMethodCli': 'CLI command',
'settings.mcpInstructionCli': 'Run this in your terminal.',
'settings.mcpMethodToml': 'TOML config',
'settings.mcpInstructionCodex':
'Append this table to {path}. The same config is shared between the Codex CLI and the Codex IDE extension.',
'settings.mcpMethodOneClick': 'One-click install',
'settings.mcpInstructionCursor':
'Click "Install in Cursor" to install with an approval dialog, or merge this JSON into {path}.',
'settings.mcpDeeplinkInstallCursor': 'Install in Cursor',
'settings.mcpMethodJson': 'JSON config',
'settings.mcpInstructionCopilot':
'Open the Command Palette ({shortcut}), run "MCP: Open User Configuration", and merge this JSON. Copilot Chat must be in Agent mode for tools to show up.',
'settings.mcpInstructionAntigravity':
'In Antigravity: Agent panel "..." menu → MCP Servers → Manage MCP Servers → View raw config. Merge this JSON.',
'settings.mcpInstructionZed':
'Open Zed Settings ({shortcut}) and merge this into the top-level object. Zed uses "context_servers", not "mcpServers".',
'settings.mcpInstructionWindsurf':
'Open {path} (or use the MCPs icon in Cascade → Configure) and merge:',
'settings.mcpCopyAria': 'Copy MCP configuration snippet',
'settings.mcpResolvingFailed': '# resolving paths failed, see the error above',
'settings.mcpLoadingPaths': '# loading install paths from the local daemon…',
'settings.mcpCopied': 'Copied',
'settings.mcpCopy': 'Copy',
'settings.mcpCursorApproval': 'Cursor pops an approval dialog before writing the config.',
'settings.mcpCodexOneClickInstall': 'Install in Codex',
'settings.mcpCodexOneClickUninstall': 'Remove from Codex',
'settings.mcpCodexOneClickUnavailable': 'Codex CLI not found on PATH — install Codex or paste the snippet manually.',
'settings.mcpCodexInstallSuccess': 'Installed. Restart Codex to load the new server.',
'settings.mcpCodexUninstallSuccess': 'Removed from Codex.',
'settings.mcpCodexBusy': 'Working…',
'settings.mcpCodexInstallError': 'Operation failed: {error}',
'settings.mcpRestartNote': 'Restart your client to pick up the new server.',
'settings.mcpRestartDetail':
'Most editors only load MCP servers at startup. In Cursor / VS Code / Antigravity / Windsurf you can run `Developer: Reload Window` from the command palette instead of a full restart. Zed and Claude Code need a quit and reopen.',
'settings.mcpCapabilitiesTitle': 'What your agent can do',
'settings.mcpCapabilityRead':
'Read or search any file in a project (HTML, JSX, CSS, JSON, SVG, Markdown).',
'settings.mcpCapabilityPull':
'Pull a design bundle in one call: the entry file plus every CSS variable, component, and font it references.',
'settings.mcpCapabilityDefault':
'Default to the project and file you have open in Open Design, so you can say "build this in my app" without re-stating which design.',
'settings.mcpRunningNote':
'Open Design must be running for MCP tool calls to succeed. If you started your coding agent before opening Open Design, restart the agent so it can reach the live daemon.',
'entry.tabDesigns': 'Designs',
'entry.tabTemplates': 'Templates',
'entry.tabDesignSystems': 'Design systems',
'entry.tabConnectors': 'Connectors',
'entry.openSettingsTitle': 'Settings',
'entry.openSettingsAria': 'Open settings',
'entry.resizeAria': 'Resize sidebar',
'entry.loadingWorkspace': 'Loading workspace…',
'entry.useEverywhereTitle': 'Use everywhere',
'entry.useEverywhereAria': 'Open the Use Everywhere guide (CLI, MCP, HTTP, Skills)',
'entry.navNewProject': 'New project',
'entry.navHome': 'Home',
'entry.navProjects': 'Projects',
'entry.navTasks': 'Automations',
'entry.navPlugins': 'Plugins',
'entry.navDesignSystems': 'Design systems',
'entry.navIntegrations': 'Integrations',
'workspaceTabs.project': 'Project',
'workspaceTabs.pluginDetails': 'Plugin details',
'workspaceTabs.marketplace': 'Marketplace',
'homeHero.title': 'What do you want to design?',
'homeHero.subtitlePrefix': 'The open-source Claude Design alternative.',
'homeHero.placeholder': 'Describe what you want to generate…',
'homeHero.placeholderActive': 'Edit the example query or write your own…',
'homeHero.skills': 'Skills',
'homeHero.applying': 'Applying…',
'homeHero.pluginTitle': 'Plugin: {title}',
'homeHero.pluginPrefix': 'Plugin: {title}',
'homeHero.skillPrefix': 'Skill: {title}',
'homeHero.removePlugin': 'Remove plugin',
'homeHero.removePluginAria': 'Remove plugin {title}',
'homeHero.clearActivePlugin': 'Clear active plugin',
'homeHero.clearActiveSkill': 'Clear active skill',
'homeHero.contextItemsResolved': '{n} context items resolved',
'homeHero.removeFile': 'Remove file',
'homeHero.contextSearchResults': 'Context search results',
'homeHero.contextSurfaces': 'Context surfaces',
'homeHero.loadingContext': 'Loading context…',
'homeHero.noResults': 'No results for "{query}".',
'homeHero.searchPrompt': 'Search plugins, skills, MCP servers, and connectors.',
'homeHero.parameters': '{n} parameters',
'homeHero.details': 'Details',
'homeHero.toRun': 'to run',
'homeHero.forNewLine': 'for new line',
'homeHero.run': 'Run',
'homeHero.typeSomethingToRun': 'Type something to run',
'homeHero.promptExamples': "Example prompts",
'homeHero.footer.designSystem': "Style",
'homeHero.footer.autoDesignSystem': "Auto",
'homeHero.footer.autoDesignSystemSummary': "Automatically matches the best design system and visual style for the current prompt.",
'homeHero.footer.ratio': "Ratio",
'homeHero.footer.duration': "Duration",
'homeHero.footer.resolution': "Resolution",
'homeHero.footer.speakerNotes': "Notes",
'homeHero.footer.noSpeakerNotes': "No notes",
'homeHero.footer.availableCount': "{n} available",
'homeHero.footer.noMatches': "No matches",
'homeHero.moreShortcuts': "More",
'homeHero.railAria': 'Pick a project category or starter shortcut',
'homeHero.confirmReplaceTitle': 'Replace current prompt?',
'homeHero.confirmReplaceBody': 'Using {title} will replace the text currently in the input.',
'homeHero.confirmReplace': 'Replace',
'homeHero.chip.prototype': 'Prototype',
'homeHero.chip.liveArtifact': 'Live artifact',
'homeHero.chip.deck': 'Slide deck',
'homeHero.chip.image': 'Image',
'homeHero.chip.video': 'Video',
'homeHero.chip.hyperframes': 'HyperFrames',
'homeHero.chip.audio': 'Audio',
'homeHero.chip.createPlugin': 'Create plugin',
'homeHero.chip.figma': 'From Figma',
'homeHero.chip.folder': 'From folder',
'homeHero.chip.template': 'From template',
'homeHero.chip.liveArtifactHint': 'Build an interactive HTML/CSS/JS artifact you can preview live.',
'homeHero.chip.hyperframesHint': 'Author HTML-based motion: captions, audio-reactive visuals, scene transitions.',
'homeHero.chip.createPluginHint': 'Author a reusable Open Design plugin and add it to My plugins.',
'homeHero.chip.figmaHint': 'Migrate a Figma frame into the active design system.',
'homeHero.chip.folderHint': 'Import an existing local folder and continue editing.',
'homeHero.chip.templateHint': 'Start from a bundled template.',
'workingDirPicker.title': 'Folder',
'workingDirPicker.homeTitle': 'Choose where this project should live',
'workingDirPicker.processing': 'Processing…',
'workingDirPicker.select': 'Choose folder',
'workingDirPicker.clearAria': 'Clear working directory',
'workingDirPicker.replaceFailed': 'Could not replace working directory',
'workingDirPicker.unavailable': 'Folder picker is unavailable in this build. Run the desktop app to pick a folder.',
'workingDirPicker.openUnavailable': 'Open this project in the desktop app to show the folder.',
'workingDirPicker.openFailed': 'Could not show this folder',
'workingDirPicker.showInFileManager': 'Show in file manager',
'workingDirPicker.replace': 'Clear and replace directory…',
'workingDirPicker.recent': 'Recent directories',
'handoff.toTarget': 'Hand off to {target}',
'handoff.openInTarget': 'Open in {target}',
'handoff.openAction': 'Open',
'handoff.menuTitle': 'Open in which editor?',
'handoff.action': 'Hand off',
'handoff.fallbackTitle': 'No editors found on $PATH - opens in {target}',
'handoff.chooseTargetAria': 'Choose hand-off target',
'handoff.notInstalled': 'Not installed',
'handoff.notDetectedTitle': '{target} - not detected on $PATH',
'designSystemPicker.select': 'Choose design system',
'designSystemPicker.loading': 'Loading design systems…',
'designSystemPicker.searchPlaceholder': 'Search design systems (title / category / summary)',
'designSystemPicker.searchCompactPlaceholder': 'Search design systems',
'designSystemPicker.noneTitle': 'No design system',
'designSystemPicker.noneSummary': 'Let the model choose freely',
'designSystemPicker.empty': 'No matching design systems',
'designSystemPicker.openPreview': 'Open preview',
'designSystemPicker.loadingPreview': 'Loading preview…',
'designSystemPicker.noPreview': 'No preview page. Open Design Systems to view the full preview.',
'designSystemPicker.previewHint': 'Hover a design system to preview it',
'designSystemPicker.fullscreenAria': '{title} full-screen preview',
'designSystemPicker.closeFullscreen': 'Close full-screen preview',
'designSystemPicker.closeEsc': 'Close (Esc)',
'designSystemPicker.previewFrameTitle': '{title} preview',
'designSystemPicker.fullscreenFrameTitle': '{title} full-screen preview',
'recentProjects.title': 'Recent projects',
'recentProjects.viewAll': 'View all',
'recentProjects.empty': 'No projects yet — type a prompt to start one.',
'pluginsHome.title': 'Community',
'pluginsHome.subtitle': 'Ready-to-use Open Design workflows bundled with this runtime. Pick one to load a starter prompt, or browse the registry for more.',
'pluginsHome.browseRegistry': 'Browse registry',
'pluginsHome.count': '{filtered} of {total}',
'pluginsHome.loadingCatalog': 'Loading catalog…',
'pluginsHome.emptyCatalog': 'Catalog is empty. Bundled plugins ship with Open Design and should appear here automatically — try restarting the daemon if this persists.',
'pluginsHome.emptyFiltered': 'No plugins match the current filters.',
'pluginsHome.clearFilters': 'Clear filters',
'pluginsHome.modeAria': 'Plugin mode',
'pluginsHome.featured': 'Saved',
'pluginsHome.totalInCatalog': '{n} in catalog',
'pluginsHome.categoryFilterAria': 'Category filter',
'pluginsHome.subcategoryFilterAria': '{label} subcategory filter',
'pluginsHome.allCategory': 'All {label}',
'pluginsHome.searchPlaceholder': 'Search plugins…',
'pluginsHome.searchAria': 'Search plugins',
'pluginsHome.clearSearch': 'Clear search',
'pluginsHome.facet.import': 'Import',
'pluginsHome.facet.create': 'Create',
'pluginsHome.facet.export': 'Export',
'pluginsHome.facet.share': 'Share',
'pluginsHome.facet.deploy': 'Deploy',
'pluginsHome.facet.refine': 'Refine',
'pluginsHome.facet.extend': 'Extend',
'pluginsHome.facet.figma': 'Figma',
'pluginsHome.facet.github': 'GitHub',
'pluginsHome.facet.codeFolder': 'Code / folder',
'pluginsHome.facet.url': 'URL',
'pluginsHome.facet.screenshot': 'Screenshot',
'pluginsHome.facet.pdf': 'PDF',
'pluginsHome.facet.pptx': 'PPTX',
'pluginsHome.facet.framer': 'Framer',
'pluginsHome.facet.webflow': 'Webflow',
'pluginsHome.facet.slides': 'Slides',
'pluginsHome.facet.publicLink': 'Public link',
'pluginsHome.facet.githubPr': 'GitHub PR',
'pluginsHome.facet.githubGist': 'GitHub Gist',
'pluginsView.lede': 'Browse installed workflows, discover registry entries, manage sources, and prepare plugins for team distribution.',
'pluginsView.importPlugin': 'Import plugin',
'pluginsView.agentContext': 'Agent context',
'pluginsView.summaryAria': 'Plugin summary',
'pluginsView.areasAria': 'Plugin areas',
'pluginsView.loading': 'Loading plugins…',
'pluginsView.tab.installed': 'Installed',
'pluginsView.tab.available': 'Available',
'pluginsView.tab.sources': 'Sources',
'pluginsView.tab.team': 'Team',
'pluginsView.tabHint.installed': 'Your plugins',
'pluginsView.tabHint.available': 'From sources',
'pluginsView.tabHint.sources': 'Catalogs',
'pluginsView.tabHint.team': 'Enterprise',
'pluginsView.installedTitle': 'Installed plugins',
'pluginsView.installedSubtitle': 'Plugins you imported or installed from marketplace sources.',
'pluginsView.installedEmpty': 'No installed user plugins yet. Use Create / Import or install an Available entry.',
'pluginsView.availableTitle': 'Available from sources',
'pluginsView.availableSubtitle': 'Catalog entries discovered from configured marketplaces.',
'pluginsView.availableFiltersAria': 'Available plugin filters',
'pluginsView.searchAvailableAria': 'Search available plugins',
'pluginsView.searchAvailablePlaceholder': 'Search available plugins',
'pluginsView.clearAvailableSearch': 'Clear available plugin search',
'pluginsView.source': 'Source',
'pluginsView.availableEmptyInstalled': 'No available entries yet. Installed catalog entries are removed from Available; uninstall one to make it available again.',
'pluginsView.availableEmptyFiltered': 'No available entries match your filters.',
'pluginsView.availableEmptyNoSources': 'No available entries yet. Add a source in the Sources tab.',
'pluginsView.installing': 'Installing…',
'pluginsView.install': 'Install',
'pluginsView.sourcesTitle': 'Registry sources',
'pluginsView.sourcesSubtitle': 'Marketplace catalogs that feed Available plugin entries.',
'pluginsView.sourceUrl': 'Source URL',
'pluginsView.defaultTrust': 'Default trust',
'pluginsView.trust.restricted': 'Restricted',
'pluginsView.trust.trusted': 'Trusted',
'pluginsView.trust.official': 'Official',
'pluginsView.adding': 'Adding…',
'pluginsView.addSource': 'Add source',
'pluginsView.sourcesEmpty': 'No registry sources configured yet.',
'pluginsView.pluginsCount': '{n} plugins',
'pluginsView.catalogVersion': 'catalog v{version}',
'pluginsView.trustFor': 'Trust for {name}',
'pluginsView.refreshing': 'Refreshing…',
'pluginsView.removing': 'Removing…',
'pluginsView.teamTitle': 'Private team marketplaces',
'pluginsView.teamBody': 'This area is reserved for enterprise and team catalogs, private trust policies, and shared plugin lifecycle controls.',
'pluginCard.details': 'Details',
'pluginCard.use': 'Use',
'pluginCard.useWithQuery': 'Use with query',
'pluginCard.applying': 'Applying…',
'pluginCard.publish': 'Publish',
'pluginCard.contribute': 'Contribute',
'pluginCard.starting': 'Starting…',
'pluginCard.detailsAria': 'View details for {title}',
'pluginCard.chooseUseAria': 'Choose how to use {title}',
'pluginCard.useOptionsAria': 'Use options for {title}',
'pluginCard.shareAria': 'Share {title}',
'pluginCard.publishAria': 'Publish {title} as a GitHub repository',
'pluginCard.publishTitle': 'Publish plugin as a GitHub repository',
'pluginCard.contributeAria': 'Contribute {title} to Open Design',
'pluginCard.contributeTitle': 'Contribute plugin to Open Design with a pull request',
'skillPluginCandidate.createForMe': 'Create for me',
'skillPluginCandidate.contributeToMain': 'Contribute to main',
'skillPluginCandidate.publishRepo': 'Publish repo',
'skillPluginCandidate.dismiss': 'Dismiss',
'skillPluginCandidate.repoDescription': 'This repo looks like it could work as a plugin.',
'integrations.kicker': 'Integration',
'integrations.lede': 'Connect external systems, bring MCP tools into your agent loop, and use Open Design from other IDEs, scripts, and automations.',
'integrations.agentReady': 'Agent-ready',
'integrations.areasAria': 'Integration areas',
'integrations.tabLabel.mcp': 'MCP',
'integrations.tabLabel.skills': 'Skills',
'integrations.tabHint.mcp': 'External tools',
'integrations.tabHint.connectors': 'Accounts and APIs',
'integrations.tabHint.useEverywhere': 'CLI, HTTP, MCP',
'integrations.skillsTitle': 'Skills integrations',
'integrations.skillsBody': 'Skill-level integration management is being carried over from another branch. This tab is reserved so MCP, Connectors, and future Skills setup live in the same Integration route.',
'mcpClient.title': 'External MCP servers',
'mcpClient.subtitle': 'Third-party tools for your coding agent.',
'mcpClient.addServer': 'Add server',
'mcpClient.emptyTitle': 'No MCP servers configured.',
'mcpClient.emptyBody': 'Click "Add server" to get started — pick a template (Higgsfield OpenClaw, Pollinations, Allyson, Imagician, EdgeOne Pages, GitHub, Filesystem…) or set up a custom stdio / HTTP server.',
'mcpClient.saveChanges': 'Save changes',
'mcpClient.storedAt': 'Stored at',
'mcpClient.daemonError': 'Could not reach the local daemon. Make sure Open Design is running, then reopen this panel.',
'mcpClient.saveFailed': 'Save failed. Check that the daemon is running and try again.',
'useEverywhere.modalAria': 'Use Open Design everywhere',
'useEverywhere.modalTitle': 'Use Open Design everywhere',
'useEverywhere.modalSubtitle': 'Drop Open Design into any IDE, agent, or script — CLI, HTTP, MCP, and Skills. Use “Copy guide for an agent” and paste into Claude Code, Codex, Cursor, openclaw, or hermes to set up everything.',
'useEverywhere.closeAria': 'Close use everywhere',
'useEverywhere.closeTitle': 'Close (Esc)',
'useEverywhere.tabsAria': 'Integration surfaces',
'useEverywhere.footStrong': 'One-click handoff.',
'useEverywhere.footBody': 'Copies a structured markdown guide your agent can act on immediately — install, verify, and use.',
'useEverywhere.configureMcp': 'Configure MCP server',
'useEverywhere.copyGuide': 'Copy guide for an agent',
'useEverywhere.copy': 'Copy',
'useEverywhere.copied': 'Copied',
'useEverywhere.copyFailed': 'Copy failed',
'useEverywhere.copySnippetAria': 'Copy snippet: {label}',
'useEverywhere.section.overview.tab': 'Overview',
'useEverywhere.section.overview.heading': 'Open Design works wherever your agent works',
'useEverywhere.section.overview.intro': 'Open Design is more than a window — it is a local privileged daemon (`od`) plus a Skills + Design-Systems + Atoms registry. Once it is running on your machine, any code agent (Claude Code, Codex, Cursor, OpenCode/openclaw, Hermes, your own script) can drive generations, inspect projects, and produce design artifacts through four interchangeable surfaces.',
'useEverywhere.section.overview.bullet1': 'CLI — `od <command>` for headless scripts, CI, and shell automation.',
'useEverywhere.section.overview.bullet2': 'MCP server — wires Open Design as a Model Context Protocol server so any MCP-capable agent can list skills, run scenarios, and read artifacts.',
'useEverywhere.section.overview.bullet3': 'HTTP API — `http://127.0.0.1:7456/api/*` REST + SSE endpoints; the same surface the web UI uses.',
'useEverywhere.section.overview.bullet4': 'Skills — drop-in `SKILL.md` packs (Claude-compatible) that any agent already on your PATH can invoke without Open Design at all.',
'useEverywhere.section.overview.bullet5': 'Standard artifacts — seed real HTML projects from Skills, bundled default plugins, and community plugin examples before the daemon starts.',
'useEverywhere.section.overview.snippet1': 'Start the daemon (and web UI) locally',
'useEverywhere.section.overview.snippet2': 'Confirm it is reachable',
'useEverywhere.section.overview.snippet3': 'Ingest standard artifacts before boot',
'useEverywhere.section.overview.footer': 'The daemon writes to `./.od/` (project-local) by default. Set `OD_DATA_DIR=~/.open-design` to share data across projects.',
'useEverywhere.section.cli.tab': 'CLI · od',
'useEverywhere.section.cli.heading': 'Drive Open Design from any shell',
'useEverywhere.section.cli.intro': 'The `od` bin ships with the daemon and is the same binary used by Claude Code / Codex when they run a generation. Most subcommands are thin clients that POST to the local daemon, so they work the same whether you launched it via `pnpm tools-dev` or as a packaged app.',
'useEverywhere.section.cli.bullet1': '`od` (no args) — boots the daemon and opens the web UI.',
'useEverywhere.section.cli.bullet2': '`od media generate ...` — produce image / video / audio bytes through the unified media protocol.',
'useEverywhere.section.cli.bullet3': '`od run ...` — start a project run from a prompt + skill.',
'useEverywhere.section.cli.bullet4': '`od plugin install <source>` / `od plugin apply <id>` — install and apply community plugins.',
'useEverywhere.section.cli.bullet5': '`od skills list` / `od design-systems list` — inspect what is available locally.',
'useEverywhere.section.cli.bullet6': '`od status` / `od doctor` — verify daemon health and detect agent CLIs on your PATH.',
'useEverywhere.section.cli.snippet1': 'Generate an image (delegates to the configured media provider)',
'useEverywhere.section.cli.snippet2': 'Run a scenario plugin headlessly and stream events as JSON lines',
'useEverywhere.section.cli.snippet3': 'Inventory locally available skills and design systems',
'useEverywhere.section.cli.snippet4': 'Check seeded artifacts through the CLI',
'useEverywhere.section.cli.snippet5': 'Verify environment + detected agents (Claude, Codex, Cursor, …)',
'useEverywhere.section.cli.footer': 'All subcommands accept `--daemon-url http://127.0.0.1:<port>` to target a specific running daemon — useful when running a sandboxed second instance for tests.',
'useEverywhere.section.mcp.tab': 'MCP server',
'useEverywhere.section.mcp.heading': 'Expose Open Design as an MCP server to any coding agent',
'useEverywhere.section.mcp.intro': 'Open Design ships with a Model Context Protocol server (`od mcp`) that lets any MCP-capable client — Cursor, Claude Code, Antigravity, VS Code Copilot Chat, openclaw, hermes — discover Open Design tools (list skills, render previews, generate media, run plugins) without shelling out manually. The daemon publishes a ready-to-paste install snippet via `GET /api/mcp/install-info` for each major client.',
'useEverywhere.section.mcp.bullet1': 'Stdio transport — no extra port, the client spawns `od mcp` directly.',
'useEverywhere.section.mcp.bullet2': 'Auto-discovers the live daemon URL via the local IPC status socket when launched as a sidecar.',
'useEverywhere.section.mcp.bullet3': 'Falls back to `--daemon-url http://127.0.0.1:<port>` for plain installs so the MCP process always finds a running daemon.',
'useEverywhere.section.mcp.bullet4': 'Pins `OD_DATA_DIR` so the spawned MCP process writes to the same place the daemon already uses (avoids EPERM in packaged macOS app bundles).',
'useEverywhere.section.mcp.snippet1': 'Generic MCP client config (works in Cursor, Claude Code, Codex, …)',
'useEverywhere.section.mcp.snippet2': 'Or: ask the daemon for the snippet tailored to your install',
'useEverywhere.section.mcp.snippet3': 'Live-artifacts MCP variant (read & refresh dashboards)',
'useEverywhere.section.mcp.footer': 'In the Open Design app, open Settings → Integrations to copy a client-specific install command (Cursor, Claude Code, Antigravity, VS Code) instead of editing JSON by hand.',
'useEverywhere.section.http.tab': 'HTTP API',
'useEverywhere.section.http.heading': 'Same REST + SSE surface the web UI uses',
'useEverywhere.section.http.intro': 'The local daemon serves an HTTP API at `http://127.0.0.1:7456` (port configurable). Every endpoint the web UI calls is also fair game for your scripts. Streaming endpoints (chat turns, project runs) emit Server-Sent Events with the contract types in `@open-design/contracts`.',
'useEverywhere.section.http.bullet1': '`GET /api/health` — daemon liveness.',
'useEverywhere.section.http.bullet2': '`GET /api/skills` and `GET /api/design-systems` — available registries.',
'useEverywhere.section.http.bullet3': '`GET /api/projects` and `POST /api/projects` — list and create projects (POST returns the project + first conversation).',
'useEverywhere.section.http.bullet4': '`GET /api/projects/:id/chat` — SSE stream of agent events for a conversation.',
'useEverywhere.section.http.bullet5': '`POST /api/plugins/:id/apply` — bind an installed plugin and get its rendered example query + inputs.',
'useEverywhere.section.http.bullet6': '`GET /api/agents` — detected code-agent CLIs on your PATH.',
'useEverywhere.section.http.snippet1': 'List installed skills (the agent will use these as templates)',
'useEverywhere.section.http.snippet2': 'Create a project from a prompt (full server-side flow)',
'useEverywhere.section.http.snippet3': 'Stream a chat turn (SSE — each line is JSON-Lines compatible)',
'useEverywhere.section.http.footer': 'Pure TypeScript types for every request/response live in `@open-design/contracts` — import them in your script for full autocomplete without wiring a generator.',
'useEverywhere.section.skills.tab': 'Skills & headless',
'useEverywhere.section.skills.heading': 'Drop-in Skills for any agent — even without Open Design running',
'useEverywhere.section.skills.intro': 'A Skill is a directory with a Claude-compatible `SKILL.md` (YAML front-matter + body). Open Design extends the format with the `od:` namespace (`mode`, `preview`, `design_system`, `inputs`, …) so the same artifact can be used both inside Open Design and by a vanilla agent like Claude Code, Codex, openclaw, or hermes. Discovery follows a precedence chain so projects can override their own skills.',
'useEverywhere.section.skills.bullet1': 'Discovery: `./.claude/skills/` → `./skills/` → `~/.claude/skills/` (project wins).',
'useEverywhere.section.skills.bullet2': 'Symlink one skill into multiple projects to share it without copying.',
'useEverywhere.section.skills.bullet3': 'Each skill can declare connectors, atoms, design-system requirements, and a `preview` example output for the gallery.',
'useEverywhere.section.skills.bullet4': 'Headless: an agent with `od` on its PATH can call `od skills list` then run any skill; the daemon is optional for read-only flows.',
'useEverywhere.section.skills.bullet5': '`pnpm seed:test-projects` exercises the same artifact shape with default plugin examples and community plugin examples, then stores the resulting `index.html` projects as reusable test data.',
'useEverywhere.section.skills.snippet1': 'Minimal SKILL.md (Claude-compatible front matter + Open Design extras)',
'useEverywhere.section.skills.snippet2': 'Symlink a shared skill into a project (cc-switch style)',
'useEverywhere.section.skills.snippet3': 'Headless: list skills the daemon sees right now',
'useEverywhere.section.skills.snippet4': 'Headless artifact fixture bundle',
'useEverywhere.section.skills.footer': 'Spec: `docs/skills-protocol.md` and `docs/agent-adapters.md` cover the full adapter surface (Claude Code, Codex, Cursor, MCP-capable agents, BYOK API fallback) and the per-adapter skill injection strategies.',
'tasks.kicker': 'Automation workspace',
'tasks.comingSoon': 'Coming soon',
'tasks.lede': 'Automations turn prompts into durable work: Orbit runs them, routines keep them around, schedules decide when they fire, and live artifacts show what changed.',
'tasks.newAutomation': 'New automation',
'tasks.previewNote': 'Preview surface only. Orbit settings are available today; routines, schedules, and live artifact wiring will land as the backend branches merge.',
'tasks.primitivesAria': 'Automation primitives',
'tasks.primitive.orbit.title': 'Orbit',
'tasks.primitive.orbit.body': 'A persistent runtime for long-running or recurring agent work.',
'tasks.primitive.orbit.enabled': 'Daily summary enabled',
'tasks.primitive.orbit.manualOnly': 'Manual only',
'tasks.primitive.routines.title': 'Routines',
'tasks.primitive.routines.body': 'Durable task definitions that survive after a single chat ends.',
'tasks.primitive.routines.meta': 'Product shell ready',
'tasks.primitive.schedules.title': 'Schedules',
'tasks.primitive.schedules.body': 'Time or event triggers that decide when a routine should run.',
'tasks.primitive.schedules.meta': 'Branch pending',
'tasks.primitive.liveArtifacts.title': 'Live artifacts',
'tasks.primitive.liveArtifacts.body': 'Reports and notes that keep updating while an agent works.',
'tasks.primitive.liveArtifacts.meta': 'Preview model',
'tasks.listAria': 'Automations list',
'tasks.routinesAndRuns': '{n} routines and runs',
'tasks.filtersAria': 'Automation filters',
'tasks.filter.scheduled': 'Scheduled',
'tasks.filter.running': 'Running',
'tasks.filter.done': 'Done',
'tasks.configurationAria': 'Automation configuration',
'tasks.slot.trigger': 'Trigger',
'tasks.slot.pattern': 'Pattern',
'tasks.slot.runtime': 'Runtime',
'tasks.slot.output': 'Output',
'tasks.liveArtifact': 'Live artifact',
'tasks.viewProgress': 'View progress',
'tasks.pause': 'Pause',
'tasks.runNow': 'Run now',
'tasks.openArtifact': 'Open artifact',
'tasks.status.dailyAt': 'Daily · {time}',
'tasks.status.pausedManual': 'Paused · manual only',
'tasks.sample.orbit.title': 'Orbit Daily connector summary',
'tasks.sample.orbit.metaEnabled': 'Connector digest is scheduled',
'tasks.sample.orbit.metaDisabled': 'Open Orbit settings to enable',
'tasks.sample.orbit.previewEnabled': 'orbit_daily.html · live artifact',
'tasks.sample.orbit.previewDisabled': 'No run scheduled',
'tasks.sample.orbit.triggerEnabled': 'Schedule · daily at {time}',
'tasks.sample.orbit.triggerDisabled': 'Manual · run on demand',
'tasks.sample.orbit.pattern': 'Routine · connector digest',
'tasks.sample.orbit.runtime': 'Orbit · daemon scheduled',
'tasks.sample.orbit.output': 'Live artifact · refreshable report',
'tasks.sample.orbit.artifactMetaEnabled': 'Refreshes after each run',
'tasks.sample.orbit.artifactMetaDisabled': 'Waiting for schedule',
'tasks.sample.orbit.body1': '# Orbit Daily activity summary',
'tasks.sample.orbit.body2': 'Connectors checked · successes, skips, and failures',
'tasks.sample.orbit.body3': 'Highlights become a refreshable live artifact.',
'tasks.sample.mcp.title': 'MCP alternatives research',
'tasks.sample.mcp.status': 'Running in orbit · 2h 14m',
'tasks.sample.mcp.meta': '14 / 30 sources processed',
'tasks.sample.mcp.preview': 'research_notes.md · live',
'tasks.sample.mcp.trigger': 'Manual · one-shot',
'tasks.sample.mcp.pattern': 'Deep research prompt',
'tasks.sample.mcp.runtime': 'Remote · persistent',
'tasks.sample.mcp.output': 'Live report · auto-updating',
'tasks.sample.mcp.artifactMeta': 'Updated 12s ago',
'tasks.sample.mcp.body1': '# MCP alternatives - interim findings',
'tasks.sample.mcp.body2': '14 sources reviewed · 3 contenders shortlisted',
'tasks.sample.mcp.body3': '## Shortlist',
'tasks.sample.mcp.body4': '- Tool-call schemas via JSON-RPC...',
'tasks.sample.mcp.body5': '- gRPC-based agent protocols...',
'tasks.sample.weekly.title': 'Weekly team digest',
'tasks.sample.weekly.status': 'Next: Mon 9:00 AM',
'tasks.sample.weekly.meta': 'Updates Team weekly doc',
'tasks.sample.weekly.preview': 'team_weekly.md · next artifact',
'tasks.sample.weekly.trigger': 'Schedule · weekly',
'tasks.sample.weekly.pattern': 'Routine · team digest',
'tasks.sample.weekly.runtime': 'Remote · recurring',
'tasks.sample.weekly.output': 'Live artifact · markdown',
'tasks.sample.weekly.artifactMeta': 'Last updated 4d ago',
'tasks.sample.weekly.body1': '# Team weekly',
'tasks.sample.weekly.body2': '## In flight',
'tasks.sample.weekly.body3': '- Design-system integration pass',
'tasks.sample.weekly.body4': '- Connector quality sweep',
'tasks.sample.weekly.body5': '## Risks',
'tasks.sample.pr.title': 'PR review reminder',
'tasks.sample.pr.status': 'On new PR · fired 23m ago',
'tasks.sample.pr.meta': 'Sends Slack DM',
'tasks.sample.pr.preview': 'Last delivery succeeded',
'tasks.sample.pr.trigger': 'Event · new PR',
'tasks.sample.pr.pattern': 'Routine · notification',
'tasks.sample.pr.runtime': 'Local · quick run',
'tasks.sample.pr.output': 'Message · Slack DM',
'tasks.sample.pr.artifactMeta': 'Last fired 23m ago',
'tasks.sample.pr.body1': 'Opened PR #184 for review',
'tasks.sample.pr.body2': 'Matched reviewers: design-platform, web-runtime',
'tasks.sample.pr.body3': 'Delivery: Slack DM sent',
'tasks.sample.meeting.title': 'Pre-meeting prep',
'tasks.sample.meeting.status': 'Tomorrow · 10:00 AM',
'tasks.sample.meeting.meta': 'One-shot · sends summary',
'tasks.sample.meeting.preview': 'meeting_brief.md · queued',
'tasks.sample.meeting.trigger': 'Schedule · one-shot',
'tasks.sample.meeting.pattern': 'Briefing prompt',
'tasks.sample.meeting.runtime': 'Remote · bounded',
'tasks.sample.meeting.output': 'Artifact + message',
'tasks.sample.meeting.artifactMeta': 'Queued for generation',
'tasks.sample.meeting.body1': '# Meeting brief',
'tasks.sample.meeting.body2': 'Agenda source: calendar event + linked docs',
'tasks.sample.meeting.body3': 'Output will include decisions, blockers, and questions.',
'tasks.sample.candidate.title': 'Candidate tracking',
'tasks.sample.candidate.status': 'Failed · needs attention',
'tasks.sample.candidate.meta': 'Auth expired',
'tasks.sample.candidate.preview': 'Reconnect Greenhouse to resume',
'tasks.sample.candidate.trigger': 'Schedule · daily',
'tasks.sample.candidate.pattern': 'Routine · applicant sync',
'tasks.sample.candidate.runtime': 'Remote · recurring',
'tasks.sample.candidate.output': 'Live artifact · table',
'tasks.sample.candidate.artifactMeta': 'Paused until auth is restored',
'tasks.sample.candidate.body1': '# Candidate pipeline',
'tasks.sample.candidate.body2': 'Last successful sync: 2d ago',
'tasks.sample.candidate.body3': 'Action required: reconnect source account.',
'routines.title': 'Automations',
'routines.subtitle': 'Scheduled automations that run unattended.',
'routines.newAutomation': 'New automation',
'routines.loading': 'Loading…',
'routines.empty': 'No automations yet.',
'routines.emptyHint': 'Click New automation to schedule an unattended agent run.',
'routines.runHistoryLoading': 'Loading runs…',
'routines.runHistoryEmpty': 'No runs yet.',
'routines.fieldName': 'Name',
'routines.fieldNamePlaceholder': 'Morning briefing',
'routines.fieldPrompt': 'Prompt',
'routines.fieldPromptPlaceholder':
'Pull yesterdays GitHub + Linear activity and summarize what changed.',
'routines.fieldSchedule': 'Schedule',
'routines.fieldMinute': 'Minute of every hour',
'routines.fieldTime': 'Time',
'routines.fieldTimezone': 'Timezone',
'routines.fieldsetProject': 'Project',
'routines.kind.hourly': 'Hourly',
'routines.kind.daily': 'Daily',
'routines.kind.weekdays': 'Weekdays',
'routines.kind.weekly': 'Weekly',
'routines.weekday.short.0': 'Sun',
'routines.weekday.short.1': 'Mon',
'routines.weekday.short.2': 'Tue',
'routines.weekday.short.3': 'Wed',
'routines.weekday.short.4': 'Thu',
'routines.weekday.short.5': 'Fri',
'routines.weekday.short.6': 'Sat',
'routines.weekday.long.0': 'Sunday',
'routines.weekday.long.1': 'Monday',
'routines.weekday.long.2': 'Tuesday',
'routines.weekday.long.3': 'Wednesday',
'routines.weekday.long.4': 'Thursday',
'routines.weekday.long.5': 'Friday',
'routines.weekday.long.6': 'Saturday',
'routines.timeAm': 'AM',
'routines.timePm': 'PM',
'routines.describe.hourly': 'Runs every hour at :{minute}',
'routines.describe.daily': 'Runs daily at {time} {tz}',
'routines.describe.weekdays': 'Runs MonFri at {time} {tz}',
'routines.describe.weekly': 'Runs every {day} at {time} {tz}',
'routines.modeCreate': 'Create a new project each run',
'routines.modeCreateHint': 'A fresh, isolated workspace per fire.',
'routines.modeReuse': 'Reuse an existing project',
'routines.modeReuseHint': 'Each run lives as a new conversation inside the project.',
'routines.pickProject': '— Pick a project —',
'routines.targetReuse': '→ {project}',
'routines.targetCreate': '→ new project each run',
'routines.tagPaused': 'paused',
'routines.metaNext': 'next: {when}',
'routines.metaLast': 'last:',
'routines.triggerManual': 'manual',
'routines.triggerScheduled': 'scheduled',
'routines.openProject': 'Open project',
'routines.openProjectTitle': 'Open the project this run wrote to',
'routines.runNow': 'Run now',
'routines.edit': 'Edit',
'routines.pause': 'Pause',
'routines.resume': 'Resume',
'routines.history': 'History',
'routines.hideHistory': 'Hide history',
'routines.delete': 'Delete',
'routines.deleteTitle': 'Delete this automation',
'routines.cancel': 'Cancel',
'routines.save': 'Save',
'routines.saving': 'Saving…',
'routines.create': 'Create',
'routines.creating': 'Creating…',
'routines.status.queued': 'queued',
'routines.status.running': 'running',
'routines.status.succeeded': 'succeeded',
'routines.status.failed': 'failed',
'routines.status.canceled': 'canceled',
'routines.confirmDelete':
'Delete this automation? Past runs and their projects are kept.',
'routines.errorPickProject':
'Pick a project to reuse, or switch to “Create new each run”',
'routines.errorAgentEmptyOutput':
'Agent completed without producing any output. The model or provider may have returned an empty response — check the agent logs for upstream errors.',
'entry.helpAria': 'Help',
'entry.helpMenuAria': 'Help menu',
'entry.helpGetHelp': 'Get help on GitHub',
'entry.helpSubmitFeature': 'Submit a feature request',
'entry.helpWhatsNew': 'What\u2019s new',
'entry.helpDownloadDesktop': 'Download desktop app',
'entry.githubStarLabel': 'Star',
'entry.githubStarTitle': 'Click to star us on GitHub',
'entry.githubStarAria': 'Star Open Design on GitHub',
'entry.tabImageTemplates': 'Image templates',
'entry.tabVideoTemplates': 'Video templates',
'promptTemplates.searchPlaceholder': 'Search templates…',
'promptTemplates.countLabel': '{n} results',
'promptTemplates.emptyImage': 'No image prompt templates installed yet.',
'promptTemplates.emptyVideo': 'No video prompt templates installed yet.',
'promptTemplates.emptyNoMatch': 'No templates match your search.',
'promptTemplates.attributionFooter': 'Adapted from public prompt libraries. Each card links back to the original author.',
'promptTemplates.openPreviewTitle': 'Open prompt and preview',
'promptTemplates.sourcePrefix': 'Source:',
'promptTemplates.fetchError': 'Could not load this template body.',
'promptTemplates.promptLabel': 'Prompt body',
'promptTemplates.copyPrompt': 'Copy prompt',
'promptTemplates.copyDone': 'Copied!',
'promptTemplates.modelHint': 'Suggested model: {model}',
'promptTemplates.openSource': 'View original',
'promptTemplates.openFullscreen': 'Open fullscreen preview',
'promptTemplates.closeFullscreen': 'Close fullscreen preview',
'promptTemplates.allSources': 'All sources',
'promptTemplates.sourceFilterAria': 'Filter by source',
'promptTemplates.retry': 'Retry',
'connectors.title': 'Connectors',
'connectors.subtitle': 'Local and future data sources that can power live artifacts.',
'connectors.account': 'Account',
'connectors.noAccount': 'Not connected',
'connectors.tools': 'Tools',
'connectors.connect': 'Connect',
'connectors.disconnect': 'Disconnect',
'connectors.authorizationPending': 'Waiting for authorization...',
'connectors.authorizationPendingHint': 'Complete authorization in the opened window.',
'connectors.cancelAuthorization': 'Cancel',
'connectors.configure': 'Configure',
'connectors.unavailable': 'Unavailable',
'connectors.phaseStubTitle': 'Connector APIs arrive in Phase 3; this is a preview surface.',
'connectors.statusAvailable': 'Available',
'connectors.statusConnected': 'Connected',
'connectors.statusError': 'Error',
'connectors.statusDisabled': 'Disabled',
'connectors.gateTitle': 'Add your Composio API key to continue',
'connectors.gateBody': 'Paste your key above and click Save key to load available integrations.',
'connectors.aboutLabel': 'About',
'connectors.detailsLabel': 'Details',
'connectors.statusLabel': 'Status',
'connectors.category.aiAgents': 'AI agents',
'connectors.category.aiInfrastructure': 'AI infrastructure',
'connectors.category.accounting': 'Accounting',
'connectors.category.admin': 'Admin',
'connectors.category.advertising': 'Advertising',
'connectors.category.analytics': 'Analytics',
'connectors.category.automation': 'Automation',
'connectors.category.cms': 'CMS',
'connectors.category.crm': 'CRM',
'connectors.category.calendar': 'Calendar',
'connectors.category.commerce': 'Commerce',
'connectors.category.communication': 'Communication',
'connectors.category.contacts': 'Contacts',
'connectors.category.dataPlatform': 'Data platform',
'connectors.category.database': 'Database',
'connectors.category.design': 'Design',
'connectors.category.developer': 'Developer',
'connectors.category.documentation': 'Documentation',
'connectors.category.erp': 'ERP',
'connectors.category.education': 'Education',
'connectors.category.email': 'Email',
'connectors.category.events': 'Events',
'connectors.category.fieldService': 'Field service',
'connectors.category.finance': 'Finance',
'connectors.category.fitness': 'Fitness',
'connectors.category.forms': 'Forms',
'connectors.category.gaming': 'Gaming',
'connectors.category.hr': 'HR',
'connectors.category.hospitality': 'Hospitality',
'connectors.category.itsm': 'ITSM',
'connectors.category.integration': 'Integration',
'connectors.category.localization': 'Localization',
'connectors.category.logistics': 'Logistics',
'connectors.category.maps': 'Maps',
'connectors.category.marketing': 'Marketing',
'connectors.category.media': 'Media',
'connectors.category.meetings': 'Meetings',
'connectors.category.nonprofit': 'Nonprofit',
'connectors.category.observability': 'Observability',
'connectors.category.payments': 'Payments',
'connectors.category.personal': 'Personal',
'connectors.category.presentations': 'Presentations',
'connectors.category.procurement': 'Procurement',
'connectors.category.product': 'Product',
'connectors.category.productivity': 'Productivity',
'connectors.category.projectManagement': 'Project management',
'connectors.category.recruiting': 'Recruiting',
'connectors.category.research': 'Research',
'connectors.category.salesIntelligence': 'Sales intelligence',
'connectors.category.scheduling': 'Scheduling',
'connectors.category.search': 'Search',
'connectors.category.security': 'Security',
'connectors.category.signing': 'Signing',
'connectors.category.social': 'Social',
'connectors.category.spreadsheets': 'Spreadsheets',
'connectors.category.storage': 'Storage',
'connectors.category.support': 'Support',
'connectors.category.surveys': 'Surveys',
'connectors.category.tasks': 'Tasks',
'connectors.category.timeTracking': 'Time tracking',
'connectors.category.video': 'Video',
'connectors.category.whiteboard': 'Whiteboard',
'connectors.categoryLabel': 'Category',
'connectors.providerLabel': 'Provider',
'connectors.toolsSection': 'Tools',
'connectors.toolsLoading': 'Loading tools…',
'connectors.noToolsAvailable': 'No tools available yet. Connect to discover what this integration exposes.',
'connectors.toolDetailsUnavailable': 'Tool details are unavailable, but this connector reports {n} tools.',
'connectors.loadMoreTools': 'Load more tools',
'connectors.openDetailsAria': 'Open {name} details',
'connectors.toolsBadgeNone': 'No tools',
'connectors.toolsBadgeOne': '{n} tool',
'connectors.toolsBadgeMany': '{n} tools',
'connectors.searchPlaceholder': 'Search connectors…',
'connectors.searchAriaLabel': 'Search connectors by name, provider, or tool',
'connectors.searchClear': 'Clear search',
'connectors.emptyNoMatchTitle': 'No connectors match “{query}”',
'connectors.emptyNoMatchBody': 'Try a different keyword, or clear the search to browse the full catalog.',
'connectors.emptyNoMatchAction': 'Clear search',
'newproj.tabPrototype': 'Prototype',
'newproj.tabLiveArtifact': 'Live artifact',
'newproj.tabDeck': 'Slide deck',
'newproj.tabTemplate': 'From template',
'newproj.tabMedia': 'Media',
'newproj.tabOther': 'Other',
'newproj.titlePrototype': 'New prototype',
'newproj.titleLiveArtifact': 'New live artifact',
'newproj.titleDeck': 'New slide deck',
'newproj.titleTemplate': 'Start from a template',
'newproj.titleImage': 'New image',
'newproj.titleVideo': 'New video',
'newproj.titleAudio': 'New audio',
'newproj.titleMedia': 'New media',
'newproj.titleOther': 'New project',
'newproj.namePlaceholder': 'Project name',
'newproj.fidelityLabel': 'Fidelity',
'newproj.fidelityWireframe': 'Wireframe',
'newproj.fidelityHigh': 'High fidelity',
'newproj.toggleSpeakerNotes': 'Use speaker notes',
'newproj.toggleSpeakerNotesHint': 'Less text on slides — keep talking points in notes.',
'newproj.toggleAnimations': 'Include animations',
'newproj.toggleAnimationsHint':
'Add motion (entrance, hover, transitions) on top of the template.',
'newproj.targetPlatformsLabel': 'Target platforms',
'newproj.targetPlatformsHint':
'Pick one or more. Responsive web covers browser breakpoints only; add iOS, Android, tablet app, or desktop app for native cross-platform variants.',
'newproj.platform.responsive.label': 'Responsive web',
'newproj.platform.responsive.hint':
'One web experience adapted for desktop, tablet, and mobile browsers',
'newproj.platform.webDesktop.label': 'Desktop web',
'newproj.platform.webDesktop.hint': 'Browser-first product or landing page',
'newproj.platform.mobileIos.label': 'iOS app',
'newproj.platform.mobileIos.hint': 'iPhone frames and iOS interaction rules',
'newproj.platform.mobileAndroid.label': 'Android app',
'newproj.platform.mobileAndroid.hint': 'Pixel frames and Material interaction rules',
'newproj.platform.tablet.label': 'Tablet app',
'newproj.platform.tablet.hint': 'Native-style tablet experience with split views',
'newproj.platform.desktopApp.label': 'Desktop app',
'newproj.platform.desktopApp.hint': 'macOS/Windows app chrome',
'newproj.surfaceOptionsLabel': 'Companion surfaces',
'newproj.includeLandingPage': 'Include landing page',
'newproj.includeLandingPageHint':
'Add a responsive marketing page for ads, waitlists, launch campaigns, app downloads, or product explanation.',
'newproj.includeOsWidgets': 'Include OS widgets',
'newproj.includeOsWidgetsHint':
'Add platform-native home screen, lock screen, or quick-access widgets for mobile/tablet apps.',
'newproj.includeOsWidgetsDisabledHint':
'Available when iOS, Android, or tablet app is selected as a target platform.',
'newproj.templateLabel': 'Template',
'newproj.noTemplatesTitle': 'No templates yet',
'newproj.noTemplatesBody':
'Open any project, then use the Share menu inside the file viewer to convert it into a template. Templates show up here.',
'newproj.savedTemplate': 'Saved template',
'newproj.fileSingular': 'file',
'newproj.filePlural': 'files',
'newproj.create': 'Create',
'newproj.locationLabel': 'Save to',
'newproj.locationDefault': 'Open Design projects',
'newproj.locationExternalBase': 'External base',
'newproj.createLiveArtifact': 'Create live artifact',
'newproj.createFromTemplate': 'Create from template',
'newproj.createDisabledTitle':
'Save a project as a template first (Share menu inside any project).',
'newproj.importClaudeZip': 'Import Claude Design ZIP',
'newproj.importClaudeZipTitle': 'Import a Claude Design .zip export',
'newproj.importingClaudeZip': 'Importing…',
'newproj.privacyFooter': 'Only you can see your project by default.',
'newproj.designSystem': 'Design system',
'newproj.dsNoneFreeform': 'None — freeform',
'newproj.dsNoneSubtitleEmpty': 'No system tokens, choose your own palette',
'newproj.dsNoneSubtitleSelected': 'Skip system tokens. The agent picks its own palette.',
'newproj.dsCategoryFallback': 'Design system',
'newproj.dsSearch': 'Search design systems…',
'newproj.dsModeAria': 'Selection mode',
'newproj.dsModeSingle': 'Single',
'newproj.dsModeMulti': 'Multi',
'newproj.dsNoneTitle': 'None — freeform',
'newproj.dsNoneSub': 'Skip system tokens. The agent picks its own palette.',
'newproj.dsEmpty': 'No design systems match “{query}”.',
'newproj.dsFootSingular': 'is inspiration only.',
'newproj.dsFootPlural': 'are inspiration only.',
'newproj.dsFootClear': 'Clear',
'newproj.dsBadgeDefault': 'DEFAULT',
'newproj.dsPrimaryFallback': 'Primary',
'newproj.surfaceImage': 'Image',
'newproj.surfaceVideo': 'Video',
'newproj.surfaceAudio': 'Audio',
'newproj.modelLabel': 'Model',
'newproj.modelSearch': 'Search models…',
'newproj.modelEmpty': 'No models match this search.',
'newproj.modelRecommended': 'Recommended',
'newproj.modelMissingTitle': 'Pick a model',
'newproj.modelMissingSub': 'Choose which model handles this surface.',
'newproj.aspectLabel': 'Aspect',
'newproj.videoLengthLabel': 'Length',
'newproj.videoLengthSeconds': '{n}s',
'newproj.audioKindLabel': 'Audio type',
'newproj.audioKindMusic': 'Music',
'newproj.audioKindSpeech': 'Speech / TTS',
'newproj.audioKindSfx': 'SFX',
'newproj.audioDurationLabel': 'Duration',
'newproj.audioDurationSeconds': '{n}s',
'newproj.voiceLabel': 'Voice',
'newproj.voicePlaceholder': 'Provider voice id, optional',
'newproj.connectorsLabel': 'Connectors',
'newproj.connectorsHint': 'Data sources this artifact can pull from.',
'newproj.connectorsEmptyTitle': 'No connectors configured',
'newproj.connectorsEmptyBody':
'Connect a data source so your live artifact can fetch real numbers instead of placeholders.',
'newproj.connectorsEmptyCta': 'Set up connectors →',
'newproj.connectorsLoading': 'Loading connectors…',
'newproj.connectorsCountOne': '{n} connected',
'newproj.connectorsCountMany': '{n} connected',
'newproj.connectorsManage': 'Manage',
'newproj.promptTemplateLabel': 'Reference template',
'newproj.promptTemplateNoneTitle': 'None — write your own',
'newproj.promptTemplateNoneSub': 'Skip the gallery, describe your own brief',
'newproj.promptTemplateRefSub': 'Reference template',
'newproj.promptTemplateSearch': 'Search templates…',
'newproj.promptTemplateEmpty': 'No templates installed for this surface yet.',
'newproj.promptTemplateBodyLabel': 'Prompt (you can tune it)',
'newproj.promptTemplateOptimizeHint':
'Edit anything — your changes carry into the agent\'s brief.',
'newproj.promptTemplateBodyEmpty':
'Empty body — the agent will get no template reference.',
'newproj.deleteTemplateTitle': 'Delete template',
'newproj.deleteTemplateConfirm': 'Delete "{name}"? This cannot be undone.',
'newproj.deleteTemplateConfirmCta': 'Delete template',
'newproj.deleteTemplateError':
'Could not delete this template. Please try again.',
'designs.subRecent': 'Recent',
'designs.subYours': 'Your designs',
'designs.filterAria': 'Filter projects',
'designs.searchPlaceholder': 'Search…',
'designs.emptyNoProjects': 'No projects yet.',
'designs.emptyNoMatch': 'No projects match your search.',
'designs.deleteTitle': 'Delete project',
'designs.deleteConfirm': 'Delete "{name}"?',
'designs.cardFreeform': 'freeform',
'designs.badgeLive': 'Live',
'designs.liveArtifactBadgesAria': 'Live artifact badges',
'designs.liveCount': '{n} live',
'designs.statusLive': 'Live artifact',
'designs.statusArchived': 'Archived',
'designs.statusError': 'Error',
'designs.statusRefreshing': 'Refreshing…',
'designs.statusRefreshFailed': 'Refresh failed',
'designs.statusRefreshed': 'Refreshed',
'designs.status.notStarted': 'Not started',
'designs.status.queued': 'Queued',
'designs.status.running': 'Running',
'designs.status.awaitingInput': 'Needs input',
'designs.status.succeeded': 'Completed',
'designs.status.published': 'Published',
'designs.status.failed': 'Failed',
'designs.status.canceled': 'Canceled',
'designs.viewToggleAria': 'View mode',
'designs.viewGrid': 'Grid view',
'designs.viewKanban': 'Board view',
'designs.kanbanEmptyColumn': 'No designs',
'designs.deleteAria': 'Delete project {name}',
'designs.menuMore': 'More actions',
'designs.menuRename': 'Rename',
'designs.menuDelete': 'Delete',
'designs.renamePrompt': 'New name for "{name}"',
'designs.selectMode': 'Select',
'designs.cancelSelect': 'Cancel',
'designs.deleteSelected': 'Delete selected',
'designs.selectedCount': '{n} selected',
'designs.deleteSelectedConfirm': 'Delete {n} project(s)?',
'designs.deleteSelectedSuccess': '{n} project(s) deleted successfully.',
'designs.deleteSelectedPartial': 'Deleted {deleted} project(s); {failed} failed.',
'designs.tagPrototype': 'Prototype',
'designs.tagLiveArtifact': 'Live Artifact',
'designs.tagSlide': 'Slide',
'designs.tagMedia': 'Media',
'designs.renameTitle': 'Rename project',
'designs.renameSave': 'OK',
'designs.renameCancel': 'Cancel',
'examples.typeLabel': 'Type',
'examples.surfaceLabel': 'Surface',
'examples.surfaceWeb': 'Web',
'examples.surfaceImage': 'Image',
'examples.surfaceVideo': 'Video',
'examples.surfaceAudio': 'Audio',
'examples.scenarioLabel': 'Scenario',
'examples.modeAll': 'All',
'examples.modePrototypeDesktop': 'Prototypes · Desktop',
'examples.modePrototypeMobile': 'Prototypes · Mobile',
'examples.modeDeck': 'Slides',
'examples.modeDocument': 'Docs & templates',
'examples.modeOrbit': 'Orbit',
'examples.modeLive': 'Live',
'examples.scenarioGeneral': 'General',
'examples.scenarioEngineering': 'Engineering',
'examples.scenarioProduct': 'Product',
'examples.scenarioDesign': 'Design',
'examples.scenarioMarketing': 'Marketing',
'examples.scenarioSales': 'Sales',
'examples.scenarioFinance': 'Finance',
'examples.scenarioHr': 'HR',
'examples.scenarioOperations': 'Operations',
'examples.scenarioSupport': 'Support',
'examples.scenarioLegal': 'Legal',
'examples.scenarioEducation': 'Education',
'examples.scenarioPersonal': 'Personal',
'examples.searchPlaceholder': 'Search examples…',
'examples.searchAria': 'Search examples by name',
'examples.emptyNoSkills': 'No skills available. Is the daemon running?',
'examples.emptyNoMatch': 'No examples match these filters.',
'examples.openPreview': '⤢ Open preview',
'examples.loadingPreview': 'Loading preview…',
'examples.hoverPreview': 'Hover to preview',
'examples.usePrompt': 'Use this prompt',
'examples.previewModalTitle': 'Open full preview (modal)',
'examples.shareTitle': 'Share this example',
'examples.shareLoadFirst': 'Hover to load preview first',
'examples.unavailablePlaceholder': 'No shipped {kind} preview — open to learn more',
'examples.shareUnavailable': 'No shipped {kind} preview to share',
'examples.shareMenu': 'Share ▾',
'examples.exportPdfAllSlides': 'Export as PDF (all slides)',
'examples.exportPptxLocked': 'Export as PPTX… (open template first)',
'examples.tagSlideDeck': 'Slide deck',
'examples.tagTemplate': 'Template',
'examples.tagDesignSystem': 'Design system',
'examples.tagMobilePrototype': 'Mobile prototype',
'examples.tagDesktopPrototype': 'Desktop prototype',
'examples.tagImage': 'Image',
'examples.tagVideo': 'Video',
'examples.tagAudio': 'Audio',
'examples.previewLabel': 'Preview',
'ds.surfaceLabel': 'Surface',
'ds.surfaceWeb': 'Web',
'ds.surfaceImage': 'Image',
'ds.surfaceVideo': 'Video',
'ds.surfaceAudio': 'Audio',
'ds.searchPlaceholder': 'Search design systems…',
'ds.emptyNoMatch': 'No design systems match your search.',
'ds.badgeDefault': 'DEFAULT',
'ds.preview': 'Preview',
'ds.previewTitle': 'Preview design system',
'ds.categoryAll': 'All',
'ds.categoryUncategorized': 'Uncategorized',
'ds.showcase': 'Showcase',
'ds.tokens': 'Tokens',
'ds.specToggle': 'DESIGN.md',
'ds.specLoading': 'Loading DESIGN.md…',
'avatar.title': 'Account & settings',
'avatar.localCli': 'Local CLI',
'avatar.anthropicApi': 'Anthropic API',
'avatar.useLocal': 'Use Local CLI',
'avatar.useApi': 'Use API · BYOK',
'avatar.codeAgent': 'Code agent',
'avatar.rescan': 'Rescan PATH',
'avatar.settings': 'Settings',
'avatar.backToProjects': 'Back to projects',
'avatar.metaActive': 'active',
'avatar.metaOffline': 'offline',
'avatar.metaSelected': 'selected',
'avatar.noAgentSelected': 'no agent selected',
'avatar.modelSection': 'Model',
'avatar.modelLabel': 'Model',
'avatar.reasoningLabel': 'Reasoning',
'avatar.customSuffix': '(custom)',
'inlineSwitcher.chipTitle': 'Switch CLI / model',
'inlineSwitcher.chipCli': 'Local CLI',
'inlineSwitcher.chipByok': 'BYOK',
'inlineSwitcher.modelDefault': 'default',
'inlineSwitcher.noAgent': 'no agent',
'inlineSwitcher.modeLabel': 'Mode',
'inlineSwitcher.agentLabel': 'Agent',
'inlineSwitcher.providerLabel': 'Provider',
'inlineSwitcher.modelLabel': 'Model',
'inlineSwitcher.useCli': 'Use Local CLI',
'inlineSwitcher.useByok': 'Use BYOK API key',
'inlineSwitcher.daemonOffline': 'Daemon offline — open settings',
'inlineSwitcher.noAgentsDetected': 'No CLI detected on PATH',
'inlineSwitcher.openSettingsForModel': 'Configure provider in Settings',
'inlineSwitcher.missingApiKey': 'API key not set — open Settings to add it.',
'inlineSwitcher.openFullSettings': 'Open execution settings',
'inlineSwitcher.customSuffix': '(custom)',
'project.backToProjects': 'Back to projects',
'project.metaFreeform': 'freeform',
'project.customInstructions': 'Project instructions',
'project.customInstructionsPlaceholder': 'Instructions for this project (injected on every message)…',
'project.resizeChatPanel': 'Resize chat panel',
'project.instructionsActive': 'Active — included in every message',
'chat.tabChat': 'Chat',
'chat.tabComments': 'Comments',
'chat.commentsSoon': 'Comments — coming soon',
'chat.comments.attached': 'Attached to chat',
'chat.comments.emptyAttached': 'No comments attached.',
'chat.comments.saved': 'Saved comments',
'chat.comments.emptySaved': 'No saved comments.',
'chat.comments.add': 'Add',
'chat.comments.addAll': 'Add all',
'chat.comments.remove': 'Remove',
'chat.comments.placeholder': 'Comment on this element…',
'chat.comments.addSend': 'Add & send',
'chat.comments.updateSend': 'Update & send',
'chat.comments.removeAttachment': 'Remove comment attachment',
'chat.comments.removeAttachmentAria': 'Remove comment attachment for {name}',
'chat.comments.comment': 'Comment',
'chat.comments.sendToChat': 'Send to chat',
'chat.comments.sending': 'Sending…',
'chat.comments.edit': 'Edit',
'chat.comments.select': 'Select',
'chat.comments.selectAll': 'Select all',
'chat.comments.deselect': 'Deselect',
'chat.comments.nSelected': '{n} selected',
'chat.comments.pin': 'Pin',
'chat.comments.addNote': 'Add note',
'chat.comments.savedToast': 'Comment saved',
'chat.comments.pinSavedToast': 'Pin saved',
'chat.comments.pinAtCoords': 'at {x}, {y}',
'chat.comments.capturedItems': '{n} captured items',
'chat.comments.clear': 'Clear',
'chat.comments.targetImage': 'Image',
'chat.comments.targetControl': 'Control',
'chat.comments.targetLink': 'Link',
'chat.comments.targetText': 'Text',
'chat.comments.targetSection': 'Section',
'chat.comments.targetPage': 'Page',
'chat.comments.targetArea': 'Area',
'chat.annotationNotePlaceholder': 'Add a note for this mark',
'chat.annotationQueue': 'Queue',
'chat.annotationQueueing': 'Queueing...',
'chat.annotationSending': 'Sending...',
'chat.annotationSendDisabledReason': 'A task is currently running',
'chat.annotationPreviewMissing': 'Could not capture the preview. Please try again.',
'chat.annotationPreviewMissingInk': 'Could not capture the preview. Try again to avoid sending only ink.',
'chat.annotationTimeout': 'Annotation send timed out. Please try again.',
'chat.annotationFailed': 'Annotation send failed. Please try again.',
'chat.annotationProjectCreateFailed': 'Could not create a project, so the annotation was not sent.',
'chat.annotationUploadFailed': 'Attachment upload failed. Please try again.',
'chat.conversationsTitle': 'Conversations',
'chat.conversationsAria': 'Conversation history',
'chat.newConversation': 'New conversation',
'chat.newConversationsTitle': 'New conversation',
'chat.conversationsHeading': 'Conversations',
'chat.new': 'New',
'chat.emptyConversations': 'No conversations yet.',
'chat.deleteConversation': 'Delete conversation',
'chat.renameConversationLabel': 'Rename "{title}"',
'chat.deleteConversationConfirm':
'Delete "{title}"? This removes its messages.',
'chat.untitledConversation': 'Untitled conversation',
'chat.startTitle': 'Start a conversation',
'chat.startHint': "Describe what you want to generate, or start from one of these examples:",
'chat.fillInputTitle': 'Click to fill the input',
'chat.jumpToLatest': 'Jump to latest',
'chat.scrollToLatest': 'Scroll to latest',
'chat.you': 'You',
'chat.openFile': 'Open {name}',
'chat.copyPrompt': 'Copy prompt',
'chat.copyDone': 'Copied!',
'chat.inspect.noEditableTargets': 'No editable text or style targets found.',
'chat.inspect.noCommentTargets': 'No commentable text or visual targets found.',
'chat.inspect.editHint': 'Select a text or style target in the preview to edit it.',
'chat.inspect.commentHint': 'Select text or an area in the preview to comment on it.',
'chat.composerPlaceholder': "Describe what you want to generate…",
'chat.composerHint': "⌘/Ctrl + Enter to send · include goals, content, style, and format",
'chat.cliSettingsTitle': 'CLI & model settings',
'chat.cliSettingsAria': 'Open CLI and model settings',
'chat.attachTitle': 'Attach files (or paste / drop)',
'chat.attachAria': 'Attach files',
'chat.importTitle': 'Import sources (coming soon)',
'chat.importLabel': 'Import',
'chat.importComingSoon': 'Coming soon',
'chat.importSoon': 'Soon',
'chat.importFig': 'Upload .fig file',
'chat.importGitHub': 'Connect GitHub',
'chat.importWeb': 'Grab web element',
'chat.importFolder': 'Link code folder',
'chat.importSkills': 'Skills and design systems',
'chat.importProject': 'Reference another project',
'chat.mentionTabsAria': 'Mention surfaces',
'chat.mentionTabAll': 'All',
'chat.mentionTabPlugins': 'Plugins',
'chat.mentionTabSkills': 'Skills',
'chat.mentionTabMcp': 'MCP',
'chat.mentionTabConnectors': 'Connectors',
'chat.mentionTabFiles': 'Design files',
'chat.mentionNoResults': 'No results for “{query}”.',
'chat.mentionSearchPrompt': 'Search plugins, skills, MCP servers, connectors, and Design Files.',
'chat.mentionSectionPlugins': 'Plugins',
'chat.mentionSectionSkills': 'Skills',
'chat.mentionSectionMcp': 'MCP',
'chat.mentionSectionConnectors': 'Connectors',
'chat.mentionSectionFiles': 'Design files',
'chat.mentionActiveSkill': 'Active',
'chat.mentionUseMcpTitle': 'Use {name}',
'chat.mentionUseConnectorTitle': 'Use {name}',
'chat.mentionPluginOfficial': 'Official',
'chat.mentionPluginMine': 'My plugin',
'chat.linkedFolderRemoveAria': 'Remove linked folder {path}',
'chat.linkedFolderNotFound': 'Folder does not exist',
'chat.linkedFolderAlready': 'This folder is already linked',
'chat.linkedFolderPickError': 'Could not open folder picker',
'chat.queuedHeader': 'Queued',
'chat.queuedToSend': 'to Send',
'chat.queuedEditQueuedTaskAria': 'Edit queued task',
'chat.queuedSave': 'Save',
'chat.queuedCancel': 'Cancel',
'chat.queuedEdit': 'Edit',
'chat.queuedMore': 'more queued',
'chat.queuedFollowUpFallback': 'Queued follow-up',
'chat.send': 'Send',
'chat.stop': 'Stop',
'chat.removeAria': 'Remove {name}',
'chat.example1Title': 'Editorial pitch deck',
'chat.example1Tag': 'Magazine',
'chat.example1Prompt':
'A 10-slide editorial pitch deck for a design studio raising a seed round — Swiss-grid layout, oversized serif headlines with bold drop caps, monospace section numbers, generous negative space, and full-bleed photo slides interleaved with text-heavy ones. Cover, vision, market, product, traction, team, ask, contact.',
'chat.example2Title': 'SaaS analytics dashboard',
'chat.example2Tag': 'Data',
'chat.example2Prompt':
'A dense analytics dashboard for a developer-tools SaaS — KPI strip with week-over-week deltas, two stacked line charts (MRR and active workspaces), a world heatmap of usage, a cohort retention grid, a top-customers leaderboard, and a real-time event feed. Dark theme, tabular monospace numerals, sparkline accents.',
'chat.example3Title': 'Annual report long-scroll',
'chat.example3Tag': 'Editorial',
'chat.example3Prompt':
'An interactive annual report for a climate non-profit — long-scroll editorial layout mixing big pull-quote blocks, data visualizations (stacked bars, animated counters, a choropleth map of project sites), photography breakers, donor wall, and a final call-to-action. Modern serif body, sans-serif chart labels, earthy paper palette.',
'preview.shareMenu': 'Share',
'preview.exportMenu': 'Export',
'preview.shareTemplateBadge': 'Template',
'preview.shareToX': 'X / Twitter',
'preview.shareToReddit': 'Reddit',
'preview.shareToFacebook': 'Facebook',
'preview.shareToLinkedIn': 'LinkedIn',
'preview.shareToInstagram': 'Instagram',
'preview.shareToXiaohongshu': '小红书',
'preview.copyTemplateLink': 'Copy template link',
'preview.copyShareText': 'Copy share text',
'preview.shareSocialGroup': 'Share to social',
'preview.shareCopyGroup': 'Copy',
'preview.shareExportGroup': 'Export files',
'preview.shareCopied': 'Copied',
'preview.shareCopyFailed': 'Copy failed',
'preview.shareTextDefault': 'Open Design template: {title}',
'preview.openInNewTab': 'Open in new tab',
'preview.exit': '⤓ Exit',
'preview.fullscreen': '⤢ Fullscreen',
'preview.closeTitle': 'Close (Esc)',
'preview.loading': 'Loading {label}…',
'preview.errorTitle': 'Couldn\'t load this example.',
'preview.errorBody': 'The example HTML failed to fetch. Make sure Open Design is running and try again.',
'preview.retry': 'Retry',
'preview.unavailableTitle': 'No shipped preview for {noun}.',
'preview.unavailableBody': 'Run the prompt in chat to generate {kind} output.',
'preview.nounSkill': 'this skill',
'preview.nounPlugin': 'this plugin',
'preview.nounTemplate': 'this template',
'preview.showSidebar': 'Show {label}',
'preview.hideSidebar': 'Hide {label}',
'misc.savedTemplate': 'Saved template',
'misc.primary': 'Primary',
'misc.designSystem': 'Design system',
'workspace.designFiles': 'Design Files',
'workspace.focusMode': 'Focus workspace',
'workspace.showChat': 'Show chat',
'workspace.closeTab': 'Close tab',
'workspace.deleteFileConfirm': 'Delete "{name}" from the project folder?',
'workspace.deleteSelectedFilesConfirm': 'Delete {n} selected file(s) from the project folder?',
'workspace.deleteSelectedFilesPartial': 'Failed to delete {n} file(s).',
'workspace.openFromDesignFiles': 'Open a file from',
'workspace.designFilesLink': 'Design Files',
'workspace.loadingSketch': 'Loading sketch…',
'generationPreview.title': 'Generating…',
'generationPreview.failedTitle': 'Generation failed',
'generationPreview.failedFallback': 'Something went wrong. Please try again.',
'generationPreview.footnote': 'Usually takes 25 minutes',
'generationPreview.stepUnderstand': 'Understanding requirements',
'generationPreview.stepGenerate': 'Generating page',
'generationPreview.stepPrepare': 'Preparing preview',
'generationPreview.elapsed': '{elapsed} elapsed',
'generationPreview.estimate': 'Usually 25 min',
'generationPreview.progressAria': 'Generation progress: {percent}%',
'generationPreview.retry': 'Retry',
'generationPreview.awaitingTitle': 'Waiting for your input',
'generationPreview.awaitingLead': 'Answer a few quick questions in the chat to continue.',
'generationPreview.stoppedTitle': 'Generation paused',
'generationPreview.stoppedLead': 'Resume the remaining steps from the chat on the left.',
'designFiles.title': 'Design Files',
'designFiles.upload': 'Upload files',
'designFiles.pasteText': 'Paste as text file',
'designFiles.newSketch': 'New sketch',
'designFiles.empty': 'Creations will appear here',
'designFiles.refresh': 'Refresh',
'designFiles.delete': 'Delete',
'designFiles.searchPlaceholder': 'Search files…',
'designFiles.up': 'Up',
'designFiles.back': 'Back',
'designFiles.crumbs': 'project',
'designFiles.rowMenu': 'Row menu',
'designFiles.openInTab': 'Open in tab',
'designFiles.download': 'Download',
'designFiles.downloadSelected': 'Download {n} as ZIP',
'designFiles.deleteSelected': 'Delete {n}',
'designFiles.clearSelection': 'Clear',
'designFiles.selectPage': 'Select all on page',
'designFiles.selectAll': 'Select everything',
'designFiles.dropTitle': '⤓ Drop files here',
'designFiles.dropDesc':
'Images, docs, references, or folders — the agent will use them as context.',
'designFiles.upload.title': 'Upload files',
'designFiles.paste.title': 'Paste text as a file',
'designFiles.upload.label': 'Upload',
'designFiles.paste.label': 'Paste',
'designFiles.previewOpen': 'Open',
'designFiles.previewClose': 'Close preview',
'designFiles.modified': 'Modified {time} · {size}',
'designFiles.weeksAgo': '{n}w ago',
'designFiles.groupBy': 'Group by',
'designFiles.groupByKind': 'Kind',
'designFiles.groupByModified': 'Modified',
'designFiles.filterBy': 'Filter by kind',
'designFiles.filterClear': 'Clear',
'designFiles.filterCount': '{n} kinds',
'designFiles.expandGroup': 'Expand',
'designFiles.collapseGroup': 'Collapse',
'designFiles.sectionPages': 'Pages',
'designFiles.sectionScripts': 'Scripts',
'designFiles.sectionImages': 'Images',
'designFiles.sectionSketches': 'Sketches',
'designFiles.sectionLiveArtifacts': 'Live artifacts',
'designFiles.sectionOther': 'Other',
'designFiles.modifiedToday': 'Today',
'designFiles.modifiedYesterday': 'Yesterday',
'designFiles.modifiedPrevious7Days': 'Previous 7 days',
'designFiles.modifiedPrevious30Days': 'Previous 30 days',
'designFiles.modifiedOlder': 'Older',
'designFiles.showMore': 'Show +{n} more',
'designFiles.kindHtml': 'HTML page',
'designFiles.kindImage': 'Image',
'designFiles.kindSketch': 'Sketch',
'designFiles.kindText': 'Text',
'designFiles.kindCode': 'Script',
'designFiles.kindPdf': 'PDF',
'designFiles.kindDocument': 'Document',
'designFiles.kindPresentation': 'Presentation',
'designFiles.kindSpreadsheet': 'Spreadsheet',
'designFiles.kindLiveArtifact': 'Live artifact',
'designFiles.kindBinary': 'Binary',
'designFiles.kindFolder': 'Folder',
'designFiles.folderCount': '{n} files',
'designFiles.colName': 'Name',
'designFiles.colKind': 'Kind',
'designFiles.colModified': 'Modified',
'designFiles.perPage': 'Show',
'designFiles.all': 'All',
'designFiles.prev': 'Previous',
'designFiles.next': 'Next',
'designFiles.jumpToPage': 'Go to page',
'designFiles.pageInfo': '{start}{end} of {total}',
'quickSwitcher.placeholder': 'Open file…',
'quickSwitcher.empty': 'No files in this project',
'quickSwitcher.noMatches': 'No matches',
'quickSwitcher.navigate': 'navigate',
'quickSwitcher.open': 'open',
'quickSwitcher.close': 'close',
'pasteDialog.title': 'Paste text',
'pasteDialog.hint': 'Saved into the project folder. Pick any name.',
'pasteDialog.fileNameLabel': 'File name',
'pasteDialog.namePlaceholder': 'notes.txt',
'pasteDialog.contentLabel': 'Content',
'pasteDialog.contentPlaceholder': 'Paste anything…',
'pasteDialog.save': 'Save',
'pasteDialog.cancel': 'Cancel',
'sketch.save': 'Save sketch',
'sketch.cancel': 'Cancel',
'sketch.saving': 'Saving…',
'sketch.saved': 'Saved',
'sketch.tooltipDirty': 'Unsaved changes',
'sketch.tooltipClean': 'Saved',
'fileViewer.empty': 'Select a file to view.',
'fileViewer.loading': 'Loading…',
'fileViewer.exportPptx': 'Export as PPTX',
'fileViewer.openInNewTab': 'Open in new tab',
'fileViewer.copyPath': 'Copy path',
'fileViewer.copied': 'Copied!',
'fileViewer.share': 'Share',
'fileViewer.binaryMeta': 'Binary · {size}',
'fileViewer.binaryNote':
'Binary file ({size} bytes). Download or open from disk to inspect.',
'fileViewer.pdfMeta': 'PDF · {size}',
'fileViewer.documentMeta': 'Document',
'fileViewer.presentationMeta': 'Presentation',
'fileViewer.spreadsheetMeta': 'Spreadsheet',
'fileViewer.previewUnavailable': 'Preview unavailable. Download or open the file to inspect.',
'fileViewer.download': 'Download',
'fileViewer.open': 'Open',
'fileViewer.imageMeta': 'Image · {size}',
'fileViewer.reactMeta': 'React component · {size}',
'fileViewer.sketchMeta': 'Sketch · {size}',
'fileViewer.markdownStreamingMeta': 'Streaming preview…',
'fileViewer.markdownErrorMeta': 'Preview may be incomplete (generation error).',
'fileViewer.markdownStreamingStatus': 'Streaming… showing partial markdown.',
'fileViewer.markdownErrorStatus': 'Generation error. Showing last available content.',
'fileViewer.videoMeta': 'Video · {size}',
'fileViewer.audioMeta': 'Audio · {size}',
'fileViewer.reload': 'Reload',
'fileViewer.reloadDisk': 'Reload from disk',
'fileViewer.copy': 'Copy',
'fileViewer.copyTitle': 'Copy file contents',
'fileViewer.saveDisabled': 'Save (read-only viewer)',
'fileViewer.save': 'Save',
'fileViewer.preview': 'Preview',
'fileViewer.source': 'Code',
'fileViewer.tweaks': 'Tweaks',
'fileViewer.tweaksUnavailable': 'No tweaks panel in this artifact',
'fileViewer.jsxModuleTitle': 'No standalone preview',
'fileViewer.jsxModuleBody': 'This file is a component module loaded by another page.',
'fileViewer.jsxModuleCta': 'Open the page that renders it:',
'fileViewer.comment': 'Comment',
'fileViewer.edit': 'Edit',
'fileViewer.draw': 'Draw',
'fileViewer.mark': 'Mark',
'fileViewer.markTool': 'Mark tool',
'fileViewer.boxSelect': 'Box select',
'fileViewer.screenshot': 'Screenshot',
'manualEdit.layers': "Layers",
'manualEdit.editableCount': "{count} editable",
'manualEdit.hiddenBadge': "Hidden",
'manualEdit.title': "Manual editor",
'manualEdit.fallbackTitle': 'Edit',
'manualEdit.movePanel': 'Move edit panel',
'manualEdit.closePanel': 'Close edit panel',
'manualEdit.selectLayer': "Select a layer",
'manualEdit.empty': "Click an element in the preview or choose a layer.",
'manualEdit.noEditableLayers': "No editable layers found.",
'manualEdit.noClass': "no class",
'manualEdit.tabsAria': "Manual edit tabs",
'manualEdit.tabContent': "Content",
'manualEdit.tabStyle': "Style",
'manualEdit.tabAttributes': "Attributes",
'manualEdit.tabHtml': "Html",
'manualEdit.tabSource': "Source",
'manualEdit.attributesJson': "Attributes JSON",
'manualEdit.selectedHtml': "Selected element HTML",
'manualEdit.fullSource': "Full artifact source",
'manualEdit.applyContent': "Apply Content",
'manualEdit.applyStyle': "Apply Style",
'manualEdit.applyAttributes': "Apply Attributes",
'manualEdit.applyHtml': "Apply HTML",
'manualEdit.applySource': "Apply Source",
'manualEdit.invalidAttributes': "Invalid attributes JSON.",
'manualEdit.changes': "Changes",
'manualEdit.undo': "Undo",
'manualEdit.redo': "Redo",
'manualEdit.noChanges': "No manual edits yet.",
'manualEdit.imageUrl': "Image URL",
'manualEdit.altText': "Alt text",
'manualEdit.label': "Label",
'manualEdit.text': "Text",
'manualEdit.href': "Href",
'manualEdit.textColor': "Text color",
'manualEdit.background': "Background",
'manualEdit.fontSize': "Font size",
'manualEdit.weight': "Weight",
'manualEdit.align': "Align",
'manualEdit.padding': "Padding",
'manualEdit.margin': "Margin",
'manualEdit.radius': "Radius",
'manualEdit.border': "Border",
'manualEdit.width': "Width",
'manualEdit.minHeight': "Min height",
'manualEdit.deleteElement': "Delete element",
'manualEdit.deleteElementConfirm': "Delete selected element? This can be undone with Undo.",
'manualEdit.uploadImage': "Upload image",
'manualEdit.uploadingImage': "Uploading image…",
'manualEdit.uploadImageFailed': "Could not upload image.",
'manualEdit.focusSlides': "Focus slides",
'manualEdit.showPanels': "Show panels",
'fileViewer.zoomOut': 'Zoom out',
'fileViewer.zoomIn': 'Zoom in',
'fileViewer.resetZoom': 'Reset zoom',
'fileViewer.viewportAria': 'Preview viewport',
'fileViewer.viewportDesktop': 'Desktop',
'fileViewer.viewportDesktopTitle': 'Full-width desktop preview',
'fileViewer.viewportTablet': 'Tablet',
'fileViewer.viewportTabletTitle': 'Tablet preview at 820 × 1180 (modern portrait baseline)',
'fileViewer.viewportMobile': 'Mobile',
'fileViewer.viewportMobileTitle': 'Mobile preview at 390 × 844',
'fileViewer.reloadAria': 'Reload',
'fileViewer.previousSlide': 'Previous slide',
'fileViewer.nextSlide': 'Next slide',
'fileViewer.slideNavAria': 'Slide navigation',
'fileViewer.present': 'Present',
'fileViewer.presentInTab': 'In this tab',
'fileViewer.presentFullscreen': 'Fullscreen',
'fileViewer.presentNewTab': 'New tab',
'fileViewer.exitPresentation': 'Exit presentation',
'fileViewer.shareLabel': "Share",
'fileViewer.shareMenuShareLink': 'SHARE LINK',
'fileViewer.shareMenuPublishOnline': 'PUBLISH ONLINE',
'fileViewer.shareMenuDownload': 'DOWNLOAD',
'fileViewer.shareMenuPresentation': 'Presentation',
'fileViewer.shareMenuSourceFiles': 'Source files',
'fileViewer.shareMenuSave': 'SAVE',
'fileViewer.copyProviderLink': 'Copy {provider} link',
'fileViewer.copyCloudflareLink': 'Copy Cloudflare link',
'fileViewer.screenshotCopying': 'Copying screenshot...',
'fileViewer.screenshotCopied': 'Screenshot copied to clipboard',
'fileViewer.screenshotClipboardDenied': 'Browser blocked clipboard access',
'fileViewer.screenshotPreviewLoading': 'Preview is still loading. Try again in a moment.',
'fileViewer.screenshotCaptureFailed': 'Could not capture the preview. Please try again.',
'fileViewer.exportPdf': 'Export as PDF',
'fileViewer.exportPdfAllSlides': 'Export as PDF (all slides)',
'fileViewer.exportPptxBusy': 'Wait for the current turn to finish.',
'fileViewer.exportPptxHint':
'Send a request to the agent to convert this design to PPTX.',
'fileViewer.exportPptxNa': 'PPTX export is not available here.',
'fileViewer.exportZip': 'Download as .zip',
'fileViewer.exportHtml': 'Export as standalone HTML',
'fileViewer.exportMd': 'Export as Markdown',
'fileViewer.exportImage': 'Export as image',
'fileViewer.exportImageFailed': 'Image capture failed. Please try again or use your browser\'s screenshot tool.',
'fileViewer.exportImageModalSubtitle': 'Choose a format, then download the current preview as an image.',
'fileViewer.exportImageFormatLabel': 'Format',
'fileViewer.exportImageSaving': 'Saving image…',
'fileViewer.exportImageSaved': 'Image saved',
'fileViewer.exportImageDownloadStarted': 'Download started',
'fileViewer.exportImageDownloadDetails': '{filename} is in your browser downloads if no Save As dialog appeared.',
'fileViewer.exportJsx': 'Export as JSX',
'fileViewer.exportReactHtml': 'Export preview as HTML',
'fileViewer.exportStarted': 'Export started',
'fileViewer.saveAsTemplate': 'Save as template…',
'fileViewer.savingTemplate': 'Saving template…',
'fileViewer.savedTemplate': 'Saved as "{name}"',
'fileViewer.savedTemplateFail': 'Could not save template — try again.',
'fileViewer.templateNamePrompt': 'Template name',
'fileViewer.templateNameDefault': 'Untitled template',
'fileViewer.templateDescPrompt':
'Short description (optional — what makes this template useful?)',
'liveArtifact.refresh.button': 'Refresh',
'liveArtifact.refresh.buttonTitle': 'Refresh this live artifact',
'liveArtifact.refresh.loadingTitle': 'Loading live artifact…',
'liveArtifact.refresh.noSourceTitle': 'No refresh source is available yet.',
'liveArtifact.refresh.running': 'Refreshing…',
'liveArtifact.refresh.runningMessage': 'Refreshing data and preview. This can take a moment.',
'liveArtifact.refresh.runningAction': 'The previous preview stays visible until the refresh succeeds.',
'liveArtifact.refresh.successOne': 'Refresh complete. Data updated.',
'liveArtifact.refresh.successMany': 'Refresh complete. Data updated.',
'liveArtifact.refresh.successAction': 'The preview has been reloaded with the latest committed data.',
'liveArtifact.refresh.previousFailure': 'Previous refresh failed: {message}',
'liveArtifact.refresh.failureAction': 'Review Refresh history, fix the source or permission issue, then try again.',
'liveArtifact.refresh.networkFailure': 'Refresh request failed. Check your connection and try again.',
'liveArtifact.refresh.genericFailure': 'Refresh failed.',
'liveArtifact.refresh.statusNever': 'Not refreshable',
'liveArtifact.refresh.statusReady': 'Ready to refresh',
'liveArtifact.refresh.statusSucceeded': 'Up to date',
'liveArtifact.refresh.statusFailed': 'Refresh failed',
'liveArtifact.refresh.statusRunning': 'Refreshing',
'liveArtifact.refresh.statusRunningDescription':
'A refresh run is currently in progress.',
'liveArtifact.refresh.statusSucceededDescription':
'The last refresh finished successfully.',
'liveArtifact.refresh.statusFailedDescription':
'The last refresh attempt did not complete successfully.',
'liveArtifact.refresh.statusReadyDescription':
'Refreshable sources are configured but no run is in progress.',
'liveArtifact.refresh.statusNeverDescription':
'This live artifact has no refresh source yet.',
'liveArtifact.refresh.eventStarted': 'Started',
'liveArtifact.refresh.eventSucceeded': 'Succeeded',
'liveArtifact.refresh.eventFailed': 'Failed',
'liveArtifact.refresh.eventStartedDetail': 'Refresh started…',
'liveArtifact.refresh.sourcesUpdatedOne': '{n} source updated',
'liveArtifact.refresh.sourcesUpdatedMany': '{n} sources updated',
'liveArtifact.refresh.timelineEmpty':
'No refresh activity yet in this session. Trigger Refresh to record a timeline, or wait for automated runs.',
'liveArtifact.refresh.heroLastRefreshedLabel': 'Last refreshed',
'liveArtifact.refresh.heroLastRefreshedNever': 'Never',
'liveArtifact.refresh.justNow': 'just now',
'liveArtifact.refresh.factCreated': 'Created',
'liveArtifact.refresh.factLastUpdated': 'Last updated',
'liveArtifact.refresh.factUnknown': 'Unknown',
'liveArtifact.refresh.persistedTitle': 'Persisted refresh history',
'liveArtifact.refresh.persistedHint': 'Entries loaded from refreshes.jsonl',
'liveArtifact.refresh.persistedEmpty': 'No persisted refresh history yet.',
'liveArtifact.refresh.persistedStatusSucceeded': 'succeeded',
'liveArtifact.refresh.persistedStatusRunning': 'running',
'liveArtifact.refresh.persistedStatusFailed': 'failed',
'liveArtifact.refresh.persistedStatusCancelled': 'cancelled',
'liveArtifact.refresh.persistedStatusSkipped': 'skipped',
'liveArtifact.refresh.sessionTitle': 'Session activity',
'liveArtifact.refresh.sessionHint': 'Events observed while this tab is open',
'liveArtifact.refresh.docSourceTitle': 'Document source',
'liveArtifact.refresh.docSourceHint': 'Source configured',
'liveArtifact.refresh.docSourceType': 'Type',
'liveArtifact.refresh.docSourceTool': 'Tool',
'liveArtifact.refresh.docSourceConnector': 'Connector',
'liveArtifact.refresh.debugSummary': 'Advanced debug metadata',
'liveArtifact.refresh.debugNote':
'May include connector IDs, file names, source metadata, and internal artifact paths.',
'liveArtifact.viewer.tabPreview': 'Preview',
'liveArtifact.viewer.tabCode': 'Code',
'liveArtifact.viewer.tabData': 'Data',
'liveArtifact.viewer.tabRefreshHistory': 'Refresh history',
'liveArtifact.viewer.dataEmpty': 'No data.json cache available.',
'liveArtifact.viewer.code.templateHeading': 'Template HTML',
'liveArtifact.viewer.code.renderedHeading': 'Rendered HTML',
'liveArtifact.viewer.code.templateHelp': 'The editable template used with data.json to generate the preview.',
'liveArtifact.viewer.code.renderedHelp': 'The generated index.html currently loaded by Preview.',
'liveArtifact.viewer.code.variantAria': 'Code variant',
'liveArtifact.viewer.code.variantTemplate': 'Template',
'liveArtifact.viewer.code.variantRendered': 'Rendered',
'liveArtifact.viewer.code.loading': 'Loading code…',
'liveArtifact.viewer.code.unavailable': 'Code is not available yet.',
'liveArtifact.viewer.code.empty': 'This code file is empty.',
'fileViewer.deployToVercel': 'Deploy to Vercel',
'fileViewer.redeployToVercel': 'Redeploy',
'fileViewer.deployingToVercel': 'Deploying to Vercel…',
'fileViewer.deployProviderLabel': 'Provider',
'fileViewer.vercelProvider': 'Vercel',
'fileViewer.cloudflarePagesProvider': 'Cloudflare Pages',
'fileViewer.deployToProvider': 'Deploy to {provider}',
'fileViewer.redeployToProvider': 'Redeploy to {provider}',
'fileViewer.deployingToProvider': 'Deploying to {provider}…',
'fileViewer.preparingPublicLink': 'Preparing public link…',
'fileViewer.copyDeployLink': 'Copy link',
'fileViewer.deployModalTitle': 'Deploy',
'fileViewer.deployModalSubtitle': 'Use the selected provider account to deploy this HTML preview.',
'fileViewer.vercelToken': 'Vercel token',
'fileViewer.vercelTokenGetLink': 'Get Vercel token',
'fileViewer.vercelTokenPlaceholder': 'Paste your Vercel token',
'fileViewer.vercelTokenReuseHint': 'Saved token will be used. Enter a new token to replace it.',
'fileViewer.vercelTokenRequired': 'Enter and save a Vercel token first.',
'fileViewer.cloudflareApiToken': 'Cloudflare API token',
'fileViewer.cloudflareApiTokenGetLink': 'Get Cloudflare API token',
'fileViewer.cloudflareApiTokenPlaceholder': 'Paste your Cloudflare API token',
'fileViewer.cloudflareApiTokenReuseHint': 'The saved Cloudflare API token will be used. Enter a new token to replace it.',
'fileViewer.cloudflareApiTokenRequired': 'Enter and save a Cloudflare API token first.',
'fileViewer.cloudflareApiTokenScopeHint': 'Pages Edit is required for deploys. Zone Read is required to list domains. DNS Edit is only needed when binding a custom domain.',
'fileViewer.vercelTeamId': 'Team ID',
'fileViewer.vercelTeamSlug': 'Team slug',
'fileViewer.cloudflareAccountId': 'Account ID',
'fileViewer.cloudflareAccountIdHint': 'Required. Find the account ID in the Cloudflare dashboard.',
'fileViewer.cloudflareAccountIdRequired': 'Enter and save a Cloudflare Account ID first.',
'fileViewer.cloudflareZoneLabel': 'Domain',
'fileViewer.cloudflareZonePlaceholder': 'Save Cloudflare settings to load domains',
'fileViewer.cloudflareZoneRequired': 'Select a Cloudflare domain first.',
'fileViewer.cloudflareZonesLoading': 'Loading Cloudflare domains…',
'fileViewer.cloudflareZonesRefresh': 'Refresh domains',
'fileViewer.cloudflareZonesLoadFailed': 'Could not load Cloudflare domains.',
'fileViewer.cloudflareZonesEmpty': 'No active full Cloudflare domains were found for this account.',
'fileViewer.cloudflareDomainPrefixLabel': 'Subdomain prefix',
'fileViewer.cloudflareDomainPrefixPlaceholder': 'demo',
'fileViewer.cloudflareDomainPrefixInvalid': 'Use one DNS label only: lowercase letters, numbers, and hyphens.',
'fileViewer.cloudflareHostnamePreview': 'Custom domain preview: {hostname}',
'fileViewer.cloudflareCustomDomainHint': 'Optional: choose a Cloudflare domain and prefix to bind a custom subdomain. pages.dev will still be available.',
'fileViewer.cloudflarePagesDevLinkLabel': 'pages.dev URL',
'fileViewer.cloudflareCustomDomainLinkLabel': 'Custom domain',
'fileViewer.optional': 'Optional',
'fileViewer.vercelPreviewOnly': 'Deploys are Preview-only for now.',
'fileViewer.cloudflarePagesPreviewHint': 'Cloudflare Pages deploys use Direct Upload.',
'fileViewer.savingConfig': 'Saving…',
'fileViewer.deployConfigSaveFailed': 'Could not save Vercel settings.',
'fileViewer.deployFailed': 'Deploy failed. Check Vercel settings and try again.',
'fileViewer.deployProviderConfigSaveFailed': 'Could not save {provider} settings.',
'fileViewer.deployProviderFailed': '{provider} deploy failed. Check settings and try again.',
'fileViewer.deployResultLabel': 'Deployed URL',
'fileViewer.deployLinkReady': 'Ready',
'fileViewer.deploySuccessToast': 'Deployment uploaded successfully',
'fileViewer.deploySuccessToastDetails': '{provider} · {url}',
'fileViewer.deployLinkPreparingLabel': 'Public link pending',
'fileViewer.deployLinkDelayed': 'Your site is deployed. The public link is still being prepared.',
'fileViewer.deployLinkFailed': 'Custom domain failed',
'fileViewer.deployLinkProtectedLabel': 'Deployment protection enabled',
'fileViewer.deployLinkProtected': 'Your site deployed, but this preview link is requiring authentication. Disable Deployment Protection or use a custom domain.',
'fileViewer.retryLink': 'Retry now',
'questionForm.submit': 'Submit',
'questionForm.skip': 'Skip',
'questionForm.locked': 'Answered',
'conv.switch': 'Switch conversation',
'conv.label': 'Conversation',
'conv.heading': 'Conversations',
'conv.new': '+ New',
'conv.empty': 'No conversations yet.',
'conv.untitled': 'Untitled conversation',
'conv.renameTooltip': 'Double-click to rename',
'conv.delete': 'Delete conversation',
'conv.deleteConfirm': 'Delete "{title}"? This removes its messages.',
'agentPicker.label': 'Agent',
'agentPicker.modeChoose': 'Choose execution mode',
'agentPicker.localCli': 'Local CLI',
'agentPicker.daemonOff': 'daemon off',
'agentPicker.byok': 'API · BYOK',
'agentPicker.selectAgent': 'Select a detected code-agent CLI',
'agentPicker.noAgents': 'no agents on PATH',
'agentPicker.notInstalled': 'not installed',
'agentPicker.rescan': 'Re-scan local PATH for agents',
'tool.openInTab': 'Open {name} in a tab',
'tool.open': 'open',
'tool.todos': 'Todos',
'tool.askQuestion': 'Question',
'tool.askQuestionSubmit': 'Submit',
'tool.askQuestionPending': 'Awaiting your answer',
'tool.askQuestionAnswered': 'Answered',
'tool.todosExpand': 'Show tasks',
'tool.todosCollapse': 'Hide tasks',
'tool.todosDone': 'Done',
'tool.todosDismiss': 'Dismiss the task list',
'tool.write': 'Write',
'tool.edit': 'Edit',
'tool.read': 'Read',
'tool.bash': 'Bash',
'tool.glob': 'Glob',
'tool.grep': 'Grep',
'tool.fetch': 'Fetch',
'tool.search': 'Search',
'tool.lines': '{n} lines',
'tool.changeSingular': 'change',
'tool.changePlural': 'changes',
'tool.in': 'in {path}',
'tool.hide': 'hide',
'tool.output': 'output',
'tool.running': 'running…',
'tool.error': 'error',
'tool.done': 'done',
'assistant.role': 'Assistant',
'assistant.workingLabel': 'Working',
'assistant.doneLabel': 'Done',
'assistant.feedbackPrompt': 'Feedback',
'assistant.feedbackPositive': 'Helpful',
'assistant.feedbackNegative': 'Not helpful',
'assistant.feedbackReasonTitle': 'Tell us why',
'assistant.feedbackReasonPositiveMatched': 'Understood my request',
'assistant.feedbackReasonPositiveVisual': 'Looks good',
'assistant.feedbackReasonPositiveUseful': 'Useful structure',
'assistant.feedbackReasonPositiveEasy': 'Easy to keep editing',
'assistant.feedbackReasonPositiveDesignSystem': 'Followed the design system',
'assistant.feedbackReasonNegativeMissed': 'Missed my request',
'assistant.feedbackReasonNegativeVisual': 'Visual quality needs work',
'assistant.feedbackReasonNegativeIncomplete': 'Incomplete output',
'assistant.feedbackReasonNegativeHard': 'Hard to use',
'assistant.feedbackReasonNegativeDesignSystem': 'Did not follow the design system',
'assistant.feedbackReasonOther': 'Other',
'assistant.feedbackReasonPlaceholder': 'Add a short note...',
'assistant.feedbackReasonSubmit': 'Submit',
'assistant.emptyResponseLabel': 'No output',
'assistant.emptyResponseMessage': 'The provider ended the request without returning text or an artifact. Try another model or provider, check quota, or retry.',
'assistant.unfinishedLabel': 'Stopped with unfinished work',
'assistant.unfinishedSummary': '{n} task(s) remain',
'assistant.unfinishedMore': '+{n} more',
'assistant.continueRemaining': 'Continue remaining tasks',
'assistant.outTokens': '{n} out',
'assistant.producedFiles': 'Files from this turn',
'assistant.openFile': 'Open',
'assistant.downloadFile': 'Download',
'assistant.thinking': 'Thinking',
'assistant.systemReminder': 'System reminder',
'assistant.waitingFirstOutput': 'Waiting for first output',
'assistant.statusBootingAgent': 'Booting agent',
'assistant.statusStarting': 'Starting',
'assistant.statusRequesting': 'Sending request',
'assistant.statusThinking': 'Thinking',
'assistant.statusStreaming': 'Streaming',
'assistant.slowHint':
'Taking longer than usual. The form usually shows in 510s — you can Stop and rephrase.',
'assistant.verbEditing': 'Editing',
'assistant.verbWriting': 'Writing',
'assistant.verbReading': 'Reading',
'assistant.verbSearching': 'Searching',
'assistant.verbRunning': 'Running',
'assistant.verbTodos': 'Todos',
'assistant.verbFetching': 'Fetching',
'assistant.verbCalling': 'Calling',
'qf.answered': 'answered',
'qf.choose': 'Choose…',
'qf.required': 'required',
'qf.lockedSubmitted':
'Answers sent — agent is using these for the rest of the session.',
'qf.lockedPrev': 'This form is from a previous turn.',
'qf.hint':
"Pick what fits. Skip optional fields you don't care about — the agent will use sensible defaults.",
'qf.submitDefault': 'Send answers',
'qf.submitDisabledTitle': 'Fill in the required fields first',
'qf.submitTitle': 'Send answers',
'qf.cardSelected': 'selected',
'qf.cardRefs': 'Refs:',
'qf.cardSampleText': 'The quick brown fox · 0123',
'sketch.toolSelect': 'Select (no-op)',
'sketch.toolPen': 'Pen',
'sketch.toolText': 'Text',
'sketch.toolRect': 'Rectangle',
'sketch.toolArrow': 'Arrow',
'sketch.toolEraser': 'Eraser',
'sketch.color': 'Color',
'sketch.strokeSize': 'Stroke size',
'sketch.undo': 'Undo',
'sketch.clear': 'Clear',
'sketch.close': 'Close',
'sketch.closeConfirm': 'Close the sketch and discard your unsaved changes?',
'sketch.textPrompt': 'Text:',
'sketch.textModalTitle': 'Add text',
'critiqueTheater.userFacingName': 'Design Jury',
'critiqueTheater.roleDesigner': 'Designer',
'critiqueTheater.roleCritic': 'Critic',
'critiqueTheater.roleBrand': 'Brand',
'critiqueTheater.roleA11y': 'Accessibility',
'critiqueTheater.roleCopy': 'Copy',
'critiqueTheater.roundLabel': 'Round {n} of {m}',
'critiqueTheater.mustFix': '{n} must-fix',
'critiqueTheater.composite': 'Composite',
'critiqueTheater.threshold': 'Threshold',
'critiqueTheater.consensus': 'Consensus',
'critiqueTheater.interrupt': 'Interrupt',
'critiqueTheater.interrupting': 'Interrupting…',
'critiqueTheater.interrupted': 'Interrupted',
'critiqueTheater.degradedHeading': 'Panel offline this run',
'critiqueTheater.degradedReasonMalformed': 'Malformed panel output (parser rejected the block).',
'critiqueTheater.degradedReasonOversize': 'Panel output exceeded the safe byte budget.',
'critiqueTheater.degradedReasonAdapter': 'Adapter {adapter} did not support the Critique protocol.',
'critiqueTheater.degradedReasonProtocol': 'Adapter {adapter} sent an unsupported protocol version.',
'critiqueTheater.degradedReasonMissingArtifact': 'Run finished without a final artifact.',
'critiqueTheater.replay': 'Replay',
'critiqueTheater.replaySpeed': 'Replay speed',
'critiqueTheater.readOnly': 'Read-only',
'critiqueTheater.shippedSummary': 'Shipped at round {round} · composite {composite}',
'critiqueTheater.interruptedSummary': 'Interrupted at round {round} · best composite {composite}',
'critiqueTheater.shippedBadge': 'Shipped',
'critiqueTheater.belowThresholdBadge': 'Below threshold',
'critiqueTheater.timedOutBadge': 'Timed out',
'critiqueTheater.failedHeading': 'Run failed',
'critiqueTheater.failedReasonCliExit': 'Agent CLI exited non-zero before the panel could finish.',
'critiqueTheater.failedReasonPerRoundTimeout': 'A round exceeded its time budget.',
'critiqueTheater.failedReasonTotalTimeout': 'The full run exceeded its total time budget.',
'critiqueTheater.failedReasonOrchestrator': 'Internal orchestrator error.',
'critiqueTheater.transcriptEmpty': 'No transcript to replay yet. Run a critique to record one.',
'critiqueTheater.transcriptLoading': 'Loading transcript…',
'critiqueTheater.transcriptError': 'Could not load transcript: {error}',
'critiqueTheater.replaySpeedPaused': 'Paused',
'critiqueTheater.replaySpeedInstant': 'Instant',
'critiqueTheater.replaySpeedLive': 'Live',
'critiqueTheater.replaySpeedFast': 'Fast',
'critiqueTheater.settingsNav': 'Design Jury',
'critiqueTheater.settingsNavHint': 'Five-panel design review for your runs',
'critiqueTheater.settingsEnabledLabel': 'Show Design Jury during agent runs',
'critiqueTheater.settingsEnabledDescription':
'When enabled, a five-panel review appears alongside agent generations and scores the output before shipping. You can interrupt at any time.',
'critiqueTheater.settingsEnabledProjectHint':
'Saved for this project. New runs in this project will route through Design Jury server-side.',
'critiqueTheater.settingsEnabledNoProjectHint':
'Open a project to persist this server-side. Until then, this only changes the in-browser preference.',
'pet.title': 'Pets',
'pet.subtitle': 'Use Show pet to control whether the companion appears in your workspace. Choose a pet below.',
'pet.navTitle': 'Pets',
'pet.navHint': 'Adopt or customize',
'pet.tabBuiltIn': 'Built-in',
'pet.tabBuiltInHint': 'Curated companions bundled with Open Design — pick one and adopt.',
'pet.builtInEmpty': 'Built-in pets are unavailable right now. Try refreshing the Community tab once the daemon is online.',
'pet.tabCustom': 'Custom',
'pet.tabCustomHint': 'Make your own with a name, glyph, color or sprite.',
'pet.tabCommunity': 'Community',
'pet.tabCommunityHint': 'Hatched pets from Codex — adopt one or generate a new one.',
'pet.tabsAria': 'Choose pet',
'pet.adopt': 'Adopt',
'pet.adoptedBadge': 'Adopted',
'pet.adoptCallout': 'Adopt a pet',
'pet.changePet': 'Change pet',
'pet.wake': 'Show pet',
'pet.tuck': 'Hide pet',
'pet.wakeTitle': 'Show the pet in the workspace. If none is selected, the first built-in pet will be used.',
'pet.tuckTitle': 'Hide the pet from the workspace.',
'pet.settingsTitle': 'Open pet settings',
'pet.useCustom': 'Use my pet',
'pet.customTitle': 'Make your own',
'pet.customHint': 'Pick a name, glyph and accent — the overlay updates live.',
'pet.customGreetingPlaceholder': 'Say hi from your pet…',
'pet.fieldName': 'Name',
'pet.fieldGlyph': 'Glyph',
'pet.fieldGlyphHint': 'A single emoji works best (e.g. 🐝, 🦄, 🐢).',
'pet.fieldGreeting': 'Greeting',
'pet.fieldAccent': 'Accent color',
'pet.fieldAccentCustom': 'Custom color',
'pet.fieldAccentDefault': 'Default accent color',
'pet.overlayAria': 'Pet companion',
'pet.spriteAria': '{name} — drag to move, click to chat',
'pet.spriteTitle': 'Hi from {name}! Click to chat.',
'pet.taskSummarySingle': '{count} agent task is running.',
'pet.taskSummaryMultiple': '{count} agent tasks are running across {projects} projects.',
'pet.taskSummaryRecentSingle': '{count} agent task recently completed.',
'pet.taskSummaryRecentMultiple': '{count} agent tasks recently completed.',
'pet.taskListAria': 'Active agent tasks',
'pet.taskOpenProject': 'Open {project}',
'pet.taskGroup.running': 'Running',
'pet.taskGroup.queued': 'Waiting',
'pet.taskGroup.recent': 'Recently completed',
'pet.idleQuote.leonardo.text': 'Learning never exhausts the mind.',
'pet.idleQuote.leonardo.author': 'Leonardo da Vinci',
'pet.idleQuote.michelangelo.text': 'I saw the angel in the marble and carved until I set him free.',
'pet.idleQuote.michelangelo.author': 'Michelangelo',
'pet.idleQuote.bernini.text': 'There are two devices which can help the sculptor: light and shadow.',
'pet.idleQuote.bernini.author': 'Gian Lorenzo Bernini',
'pet.idleQuote.raphael.text': 'When one is painting one does not think.',
'pet.idleQuote.raphael.author': 'Raphael',
'pet.idleQuote.caravaggio.text': 'All works, no matter what or by whom painted, are nothing but bagatelles and childish trifles unless they are made and painted from life.',
'pet.idleQuote.caravaggio.author': 'Caravaggio',
'pet.idleQuote.rodin.text': 'The main thing is to be moved, to love, to hope, to tremble, to live.',
'pet.idleQuote.rodin.author': 'Auguste Rodin',
'pet.composerTitle': 'Pets — wake, tuck, or pick one',
'pet.composerMenuTitle': 'Pets',
'pet.composerMenuHint': 'tip: type /pet to toggle',
'pet.composerOpenSettings': 'Manage Pets',
'pet.welcomeTeaserTitle': 'Adopt a pet',
'pet.welcomeTeaserBody': 'A tiny floating companion that hangs out with you.',
'pet.welcomeTeaserCta': 'Pick one',
'pet.imageUpload': 'Upload sprite',
'pet.imageReplace': 'Replace sprite',
'pet.imageRemove': 'Use emoji',
'pet.imageHintIdle': 'PNG, JPG, WebP, GIF or SVG. Sheet upload? Drop a horizontal strip and set the frame count.',
'pet.imageHintActive': 'Showing your sprite. Set frames > 1 to walk a horizontal spritesheet.',
'pet.fieldFrames': 'Frames',
'pet.fieldFramesHint': '1 = static. > 1 = horizontal spritesheet.',
'pet.fieldFps': 'Speed (fps)',
'pet.fieldFpsHint': 'How quickly the frames cycle.',
'pet.atlasImport': 'Import Codex sprite',
'pet.atlasImportTitle': 'Import a hatch-pet 8x9 / 192x208 atlas (PNG or WebP).',
'pet.atlasPickerTitle': 'Pick an animation row',
'pet.atlasPickerHint': 'Codex pets ship 9 animation rows. By default we keep the full atlas so the pet swaps rows on hover, drag, and idle. You can also freeze it to a single loop.',
'pet.atlasCancel': 'Discard atlas',
'pet.atlasAdopt': 'Freeze to this row',
'pet.atlasAdoptFull': 'Use full atlas (animated)',
'pet.atlasAdoptFullTitle': 'Keep every row so the pet reacts to hover, drag direction, and long idles.',
'pet.atlasAdoptRowTitle': 'Slice just the highlighted row into a single looping strip.',
'pet.atlasActiveHint': 'Animated atlas active — the pet picks a row from your interaction (hover, drag, idle).',
'pet.atlasRow.idle': 'Idle',
'pet.atlasRow.running-right': 'Run right',
'pet.atlasRow.running-left': 'Run left',
'pet.atlasRow.waving': 'Waving',
'pet.atlasRow.jumping': 'Jumping',
'pet.atlasRow.failed': 'Failed',
'pet.atlasRow.waiting': 'Waiting',
'pet.atlasRow.running': 'Running',
'pet.atlasRow.review': 'Review',
'pet.hatchTitle': 'Hatch a new pet with AI',
'pet.hatchHint': 'Use the bundled hatch-pet skill in chat to generate a Codex-style spritesheet, then import it here.',
'pet.hatchConcept': 'Pet concept (optional)',
'pet.hatchConceptPlaceholder': 'e.g. a tiny pixel-art shiba in a cozy sweater',
'pet.hatchCopy': 'Copy prompt',
'pet.hatchCopied': 'Copied!',
'pet.hatchFoot': 'After the skill saves your pet, come back and pick "Import Codex sprite".',
'pet.slashPopoverAria': 'Slash commands',
'pet.slashPopoverTitle': 'Commands',
'pet.slashPopoverHint': '↑↓ navigate · enter to pick · esc to dismiss',
'pet.slashPet': 'Toggle, adopt, or jump to pet settings.',
'pet.slashPetWake': 'Wake the floating pet overlay.',
'pet.slashPetTuck': 'Tuck the pet away for now.',
'pet.slashHatch': 'Generate a Codex pet via the hatch-pet skill.',
'pet.slashHatchArg': '<concept>',
'pet.slashSearch': 'Search the web through the OD research command.',
'pet.slashSearchArg': '<query>',
'pet.codexTitle': 'Recently hatched',
'pet.codexSubtitle': 'Pets packaged by the hatch-pet skill show up here for one-click adoption.',
'pet.codexSubtitleWithDir': 'Scanning {dir} for pets packaged by the hatch-pet skill.',
'pet.codexEmpty': 'No hatched pets yet. Type /hatch in chat to generate one.',
'pet.codexLoading': 'Looking for hatched pets…',
'pet.codexRefresh': 'Refresh',
'pet.codexAdopt': 'Adopt',
'pet.codexAdopting': 'Adopting…',
'pet.communitySync': 'Download community pets',
'pet.communitySyncing': 'Downloading…',
'pet.communitySyncTitle': 'Sync the latest pets from Codex Pet Share + j20 Hatchery into ~/.codex/pets/.',
'pet.communitySyncDone': 'Synced {wrote} new pets ({total} total).',
'pet.communitySyncFailed': 'Sync failed: {error}',
'pet.codexBundled': 'Bundled',
'pet.codexBundledTitle': 'Ships with Open Design — no download needed.',
'settings.notifications': 'Notifications',
'settings.notificationsHint': 'Sound and desktop notification on task completion',
'settings.notifyCompletionSound': 'Completion sound',
'settings.notifyCompletionSoundHint': 'Plays when a turn finishes. Off by default.',
'settings.notifySuccessSound': 'Success sound',
'settings.notifyFailureSound': 'Failure sound',
'settings.notifyDesktop': 'Desktop notification',
'settings.notifyDesktopHint': 'Sent when the window is not focused.',
'settings.notifyDesktopBlocked': 'Notifications blocked by the browser. Allow them in site settings.',
'settings.notifyDesktopUnsupported': 'Desktop notifications unavailable in this environment.',
'settings.notifyTest': 'Send test',
'settings.notifyTestSent': 'Test notification sent. If no banner appears, check browser and system notification settings.',
'settings.notifyTestFailed': 'Notification call failed. Check browser and system notification settings.',
'settings.notifySoundDing': 'Ding',
'settings.notifySoundChime': 'Chime',
'settings.notifySoundTwoToneUp': 'Two-tone up',
'settings.notifySoundPluck': 'Pluck',
'settings.notifySoundBuzz': 'Buzz',
'settings.notifySoundTwoToneDown': 'Two-tone down',
'settings.notifySoundThud': 'Thud',
'settings.skills': 'Skills',
'settings.skillsHint': 'Functional skills the agent can invoke mid-task',
'settings.skillsNew': 'New skill',
'settings.skillsEmpty': 'Select a skill on the left, or create a new one.',
'settings.skillsEdit': 'Edit',
'settings.skillsDelete': 'Delete',
'settings.skillsDeleteConfirm': 'Confirm delete',
'settings.skillsName': 'Name',
'settings.skillsTriggers': 'Triggers (comma- or newline-separated)',
'settings.skillsDescription': 'Description',
'settings.skillsBody': 'SKILL.md body',
'settings.skillsCreate': 'Create',
'settings.skillsSave': 'Save',
'settings.skillsSaving': 'Saving…',
'settings.skillsFiles': 'Files',
'settings.skillsNoFiles': 'No files in this skill folder.',
'settings.skillsNameRequired': 'Skill name is required.',
'settings.skillsBodyRequired': 'Skill body is required.',
'settings.designSystems': 'Design Systems',
'settings.designSystemsHint': 'Manage which design systems appear in the home gallery',
'settings.designSystemsInstalled': 'Installed',
'settings.designSystemsAdd': 'Add design system',
'settings.designSystemsHiddenCount': '{count} hidden from home gallery',
'settings.designSystemsShowAll': 'Show all',
'settings.designSystemsShowHidden': 'Show hidden',
'settings.designSystemsSource': 'Source',
'settings.designSystemsSourceLocal': 'Local',
'settings.designSystemsSourceGithub': 'GitHub',
'settings.designSystemsStructure': 'Structure',
'settings.designSystemsModeHybrid': 'Hybrid',
'settings.designSystemsModeNormalized': 'Normalized',
'settings.designSystemsModeVerbatim': 'Verbatim',
'settings.designSystemsCraft': 'Craft',
'settings.designSystemsCraftColor': 'Color',
'settings.designSystemsCraftAccessibility': 'Accessibility',
'settings.designSystemsGithubUrl': 'GitHub URL',
'settings.designSystemsProjectPath': 'Project path',
'settings.designSystemsImportGithub': 'Import from GitHub',
'settings.designSystemsImportProject': 'Import from project',
'settings.designSystemsImportedStatus': 'Imported {title}',
'settings.designSystemsViewImported': 'View imported design system',
'settings.designSystemsCategory': 'Category',
'settings.designSystemsAllCategories': 'All categories',
'settings.designSystemsShowInHomeGallery': 'Show in home gallery',
'settings.projectLocations': 'Project locations',
'settings.projectLocationsHint': 'Workspace storage roots',
'settings.projectLocationsDescription': 'Add work bases that can contain multiple Open Design project folders. New projects are saved as one folder inside the selected base.',
'settings.projectLocationsSaveError': 'Could not save project locations. Check that each path is an accessible folder.',
'settings.projectLocationsSaved': 'Project locations saved.',
'settings.projectLocationsScanError': 'Could not scan project locations.',
'settings.projectLocationsScanComplete': 'Scan complete: {imported} imported, {existing} already registered.',
'settings.projectLocationsNoFolderSelected': 'No folder selected.',
'settings.projectLocationsDuplicate': 'That work base is already added.',
'settings.projectLocationsWorkBaseMeta': 'Work base · projects are created as subfolders here',
'settings.projectLocationsAddFolder': 'Add folder…',
'settings.projectLocationsDefaultBadge': 'Default location',
'settings.projectLocationsMakeDefault': 'Make default',
'settings.projectLocationsDefaultSaved': 'Default project location updated.',
'settings.librarySkills': 'Skills',
'settings.libraryDesignSystems': 'Design Systems',
'settings.librarySearch': 'Search...',
'settings.libraryAll': 'All',
'settings.libraryPreview': 'Preview',
'settings.libraryPreviewClose': 'Close',
'settings.libraryLoading': 'Loading...',
'settings.libraryNoResults': 'No items match your search.',
'settings.libraryEnabled': 'Enabled',
'settings.libraryDisabled': 'Disabled',
'settings.connectorsNavHint': 'External system connections',
'settings.connectorsHint': 'Manage connector and tool provider settings for this device.',
'settings.connectorsComposioApiKey': 'Composio API Key',
'settings.connectorsSavedTitle': 'Saved to local daemon',
'settings.connectorsSavedWithTail': 'Saved · ••••{tail}',
'settings.connectorsSaved': 'Saved',
'settings.connectorsGetApiKey': 'Get API Key',
'settings.connectorsReplaceKeyPlaceholder': 'Paste a new key to replace the saved one',
'settings.connectorsApiKeyPlaceholder': 'Paste Composio API key',
'settings.connectorsClear': 'Clear',
'settings.connectorsClearConfirmTitle': 'Clear the saved Composio API key?',
'settings.connectorsClearConfirmBody': 'Removing the key disconnects every Composio connector linked to this workspace. Connected accounts, OAuth grants, and tool access will all be removed.',
'settings.connectorsClearConfirmContinue': 'Continue',
'settings.connectorsClearFinalTitle': 'This will disconnect all connectors',
'settings.connectorsClearFinalBody': 'There is no undo. You will need to reconnect each integration from scratch after pasting a new key.',
'settings.connectorsClearFinalConfirm': 'Delete key & disconnect',
'settings.connectorsClearArming': 'Hold on\u2026',
'settings.connectorsClearCancel': 'Cancel',
'settings.connectorsSaveKey': 'Save key',
'settings.connectorsSaveKeyTitle': 'Send this key to the local daemon',
'settings.connectorsKeySaving': 'Saving\u2026',
'settings.connectorsKeySaved': "Saved ✓",
'settings.connectorsKeyError': 'Couldn\u2019t save the key. Check that the local daemon is running and try again.',
'settings.connectorsHelpSaved': 'Your key is saved in the local daemon. Paste a new key to replace it, or Clear to remove.',
'settings.connectorsHelpUnsaved': 'Unsaved changes \u2014 click Save key to store this credential in the local daemon and refresh the catalog below.',
'settings.connectorsHelpEmpty': 'Keys are stored locally and never shared.',
'settings.connectorsLoadingSavedKey': 'Checking for a saved key in the local daemon\u2026',
'settings.autosaveSaving': 'Saving\u2026',
'settings.autosaveSaved': 'All changes saved',
'settings.autosaveError': 'Couldn\u2019t save changes. The local daemon may be offline.',
'settings.libraryToggleLabel': 'Toggle',
// Memory (auto-extracted personalization saved as on-disk markdown)
'settings.memory': 'Memory',
'settings.memoryHint': 'Saved facts and context for future chats',
'settings.customInstructionsTitle': 'Global rules',
'settings.customInstructionsHint': 'Fixed instructions OpenDesign should follow in every chat. Save facts, preferences, and project context as memories.',
'settings.customInstructionsPlaceholder': 'e.g. "Always use TypeScript. Prefer functional components. Keep responses concise."',
'settings.memoryDescription': 'Control whether saved facts, preferences, and project context are reused in future chats.',
'settings.memoryEnabled': 'Enabled',
'settings.memoryDisabled': 'Disabled',
'settings.memoryEnableLabel': 'Enable memory injection',
'settings.memoryDisabledBanner': 'Memory is currently OFF. Existing facts are preserved on disk but will not be folded into new chats and new turns will not extract anything new.',
'settings.memoryNew': 'New memory',
'settings.memoryEdit': 'Edit',
'settings.memoryDelete': 'Delete',
'settings.memoryPreview': 'Preview',
'settings.memoryEmpty': 'No memory yet.',
'settings.memoryEmptyHintZh': '记住: 用户偏好深色主题',
'settings.memoryEmptyHintEn': 'I prefer dark mode',
'settings.memoryName': 'e.g. UI preferences',
'settings.memoryDesc': 'One sentence — what is this memory about?',
'settings.memoryBody': '- Rule one\n- Rule two\n\nWhy: optional reason\nWhen to apply: optional scope',
'settings.memoryBodyHint': 'Bullet the rules first, then optional Why and When-to-apply lines. Markdown supported. Or click a starter above to load a working example.',
'settings.memoryStartersLabel': 'Need a starting point? Click to fill the form:',
'settings.memoryStarterUserName': 'My role',
'settings.memoryStarterUserDesc': 'I am a frontend engineer working on a SaaS design tool',
'settings.memoryStarterUserBody': '- Role: senior frontend engineer\n- Stack: React, TypeScript, Vite\n- Domain: design / collaboration tools\n- Timezone: GMT+8 (Asia/Shanghai)\n\nWhen to apply: any chat — frame examples around web frontend.',
'settings.memoryStarterFeedbackName': 'UI preferences',
'settings.memoryStarterFeedbackDesc': 'Dark mode, large body text, low information density',
'settings.memoryStarterFeedbackBody': '- Theme: dark by default\n- Body text: ≥ 18px\n- Information density: prefer whitespace, fewer items per screen\n\nWhy: less eye strain during long sessions.\nWhen to apply: whenever you generate UI, web pages, or slides.',
'settings.memoryStarterProjectName': 'Current project',
'settings.memoryStarterProjectDesc': 'Open Design v0.5 — chat-driven design editor',
'settings.memoryStarterProjectBody': '- Goal: ship the chat-driven editor this quarter\n- Priorities: streaming render, local multimodal, offline-first\n- Stack: Next.js 16, Express daemon, SQLite\n\nWhen to apply: in any conversation about this project.',
'settings.memorySaveHint': 'Not auto-saved — click Create / Save to apply.',
'settings.memoryIndexSaveHint': 'Edits to the index are not auto-saved — click Save index to apply.',
'settings.memoryIndexUnsaved': 'Unsaved changes',
'settings.memoryFlashCreated': '✓ Memory created',
'settings.memoryFlashSaved': '✓ Memory saved',
'settings.memoryFlashDeleted': '✓ Memory deleted',
'settings.memoryFlashIndexSaved': '✓ Index saved',
'settings.memoryFlashPathCopied': '✓ Path copied',
'settings.memoryNameLabel': 'Title',
'settings.memoryTypeLabel': 'Type',
'settings.memoryDescLabel': 'Description',
'settings.memoryBodyLabel': 'Content',
'settings.memoryTypeUser': 'User',
'settings.memoryTypeFeedback': 'Feedback',
'settings.memoryTypeProject': 'Project',
'settings.memoryTypeReference': 'Reference',
'settings.memoryIndex': 'MEMORY.md (index)',
'settings.memoryIndexSave': 'Save index',
'settings.memoryIndexReset': 'Reset',
'settings.memoryToastChanged': 'Memory updated',
'settings.memoryToastClickHint': 'View',
'settings.memoryAll': 'All',
'settings.memoryExtractions': 'Extraction history',
'settings.memoryExtractionsHint': 'Regex runs first, LLM runs in background.',
'settings.memoryExtractionsEmpty': 'No extractions yet. The next chat turn will populate this list.',
'settings.memoryExtractionsRefresh': 'Refresh',
'settings.memoryExtractionsRefreshing': 'Refreshing…',
'settings.memoryExtractionPhaseRunning': 'Running…',
'settings.memoryExtractionPhaseSuccess': 'Success',
'settings.memoryExtractionPhaseSkipped': 'Skipped',
'settings.memoryExtractionPhaseFailed': 'Failed',
'settings.memoryExtractionSkipNoProvider': 'No API key configured for LLM memory extraction.',
'settings.memoryExtractionSkipDisabled': 'Memory is disabled.',
'settings.memoryExtractionSkipEmpty': 'Empty user message — nothing to extract.',
'settings.memoryExtractionSkipNoMatch': 'No regex pattern matched this turn.',
'settings.memoryExtractionKindHeuristic': 'regex',
'settings.memoryExtractionKindLlm': 'LLM',
'settings.memoryExtractionProviderEnv': 'env',
'settings.memoryExtractionProviderMediaConfig': 'media settings',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionProposed': 'proposed',
'settings.memoryExtractionWritten': 'written',
'settings.memoryExtractionDuration': 'in',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.memoryExtractionsClearConfirm':
'Clear all extraction history? This cannot be undone.',
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.libraryInstall': 'Install',
'settings.libraryInstallGithub': 'GitHub',
'settings.libraryInstallLocal': 'Local Path',
'settings.libraryInstallUrl': 'https://github.com/owner/repo',
'settings.libraryInstallPath': '/path/to/skill-folder',
'settings.libraryInstallButton': 'Install',
'settings.libraryUninstall': 'Uninstall',
'settings.libraryBuiltIn': 'Built-in',
'settings.libraryInstalled': 'Installed',
'settings.orbit.eyebrow': 'Automation',
'settings.orbit.title': 'Orbit',
'settings.orbit.navHint': 'Daily connector summary',
'settings.orbit.lede': 'Collect connector activity on a schedule and publish the result as a refreshable live artifact.',
'settings.orbit.statusOnTitle': 'Scheduled daily runs are on',
'settings.orbit.statusOffTitle': 'Scheduled daily runs are off',
'settings.orbit.statusActive': 'Active',
'settings.orbit.statusOff': 'Off',
'settings.orbit.runTitle': 'Start an Orbit run and open the live conversation',
'settings.orbit.running': 'Running…',
'settings.orbit.runOpen': 'Run it now',
'settings.orbit.dailySummaryTitle': 'Daily summary',
'settings.orbit.dailySummarySub': 'Runs once per day at the scheduled local time.',
'settings.orbit.on': 'On',
'settings.orbit.off': 'Off',
'settings.orbit.runTimeTitle': 'Run time',
'settings.orbit.runTimeSub': 'Default 08:00. Save to apply to the daemon schedule.',
'settings.orbit.runTimeAria': 'Daily Orbit run time',
'settings.orbit.nextRun': 'Next run',
'settings.orbit.nextRunScheduledAfterSave': 'Scheduled after Save',
'settings.orbit.schedule': 'Schedule',
'settings.orbit.pausedManualOnly': 'Paused — manual runs only',
'settings.orbit.templateTitle': 'Prompt template',
'settings.orbit.templateMissing': 'Template {id} is not installed.',
'settings.orbit.templateMissingOption': '{id} (missing)',
'settings.orbit.templateMissingInstall': 'Install an Orbit skill to steer the prompt.',
'settings.orbit.templateMissingPickAnother': 'Pick another template from the dropdown.',
'settings.orbit.templateResetTitle': 'Reset to {id}',
'settings.orbit.templateReset': 'Reset',
'settings.orbit.templateHelp': 'Steer Orbit with a skill — the selected template example prompt is injected into every Orbit run so summaries follow that template shape.',
'settings.orbit.templateAria': 'Orbit prompt template',
'settings.orbit.templatesLoading': 'Loading templates…',
'settings.orbit.templatesOptgroup': 'Orbit skill templates',
'settings.orbit.lastRun': 'Last run',
'settings.orbit.triggerManual': 'Manual',
'settings.orbit.triggerScheduled': 'Scheduled',
'settings.orbit.meterAria': '{succeeded} succeeded, {skipped} skipped, {failed} failed out of {checked} checked',
'settings.orbit.countChecked': 'Checked',
'settings.orbit.countSucceeded': 'Succeeded',
'settings.orbit.countSkipped': 'Skipped',
'settings.orbit.countFailed': 'Failed',
'settings.orbit.runError': 'Could not run Orbit. Make sure the local daemon is running and connectors are configured.',
'settings.orbit.gateAriaLabel': 'Connectors required to use Orbit',
'settings.orbit.gateEyebrow': 'Setup required',
'settings.orbit.gateTitle': 'Connect a tool to power Orbit',
'settings.orbit.gateBody': 'Orbit summarizes activity across your connectors. You haven\u2019t connected anything yet \u2014 add at least one integration to give Orbit something to report on.',
'settings.orbit.gateBodyNoKey': 'Orbit summarizes activity across your connectors, and connectors run through Composio. Add a Composio API key in Connectors to load the catalog and pick your first integration.',
'settings.orbit.gateAction': 'Open Connectors',
'settings.orbit.gateActionNoKey': 'Configure Composio',
'settings.orbit.gateLoading': 'Checking your connectors\u2026',
'settings.orbit.controlsLockedBadge': 'Locked',
'settings.orbit.controlsLockedHint': 'Connect a tool to unlock Orbit\u2019s schedule and template controls.',
'settings.orbit.artifactKickerLive': 'live artifact',
'settings.orbit.artifactKickerLegacy': 'Legacy summary',
'settings.orbit.artifactTitle': 'Daily Orbit activity summary',
'settings.orbit.artifactMetaLive': 'Refreshable HTML artifact generated from connector activity.',
'settings.orbit.artifactMetaLegacy': 'Generated before live artifact support was enabled — run Orbit again to publish one.',
'settings.orbit.copyMarkdownTitle': 'Copy markdown summary to clipboard',
'settings.orbit.copied': 'Copied',
'settings.orbit.copy': 'Copy',
'settings.orbit.openArtifact': 'Open artifact',
'settings.orbit.sourceMarkdown': 'Source markdown',
'notify.successTitle': 'Task completed',
'notify.failureTitle': 'Task failed',
'notify.successBody': 'A turn has finished.',
'notify.failureBody': 'The task ended with an error.',
'updater.available': 'Update available',
'updater.availableBody': 'Open Design {version} is available. It will download before the installer can open.',
'updater.checking': 'Checking for updates',
'updater.download': 'Download update',
'updater.downloading': 'Downloading update',
'updater.downloadingPercent': 'Downloading update {percent}%',
'updater.done': 'Done',
'updater.failed': 'Update failed',
'updater.installerOpenBody': 'The installer is open. Open Design is quitting so you can finish the update.',
'updater.installerOpened': 'Installer opened',
'updater.later': 'Later',
'updater.openFailedFallback': 'The installer could not be opened.',
'updater.openInstaller': 'Install update',
'updater.opening': 'Opening installer...',
'updater.quitButton': 'Quit Open Design',
'updater.quitFailedBody': 'The installer is open, but Open Design could not quit. Quit Open Design before replacing the app.',
'updater.quitFailedTitle': 'Could not quit',
'updater.quitting': 'Quitting...',
'updater.ready': 'Update ready',
'updater.readyGeneric': 'A new version is ready. Open Design will close and open the installer.',
'updater.readyVersion': 'Open Design {version} is ready. Open Design will close and open the installer.',
'updater.upToDate': "You're already on the latest version.",
'settings.memoryModelInlineLabel': 'Memory model',
'settings.memoryModelInlineSameAsChat': 'Same as chat',
'settings.memoryModelInlineSameAsChatWithModel': 'Same as chat ({model})',
'settings.memoryModelInlineSameAsChatWithProvider': 'Same as chat ({provider})',
'settings.memoryModelInlineHintCli': 'Optional. Uses the selected Local CLI when supported; choose a model only to override the default.',
'settings.memoryModelInlineHintCliConstrained': 'Optional. Uses the selected Local CLI when supported; {provider} is only the fallback provider family.',
'settings.memoryModelInlineHintByok': 'Optional. Reuses your chat API key — pick a cheaper model to save cost.',
'settings.memoryModelInlineHintByokNeutral': 'Memory uses a separate model from chat. Defaults to your chat model.',
'settings.memoryModelInlineFlashSaved': 'Saved',
'settings.memoryModelInlineFlashCleared': 'Cleared',
// Diagnostics export
'diagnostics.exportTitle': 'Export diagnostics',
'diagnostics.exportButton': 'Export diagnostics',
'diagnostics.exportHint': 'Bundles recent app logs and machine info into a zip you can share with the team.',
'diagnostics.exporting': 'Exporting…',
'diagnostics.exportSuccess': 'Saved diagnostics to {path}',
'diagnostics.exportFailed': 'Could not export diagnostics: {message}',
};