// Canonical English catalog used by core UI for translation fallbacks. // Lives under src/ so tsc emits it to dist/*.js and Node's strict ESM resolver // can load it during SSR. Do not import core runtime code from src/templates: // templates ship as verbatim copy-only scaffolding (.ts), so their compiled // .js never exists in dist. const messages = { home: { settingsTitle: "Settings", settingsDescription: "Language and agent preferences", title: "Your app is running", intro: "Start building by editing", actionCardTitle: "Action-backed data", loadingAction: "Loading action result...", docsTitle: "Documentation", docsDescription: "Learn the framework", themeTitle: "Theme", themeDescription: "Toggle dark / light", }, settings: { title: "Settings", pageTitle: "Settings", description: "Language and workspace preferences for this app.", languageTitle: "Language", languageDescription: "Choose the interface language. This preference is saved for your account.", languageLabel: "Interface language", agentTitle: "Manage agent", agentDescription: "Manage the agent's model, API keys, automations, voice, and other controls.", openAgentSettings: "Manage agent", workspaceTitle: "Workspace", workspaceDescription: "Manage team access and shared workspace resources.", openTeamSettings: "Open team settings", openResourceSettings: "Open resource settings", backHome: "Back to home", mcpConnectionsTitle: "MCP connections", mcpConnectionsDescription: "Connect remote MCP servers so the agent can use their tools.", openMcpConnections: "Manage MCP connections", profileTitle: "Account", profileDescription: "Your name, profile photo, and signed-in identity.", profileLoading: "Loading...", profileSignedOut: "Signed out", profilePhotoUpdated: "Photo updated", profilePhotoError: "Could not update photo", profileUploading: "Uploading...", profileChangePhoto: "Change photo", profileNameLabel: "Name", profileNamePlaceholder: "Your name", profileNameDescription: "This name is used when referring to you across Agent-Native apps.", profileSave: "Save changes", profileSaving: "Saving...", profileSaved: "Profile updated", profileSaveError: "Could not update profile", profileMenuItem: "Profile", }, secrets: { scopeLabel: "Scope", scopePersonal: "Personal", scopeWorkspace: "Workspace", scopePersonalDescription: "Only your own signed-in sessions use this key. Integration, webhook, scheduled job, automation, and agent-to-agent runs sign in as their owner rather than as you, so they cannot read it.", scopeWorkspaceDescription: "Everyone in this workspace uses this key, including integration, webhook, scheduled job, automation, and agent-to-agent runs.", }, agentResources: { openDocs: "Open {{section}} documentation", backToResources: "Back to agent resources", createFile: { nameLabel: "File name", namePlaceholder: "notes/ideas", menuDescription: "Add a new file by name", }, files: { title: "Files", description: "Files the agent can read and write.", }, instructions: { title: "Instructions", description: "The rules, preferences, and project guidance that steer the agent.", }, agents: { title: "Agents", description: "Reusable profiles for focused sub-agents and delegated work.", }, memory: { title: "Memory", description: "Durable notes the agent can retrieve across conversations.", }, skills: { title: "Skills", description: "Specialized instructions that give the agent repeatable abilities.", }, learnings: { title: "Learnings", description: "Corrections and patterns worth carrying forward for future work.", }, remoteAgents: { title: "Remote agents", description: "Other agents this agent can call through A2A.", }, }, featureFlags: { title: "Feature flags", description: "Control staged capabilities without changing a deployment.", enableForMe: "Enable for me", enabledForMe: "Enabled for you", youHaveAccess: "You have access", youDoNotHaveAccess: "You don't have access", currentUserUnknown: "Your access couldn't be evaluated", moreActions: "More actions for {{name}}", disableForEveryone: "Disable for everyone", disableForEveryoneTitle: "Disable {{name}} for everyone?", disableForEveryoneDescription: "This immediately removes access for every targeted person and organization. You can configure a new rollout later.", editTargeting: "Edit targeting", editTargetingFor: "Edit targeting for {{name}}", targetingTitle: "Edit targeting — {{name}}", targetingDescription: "Choose who can use this capability. Changes apply immediately.", noFlags: "No feature flags are registered for this app.", defaultOn: "Code fallback: on", defaultOff: "Code fallback: off", enabledFor: "Enabled for", modeLabel: "Availability", emailsLabel: "People", orgIdsLabel: "Organization IDs", percentageLabel: "Percentage of users", targetingRuleHelp: "A person gets access if they match any email, organization, or percentage rule.", targetingSummary: "Currently enabled for: {{audience}}.", saveRules: "Save changes", cancel: "Cancel", inherited: "No matching targets", off: "Off", targeted: "Targeted", everyone: "Everyone", everyoneAudience: "everyone", emailCount_one: "{{count}} email", emailCount_other: "{{count}} emails", organizationCount_one: "{{count}} organization", organizationCount_other: "{{count}} organizations", percentageRollout: "{{count}}% rollout", lastChanged: "Last changed: {{metadata}}", mutationUnverified: "We couldn't verify the change to {{name}}. Reload flags before trying again.", mutationUnverifiedGeneric: "We couldn't verify this feature flag change. Reload flags before trying again.", }, dispatch: { nav: { chat: "Chat", overview: "Overview", apps: "Apps", metrics: "Metrics", vault: "Vault", integrations: "Integrations", agents: "Agents", resources: "Resources", messaging: "Messaging", destinations: "Destinations", identities: "Identities", approvals: "Approvals", automations: "Automations", delivery: "Delivery", audit: "Audit", dreams: "Dreams", threadDebug: "Thread Debug", settings: "Settings", team: "Team", operations: "Operations", navigation: "Navigation", navigationDescription: "Workspace navigation links", }, sidebar: { workspaceControlPlane: "Workspace control plane", workspaceSubtitle_one: "Workspace · {{count}} app", workspaceSubtitle_other: "Workspace · {{count}} apps", search: "Search", chats: "Chats", newChat: "New chat", newDispatchChat: "New Dispatch chat", renameChat: "Rename chat", renameThread: "Rename {{title}}", chatOptions: "Chat options for {{title}}", aboutPage: "About {{title}}", emptyAgentText: "Create apps, manage vault keys, and route work across the workspace.", suggestionBuildApp: "Build a workspace app for X", suggestionRouteSlack: "Route Slack mentions to my analytics app", suggestionGrantKey: "Grant my OpenAI key to this app", }, pages: { appsDescription: "Open workspace apps and start new app creation from Dispatch.", appsDescriptionWithWorkspace: 'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.', appsInWorkspace: "Apps in {{workspace}}", workspaceApps: "Workspace apps", otherApps: "Other apps", otherAppsDescription: "Open other apps available to you.", availableCount: "{{count}} available", activeCount: "{{count}} active", hiddenCount: "{{count}} hidden", createApp: "Create app", templates: "Templates", checkingTemplates: "Checking available templates", templatesAvailable: "{{count}} available to scaffold", hide: "Hide", show: "Show", hiddenApps: "Hidden apps", hiddenAppCount: "{{count}} hidden apps", workspaceAppFallback: "Workspace App", workspaceAppDescription: "Open a deployed app or check the status of an app being created.", pageNotFound: "Page not found", pageNotFoundDescription: "This route is not in the workspace app list yet.", browseApps: "Browse apps", newApp: "New App", newAppDescription: "Create a workspace app from a prompt and apply the workspace vault policy.", destinationsDescription: "Saved outbound Slack channels, Telegram chats, and thread targets.", savedDestinations: "Saved destinations", addDestination: "Add destination", quickTestMessage: "Quick test message", send: "Send", delete: "Delete", cancel: "Cancel", messageSent: "Message sent", unableToSendMessage: "Unable to send message", destinationSaved: "Destination saved", destinationRemoved: "Destination removed", deleteDestinationTitle: "Delete destination?", deleteDestinationDescription: '"{{name}}" will be removed. Any saved workflows or jobs that target this destination will start failing on the next send.', noDestinations: "No destinations saved yet. Add your first Slack channel or Telegram chat on the right.", dailyDigestChannel: "Daily digest channel", optionalThreadOrTopicId: "Optional thread or topic id", destinationNotes: "What should use this destination?", saveDestination: "Save destination", noWorkspaceApps: "No workspace apps yet", noWorkspaceAppsDescription: "Create an app when a workflow needs its own focused place to live.", appNotFound: "App not found", building: "Building", appBuildingPrefix: "This app is being created. It will be available at", appBuildingSuffix: "after its branch is merged and the workspace deploy finishes.", branch: "Branch: {{branch}}", openBuilderBranch: "Open Builder branch", openingApp: "Opening {{name}}", redirectingTo: "Redirecting to", openApp: "Open app", notDispatchOrWorkspaceApp: " a Dispatch tab or a workspace app in this workspace.", agentsDescription: "Dispatch can delegate to the built-in app suite over A2A by default. Add extra agents here only if you want to route work to apps outside that built-in set.", mcpAccessUpdated: "MCP app access updated", selectAppForMcp: "Select at least one app, or expose all apps.", mcpUrlCopied: "MCP URL copied", mcpUrlCopyFailed: "Could not copy MCP URL", unifiedMcpGateway: "Unified MCP gateway", unifiedMcpGatewayDescription: "Connect external agents to Dispatch once, then route to granted workspace apps through", allApps: "All apps", selectedApps: "Selected apps", loading: "Loading", grantedCount: "{{count}} granted", exposeAllAppsMcp: "Expose all apps through Dispatch MCP", copyUrl: "Copy URL", metricsUnavailable: "Metrics unavailable", unableToLoadUsage: "Unable to load usage.", metricsDescriptionBuilder: "Workspace-wide Builder.io credit spend, chat volume, user activity, and app access.", metricsDescriptionLlm: "Workspace-wide LLM spend, chat volume, user activity, and app access.", llmCalls: "LLM calls", activeUsers: "Active users", workspaceAppsStat: "Workspace apps", chatThreads: "Chat threads", also: "Also", workspaceShortcutsAria: "Workspace shortcuts", deliveryQueue: "Delivery queue", failedLastHour: "{{count}} failed in the last hour", processingCount: "{{count}} processing", queued: "Queued", active: "Active", done1h: "Done 1h", failed1h: "Failed 1h", oldestQueued: "Oldest queued: {{age}}", queueAgeNone: "none", queueFailureHint: "Check credentials, destinations, and recent queue errors.", unknownPlatform: "unknown", attemptsCount: "{{count}} attempts", noErrorMessage: "(no error message)", }, }, agentPanel: { useBuilder: "Use Builder", openDesktopToEditCode: "Open Desktop to edit code", codeUnavailableDescription: "Source-code changes and CLI access are available in the Agent Native Desktop app.", downloadDesktop: "Download Desktop", chatMode: "Chat mode", chat: "Chat", cliTerminalMode: "CLI terminal mode", cli: "CLI", workspaceMode: "Files, agents, skills, and tasks", workspace: "Resources", newChat: "New chat", newTerminal: "New terminal", panelOptions: "Agent panel options", collapseSidebar: "Collapse sidebar", expandSidebar: "Expand sidebar", hideChats: "Hide chats", allChats: "All chats", settings: "Settings", feedback: "Feedback", exitFullscreen: "Exit fullscreen", fullscreen: "Fullscreen", closeTab: "Close tab", closeOtherTabs: "Close other tabs", closeAllTabs: "Close all tabs", clearChat: "Clear chat", cliRequiresDevMode: "CLI requires dev mode", cliRequiresDevModeDescription: "Run this app locally with pnpm dev or use Builder.io to access the CLI terminal.", toggleAgent: "Toggle agent", openFullView: "Open full view", askAgent: "Ask the agent", askAgentTitle: "Ask the agent", askAgentPlaceholder: "Tell the agent what you want to do…", connectAi: "Connect AI", builderOrOwnKeys: "Use Builder.io (free credits), or add your own provider keys.", connectBuilderIo: "Connect Builder.io", connectingBuilder: "Connecting Builder.io…", builderModelCredits: "Free credits for Claude, OpenAI & Gemini", addOwnKeys: "Add your own keys", configureProviderKeys: "Configure Anthropic, OpenAI, or another provider", checkingAiConnection: "Checking AI connection...", delegatedAgent: { asking: "Asking {{name}}...", asked: "Asked {{name}}", error: "Error asking {{name}}", elapsed: "{{duration}} elapsed", }, voiceMode: { entryButtonLabel: "Use microphone", promptTitle: "Use your voice", promptDescription: "Voice mode keeps listening while the agent navigates and takes actions.", setupTitle: "Set up voice mode", setupDescription: "Connect Builder.io to use managed voice with free credits, or add your own keys.", connectBuilder: "Connect Builder.io", useOpenAiKey: "Add your own keys", startWithOpenAiKey: "Start with OpenAI key", start: "Real-time voice", keepDictating: "Dictate", rememberPreference: "Remember my preference", showChat: "Show chat", hideChat: "Hide chat", end: "End voice mode", voiceSettings: "Voice settings", settings: { microphone: "Microphone", defaultMicrophone: "System default", microphoneSwitchFailed: "Could not switch microphones. Your current microphone is still active.", language: "Language", autoLanguage: "Auto", languages: { en: "English", es: "Spanish", fr: "French", de: "German", it: "Italian", pt: "Portuguese", ja: "Japanese", ko: "Korean", zh: "Chinese", }, intelligence: "Intelligence", intelligenceLevels: { instant: "Instant", balanced: "Balanced", deep: "Deep", }, voiceStyle: "Voice style", voiceChangePending: "Your new voice will apply next time you start voice mode.", voiceDescriptions: { marin: "Warm and natural", cedar: "Clear and grounded", coral: "Friendly and bright", sage: "Calm and thoughtful", verse: "Expressive and versatile", alloy: "Balanced and neutral", ash: "Smooth and confident", ballad: "Warm and expressive", echo: "Clear and direct", shimmer: "Light and upbeat", }, }, status: { connecting: "Connecting", listening: "Listening", speaking: "Speaking", working: "Working", error: "Voice mode needs attention", ending: "Ending voice mode", }, errors: { unsupported: "This browser does not support realtime voice conversations.", responseFailed: "OpenAI could not complete the voice response.", sessionFailed: "The realtime voice session encountered an error.", channelDisconnected: "The realtime voice control channel disconnected.", connectionTimedOut: "The realtime voice connection timed out. Try again after the app finishes loading.", connectionFailed: "The realtime voice connection failed.", offerFailed: "The browser did not create an audio offer.", }, }, }, contextXray: { provenance: { frameworkCore: "Framework", actionsPrompt: "Actions", template: "Template", enterpriseWorkspaceCore: "Enterprise workspace core", sqlWorkspace: "Workspace", legacyAppDefault: "App defaults", organization: "Organization", personal: "Personal", memory: "Memory", dbSchema: "SQL schema", tools: "Tools", modelOverlay: "Model overlay", runtimeContext: "Runtime context", }, governance: { required: "Required", inherited: "Inherited", user: "Your context", }, system: "System", conversation: "Conversation", free: "free", noSystemContext: "No system context is available for this scope yet.", panelTitle: "Context X-Ray", snapshotsTitle: "Snapshots", agent: "Agent", headerDescription: "See the system instructions and conversation tokens that shape the agent.", whatAgentKnows: "What the agent knows", orderedSystemDescription: "Ordered system context is grouped by where it comes from. System sections are visible here but cannot be evicted from a thread.", list: "List", treemap: "Treemap", loadingPreview: "Loading context preview…", previewUnavailable: "Context preview is not available yet.", noPreview: "No context preview is available for this scope yet.", liveThread: "Live thread", liveThreadDescription: "The latest thread snapshot, when one exists. This is a single current snapshot, not an append-only history.", latestThread: "Latest thread", noLiveThread: "No live thread snapshot is available yet.", orderedTokensTitle: "Context is ordered tokens, not weighted tokens.", orderedTokensDescription: "Required framework and enterprise policy come first, followed by inherited template, workspace, and organization instructions. Personal instructions and memory arrive later and can narrow or override earlier guidance where the prompt permits. These system sections are not evictable; only run-local conversation segments support pin, evict, and restore.", systemOrdered: "System · ordered, not evictable", }, jobs: { agent: "Agent", pageTitle: "Jobs", pageDescription: "See recurring jobs and automations that run work for you.", recurringTitle: "Recurring jobs", organizationRecurringDescription: "Cron jobs shared with this organization. Members can view them; creators and admins can manage them.", recurringDescription: "Scheduled prompts that ask the agent to do work automatically.", organizationMemberNote: "You can manage jobs you created.", loading: "Loading…", recurringLoadError: "Could not load recurring jobs.", organizationEmptyTitle: "No organization jobs yet", organizationEmptyDescription: "Describe a shared job for this organization.", recurringEmptyTitle: "No recurring jobs yet", recurringEmptyDescription: "Describe what should run and when.", organizationCreateTitle: "Create an organization job", recurringCreateTitle: "Create a recurring job", organizationPrompt: "Create a shared organization job that runs on a schedule and does this: ", recurringPrompt: "Create a recurring job that runs on a schedule and does this: every morning, summarize my inbox.", organizationEmpty: "No organization jobs yet.", recurringEmpty: "No recurring jobs yet.", enabled: "Enabled", paused: "Paused", disabled: "Disabled", nextRun: "Next run", lastRun: "Last run", details: "Details", pause: "Pause", resume: "Resume", delete: "Delete", recurringUpdateError: "Could not update recurring job.", automationUpdateError: "Could not update automation.", automationsTitle: "Automations", organizationAutomationsDescription: "Automations are personal today, so none are shown in the organization view.", automationsDescription: "Event-triggered and scheduled agent tasks managed from one place.", automationsEmptyTitle: "No automations yet", automationsEmptyDescription: "Describe what should happen and when.", automationsCreateTitle: "Create an automation", automationPrompt: "Create an automation that does this: ", automationsPersonalOnly: "Automations are personal today.", deleteRecurringTitle: "Delete recurring job?", deleteRecurringDescription: "This permanently removes the job and cannot be undone.", cancel: "Cancel", recurringDetails: "Recurring job details", instructions: "Instructions", mcpTools: "Connected MCP tools", automationsLoadError: "Could not load automations.", automationsEmpty: "No automations yet.", automationEventTrigger: "On {{event}}", automationScheduleTrigger: "Scheduled task", deleteAutomationTitle: "Delete automation?", deleteAutomationDescription: "This permanently removes the automation and cannot be undone.", automationDetails: "Automation details", automationEventDetails: "Runs when {{event}}.", condition: "Condition", firingTestEvent: "Firing test event…", fireEventError: "Failed to fire event ({{status}})", eventFired: "Event fired", fireEventErrorGeneric: "Failed to fire event.", newAutomation: "New automation", automationPlaceholder: "Describe what you want to automate…", personal: "Personal", organization: "Organization", fireTestEvent: "Fire test event", automationsEmptySettings: "Describe what should happen and when.", }, share: { titleWithResource: 'Share "{{title}}"', titleWithType: "Share {{type}}", owner: "Owner: {{name}}", close: "Close", shareOptions: "Share options", link: "Link", invite: "Invite", embed: "Embed", done: "Done", generalAccess: "General access", shareLink: "Share link", addPeopleByEmail: "Add people by email", notifyPeople: "Notify people", peopleWithAccess: "People with access", ownerRole: "Owner", remove: "Remove", noAccess: "No one has access yet.", embedUrl: "Embed URL", embedCode: "Embed code", copy: "Copy", role: "Role", private: "Private", privateDescription: "Only people with access can view", organization: "Organization", organizationDescription: "Anyone in your organization can view", public: "Public", publicDescription: "Anyone signed in with the link can view", viewer: "Viewer", viewerDescription: "Can view", editor: "Editor", editorDescription: "Can edit", admin: "Admin", adminDescription: "Can edit and manage access", }, runsTray: { runs: "Runs", agentRuns: "Agent runs", activeRun_one: "{{count}} active run", activeRun_other: "{{count}} active runs", failedRun_one: "{{count}} failed run", failedRun_other: "{{count}} failed runs", recentRuns: "Recent runs", noRecentRuns: "No recent runs", ariaAgentRuns: "Agent runs, {{label}}", summaryRunning: "{{activeCount}} running", summaryRunningRecent: "{{activeCount}} running · {{terminalCount}} recent", summaryRecent_one: "{{count}} recent run", summaryRecent_other: "{{count}} recent runs", noTrackedWorkYet: "No tracked work yet", emptyDescription: "Background agent work will appear here while it runs and after it finishes.", open: "Open", stopRun: "Stop {{title}}", hideRun: "Hide {{title}}", statusRunning: "Running", statusDone: "Done", statusFailed: "Failed", statusStopped: "Stopped", updatedJustNow: "Updated just now", finishedJustNow: "Finished just now", updatedMinutes: "Updated {{count}}m ago", finishedMinutes: "Finished {{count}}m ago", updatedHours: "Updated {{count}}h ago", finishedHours: "Finished {{count}}h ago", updatedDate: "Updated {{date}}", finishedDate: "Finished {{date}}", }, codeRequired: { fallbackDetail: "Edit locally or use Builder.io to edit this code in the cloud and continue customizing the app any way you like.", defaultFeature: "Make the requested code changes to this app", branchError: "Failed to create branch", title: "Code changes required", subtitleWithFeature: '"{{feature}}" creates or modifies source code, which needs Desktop or Builder from this surface.', subtitle: "This action creates or modifies source code, which needs Desktop or Builder from this surface.", desktopTitle: "Use Agent Native Desktop", desktopDescription: "Open the project in the desktop app to enable source edits and CLI access.", builderAgentTitle: "Use Builder.io Agent", builderAgentDescription: "Let our cloud agent make the changes for you. You'll get a link to preview and deploy.", codeChangeTitle: "This requires a code change", codeChangeBadge: "Code change", connectBuilderTitle: "Connect Builder.io", connectBuilderDescription: "Connect Builder to enable cloud-based code changes from this app.", setupRequired: "Setup required", branchCreated: "Branch created", close: "Close", }, extensions: { createPrompt: "Create an extension: {{prompt}}", createWidgetPrompt: 'Create a new widget that fits in slot "{{slotId}}". I\'ll describe what it should do next.', whatShouldItDo: "What should it do?", createPlaceholder: "A todo list, API dashboard, calculator...", title: "Extensions", hiddenShown: "Hiding shown", showHidden: "Show hidden", newExtension: "New Extension", newExtensionTitle: "New extension", buildPlaceholder: "Describe what you'd like to build...", namePlaceholder: "My Extension", descriptionPlaceholder: "What does this extension do?", contentPlaceholder: "...", emptyTitle: "Create your first extension", emptyDescription: "Describe a small app and the agent will build it.", hiddenFromEveryone: "Hidden from everyone", localFile: "Local file", optionsFor: "Options for {{name}}", unhideEveryone: "Unhide for everyone", hideEveryone: "Hide from everyone", localFileDescription: "This extension is backed by {{entryPath}}. Edit or remove it from the workspace.", deleteQuestion: "Archive {{name}}?", removeQuestion: "Remove {{name}}?", hideForYouDescription: "This hides it from your Extensions list without deleting it for anyone else.", removeEverywhereDescription: "This archives it everywhere it is shared.", cancel: "Cancel", remove: "Remove", removing: "Removing...", delete: "Archive", deleting: "Archiving...", openFullView: "Open full view", removeFromWidgetArea: "Remove from this widget area", deleteExtensionEllipsis: "Archive extension...", removeFromMyListEllipsis: "Remove from my list...", removeFromWidgetAreaForMe: "Remove from this widget area (for me)", deleteEverywhereConfirmation: "This archives the extension everywhere, for everyone it's shared with.", addWidget: "Add widget", loading: "Loading...", noWidgetsAvailable: "No widgets available for this slot yet.", buildNewWidget: "Build a new widget", contactSidebarWidget: "Contact sidebar widget", contactSidebarDescription: "Appears beside the current conversation with contact and thread context.", eventDetailWidget: "Event detail widget", eventDetailDescription: "Appears below the open calendar event with event and attendee context.", addWidgetHere: "Add widget here", back: "Back", editExtension: "Edit Extension", saving: "Saving...", save: "Save", create: "Create", moreOptions: "More options", appearsIn: "Appears in", noWidgetAreas: "Not installed in any widget areas. Ask the agent to add it somewhere.", widgetAreaCount_one: "This extension can render in {{count}} widget area.", widgetAreaCount_other: "This extension can render in {{count}} widget areas.", nameLabel: "Name", descriptionLabel: "Description", contentLabel: "Content", previewTitle: "Extension preview", previewEmpty: "Preview will appear here", loadError: "Couldn't load extensions.", widgetsLoadError: "Couldn't load widgets.", widgetAreasLoadError: "Couldn't load widget areas.", historyLoadError: "Couldn't load extension history.", versionLoadError: "Couldn't load this extension version.", retry: "Retry", }, org: { createTitle: "Create your organization", createDescription: "This app organizes your content by team. Create an organization to continue - you can invite teammates afterward.", loadErrorTitle: "Couldn't load organization", loadErrorFallback: "Couldn't load organization.", tryAgain: "Try again", sendFeedback: "Send feedback", feedbackPlaceholder: "Describe what happened before this organization error appeared.", openGitHubIssue: "Open GitHub issue", yourOrganization: "Your organization", joinYourTeam: "Join your team", openToDomainEmails: "Open to @{{domain}} emails", joinOrg: "Join {{name}}", pendingInvitations: "Pending invitations", invitedBy: "from {{name}}", accept: "Accept", createSeparate: "or create a separate organization", organizationName: "Organization name", organizationPlaceholder: "Acme Inc.", createOrganization: "Create organization", create: "Create", creating: "Creating...", team: "Team", createOrgCardTitle: "Create an Organization", createOrgCardDescription: "Set up a team to collaborate with your colleagues.", createOrgVaultNotice: "Vault keys aren't shared between organizations. A new organization starts with an empty vault, so you'll need to add its own API keys and credentials before connected apps work.", acceptInvitationOrgSwitchNotice: "Joining makes {{name}} your active organization. Connected apps will switch to {{name}}'s vault keys, so anything using keys saved in your current organization may stop working until {{name}} has its own.", joinDomainOne: "An organization matching your email domain already exists. Join it to collaborate with your teammates.", joinDomainMany: "Organizations matching your email domain already exist. Join one to collaborate with your teammates.", join: "Join", invitedByLabel: "Invited by {{name}}", you: "You", owner: "Owner", admin: "Admin", member: "Member", members: "Members", inviteMembers: "Invite members", invited: "Invited", role: "Role", status: "Status", actions: "Actions", noMembers: "No members yet.", memberCount_one: "{{count}} member", memberCount_other: "{{count}} members", youAreRole: "You are {{role}}", changeRole: "Change role", removeMember: "Remove member", cancel: "Cancel", remove: "Remove", save: "Save", loading: "Loading...", dangerZone: "Danger zone", deleteOrg: "Delete organization", deleteOrgDescription: "Permanently deletes this organization, its members, and its pending invitations. Data owned by the organization becomes inaccessible. This cannot be undone.", deleteOrgConfirmPrompt: "Type {{name}} to confirm.", deleteOrgConfirmPlaceholder: "Organization name", deleteOrgConfirmCta: "Delete organization", deleteOrgPending: "Deleting…", }, integrations: { webhookUrl: "Webhook URL", copyWebhookUrl: "Copy webhook URL", webhookUrlLocalOnly: "{{platform}} can't call {{url}} — that address only exists on this machine. Deploy the app, or expose this server through an HTTPS tunnel, then open this page from the public address to get a webhook URL you can paste.", notConfigured: "Not configured. Set the required secrets to enable this integration.", enable: "Enable", disable: "Disable", toggling: "...", networkError: "Network error reaching the server", back: "Back", agentEngineRequired: "Agent engine required", agentEngineDescription: "Connect Builder.io or an LLM key before {{platform}} can answer.", openLlm: "Open LLM", setup: "Setup", shareDocumentsWith: "Share documents with", copyServiceAccountEmail: "Copy service account email", requiredSecrets: "Required secrets", envHelp: "Set these in your .env file or environment to connect.", copy: "Copy", documentation: "Documentation", clientAvailable: "This agent's A2A endpoint is automatically available. No configuration needed.", addChatIntegration: "Add a chat integration", chatIntegrations: "Chat Integrations", chatIntegrationsDescription: "Talk to this agent from other platforms", addIntegration: "Add integration", dispatchEntrypoint: "For a central Slack or Telegram entrypoint that can route work across multiple apps, use the", sharedMessaging: "Need one shared messaging surface for your workspace? Connect Slack or Telegram to a dispatch app and let it delegate to other agents over A2A.", }, mcpIntegrations: { menuLabel: "Integrations", menuDescription: "Connect MCP tools to the agent", title: "Connect integrations", description: "Browse {{count}} MCP integrations or add a custom server.", searchPlaceholder: "Search integrations", addYourOwn: "Add your own", noMatches: "No integrations match that search.", connected: "Connected", configure: "Configure", connect: "Connect", connectWithOAuth: "Connect", useApiToken: "Use API token", connectSuggestion: "Connect {{name}} to use it in chat", connectSuggestionWithApiToken: "Connect {{name}} with an API token to use it in chat", dismissSuggestion: "Dismiss integration suggestion", backToIntegrations: "Back to integrations", customTitle: "Add custom MCP server", configureTitle: "Configure {{name}}", presetNoAuthDescription: "Preset values are filled in. Test the endpoint or connect it now.", presetAuthDescription: "Preset values are filled in. Add any required authorization details before connecting.", customDescription: "Paste a Streamable HTTP or SSE MCP endpoint and optional headers.", oauthNotice: "This provider usually requires an OAuth setup. Follow the provider docs, or add an Authorization header if your endpoint supports token-based access.", personal: "Personal", organization: "Organization", orgNoOrg: "Join an organization to share MCP servers", orgAdminOnly: "Only owners and admins can add org-scope servers", serverNameRequired: "Enter a server name before connecting with OAuth.", serverName: "Server name", url: "URL", fieldDescription: "Description", headers: "Headers", serverNamePlaceholder: "Server name", urlPlaceholder: "https://mcp.example.com/mcp", descriptionPlaceholder: "Description (optional)", headersPlaceholder: "Authorization: Bearer ", openSetupDocs: "Open setup docs", viewSetup: "View setup", test: "Test", toolsAvailable_one: "{{count}} tool available", toolsAvailable_other: "{{count}} tools available", failed: "Failed", docsLabel: "View {{name}} docs", catalog: { context7: { description: "Fetch current library docs in agent chats.", useCase: "Documentation, technical reference, API docs, framework guides", }, sentry: { description: "Inspect issues, events, and debugging data.", useCase: "Error monitoring, debugging, performance, crash reports", }, notion: { description: "Search pages and team knowledge.", useCase: "Documentation, knowledge management, notes, content creation", setupNote: "Notion MCP uses user OAuth. Enterprise workspaces can audit MCP usage and allow or block clients; reconnect after admin policy changes.", }, granola: { description: "Search meeting notes, transcripts, and action items.", useCase: "Meeting notes, recordings, transcripts, action items, follow-ups", setupNote: "Granola MCP uses browser OAuth. Authorize the signed-in Granola account and review which meeting notes and transcripts the agent can access.", }, semgrep: { description: "Scan code for security findings.", useCase: "Security scanning, vulnerability detection, code analysis", }, linear: { description: "Read and write Linear issues.", useCase: "Project management, issue tracking, planning, bug reports", }, supabase: { description: "Manage data, auth, and backend services.", useCase: "Database, authentication, storage, edge functions", }, neon: { description: "Work with serverless Postgres projects.", useCase: "Database management, serverless Postgres, data storage", }, stripe: { description: "Manage payments, subscriptions, and customers.", useCase: "Payments, subscriptions, invoicing, customer management", }, atlassian: { description: "Read and write Jira issues and Confluence content.", useCase: "Project management, issue tracking, documentation, team collaboration", setupNote: "Atlassian admins manage the allowed AI domains and Rovo MCP permissions. Use the current Streamable HTTP endpoint, /v1/mcp, and reconnect after policy changes.", }, cloudflare: { description: "Search and operate Cloudflare services through MCP.", useCase: "DNS, Workers, domains, security, observability, platform APIs", setupNote: "Cloudflare's managed MCP directory contains product-specific servers as well as the broad API server. Review the scopes and choose the narrowest endpoint that fits your workflow.", }, gitlab: { description: "Read and manage GitLab projects, issues, and merge requests.", useCase: "Repositories, issues, merge requests, CI/CD, code analytics", setupNote: "GitLab MCP is currently beta. On GitLab.com, a top-level group admin must allow MCP access before OAuth can complete; self-managed instances have an equivalent instance setting.", }, figma: { description: "Bring Figma design context and canvas actions into an agent.", useCase: "Design files, components, variables, design systems, canvas", setupNote: "Figma MCP only allows clients listed in Figma's MCP Catalog, so this remote endpoint cannot connect from Agent Native yet. Use the Figma REST API fallback with a personal access token for reading file and node context; MCP canvas actions remain unavailable until Figma approves Agent Native.", }, canva: { description: "Search, create, and update Canva designs and assets.", useCase: "Designs, templates, assets, brand kits, exports, collaboration", setupNote: "Canva MCP uses per-user OAuth and requires clients to allow Canva's canva.com and canva.ai domains. Confirm the current redirect and client setup in Canva's MCP documentation before connecting.", }, vercel: { description: "Search Vercel docs and inspect projects, deployments, and logs.", useCase: "Deployments, projects, logs, domains, hosting, documentation", setupNote: "Vercel MCP only accepts reviewed and approved AI clients. Agent Native must be added to Vercel's supported-client list before a generic framework connection will work.", }, github: { description: "Read repositories, issues, pull requests, and code context.", useCase: "Repositories, issues, pull requests, code, engineering analytics", setupNote: "GitHub does not use a Figma-style vendor client allowlist. Its hosted endpoint is tied to GitHub Copilot integrations; clients need a registered OAuth app, and organizations may enforce OAuth App Access Policies.", }, slack: { description: "Search Slack conversations and take workspace actions through MCP.", useCase: "Messages, channels, people, company memory, workflows", setupNote: "Slack MCP requires a registered Slack app with a fixed app ID. Dynamic client registration is not supported, and only Slack Marketplace or internal apps may connect. Use Slack's managed messaging OAuth flow for Agent Native workflows.", }, asana: { description: "Search and manage Asana tasks, projects, and work graph data.", useCase: "Tasks, projects, portfolios, planning, workload", setupNote: "Asana's V2 MCP server requires a pre-registered MCP OAuth app and does not support dynamic client registration. Configure an Asana app client before connecting.", }, hubspot: { description: "Search and update HubSpot CRM records through MCP.", useCase: "CRM, contacts, companies, deals, tickets, customer analytics", setupNote: "HubSpot MCP requires a HubSpot MCP Auth App and PKCE. Create the app in the HubSpot Developer Platform before connecting; the existing HubSpot OAuth connector remains available to app actions.", }, intercom: { description: "Search conversations and customer support knowledge.", useCase: "Customer support, conversations, contacts, help center content", setupNote: "Intercom MCP uses OAuth and is available for US-hosted workspaces. Confirm the workspace region and requested scopes during authorization.", }, monday: { description: "Work with boards, items, and team workflows.", useCase: "Work management, boards, projects, tasks, team operations", setupNote: "monday.com MCP uses OAuth over Streamable HTTP. Choose the workspace and permissions to share during authorization.", }, webflow: { description: "Read and update Webflow sites and content.", useCase: "Websites, CMS, site content, publishing, design workflows", setupNote: "Webflow MCP uses OAuth. Designer capabilities may install Webflow's Bridge App during authorization; Data API access is available separately.", }, paypal: { description: "Work with PayPal payments, invoices, and commerce data.", useCase: "Payments, invoices, transactions, merchant operations", setupNote: "PayPal exposes OAuth discovery and login for its remote MCP server. Agent Native uses the currently live /sse endpoint; review the merchant permissions before authorizing.", }, box: { description: "Search and manage files and folders in Box.", useCase: "Files, folders, enterprise content, search, collaboration", setupNote: "Box MCP is beta and requires an administrator to enable it. Custom clients also need Box Integration Credentials, a redirect URI, and approved scopes.", }, netlify: { description: "Inspect and operate Netlify sites and deployments.", useCase: "Sites, deployments, builds, domains, hosting operations", setupNote: "Netlify documents a remote MCP setup for supported clients. Review the site and team permissions before completing OAuth.", }, zapier: { description: "Connect MCP tools to thousands of app actions.", useCase: "Automation, workflows, app actions, cross-service operations", setupNote: "Zapier MCP uses a user-created MCP server and connection token for unlisted clients. Create the server in Zapier, then paste its generated bearer token into the header field.", }, }, auth: { none: "No auth", headers: "Header", oauth: "OAuth", }, status: { beta: "Beta", setupRequired: "Provider setup", clientRestricted: "Approved clients only", verified: "Verified", preflightOnly: "Preflight only", restricted: "Restricted", }, }, observability: { noData: "No data available", noConversations: "No conversations recorded yet", noEvals: "No eval results recorded yet", noExperiments: "No experiments created yet", totalRuns: "Total runs", totalCost: "Total cost", avgLatency: "Avg latency", toolSuccess: "Tool success", thumbsUp: "Thumbs up", avgEvalScore: "Avg eval score", run: "Run", model: "Model", duration: "Duration", cost: "Cost", tools: "Tools", time: "Time", failedCount: "({{count}} failed)", backToList: "Back to list", spans: "Spans", type: "Type", name: "Name", tokens: "Tokens", status: "Status", totalEvals: "Total evals", avgScore: "Avg score", scoresByCriteria: "Scores by criteria", overview: "Overview", conversations: "Conversations", evals: "Evals", experiments: "Experiments", feedback: "Feedback", variants: "Variants", created: "Created", backToExperiments: "Back to experiments", metrics: "Metrics", level: "Level", results: "Results", variant: "Variant", metric: "Metric", value: "Value", totalFeedback: "Total feedback", thumbsDown: "Thumbs down", frustration: "Frustration", thumbsUpRate: "Thumbs up rate", categories: "Categories", }, error: { genericTitle: "Something went wrong", genericDetails: "An unexpected error occurred.", notFoundTitle: "Page not found", notFoundDetails: "This page doesn't exist. It may have been moved or deleted.", statusTitle: "{{status}} Error", goHome: "Go home", }, }; export default messages;