## Summary - add SideCar support across the server and UI, including proxied tabs, picker/settings flows, and websocket-aware proxying - unify top-level tab handling so workspace instances and SideCars share the same tab model and navigation flows - limit SideCars to port-based services only, removing server-managed process control from the final API and UI --------- Co-authored-by: Shantur <shantur@Mac.home> Co-authored-by: Shantur <shantur@Shanturs-MacBook-Pro-M5.local>
235 lines
15 KiB
TypeScript
235 lines
15 KiB
TypeScript
export const settingsMessages = {
|
|
"instanceServiceStatus.sections.lsp": "LSP Servers",
|
|
"instanceServiceStatus.sections.mcp": "MCP Servers",
|
|
"instanceServiceStatus.sections.plugins": "Plugins",
|
|
"instanceServiceStatus.lsp.loading": "Loading LSP servers...",
|
|
"instanceServiceStatus.lsp.empty": "No LSP servers detected.",
|
|
"instanceServiceStatus.lsp.status.connected": "Connected",
|
|
"instanceServiceStatus.lsp.status.error": "Error",
|
|
"instanceServiceStatus.mcp.loading": "Loading MCP servers...",
|
|
"instanceServiceStatus.mcp.empty": "No MCP servers detected.",
|
|
"instanceServiceStatus.mcp.toggleAriaLabel": "Toggle {name} MCP server",
|
|
"instanceServiceStatus.plugins.loading": "Loading plugins...",
|
|
"instanceServiceStatus.plugins.empty": "No plugins configured.",
|
|
|
|
"permissionBanner.pendingRequests.one": "{count} pending request",
|
|
"permissionBanner.pendingRequests.other": "{count} pending requests",
|
|
"permissionBanner.detail.permission.one": "{count} permission",
|
|
"permissionBanner.detail.permission.other": "{count} permissions",
|
|
"permissionBanner.detail.question.one": "{count} question",
|
|
"permissionBanner.detail.question.other": "{count} questions",
|
|
"permissionBanner.detail.wrapper": " ({detail})",
|
|
|
|
"agentSelector.placeholder": "Select agent...",
|
|
"agentSelector.badge.subagent": "subagent",
|
|
"agentSelector.none": "None",
|
|
"agentSelector.trigger.primary": "Agent: {agent}",
|
|
|
|
"modelSelector.placeholder.search": "Search models...",
|
|
"modelSelector.none": "None",
|
|
"modelSelector.trigger.primary": "Model: {model}",
|
|
"modelSelector.favoritesOnly.toggle.ariaLabel": "Toggle favorites only",
|
|
"modelSelector.favoritesOnly.showAll": "Show all models",
|
|
"modelSelector.favorite.add": "Add to favorites",
|
|
"modelSelector.favorite.remove": "Remove from favorites",
|
|
|
|
"thinkingSelector.variant.default": "Default",
|
|
"thinkingSelector.label": "Thinking: {variant}",
|
|
|
|
"envEditor.title": "Environment Variables",
|
|
"envEditor.count.one": "({count} variable)",
|
|
"envEditor.count.other": "({count} variables)",
|
|
"envEditor.fields.name.placeholder": "Variable name",
|
|
"envEditor.fields.name.readOnlyTitle": "Variable name (read-only)",
|
|
"envEditor.fields.value.placeholder": "Variable value",
|
|
"envEditor.actions.remove.title": "Remove variable",
|
|
"envEditor.actions.add.title": "Add variable",
|
|
"envEditor.empty": "No environment variables configured. Add variables above to customize the OpenCode environment.",
|
|
"envEditor.help": "These variables will be available in the OpenCode environment when starting instances.",
|
|
|
|
"contextUsagePanel.headings.tokens": "Tokens",
|
|
"contextUsagePanel.headings.context": "Context",
|
|
"contextUsagePanel.labels.input": "Input",
|
|
"contextUsagePanel.labels.output": "Output",
|
|
"contextUsagePanel.labels.cost": "Cost",
|
|
"contextUsagePanel.labels.used": "Used",
|
|
"contextUsagePanel.labels.available": "Avail",
|
|
"contextUsagePanel.unavailable": "--",
|
|
|
|
"settings.title": "Settings",
|
|
"settings.navigationAriaLabel": "Settings sections",
|
|
"settings.close": "Close settings",
|
|
"settings.content.eyebrow": "Workspace preferences",
|
|
"settings.open.title": "Open settings",
|
|
"settings.open.ariaLabel": "Open settings",
|
|
"settings.nav.appearance": "Appearance",
|
|
"settings.nav.notifications": "Notifications",
|
|
"settings.nav.remote": "Remote Access",
|
|
"settings.nav.speech": "Speech",
|
|
"settings.nav.opencode": "OpenCode",
|
|
"settings.scope.device": "This device",
|
|
"settings.scope.server": "Server setting",
|
|
"settings.common.enabled": "Enabled",
|
|
"settings.common.disabled": "Disabled",
|
|
"settings.section.appearance.title": "Appearance",
|
|
"settings.section.appearance.subtitle": "Adjust how the app looks on this device.",
|
|
"settings.appearance.theme.title": "Theme",
|
|
"settings.appearance.theme.subtitle": "Choose the color mode used throughout the app.",
|
|
"settings.appearance.theme.option.system": "Match your operating system setting",
|
|
"settings.appearance.theme.option.light": "Use the light appearance",
|
|
"settings.appearance.theme.option.dark": "Use the dark appearance",
|
|
"settings.section.notifications.title": "Notifications",
|
|
"settings.section.notifications.subtitle": "Control OS-level notifications for session activity.",
|
|
"settings.notifications.permission.granted": "Granted",
|
|
"settings.notifications.permission.denied": "Denied",
|
|
"settings.notifications.permission.default": "Not granted",
|
|
"settings.notifications.permission.unsupported": "Unsupported",
|
|
"settings.notifications.messages.unsupportedEnvironment": "OS notifications are not supported in this environment.",
|
|
"settings.notifications.messages.permissionDenied": "Notification permission denied. Enable notifications in your system or browser settings.",
|
|
"settings.notifications.messages.permissionNotGranted": "Notification permission not granted.",
|
|
"settings.notifications.messages.unsupportedGeneral": "Notifications are not supported in this environment.",
|
|
"settings.notifications.messages.permissionGranted": "Permission granted. You can now enable notifications.",
|
|
"settings.notifications.messages.permissionRequestDenied": "Permission denied. You may need to enable notifications in your system or browser settings.",
|
|
"settings.notifications.sessionStatus.title": "Session status notifications",
|
|
"settings.notifications.sessionStatus.subtitle": "Receive alerts when sessions need your attention.",
|
|
"settings.notifications.enable.title": "Enable notifications",
|
|
"settings.notifications.enable.permission": "Permission: {permission}",
|
|
"settings.notifications.requestPermission.title": "Request permission",
|
|
"settings.notifications.requestPermission.subtitle": "Allow the app to send notifications on this device.",
|
|
"settings.notifications.requestPermission.action": "Request",
|
|
"settings.notifications.allowVisible.title": "Notify when the app is focused",
|
|
"settings.notifications.allowVisible.subtitle": "Keep alerts enabled even while this window is visible.",
|
|
"settings.notifications.unsupportedNote": "Notifications are not supported in this environment. The notifications control stays disabled.",
|
|
"settings.notifications.events.title": "Notify me when",
|
|
"settings.notifications.events.subtitle": "Choose which session events should send alerts.",
|
|
"settings.notifications.events.needsInput": "Session needs input",
|
|
"settings.notifications.events.idle": "Session becomes idle",
|
|
"settings.notifications.status.enabled": "Notifications enabled",
|
|
"settings.notifications.status.disabled": "Notifications disabled",
|
|
"settings.notifications.status.unsupported": "Notifications unsupported",
|
|
"settings.section.remote.title": "Remote Access",
|
|
"settings.section.remote.subtitle": "Review how this server is exposed on your network and secure access credentials.",
|
|
"settings.section.opencode.title": "OpenCode",
|
|
"settings.section.opencode.subtitle": "Choose the OpenCode binary and environment used for new instances.",
|
|
"settings.opencode.runtime.title": "Runtime",
|
|
"settings.opencode.runtime.subtitle": "Configure which OpenCode binary new instances launch with.",
|
|
"settings.opencode.logLevel.title": "OpenCode Log Level",
|
|
"settings.opencode.logLevel.subtitle": "Control the log verbosity used when launching new OpenCode instances.",
|
|
"settings.opencode.logLevel.selector.title": "Default log level",
|
|
"settings.opencode.logLevel.selector.subtitle": "Choose how verbose new OpenCode instances should be.",
|
|
"settings.opencode.logLevel.option.debug": "Debug",
|
|
"settings.opencode.logLevel.option.info": "Info",
|
|
"settings.opencode.logLevel.option.warn": "Warn",
|
|
"settings.opencode.logLevel.option.error": "Error",
|
|
|
|
|
|
"settings.appearance.behavior.title": "Interaction",
|
|
"settings.appearance.behavior.subtitle": "Message, diff, and input defaults.",
|
|
"settings.behavior.keyboardHints.title": "Keyboard shortcut hints",
|
|
"settings.behavior.keyboardHints.subtitle": "Show keyboard shortcut hints across the UI.",
|
|
"settings.behavior.thinking.title": "Thinking sections",
|
|
"settings.behavior.thinking.subtitle": "Show or hide AI thinking sections in messages.",
|
|
"settings.behavior.thinkingDefault.title": "Thinking default",
|
|
"settings.behavior.thinkingDefault.subtitle": "Choose whether thinking sections start expanded or collapsed.",
|
|
"settings.behavior.timelineTools.title": "Timeline tool calls",
|
|
"settings.behavior.timelineTools.subtitle": "Show or hide tool call entries in the message timeline.",
|
|
"settings.behavior.diffView.title": "Diff view",
|
|
"settings.behavior.diffView.subtitle": "Choose how tool-call diffs are displayed.",
|
|
"settings.behavior.diffView.option.split": "Split",
|
|
"settings.behavior.diffView.option.unified": "Unified",
|
|
"settings.behavior.toolOutputsDefault.title": "Tool outputs default",
|
|
"settings.behavior.toolOutputsDefault.subtitle": "Choose whether tool outputs start expanded or collapsed.",
|
|
"settings.behavior.diagnosticsDefault.title": "Diagnostics default",
|
|
"settings.behavior.diagnosticsDefault.subtitle": "Choose whether diagnostics output starts expanded or collapsed.",
|
|
"settings.behavior.toolInputsVisibility.title": "Tool inputs visibility",
|
|
"settings.behavior.toolInputsVisibility.subtitle": "Set default visibility for tool call input arguments.",
|
|
"settings.behavior.usageMetrics.title": "Token usage metrics",
|
|
"settings.behavior.usageMetrics.subtitle": "Show or hide token and cost stats for assistant messages.",
|
|
"settings.behavior.autoCleanup.title": "Auto-cleanup blank sessions",
|
|
"settings.behavior.autoCleanup.subtitle": "Automatically clean up blank sessions when creating new ones.",
|
|
"settings.behavior.promptVoiceInput.title": "Prompt voice input",
|
|
"settings.behavior.promptVoiceInput.subtitle": "Show the microphone control for speech-to-text prompt input when speech is configured.",
|
|
"settings.behavior.promptSubmit.title": "Enter to submit",
|
|
"settings.behavior.promptSubmit.subtitle": "Use Enter to submit prompts; Cmd/Ctrl+Enter inserts a new line.",
|
|
"settings.speech.title": "Speech",
|
|
"settings.speech.subtitle": "Configure speech-to-text now and text-to-speech groundwork for later features.",
|
|
"settings.speech.provider.title": "Provider",
|
|
"settings.speech.provider.subtitle": "Speech requests use the server-side speech adapter.",
|
|
"settings.speech.provider.openaiCompatible": "OpenAI-compatible",
|
|
"settings.speech.status.loading": "Checking configuration...",
|
|
"settings.speech.status.configured": "Configured",
|
|
"settings.speech.status.missing": "Missing API key",
|
|
"settings.speech.status.error": "Speech service unavailable",
|
|
"settings.speech.apiKey.title": "API key",
|
|
"settings.speech.apiKey.subtitle": "Used for CodeNomad-managed speech requests.",
|
|
"settings.speech.apiKey.placeholder": "Enter a new API key",
|
|
"settings.speech.apiKey.storedNote": "A saved API key is hidden. Enter a new value to replace it, or leave the field blank to keep it.",
|
|
"settings.speech.apiKey.clearAction": "Clear saved key",
|
|
"settings.speech.apiKey.clearPending": "The saved API key will be removed when you save.",
|
|
"settings.speech.baseUrl.title": "Base URL",
|
|
"settings.speech.baseUrl.subtitle": "Optional override for OpenAI-compatible speech endpoints.",
|
|
"settings.speech.baseUrl.placeholder": "https://api.openai.com/v1",
|
|
"settings.speech.sttModel.title": "Transcription model",
|
|
"settings.speech.sttModel.subtitle": "Model used for prompt speech-to-text requests.",
|
|
"settings.speech.ttsModel.title": "Speech model",
|
|
"settings.speech.ttsModel.subtitle": "Default text-to-speech model reserved for future playback features.",
|
|
"settings.speech.ttsVoice.title": "Default voice",
|
|
"settings.speech.ttsVoice.subtitle": "Default text-to-speech voice reserved for future playback features.",
|
|
"settings.speech.playbackMode.title": "Playback mode",
|
|
"settings.speech.playbackMode.subtitle": "Choose whether TTS starts playing as audio streams in or after the full file is generated.",
|
|
"settings.speech.playbackMode.streaming": "Streaming",
|
|
"settings.speech.playbackMode.buffered": "Buffered",
|
|
"settings.speech.ttsFormat.title": "Output format",
|
|
"settings.speech.ttsFormat.subtitle": "Choose the audio format for synthesized speech. Streaming support depends on your provider and browser.",
|
|
"settings.speech.help": "Prompt voice input appears when speech transcription is configured and supported. Message playback uses the TTS mode and format selected here.",
|
|
"settings.speech.compatibility.streamingUnavailable": "Your current speech provider configuration does not advertise streaming TTS. Switch playback mode to buffered if you want playback to work now.",
|
|
"settings.speech.compatibility.browserStreamingUnavailable": "Your current browser cannot stream the selected TTS format. Choose buffered playback or switch to a different format.",
|
|
"settings.speech.compatibility.runtimeNote": "All formats stay selectable in streaming mode. Some browser and provider combinations may still fail at playback time.",
|
|
"settings.speech.testPlayback.action": "Test playback",
|
|
"settings.speech.testPlayback.generating": "Generating sample",
|
|
"settings.speech.testPlayback.stop": "Stop sample",
|
|
"settings.speech.testPlayback.sample": "Thank you for using CodeNomad, your speech settings are working fine.",
|
|
"settings.speech.testPlayback.note": "The test uses your current playback mode and format immediately. Save API key, base URL, model, or voice changes first if you want those reflected too.",
|
|
"settings.speech.save.action": "Save",
|
|
"settings.speech.save.saving": "Saving...",
|
|
"settings.speech.save.saved": "Saved",
|
|
"settings.speech.save.unsaved": "Unsaved changes",
|
|
"settings.speech.save.error": "Save failed",
|
|
"settings.nav.sidecars": "SideCars",
|
|
"settings.section.sidecars.eyebrow": "Server services",
|
|
"settings.section.sidecars.title": "SideCars",
|
|
"settings.section.sidecars.subtitle": "Configure local services listening on fixed ports that the server can proxy into tabs.",
|
|
"sidecars.form.name": "Name",
|
|
"sidecars.form.validation": "Enter a valid SideCar name and port.",
|
|
"sidecars.form.port": "Port",
|
|
"sidecars.form.insecure": "Use HTTP",
|
|
"sidecars.form.protocol": "Protocol",
|
|
"sidecars.form.protocol.help": "Choose how the proxy should connect to the local service.",
|
|
"sidecars.form.protocol.https": "HTTPS",
|
|
"sidecars.form.protocol.http": "HTTP",
|
|
"sidecars.form.prefixMode": "Prefix mode",
|
|
"sidecars.form.prefixMode.help": "Choose whether the SideCar receives the public /sidecars path prefix.",
|
|
"sidecars.form.prefixMode.strip": "Strip prefix",
|
|
"sidecars.form.prefixMode.preserve": "Preserve prefix",
|
|
"sidecars.form.add": "Add SideCar",
|
|
"sidecars.kind.port": "Port",
|
|
"sidecars.status.running": "Running",
|
|
"sidecars.status.stopped": "Stopped",
|
|
"sidecars.basePath": "Base path",
|
|
"sidecars.settings.listTitle": "Configured SideCars",
|
|
"sidecars.settings.listSubtitle": "Review the port-based SideCars available in the picker.",
|
|
"sidecars.settings.empty": "No SideCars configured yet.",
|
|
"sidecars.picker.title": "Open SideCar",
|
|
"sidecars.picker.loading": "Loading SideCars...",
|
|
"sidecars.picker.subtitle": "Choose an available SideCar to open in a new tab.",
|
|
"sidecars.picker.empty": "No port-based SideCars are available yet.",
|
|
"sidecars.picker.close": "Close",
|
|
"sidecars.open.errorTitle": "Unable to open SideCar",
|
|
"sidecars.open.notFound": "SideCar not found.",
|
|
"sidecars.open.notRunning": "SideCar is not reachable on its configured port.",
|
|
"sidecars.back": "Back",
|
|
"sidecars.refresh": "Refresh",
|
|
"sidecars.path": "Path",
|
|
"sidecars.go": "Go",
|
|
} as const
|