@neuralnomads/codenomad-dev 0.20.0-dev-20260907-e9e94a67 → 0.20.0-dev-20260908-e5115fe8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/package.json +1 -1
  2. package/public/assets/{App-lAZZOE--.js → App-DPj4p3An.js} +16 -16
  3. package/public/assets/App-DPj4p3An.js.map +1 -0
  4. package/public/assets/{FilesTab-CgfwF6tR.js → FilesTab-C8fnWsM4.js} +2 -2
  5. package/public/assets/{FilesTab-CgfwF6tR.js.map → FilesTab-C8fnWsM4.js.map} +1 -1
  6. package/public/assets/{GitChangesTab-r1JoAD9n.js → GitChangesTab-C3rapWwl.js} +2 -2
  7. package/public/assets/{GitChangesTab-r1JoAD9n.js.map → GitChangesTab-C3rapWwl.js.map} +1 -1
  8. package/public/assets/{SplitFilePanel-D9FfoZUZ.js → SplitFilePanel-D3S7Zfcc.js} +2 -2
  9. package/public/assets/{SplitFilePanel-D9FfoZUZ.js.map → SplitFilePanel-D3S7Zfcc.js.map} +1 -1
  10. package/public/assets/{StatusTab-DMnWj5WS.js → StatusTab-DHvQ-0to.js} +2 -2
  11. package/public/assets/{StatusTab-DMnWj5WS.js.map → StatusTab-DHvQ-0to.js.map} +1 -1
  12. package/public/assets/{align-justify-Dc1gjAkp.js → align-justify-BIN0BnZw.js} +2 -2
  13. package/public/assets/{align-justify-Dc1gjAkp.js.map → align-justify-BIN0BnZw.js.map} +1 -1
  14. package/public/assets/{bundle-full-CXK0RpEe.js → bundle-full-BfEvraVO.js} +2 -2
  15. package/public/assets/{bundle-full-CXK0RpEe.js.map → bundle-full-BfEvraVO.js.map} +1 -1
  16. package/public/assets/{client-state-DmImbmIC.js → client-state-CBKOWfhu.js} +2 -2
  17. package/public/assets/{client-state-DmImbmIC.js.map → client-state-CBKOWfhu.js.map} +1 -1
  18. package/public/assets/{diff-viewer-CbJWj99J.js → diff-viewer-6oxyPi3-.js} +2 -2
  19. package/public/assets/{diff-viewer-CbJWj99J.js.map → diff-viewer-6oxyPi3-.js.map} +1 -1
  20. package/public/assets/{index-CF7UTwOC.js → index-BJrZpSe6.js} +2 -2
  21. package/public/assets/{index-CF7UTwOC.js.map → index-BJrZpSe6.js.map} +1 -1
  22. package/public/assets/{index-UtSy15g1.js → index-B_9dhJTl.js} +2 -2
  23. package/public/assets/{index-UtSy15g1.js.map → index-B_9dhJTl.js.map} +1 -1
  24. package/public/assets/{index-xkTcWbMt.js → index-BeWVYvfJ.js} +2 -2
  25. package/public/assets/{index-xkTcWbMt.js.map → index-BeWVYvfJ.js.map} +1 -1
  26. package/public/assets/{index-C1AVy0gw.js → index-BhBg6Tnf.js} +2 -2
  27. package/public/assets/{index-C1AVy0gw.js.map → index-BhBg6Tnf.js.map} +1 -1
  28. package/public/assets/{index-Bv4cVEdt.js → index-C9znv1NB.js} +2 -2
  29. package/public/assets/{index-Bv4cVEdt.js.map → index-C9znv1NB.js.map} +1 -1
  30. package/public/assets/{index-kaTj6a0V.js → index-CD9b6FoA.js} +2 -2
  31. package/public/assets/{index-kaTj6a0V.js.map → index-CD9b6FoA.js.map} +1 -1
  32. package/public/assets/{index-D5cfewGV.js → index-CmJg6xjr.js} +2 -2
  33. package/public/assets/{index-D5cfewGV.js.map → index-CmJg6xjr.js.map} +1 -1
  34. package/public/assets/{index-C8aIk3bb.js → index-DHNlQHw2.js} +2 -2
  35. package/public/assets/{index-C8aIk3bb.js.map → index-DHNlQHw2.js.map} +1 -1
  36. package/public/assets/{index-AwBa5De4.js → index-DdklToXY.js} +2 -2
  37. package/public/assets/{index-AwBa5De4.js.map → index-DdklToXY.js.map} +1 -1
  38. package/public/assets/{index-Dggdc5Fz.js → index-Dr5L4afe.js} +2 -2
  39. package/public/assets/{index-Dggdc5Fz.js.map → index-Dr5L4afe.js.map} +1 -1
  40. package/public/assets/{index-BJSdILt0.js → index-DsmOPul3.js} +2 -2
  41. package/public/assets/{index-BJSdILt0.js.map → index-DsmOPul3.js.map} +1 -1
  42. package/public/assets/{index-BfORYhCR.js → index-ef9_CbWU.js} +3 -3
  43. package/public/assets/index-ef9_CbWU.js.map +1 -0
  44. package/public/assets/{loading-CLjF2dnt.js → loading-CanSHf7z.js} +2 -2
  45. package/public/assets/{loading-CLjF2dnt.js.map → loading-CanSHf7z.js.map} +1 -1
  46. package/public/assets/{main-CA9pw_Mr.js → main-COtTRZe6.js} +25 -25
  47. package/public/assets/main-COtTRZe6.js.map +1 -0
  48. package/public/assets/{markdown-DP0osupz.js → markdown-B04qkFuc.js} +4 -4
  49. package/public/assets/{markdown-DP0osupz.js.map → markdown-B04qkFuc.js.map} +1 -1
  50. package/public/assets/{startup-state-settings-card-Bc27wplD.js → startup-state-settings-card-DE11-Je6.js} +2 -2
  51. package/public/assets/{startup-state-settings-card-Bc27wplD.js.map → startup-state-settings-card-DE11-Je6.js.map} +1 -1
  52. package/public/assets/{terminal-square-4t6I40X6.js → terminal-square-W8UL0Uzs.js} +2 -2
  53. package/public/assets/{terminal-square-4t6I40X6.js.map → terminal-square-W8UL0Uzs.js.map} +1 -1
  54. package/public/assets/{tool-call-BIHyGWIy.js → tool-call-irc_6gLg.js} +4 -4
  55. package/public/assets/{tool-call-BIHyGWIy.js.map → tool-call-irc_6gLg.js.map} +1 -1
  56. package/public/assets/{unified-picker-CpvYPG8V.js → unified-picker-CkVc32ly.js} +2 -2
  57. package/public/assets/{unified-picker-CpvYPG8V.js.map → unified-picker-CkVc32ly.js.map} +1 -1
  58. package/public/assets/{wrap-text-Dq8UDb8D.js → wrap-text-CR-cuiJP.js} +2 -2
  59. package/public/assets/{wrap-text-Dq8UDb8D.js.map → wrap-text-CR-cuiJP.js.map} +1 -1
  60. package/public/index.html +2 -2
  61. package/public/loading.html +2 -2
  62. package/public/sw.js +1 -1
  63. package/public/sw.js.map +1 -1
  64. package/public/assets/App-lAZZOE--.js.map +0 -1
  65. package/public/assets/index-BfORYhCR.js.map +0 -1
  66. package/public/assets/main-CA9pw_Mr.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":["advancedSettingsMessages","appMessages","commandMessages","dialogMessages","filesystemMessages","folderSelectionMessages","instanceMessages","loadingScreenMessages","logMessages","markdownMessages","messagingMessages","remoteAccessMessages","sessionMessages","settingsMessages","timeMessages","toolCallMessages","mergeMessageParts","parts","result","part","key","value","enMessages","SUPPORTED_LOCALES","SUPPORTED_LOCALES_BY_LOWER","Map","map","locale","toLowerCase","RTL_LOCALES","Set","localeMessagesCache","localeMessagesPromises","localeLoaders","en","es","__vitePreload","esMessages","fr","frMessages","ru","ruMessages","ja","jaMessages","zhHansMessages","he","heMessages","de","deMessages","ne","neMessages","tr","trMessages","getLocaleDirection","has","normalizeLocaleTag","trim","replace","matchSupportedLocale","lower","exact","get","base","split","detectNavigatorLocale","navigator","candidates","Array","isArray","languages","length","language","candidate","match","interpolate","template","params","_match","String","translateFrom","messages","current","fallback","globalRevision","setGlobalRevision","createSignal","globalMessages","globalLocale","getMessagesForLocale","loadLocaleMessages","cached","pending","loader","promise","then","set","delete","catch","error","preloadLocaleMessages","preferredLocale","resolvedLocale","undefined","tGlobal","I18nContext","createContext","I18nProvider","props","preferences","useConfig","detectedLocale","setDetectedLocale","setResolvedLocale","previousGlobalMessages","previousGlobalLocale","previousDocumentLanguage","document","documentElement","lang","previousDocumentDirection","dir","onMount","detected","createMemo","t","createEffect","nextLocale","cancelled","loadedMessages","onCleanup","activeLocale","_$createComponent","Provider","children","useI18n","context","useContext","Error","detectWindowContext","win","detectHost","explicitHost","detectPlatform","uaData","ua","log","getLogger","cachedEnv","detectRuntimeEnvironment","runtimeEnv","isElectronHost","isTauriHost","isWebHost","isLocalTauriHost","environment","isDesktopHost","isLocalWindow","isPreferencesWindow","usesClientState","isNativeApplicationWindow","canUseNativeDialogs","canOpenRemoteWindows","canRestartCli","canUseDesktopFolderDrop","__classPrivateFieldGet","receiver","state","kind","f","__classPrivateFieldSet","_Channel_onmessage","_Channel_nextMessageIndex","_Channel_pendingMessages","_Channel_messageEndIndex","SERIALIZE_TO_IPC_FN","transformCallback","callback","once","Channel","onmessage","rawMessage","index","message","handler","PluginListener","plugin","event","channelId","invoke","addPluginListener","cb","cmd","args","options","TauriEvent","_unlisten","eventId","listen","_a","target"],"ignoreList":[20,21,22],"sources":["../../../lib/i18n/messages/en/advancedSettings.ts","../../../lib/i18n/messages/en/app.ts","../../../lib/i18n/messages/en/commands.ts","../../../lib/i18n/messages/en/dialogs.ts","../../../lib/i18n/messages/en/filesystem.ts","../../../lib/i18n/messages/en/folderSelection.ts","../../../lib/i18n/messages/en/instance.ts","../../../lib/i18n/messages/en/loadingScreen.ts","../../../lib/i18n/messages/en/logs.ts","../../../lib/i18n/messages/en/markdown.ts","../../../lib/i18n/messages/en/messaging.ts","../../../lib/i18n/messages/en/remoteAccess.ts","../../../lib/i18n/messages/en/session.ts","../../../lib/i18n/messages/en/settings.ts","../../../lib/i18n/messages/en/time.ts","../../../lib/i18n/messages/en/toolCall.ts","../../../lib/i18n/messages/merge.ts","../../../lib/i18n/messages/en/index.ts","../../../lib/i18n/index.tsx","../../../lib/runtime-env.ts","../../../../../../node_modules/@tauri-apps/api/external/tslib/tslib.es6.js","../../../../../../node_modules/@tauri-apps/api/core.js","../../../../../../node_modules/@tauri-apps/api/event.js"],"sourcesContent":["export const advancedSettingsMessages = {\n \"advancedSettings.title\": \"Advanced Settings\",\n \"advancedSettings.environmentVariables.title\": \"Environment Variables\",\n \"advancedSettings.environmentVariables.subtitle\": \"Applied whenever a new OpenCode instance starts\",\n \"advancedSettings.actions.close\": \"Close\",\n} as const\n","export const appMessages = {\n \"window.title.main\": \"CodeNomad\",\n \"window.controls.minimize\": \"Minimize window\",\n \"window.controls.maximize\": \"Maximize or restore window\",\n \"window.controls.close\": \"Close window\",\n \"window.menu.ariaLabel\": \"Application menu\",\n \"window.menu.file\": \"File\",\n \"window.menu.edit\": \"Edit\",\n \"window.menu.view\": \"View\",\n \"window.menu.window\": \"Window\",\n \"window.menu.help\": \"Help\",\n \"app.launchError.title\": \"Unable to launch OpenCode\",\n \"app.launchError.description\": \"OpenCode could not start this workspace. Review the error output below or check your OpenCode settings.\",\n \"app.launchError.binaryPathLabel\": \"Binary path\",\n \"app.launchError.errorOutputLabel\": \"Error output\",\n \"app.launchError.openAdvancedSettings\": \"Open OpenCode Settings\",\n \"app.launchError.close\": \"Close\",\n \"app.launchError.closeTitle\": \"Close (Esc)\",\n \"app.launchError.fallbackMessage\": \"Failed to launch workspace\",\n \"app.launchError.invalidConfig\": \"OpenCode configuration is invalid\",\n\n \"app.stopInstance.confirmMessage\": \"Stop OpenCode instance? This will stop the server.\",\n \"app.stopInstance.title\": \"Stop instance\",\n \"app.stopInstance.confirmLabel\": \"Stop\",\n \"app.stopInstance.cancelLabel\": \"Keep running\",\n \"app.stopInstance.toast.error\": \"Failed to stop workspace.\",\n\n \"emptyState.logoAlt\": \"CodeNomad logo\",\n \"emptyState.brandTitle\": \"CodeNomad\",\n \"emptyState.tagline\": \"Select a folder to start coding with AI\",\n \"emptyState.actions.selectFolder\": \"Select Folder\",\n \"emptyState.actions.selecting\": \"Selecting...\",\n \"emptyState.keyboardShortcut\": \"Keyboard shortcut: {shortcut}\",\n \"emptyState.examples\": \"Examples: {example}\",\n \"emptyState.multipleInstances\": \"You can have multiple instances of the same folder\",\n\n \"releases.upgradeRequired.title\": \"Upgrade required\",\n \"releases.upgradeRequired.message.withVersion\": \"Update to CodeNomad {version} to use the latest UI.\",\n \"releases.upgradeRequired.message.noVersion\": \"Update CodeNomad to use the latest UI.\",\n \"releases.upgradeRequired.action.getUpdate\": \"Get update\",\n\n \"releases.uiUpdated.title\": \"UI updated\",\n \"releases.uiUpdated.message\": \"UI is now updated to {version}.\",\n\n \"releases.devUpdateAvailable.title\": \"Dev build available\",\n \"releases.devUpdateAvailable.message\": \"A new dev build is available: {version}.\",\n \"releases.devUpdateAvailable.action\": \"View release\",\n\n \"theme.mode.system\": \"System\",\n \"theme.mode.light\": \"Light\",\n \"theme.mode.dark\": \"Dark\",\n \"theme.toggle.title\": \"Theme: {mode}\",\n \"theme.toggle.ariaLabel\": \"Theme: {mode}\",\n} as const\n","export const commandMessages = {\n \"commandPalette.title\": \"Command Palette\",\n \"commandPalette.description\": \"Search and execute commands\",\n \"commandPalette.searchPlaceholder\": \"Type a command or search...\",\n \"commandPalette.empty\": \"No commands found for \\\"{query}\\\"\",\n \"commandPalette.category.customCommands\": \"Custom Commands\",\n \"commandPalette.category.instance\": \"Instance\",\n \"commandPalette.category.session\": \"Session\",\n \"commandPalette.category.agentModel\": \"Agent & Model\",\n \"commandPalette.category.inputFocus\": \"Input & Focus\",\n \"commandPalette.category.system\": \"System\",\n \"commandPalette.category.other\": \"Other\",\n\n \"commands.newInstance.label\": \"New Instance\",\n \"commands.newInstance.description\": \"Open folder picker to create new instance\",\n \"commands.newInstance.keywords\": \"folder, project, workspace\",\n \"commands.openWorkspace.folder.label\": \"Open Project Folder\",\n \"commands.openWorkspace.folder.description\": \"Open the current project folder in the file manager\",\n \"commands.openWorkspace.folder.keywords\": \"folder, explorer, finder, files\",\n \"commands.openWorkspace.terminal.label\": \"Open Terminal Here\",\n \"commands.openWorkspace.terminal.description\": \"Open an external terminal in the current project folder\",\n \"commands.openWorkspace.terminal.keywords\": \"terminal, shell, console\",\n \"commands.openWorkspace.editor.label\": \"Open Project in {editor}\",\n \"commands.openWorkspace.editor.description\": \"Open the current project folder in {editor}\",\n \"commands.openWorkspace.editor.keywords\": \"editor, ide, code\",\n \"commands.openWorkspace.failed.title\": \"Could not open project\",\n \"commands.openWorkspace.failed.message\": \"{message}\",\n \"commands.openWorkspace.projectRequired.title\": \"No project open\",\n \"commands.openWorkspace.projectRequired.message\": \"Open a project first.\",\n\n \"commands.closeInstance.label\": \"Close Tab\",\n \"commands.closeInstance.description\": \"Close the current top-level tab\",\n \"commands.closeInstance.keywords\": \"stop, quit, close, tab\",\n \"commands.stopInstance.label\": \"Stop Workspace\",\n \"commands.stopInstance.description\": \"Stop the shared workspace for every window\",\n \"commands.stopInstance.keywords\": \"stop, workspace, server, shared\",\n\n \"commands.nextInstance.label\": \"Next Tab\",\n \"commands.nextInstance.description\": \"Cycle to the next top-level tab\",\n \"commands.nextInstance.keywords\": \"switch, navigate, tab\",\n\n \"commands.previousInstance.label\": \"Previous Tab\",\n \"commands.previousInstance.description\": \"Cycle to the previous top-level tab\",\n \"commands.previousInstance.keywords\": \"switch, navigate, tab\",\n\n \"commands.newSession.label\": \"New Session\",\n \"commands.newSession.description\": \"Create a new parent session\",\n \"commands.newSession.keywords\": \"create, start\",\n\n \"commands.closeSession.label\": \"Close Session\",\n \"commands.closeSession.description\": \"Close current parent session\",\n \"commands.closeSession.keywords\": \"close, stop\",\n\n \"commands.scrubSessions.label\": \"Scrub Sessions\",\n \"commands.scrubSessions.description\": \"Remove empty sessions, subagent sessions that have completed their primary task, and extraneous forked sessions.\",\n \"commands.scrubSessions.keywords\": \"cleanup, blank, empty, sessions, remove, delete, scrub\",\n\n \"commands.instanceInfo.label\": \"Instance Info\",\n \"commands.instanceInfo.description\": \"Open the instance overview for logs and status\",\n \"commands.instanceInfo.keywords\": \"info, logs, console, output\",\n\n \"commands.nextSession.label\": \"Next Session\",\n \"commands.nextSession.description\": \"Cycle to next session tab\",\n \"commands.nextSession.keywords\": \"switch, navigate\",\n\n \"commands.previousSession.label\": \"Previous Session\",\n \"commands.previousSession.description\": \"Cycle to previous session tab\",\n \"commands.previousSession.keywords\": \"switch, navigate\",\n\n \"commands.compactSession.label\": \"Compact Session\",\n \"commands.compactSession.description\": \"Summarize and compact the current session\",\n \"commands.compactSession.keywords\": \"summarize, compress\",\n \"commands.compactSession.errorFallback\": \"Failed to compact session\",\n \"commands.compactSession.alert.title\": \"Compact failed\",\n \"commands.compactSession.alert.message\": \"Compact failed: {message}\",\n \"commands.removeSessionTechnicalParts.label\": \"Remove Session Tools and Reasoning\",\n \"commands.removeSessionTechnicalParts.description\": \"Preserve final responses and remove completed tool outputs and reasoning\",\n \"commands.removeSessionTechnicalParts.keywords\": \"cleanup, tools, reasoning, remove, session\",\n \"commands.removeSessionTechnicalParts.empty.title\": \"Nothing to remove\",\n \"commands.removeSessionTechnicalParts.empty.message\": \"This session has no completed tool outputs or reasoning blocks.\",\n \"commands.removeSessionTechnicalParts.confirm.title\": \"Remove tools and reasoning?\",\n \"commands.removeSessionTechnicalParts.confirm.message\": \"Tool outputs: {toolCount}; reasoning blocks: {reasoningCount}. Final response text will be preserved.\",\n \"commands.removeSessionTechnicalParts.confirm.label\": \"Remove\",\n \"commands.removeSessionTechnicalParts.failed.title\": \"Removal failed\",\n \"commands.removeSessionTechnicalParts.failed.message\": \"Failed to clean {count} responses.\",\n\n \"commands.undoLastMessage.label\": \"Undo Last Message\",\n \"commands.undoLastMessage.description\": \"Revert the last message\",\n \"commands.undoLastMessage.keywords\": \"revert, undo\",\n \"commands.undoLastMessage.none.title\": \"No actions to undo\",\n \"commands.undoLastMessage.none.message\": \"Nothing to undo\",\n \"commands.undoLastMessage.failed.title\": \"Undo failed\",\n \"commands.undoLastMessage.failed.message\": \"Failed to revert message\",\n \"commands.redoLastMessage.label\": \"Redo Last Message\",\n \"commands.redoLastMessage.description\": \"Clear the staged undo\",\n \"commands.redoLastMessage.keywords\": \"redo, restore, clear revert\",\n \"commands.redoLastMessage.failed.title\": \"Redo failed\",\n \"commands.redoLastMessage.failed.message\": \"Failed to clear the staged undo\",\n\n \"commands.openModelSelector.label\": \"Open Model Selector\",\n \"commands.openModelSelector.description\": \"Choose a different model\",\n \"commands.openModelSelector.keywords\": \"model, llm, ai\",\n\n \"commands.selectModelVariant.label\": \"Select Model Variant\",\n \"commands.selectModelVariant.description\": \"Choose a thinking effort for the current model\",\n \"commands.selectModelVariant.keywords\": \"variant, thinking, reasoning, effort\",\n\n \"commands.openAgentSelector.label\": \"Open Agent Selector\",\n \"commands.openAgentSelector.description\": \"Choose a different agent\",\n \"commands.openAgentSelector.keywords\": \"agent, mode\",\n\n \"commands.clearInput.label\": \"Clear Input\",\n \"commands.clearInput.description\": \"Clear the prompt textarea\",\n \"commands.clearInput.keywords\": \"clear, reset\",\n\n \"commands.promptSubmitShortcut.label.default\": \"Enter: New Line, Cmd/Ctrl+Enter: Submit Prompt\",\n \"commands.promptSubmitShortcut.label.swapped\": \"Enter: Submit Prompt, Cmd/Ctrl+Enter: New Line\",\n \"commands.promptSubmitShortcut.description\": \"Swap Enter and Cmd/Ctrl+Enter behavior in the prompt input\",\n \"commands.promptSubmitShortcut.keywords\": \"enter, cmd, ctrl, submit, send, newline, shortcut, keybind, prompt\",\n\n \"commands.thinkingBlocks.label.show\": \"Show Thinking\",\n \"commands.thinkingBlocks.label.hide\": \"Hide Thinking\",\n \"commands.thinkingBlocks.description\": \"Show or hide AI thinking sections\",\n \"commands.thinkingBlocks.keywords\": \"thinking, reasoning, toggle, show, hide\",\n\n \"commands.timelineToolCalls.label.show\": \"Show Timeline Tool Calls\",\n \"commands.timelineToolCalls.label.hide\": \"Hide Timeline Tool Calls\",\n \"commands.timelineToolCalls.description\": \"Toggle tool call entries in the message timeline\",\n \"commands.timelineToolCalls.keywords\": \"timeline, tool, toggle\",\n\n \"commands.keyboardShortcutHints.label.show\": \"Show Keyboard Shortcut Hints\",\n \"commands.keyboardShortcutHints.label.hide\": \"Hide Keyboard Shortcut Hints\",\n \"commands.keyboardShortcutHints.description\": \"Show or hide keyboard shortcut hints across the UI\",\n \"commands.keyboardShortcutHints.description.disabledWeb\": \"Disabled in WebUI (shortcut hints are always hidden)\",\n \"commands.keyboardShortcutHints.keywords\": \"shortcut, shortcuts, keyboard, keybind, hints\",\n\n \"commands.common.expanded\": \"Expanded\",\n \"commands.common.collapsed\": \"Collapsed\",\n \"commands.common.visible\": \"Visible\",\n \"commands.common.hidden\": \"Hidden\",\n \"commands.common.enabled\": \"Enabled\",\n \"commands.common.disabled\": \"Disabled\",\n\n \"commands.thinkingBlocksDefault.label\": \"Thinking View: {state}\",\n \"commands.thinkingBlocksDefault.description\": \"Collapse / Expand AI thinking sections when shown\",\n \"commands.thinkingBlocksDefault.keywords\": \"thinking, reasoning, expand, collapse, default\",\n\n \"commands.diffViewSplit.label\": \"Use Split Diff View\",\n \"commands.diffViewSplit.description\": \"Display tool-call diffs side-by-side\",\n \"commands.diffViewSplit.keywords\": \"diff, split, view\",\n\n \"commands.diffViewUnified.label\": \"Use Unified Diff View\",\n \"commands.diffViewUnified.description\": \"Display tool-call diffs inline\",\n \"commands.diffViewUnified.keywords\": \"diff, unified, view\",\n\n \"commands.toolOutputsDefault.label\": \"Tool Outputs Default · {state}\",\n \"commands.toolOutputsDefault.description\": \"Set default visibility for tool outputs\",\n \"commands.toolOutputsDefault.keywords\": \"tool, output, hide, expand, collapse\",\n\n \"commands.diagnosticsDefault.label\": \"Diagnostics Default · {state}\",\n \"commands.diagnosticsDefault.description\": \"Set default visibility for diagnostics output\",\n \"commands.diagnosticsDefault.keywords\": \"diagnostics, hide, expand, collapse\",\n\n \"commands.toolInputsVisibility.label\": \"Tool Inputs Visibility · {state}\",\n \"commands.toolInputsVisibility.description\": \"Set default visibility for tool call input arguments\",\n \"commands.toolInputsVisibility.keywords\": \"tool, inputs, arguments, visibility, hide, show, expand, collapse\",\n\n \"commands.tokenUsageDisplay.label\": \"Token Usage Display · {state}\",\n \"commands.tokenUsageDisplay.description\": \"Show or hide token and cost stats for assistant messages\",\n \"commands.tokenUsageDisplay.keywords\": \"token, usage, cost, stats\",\n\n \"commands.autoCleanupBlankSessions.label\": \"Auto-Cleanup Blank Sessions · {state}\",\n \"commands.autoCleanupBlankSessions.description\": \"Automatically clean up blank sessions when creating new ones\",\n \"commands.autoCleanupBlankSessions.keywords\": \"auto, cleanup, blank, sessions, toggle\",\n\n \"commands.showHelp.label\": \"Show Help\",\n \"commands.showHelp.description\": \"Display keyboard shortcuts and help\",\n \"commands.showHelp.keywords\": \"shortcuts, help\",\n\n \"commands.custom.argumentsPrompt.message\": \"Arguments for /{name}\",\n \"commands.custom.argumentsPrompt.title\": \"Custom command\",\n \"commands.custom.argumentsPrompt.inputLabel\": \"Arguments\",\n \"commands.custom.argumentsPrompt.inputPlaceholder\": \"e.g. foo bar\",\n \"commands.custom.argumentsPrompt.confirmLabel\": \"Run\",\n \"commands.custom.argumentsPrompt.cancelLabel\": \"Cancel\",\n \"commands.custom.argumentsPrompt.openFailed.message\": \"Failed to open arguments prompt.\",\n \"commands.custom.argumentsPrompt.openFailed.title\": \"Command arguments\",\n \"commands.custom.entries.descriptionFallback\": \"Custom command\",\n \"commands.custom.sessionRequired.message\": \"Select a session before running a custom command.\",\n \"commands.custom.sessionRequired.title\": \"Session required\",\n \"commands.custom.runFailed.message\": \"Failed to run custom command. Check the console for details.\",\n \"commands.custom.runFailed.title\": \"Command failed\",\n\n \"unifiedPicker.loading.searching\": \"Searching...\",\n \"unifiedPicker.loading.loadingWorkspace\": \"Loading workspace...\",\n \"unifiedPicker.title.command\": \"Select Command\",\n \"unifiedPicker.title.mention\": \"Select Agent or File\",\n \"unifiedPicker.empty\": \"No results found\",\n \"unifiedPicker.sections.commands\": \"COMMANDS\",\n \"unifiedPicker.sections.agents\": \"AGENTS\",\n \"unifiedPicker.sections.files\": \"FILES\",\n \"unifiedPicker.sections.workspaceRoot\": \"WORKSPACE ROOT\",\n \"unifiedPicker.badge.subagent\": \"subagent\",\n \"unifiedPicker.footer.navigate\": \"navigate\",\n \"unifiedPicker.footer.select\": \"select\",\n \"unifiedPicker.footer.close\": \"close\",\n} as const\n","export const dialogMessages = {\n \"alertDialog.fallbackTitle.info\": \"Heads up\",\n \"alertDialog.fallbackTitle.warning\": \"Please review\",\n \"alertDialog.fallbackTitle.error\": \"Something went wrong\",\n \"alertDialog.actions.confirm\": \"Confirm\",\n \"alertDialog.actions.run\": \"Run\",\n \"alertDialog.actions.ok\": \"OK\",\n \"alertDialog.actions.cancel\": \"Cancel\",\n \"alertDialog.prompt.inputLabel\": \"Input\",\n\n \"backgroundProcessOutputDialog.title\": \"Background Output\",\n \"backgroundProcessOutputDialog.actions.close\": \"Close\",\n \"backgroundProcessOutputDialog.loading\": \"Loading output...\",\n \"backgroundProcessOutputDialog.truncatedNotice\": \"Output truncated for display.\",\n \"backgroundProcessOutputDialog.loadErrorFallback\": \"Failed to load output.\",\n} as const\n","export const filesystemMessages = {\n \"directoryBrowser.defaultDescription\": \"Browse folders under the configured workspace root.\",\n \"directoryBrowser.close\": \"Close\",\n \"directoryBrowser.currentFolder\": \"Select folder or enter path\",\n \"directoryBrowser.currentFolder.inputAriaLabel\": \"Folder path\",\n \"directoryBrowser.currentFolder.inputPlaceholder\": \"Type or paste a folder path\",\n \"directoryBrowser.openCurrent\": \"Open\",\n \"directoryBrowser.selectCurrent\": \"Select Current\",\n \"directoryBrowser.newFolder\": \"New Folder\",\n \"directoryBrowser.creating\": \"Creating…\",\n \"directoryBrowser.loadingFolders\": \"Loading folders…\",\n \"directoryBrowser.noFolders\": \"No folders available.\",\n \"directoryBrowser.upOneLevel\": \"Up one level\",\n \"directoryBrowser.select\": \"Select\",\n \"directoryBrowser.load.errorFallback\": \"Unable to load filesystem\",\n \"directoryBrowser.createFolder.promptMessage\": \"Create a new folder in the current directory.\",\n \"directoryBrowser.createFolder.title\": \"New Folder\",\n \"directoryBrowser.createFolder.inputLabel\": \"Folder name\",\n \"directoryBrowser.createFolder.inputPlaceholder\": \"e.g. my-new-project\",\n \"directoryBrowser.createFolder.confirmLabel\": \"Create\",\n \"directoryBrowser.createFolder.cancelLabel\": \"Cancel\",\n \"directoryBrowser.createFolder.invalidNameMessage\": \"Please enter a single folder name.\",\n \"directoryBrowser.createFolder.invalidNameDetail\": \"Folder names cannot include slashes, '..', or '~'.\",\n \"directoryBrowser.createFolder.errorFallback\": \"Unable to create folder\",\n\n \"filesystemBrowser.descriptionFallback\": \"Search for a path under the configured workspace root.\",\n \"filesystemBrowser.rootLabel\": \"Root: {root}\",\n \"filesystemBrowser.actions.close\": \"Close\",\n \"filesystemBrowser.actions.retry\": \"Retry\",\n \"filesystemBrowser.actions.select\": \"Select\",\n \"filesystemBrowser.filterLabel\": \"Filter\",\n \"filesystemBrowser.search.placeholder.directories\": \"Search for folders\",\n \"filesystemBrowser.search.placeholder.files\": \"Search for files\",\n \"filesystemBrowser.currentFolder.label\": \"Current folder\",\n \"filesystemBrowser.currentFolder.selectCurrent\": \"Select Current\",\n \"filesystemBrowser.loading.filesystem\": \"filesystem\",\n \"filesystemBrowser.loading.workspaceRoot\": \"workspace root\",\n \"filesystemBrowser.loading.loadingWithPath\": \"Loading {path}…\",\n \"filesystemBrowser.empty.noEntries\": \"No entries found.\",\n \"filesystemBrowser.navigation.upOneLevel\": \"Up one level\",\n \"filesystemBrowser.hints.navigate\": \"Navigate\",\n \"filesystemBrowser.hints.select\": \"Select\",\n \"filesystemBrowser.hints.close\": \"Close\",\n \"filesystemBrowser.errors.loadFilesystemFallback\": \"Unable to load filesystem\",\n \"filesystemBrowser.errors.openDirectoryFallback\": \"Unable to open directory\",\n} as const\n","export const folderSelectionMessages = {\n \"folderSelection.language.ariaLabel\": \"Language\",\n\n \"folderSelection.logoAlt\": \"CodeNomad logo\",\n \"folderSelection.tagline\": \"Select a folder to start coding with AI\",\n\n \"folderSelection.links.github\": \"CodeNomad GitHub\",\n \"folderSelection.links.githubStars\": \"CodeNomad GitHub Stars\",\n \"folderSelection.links.discord\": \"CodeNomad Discord\",\n\n \"folderSelection.empty.title\": \"No Recent Folders\",\n \"folderSelection.empty.description\": \"Browse for a folder to get started\",\n\n \"folderSelection.recent.title\": \"Recent Folders\",\n \"folderSelection.recent.subtitle.one\": \"{count} folder available\",\n \"folderSelection.recent.subtitle.other\": \"{count} folders available\",\n \"folderSelection.recent.rename\": \"Rename workspace\",\n \"folderSelection.recent.remove\": \"Remove from recent\",\n \"folderSelection.recent.openBadge\": \"Open\",\n \"folderSelection.recent.openNewInstance\": \"Open new instance\",\n \"folderSelection.recent.switchToOpenProject\": \"Switch to open project\",\n\n \"folderSelection.browse.title\": \"Browse for Folder\",\n \"folderSelection.browse.subtitle\": \"Select any folder on your computer\",\n \"folderSelection.browse.button\": \"Browse Folders\",\n \"folderSelection.browse.buttonOpening\": \"Opening...\",\n \"folderSelection.clone.button\": \"Clone Git Repo\",\n \"folderSelection.clone.destination.title\": \"Select Clone Destination\",\n \"folderSelection.clone.destination.description\": \"Select the folder where the repository should be cloned.\",\n \"folderSelection.clone.dialog.title\": \"Clone Git Repository\",\n \"folderSelection.clone.dialog.description\": \"Clone a Git repository into a local folder, then open it as your workspace.\",\n \"folderSelection.clone.dialog.repositoryUrl\": \"Repository URL\",\n \"folderSelection.clone.dialog.repositoryUrlPlaceholder\": \"https://github.com/user/repo.git\",\n \"folderSelection.clone.dialog.destinationPath\": \"Destination folder\",\n \"folderSelection.clone.dialog.destinationPathPlaceholder\": \"Select or enter a destination folder\",\n \"folderSelection.clone.dialog.browseDestination\": \"Browse\",\n \"folderSelection.clone.dialog.cleanupDestination\": \"Remove the destination folder first if it already exists.\",\n \"folderSelection.clone.dialog.cancel\": \"Cancel\",\n \"folderSelection.clone.dialog.clone\": \"Clone\",\n \"folderSelection.clone.dialog.cloning\": \"Cloning...\",\n \"folderSelection.clone.dialog.errorRequired\": \"Repository URL and destination folder are required.\",\n \"folderSelection.actions.title\": \"Open Folder or Connect Server\",\n \"folderSelection.actions.subtitle\": \"Open local folder or connect to a CodeNomad server\",\n \"folderSelection.actions.connectButton\": \"Connect CodeNomad Server\",\n\n \"folderSelection.advancedSettings\": \"Advanced Settings\",\n \"folderSelection.opencode\": \"OpenCode\",\n\n \"folderSelection.hints.navigate\": \"Navigate\",\n \"folderSelection.hints.select\": \"Select\",\n \"folderSelection.hints.remove\": \"Remove\",\n \"folderSelection.hints.browse\": \"Browse\",\n\n \"folderSelection.loading.title\": \"Starting instance...\",\n \"folderSelection.loading.subtitle\": \"Hang tight while we prepare your workspace.\",\n\n \"folderSelection.drop.title\": \"Drop a folder to open it\",\n \"folderSelection.drop.subtitle\": \"Start a new instance in the dropped folder.\",\n \"folderSelection.drop.invalidTitle\": \"Couldn't open dropped item\",\n \"folderSelection.drop.invalidMessage\": \"Drop a folder to start a new instance.\",\n\n \"folderSelection.dialog.title\": \"Select Workspace\",\n \"folderSelection.dialog.description\": \"Select workspace to start coding.\",\n\n \"folderSelection.tabs.local\": \"Local Folders\",\n \"folderSelection.tabs.servers\": \"Servers\",\n \"folderSelection.servers.title\": \"Saved Servers\",\n \"folderSelection.servers.subtitle\": \"Open a saved remote CodeNomad server in a new window\",\n \"folderSelection.servers.count\": \"{count} Servers\",\n \"folderSelection.servers.empty.title\": \"No Saved Servers\",\n \"folderSelection.servers.empty.description\": \"Add a remote server to reconnect quickly from this device\",\n \"folderSelection.servers.connectTitle\": \"Connect to Server\",\n \"folderSelection.servers.connectSubtitle\": \"Save a remote CodeNomad server and open it in a new window\",\n \"folderSelection.servers.connectButton\": \"Connect to Server\",\n \"folderSelection.servers.remove\": \"Remove saved server\",\n \"folderSelection.servers.skipTls\": \"Self-signed TLS\",\n \"folderSelection.servers.errorTitle\": \"Remote Connection Failed\",\n \"folderSelection.servers.dialog.title\": \"Connect to Server\",\n \"folderSelection.servers.dialog.description\": \"Add a remote CodeNomad server and optionally open it right away.\",\n \"folderSelection.servers.dialog.name\": \"Server name\",\n \"folderSelection.servers.dialog.namePlaceholder\": \"Production Server\",\n \"folderSelection.servers.dialog.url\": \"Server URL\",\n \"folderSelection.servers.dialog.urlPlaceholder\": \"https://server.example.com\",\n \"folderSelection.servers.dialog.skipTls\": \"Skip TLS verification for self-signed certificates.\",\n \"folderSelection.servers.dialog.cancel\": \"Cancel\",\n \"folderSelection.servers.dialog.save\": \"Save\",\n \"folderSelection.servers.dialog.connect\": \"Connect\",\n \"folderSelection.servers.dialog.connecting\": \"Connecting...\",\n \"folderSelection.servers.dialog.errorRequired\": \"Server name and URL are required.\",\n \"folderSelection.servers.dialog.errorConnect\": \"Could not connect to the remote server.\",\n \"folderSelection.servers.certificateInstall.title\": \"Install Local Certificate\",\n \"folderSelection.servers.certificateInstall.confirmMessage\": \"CodeNomad needs to install a local certificate to open self-signed HTTPS remote windows. This certificate is only used for local desktop proxy traffic on your machine. Your operating system may show a second certificate prompt after this.\",\n \"folderSelection.servers.certificateInstall.confirmLabel\": \"Continue\",\n \"folderSelection.servers.certificateInstall.cancelLabel\": \"Cancel\",\n \"folderSelection.servers.certificateInstall.cancelled\": \"CodeNomad needs the local certificate to be trusted before it can open self-signed HTTPS remote windows.\",\n \"folderSelection.sidecars.button\": \"Open SideCar\",\n\n \"projectRenameDialog.title\": \"Rename workspace\",\n \"projectRenameDialog.description.withLabel\": \"Update the workspace name for \\\"{label}\\\".\",\n \"projectRenameDialog.description.default\": \"Set a workspace name for this folder.\",\n \"projectRenameDialog.input.label\": \"Workspace name\",\n \"projectRenameDialog.input.placeholder\": \"Enter workspace name\",\n \"projectRenameDialog.actions.cancel\": \"Cancel\",\n \"projectRenameDialog.actions.rename\": \"Rename\",\n \"projectRenameDialog.actions.renaming\": \"Renaming...\",\n} as const\n","export const instanceMessages = {\n \"instanceTabs.new.title\": \"New instance (Cmd/Ctrl+N)\",\n \"instanceTabs.new.ariaLabel\": \"New instance\",\n \"instanceTabs.remote.title\": \"Remote connect\",\n \"instanceTabs.remote.ariaLabel\": \"Remote connect\",\n \"instanceTabs.developerMode.enableTitle\": \"Enable developer mode\",\n \"instanceTabs.developerMode.disableTitle\": \"Disable developer mode\",\n \"instanceTabs.developerMode.restartTitle\": \"{action}; restart CodeNomad to apply\",\n \"instanceTabs.developerMode.enabledToast\": \"Developer mode enabled. Restart CodeNomad to apply.\",\n \"instanceTabs.developerMode.disabledToast\": \"Developer mode disabled. Restart CodeNomad to apply.\",\n \"instanceTabs.developerMode.error\": \"Could not access developer mode.\",\n\n \"instanceInfo.title\": \"Instance Information\",\n \"instanceInfo.labels.folder\": \"Folder\",\n \"instanceInfo.labels.project\": \"Project\",\n \"instanceInfo.labels.versionControl\": \"Version Control\",\n \"instanceInfo.labels.opencodeVersion\": \"OpenCode Version\",\n \"instanceInfo.labels.binaryPath\": \"Binary Path\",\n \"instanceInfo.labels.environmentVariables\": \"Environment Variables ({count})\",\n \"instanceInfo.loading\": \"Loading...\",\n \"instanceInfo.server.title\": \"Server\",\n \"instanceInfo.server.port\": \"Port:\",\n \"instanceInfo.server.pid\": \"PID:\",\n \"instanceInfo.server.status\": \"Status:\",\n\n \"instanceTab.status.permission\": \"Waiting on permission\",\n \"instanceTab.status.compacting\": \"Compacting\",\n \"instanceTab.status.working\": \"Working\",\n \"instanceTab.status.idle\": \"Idle\",\n \"instanceTab.status.ariaLabel\": \"Instance status: {status}\",\n \"instanceTab.actions.close.ariaLabel\": \"Close instance\",\n\n \"instanceShell.leftPanel.sessionsTitle\": \"Sessions\",\n \"instanceShell.leftPanel.instanceInfo\": \"Instance Info\",\n \"instanceShell.leftDrawer.pin\": \"Pin left drawer\",\n \"instanceShell.leftDrawer.unpin\": \"Unpin left drawer\",\n \"instanceShell.leftDrawer.toggle.pinned\": \"Left drawer pinned\",\n \"instanceShell.leftDrawer.toggle.open\": \"Open left drawer\",\n \"instanceShell.leftDrawer.toggle.close\": \"Close left drawer\",\n\n \"instanceShell.rightDrawer.pin\": \"Pin right drawer\",\n \"instanceShell.rightDrawer.unpin\": \"Unpin right drawer\",\n \"instanceShell.rightDrawer.toggle.pinned\": \"Right drawer pinned\",\n \"instanceShell.rightDrawer.toggle.open\": \"Open right drawer\",\n \"instanceShell.rightDrawer.toggle.close\": \"Close right drawer\",\n\n \"instanceShell.fullscreen.enter\": \"Full screen\",\n \"instanceShell.fullscreen.exit\": \"Exit full screen\",\n\n \"instanceShell.metrics.usedLabel\": \"Used\",\n \"instanceShell.metrics.availableLabel\": \"Avail\",\n\n \"instanceShell.commandPalette.openAriaLabel\": \"Open command palette\",\n \"instanceShell.commandPalette.button\": \"Command Palette\",\n \"instanceShell.chatSearch.openAriaLabel\": \"Search chat history\",\n\n \"instanceShell.connection.ariaLabel\": \"Connection {status}\",\n \"instanceShell.connection.connected\": \"Connected\",\n \"instanceShell.connection.connecting\": \"Connecting...\",\n \"instanceShell.connection.disconnected\": \"Disconnected\",\n \"instanceShell.connection.unknown\": \"Unknown\",\n\n \"instanceWelcome.shortcuts.newSession\": \"New Session\",\n \"instanceWelcome.empty.title\": \"No Previous Sessions\",\n \"instanceWelcome.empty.description\": \"Create a new session below to get started\",\n \"instanceWelcome.loading.title\": \"Launching workspace\",\n \"instanceWelcome.loading.description\": \"Starting OpenCode for this workspace...\",\n \"instanceWelcome.resume.title\": \"Resume Session\",\n \"instanceWelcome.resume.subtitle.one\": \"{count} session available\",\n \"instanceWelcome.resume.subtitle.other\": \"{count} sessions available\",\n \"instanceWelcome.session.untitled\": \"Untitled Session\",\n \"instanceWelcome.new.title\": \"Start New Session\",\n \"instanceWelcome.new.subtitle\": \"We’ll reuse your last agent/model automatically\",\n \"instanceWelcome.new.createButton\": \"Create Session\",\n \"instanceWelcome.overlay.close\": \"Close\",\n \"instanceWelcome.actions.viewInstanceInfo\": \"View Instance Info\",\n \"instanceWelcome.actions.renameTitle\": \"Rename session\",\n \"instanceWelcome.actions.deleteTitle\": \"Delete session\",\n \"instanceWelcome.hints.navigate\": \"Navigate\",\n \"instanceWelcome.hints.jump\": \"Jump\",\n \"instanceWelcome.hints.firstLast\": \"First/Last\",\n \"instanceWelcome.hints.resume\": \"Resume\",\n \"instanceWelcome.hints.delete\": \"Delete\",\n \"instanceWelcome.toasts.renameError\": \"Unable to rename session\",\n\n \"instanceDisconnected.title\": \"Instance Disconnected\",\n \"instanceDisconnected.folderFallback\": \"this workspace\",\n \"instanceDisconnected.reasonFallback\": \"The server stopped responding\",\n \"instanceDisconnected.description\": \"{folder} can no longer be reached. Close the tab to continue working.\",\n \"instanceDisconnected.details.title\": \"Details\",\n \"instanceDisconnected.details.folderLabel\": \"Folder:\",\n \"instanceDisconnected.actions.closeInstance\": \"Close Instance\",\n\n \"instanceShell.empty.title\": \"No session selected\",\n \"instanceShell.empty.description\": \"Send a message below to create a new session, or select an existing session to continue.\",\n\n \"instanceShell.rightPanel.title\": \"Status Panel\",\n \"instanceShell.rightPanel.tabs.gitChanges\": \"Git Changes\",\n \"instanceShell.rightPanel.tabs.files\": \"Files\",\n \"instanceShell.rightPanel.tabs.status\": \"Status\",\n \"instanceShell.rightPanel.tabs.ariaLabel\": \"Right panel tabs\",\n \"instanceShell.rightPanel.modules.core\": \"CodeNomad core\",\n \"instanceShell.rightPanel.modules.core.description\": \"Built-in Git, Files, and Status panels.\",\n \"instanceShell.rightPanel.customize.toggle\": \"Customize right panel\",\n \"instanceShell.rightPanel.customize.title\": \"Customize right panel\",\n \"instanceShell.rightPanel.customize.description\": \"Show or hide right panel modules.\",\n \"instanceShell.rightPanel.customize.reset\": \"Reset\",\n \"instanceShell.rightPanel.customize.tabs\": \"Tabs\",\n \"instanceShell.rightPanel.customize.sections\": \"Customize sections\",\n \"instanceShell.rightPanel.customize.statusSections\": \"Status sections\",\n \"instanceShell.rightPanel.customize.dragToReorder\": \"Drag to reorder.\",\n \"instanceShell.rightPanel.customize.alwaysVisible\": \"Always visible\",\n \"instanceShell.rightPanel.customize.unavailableModules\": \"Unavailable modules\",\n \"instanceShell.rightPanel.customize.moduleUnavailable\": \"{module} unavailable\",\n \"instanceShell.rightPanel.customize.moveUp\": \"Up\",\n \"instanceShell.rightPanel.customize.moveDown\": \"Down\",\n \"instanceShell.rightPanel.customize.moveTabUp\": \"Move {label} tab up\",\n \"instanceShell.rightPanel.customize.moveTabDown\": \"Move {label} tab down\",\n \"instanceShell.rightPanel.customize.moveStatusSectionUp\": \"Move {label} status section up\",\n \"instanceShell.rightPanel.customize.moveStatusSectionDown\": \"Move {label} status section down\",\n \"instanceShell.rightPanel.actions.refresh\": \"Refresh\",\n \"instanceShell.rightPanel.actions.save\": \"Save (Ctrl+S)\",\n \"instanceShell.rightPanel.actions.saveConfirm.message\": \"Do you want to save changes to \\\"{path}\\\" before switching?\",\n \"instanceShell.rightPanel.actions.saveConfirm.confirmLabel\": \"Save\",\n \"instanceShell.rightPanel.actions.saveConfirm.cancelLabel\": \"Discard Changes\",\n \"instanceShell.rightPanel.actions.conflict.message\": \"File was modified by the agent. Overwrite agent's changes?\",\n \"instanceShell.rightPanel.actions.conflict.confirmLabel\": \"Overwrite\",\n \"instanceShell.rightPanel.actions.conflict.cancelLabel\": \"Cancel\",\n \"instanceShell.rightPanel.actions.refreshDirty.message\": \"File has unsaved changes. Refresh will discard your edits. Continue?\",\n \"instanceShell.rightPanel.actions.refreshDirty.confirmLabel\": \"Refresh\",\n \"instanceShell.rightPanel.actions.refreshDirty.cancelLabel\": \"Cancel\",\n \"instanceShell.rightPanel.toast.saveSuccess\": \"File saved successfully\",\n \"instanceShell.rightPanel.toast.saveError\": \"Failed to save file\",\n \"instanceShell.rightPanel.sections.yoloMode\": \"Yolo Mode\",\n \"instanceShell.rightPanel.sections.yoloMode.tooltip\": \"Automatically approves permission requests for the current session. Use it only when you trust the tools being run.\",\n \"instanceShell.rightPanel.sections.plan\": \"Plan\",\n \"instanceShell.rightPanel.sections.plan.tooltip\": \"The agent's roadmap for this session. Tracks tasks, subtasks, and their completion status.\",\n \"instanceShell.rightPanel.sections.backgroundProcesses\": \"Background Shells\",\n \"instanceShell.rightPanel.sections.backgroundProcesses.tooltip\": \"Native OpenCode background shells for the active workspace or worktree.\",\n \"instanceShell.backgroundProcesses.loading\": \"Loading background shells...\",\n \"instanceShell.backgroundProcesses.error\": \"Failed to load background shells.\",\n \"instanceShell.backgroundProcesses.empty\": \"No background shells.\",\n \"instanceShell.backgroundProcesses.status.running\": \"Running\",\n \"instanceShell.backgroundProcesses.status.exited\": \"Exited\",\n \"instanceShell.backgroundProcesses.status.timeout\": \"Timed out\",\n \"instanceShell.backgroundProcesses.status.killed\": \"Killed\",\n \"instanceShell.backgroundProcesses.pid\": \"PID {pid}\",\n \"instanceShell.backgroundProcesses.exitCode\": \"Exit {code}\",\n \"instanceShell.backgroundProcesses.actions.stopRemove\": \"Stop and remove\",\n \"instanceShell.backgroundProcesses.actions.remove\": \"Remove\",\n \"instanceShell.backgroundProcesses.actions.output\": \"View output\",\n \"instanceShell.backgroundProcesses.remove.title\": \"Remove background shell\",\n \"instanceShell.backgroundProcesses.remove.message\": \"Remove \\\"{title}\\\"? A running process will be stopped.\",\n \"instanceShell.rightPanel.sections.mcp\": \"MCP Servers\",\n \"instanceShell.rightPanel.sections.mcp.tooltip\": \"Model Context Protocol servers that extend the agent's capabilities with external tools and services.\",\n \"instanceShell.rightPanel.sections.lsp\": \"LSP Servers\",\n \"instanceShell.rightPanel.sections.lsp.tooltip\": \"Language Server Protocol servers providing code intelligence, diagnostics, and language-specific features.\",\n \"instanceShell.rightPanel.sections.plugins\": \"Plugins\",\n \"instanceShell.rightPanel.sections.plugins.tooltip\": \"Plugins that customize the UI and server behavior, adding features beyond MCP and LSP.\",\n\n \"instanceShell.gitChanges.noSessionSelected\": \"Select a session to view git changes.\",\n \"instanceShell.gitChanges.loading\": \"Loading git changes...\",\n \"instanceShell.gitChanges.empty\": \"No git changes yet.\",\n \"instanceShell.gitChanges.deleted\": \"Deleted\",\n \"instanceShell.gitChanges.binaryViewer\": \"Binary file cannot be displayed\",\n \"instanceShell.gitChanges.sections.staged\": \"Staged Changes\",\n \"instanceShell.gitChanges.sections.unstaged\": \"Changes\",\n \"instanceShell.gitChanges.actions.insertContext\": \"Add to prompt\",\n \"instanceShell.gitChanges.actions.stage\": \"Stage file\",\n \"instanceShell.gitChanges.actions.unstage\": \"Unstage file\",\n \"instanceShell.gitChanges.commit.placeholder\": \"Enter commit message\",\n \"instanceShell.gitChanges.commit.submit\": \"Commit\",\n \"instanceShell.gitChanges.commit.submitting\": \"Committing...\",\n \"instanceShell.gitChanges.commit.success\": \"Commit created successfully\",\n \"instanceShell.gitChanges.commit.error\": \"Failed to create commit\",\n\n \"instanceShell.filesShell.fileListTitle\": \"File list\",\n \"instanceShell.filesShell.mobileSelectorLabel\": \"Select file\",\n \"instanceShell.filesShell.mobileSelectorEmpty\": \"Select a file\",\n \"instanceShell.filesShell.viewerTitle\": \"Change viewer\",\n \"instanceShell.filesShell.viewerPlaceholder\": \"Detailed change rendering will be added in the next step.\",\n \"instanceShell.filesShell.viewerEmpty\": \"No file selected.\",\n \"instanceShell.filesShell.listEmpty\": \"No files in this folder.\",\n \"instanceShell.filesShell.hideFiles\": \"Hide files\",\n \"instanceShell.filesShell.resizeFiles\": \"Resize file list\",\n \"instanceShell.filesShell.showFiles\": \"Show files\",\n \"instanceShell.filesShell.search.placeholder\": \"Filter files in this folder\",\n \"instanceShell.filesShell.search.ariaLabel\": \"Filter files in this folder\",\n \"instanceShell.filesShell.search.empty\": \"No matching files.\",\n \"instanceShell.filesShell.actions.copyPath\": \"Copy path\",\n \"instanceShell.filesShell.actions.more\": \"More actions for {name}\",\n \"instanceShell.filesShell.actions.openDefault\": \"Open with default application\",\n \"instanceShell.filesShell.actions.editDefault\": \"Edit with default application\",\n \"instanceShell.filesShell.actions.chooseApplication\": \"Open with...\",\n \"instanceShell.filesShell.actions.showInFolder\": \"Show in folder\",\n \"instanceShell.filesShell.actions.openFolder\": \"Open in file manager\",\n \"instanceShell.filesShell.actions.openTerminal\": \"Open terminal here\",\n \"instanceShell.filesShell.actions.openEditor\": \"Open in {editor}\",\n \"instanceShell.filesShell.toast.openError\": \"Could not open: {message}\",\n \"instanceShell.filesShell.toast.copyPathSuccess\": \"Copied path\",\n \"instanceShell.filesShell.toast.copyPathError\": \"Failed to copy path\",\n \"instanceShell.filesShell.previewMarkdown\": \"Preview Markdown\",\n \"instanceShell.filesShell.showSource\": \"Show source\",\n \"instanceShell.filesShell.enableWordWrap\": \"Enable word wrap\",\n \"instanceShell.filesShell.disableWordWrap\": \"Disable word wrap\",\n \"instanceShell.diff.hideUnchanged\": \"Hide unchanged regions\",\n \"instanceShell.diff.showFull\": \"Show full file\",\n \"instanceShell.diff.switchToSplit\": \"Switch to split view\",\n \"instanceShell.diff.switchToUnified\": \"Switch to unified view\",\n \"instanceShell.diff.enableWordWrap\": \"Enable word wrap\",\n \"instanceShell.diff.disableWordWrap\": \"Disable word wrap\",\n \"instanceShell.worktree.create\": \"+ Create worktree\",\n \"instanceShell.worktree.delete.error.title\": \"Delete failed\",\n \"instanceShell.worktree.delete.error.fallback\": \"Failed to delete worktree\",\n \"instanceShell.worktree.delete.error.causeLabel\": \"Likely cause:\",\n \"instanceShell.worktree.delete.error.nextStepLabel\": \"Suggested next step:\",\n \"instanceShell.worktree.delete.error.summary.localChanges\": \"Git refused to delete this worktree because it has modified or untracked files.\",\n \"instanceShell.worktree.delete.error.summary.inUse\": \"CodeNomad could not delete this worktree because something is still using files in the directory.\",\n \"instanceShell.worktree.delete.error.summary.notFound\": \"CodeNomad could not delete this worktree because the directory or worktree record was not found.\",\n \"instanceShell.worktree.delete.error.summary.permissionDenied\": \"CodeNomad could not delete this worktree because access to the directory was denied.\",\n \"instanceShell.worktree.delete.error.summary.unknown\": \"CodeNomad could not delete this worktree.\",\n \"instanceShell.worktree.delete.error.cause.localChanges\": \"Local changes\",\n \"instanceShell.worktree.delete.error.cause.inUse\": \"Another process is using this worktree\",\n \"instanceShell.worktree.delete.error.cause.notFound\": \"The worktree directory or record is missing\",\n \"instanceShell.worktree.delete.error.cause.permissionDenied\": \"Insufficient filesystem permissions\",\n \"instanceShell.worktree.delete.error.cause.unknown\": \"The backend returned an unclassified delete error\",\n \"instanceShell.worktree.delete.error.nextStep.localChanges\": \"Enable Force delete if you want to discard local changes, or clean the worktree and try again.\",\n \"instanceShell.worktree.delete.error.nextStep.inUse\": \"Close terminals, editors, watchers, or background processes using this worktree and try again.\",\n \"instanceShell.worktree.delete.error.nextStep.notFound\": \"Refresh worktrees and try again. If it still fails, inspect the worktree path on disk.\",\n \"instanceShell.worktree.delete.error.nextStep.permissionDenied\": \"Check filesystem permissions and close applications that may be locking this directory, then try again.\",\n \"instanceShell.worktree.delete.error.nextStep.unknown\": \"Review the raw error below for details, then retry after addressing the reported problem.\",\n \"instanceShell.worktree.delete.error.copyRaw\": \"Copy error\",\n \"instanceShell.worktree.delete.error.copySanitized\": \"Copy sanitized\",\n \"instanceShell.worktree.delete.error.copySuccess\": \"Copied delete error\",\n \"instanceShell.worktree.delete.error.copySanitizedSuccess\": \"Copied sanitized delete error\",\n \"instanceShell.worktree.delete.error.copyFailure\": \"Failed to copy delete error\",\n\n \"instanceShell.plan.noSessionSelected\": \"Select a session to view plan.\",\n \"instanceShell.plan.empty\": \"Nothing planned yet.\",\n\n \"instanceShell.yoloMode.noSessionSelected\": \"Select a session to configure Yolo mode.\",\n \"instanceShell.yoloMode.title\": \"Yolo mode\",\n \"instanceShell.yoloMode.description\": \"Automatically approve permission requests for this session.\",\n \"instanceShell.yoloMode.badge\": \"Yolo\",\n \"instanceShell.yoloMode.badgeAriaLabel\": \"Yolo mode enabled\",\n\n \"versionPill.appWithVersion\": \"App {version}\",\n \"versionPill.ui\": \"UI\",\n \"versionPill.uiWithVersion\": \"UI {version}\",\n \"versionPill.source\": \" ({source})\",\n\n \"opencodeBinarySelector.title\": \"OpenCode Binary\",\n \"opencodeBinarySelector.subtitle\": \"Choose which executable OpenCode should run\",\n \"opencodeBinarySelector.customPath.placeholder\": \"Enter path to {name} binary…\",\n \"opencodeBinarySelector.actions.add\": \"Add\",\n \"opencodeBinarySelector.actions.browse\": \"Browse for Binary…\",\n \"opencodeBinarySelector.actions.removeTitle\": \"Remove binary\",\n \"opencodeBinarySelector.badge.systemPath\": \"Use binary from system PATH\",\n \"opencodeBinarySelector.status.checkingVersions\": \"Checking versions…\",\n \"opencodeBinarySelector.status.checking\": \"Checking…\",\n \"opencodeBinarySelector.dialog.title\": \"Select OpenCode Binary\",\n \"opencodeBinarySelector.dialog.description\": \"Browse files exposed by the CLI server.\",\n \"opencodeBinarySelector.validation.invalidBinary\": \"Invalid OpenCode binary\",\n \"opencodeBinarySelector.validation.v2Required\": \"CodeNomad requires OpenCode V2. Install and select the opencode2 binary.\",\n \"opencodeBinarySelector.validation.alreadyValidating\": \"Already validating\",\n \"opencodeBinarySelector.display.systemPath\": \"{name} (system PATH)\",\n \"opencodeBinarySelector.versionLabel\": \"v{version}\",\n} as const\n","export const loadingScreenMessages = {\n \"loadingScreen.logoAlt\": \"CodeNomad logo\",\n \"loadingScreen.status.issue\": \"Encountered an issue\",\n \"loadingScreen.actions.showAnother\": \"Show another\",\n \"loadingScreen.errors.missingRoot\": \"Loading root element not found\",\n\n \"loadingScreen.phrases.neurons\": \"Warming up the AI neurons…\",\n \"loadingScreen.phrases.daydreaming\": \"Convincing the AI to stop daydreaming…\",\n \"loadingScreen.phrases.goggles\": \"Polishing the AI’s code goggles…\",\n \"loadingScreen.phrases.reorganizingFiles\": \"Asking the AI to stop reorganizing your files…\",\n \"loadingScreen.phrases.coffee\": \"Feeding the AI additional coffee…\",\n \"loadingScreen.phrases.nodeModules\": \"Teaching the AI not to delete node_modules (again)…\",\n \"loadingScreen.phrases.actNatural\": \"Telling the AI to act natural before you arrive…\",\n \"loadingScreen.phrases.rewritingHistory\": \"Asking the AI to please stop rewriting history…\",\n \"loadingScreen.phrases.stretch\": \"Letting the AI stretch before its coding sprint…\",\n \"loadingScreen.phrases.keyboardControl\": \"Persuading the AI to give you keyboard control…\",\n} as const\n","export const logMessages = {\n \"logsView.title\": \"Server Logs\",\n \"logsView.actions.show\": \"Show server logs\",\n \"logsView.actions.hide\": \"Hide server logs\",\n \"logsView.actions.clear\": \"Clear logs\",\n \"logsView.actions.back\": \"Back to conversation\",\n \"logsView.envVars.title\": \"Environment Variables ({count})\",\n \"logsView.paused.title\": \"Server logs are paused\",\n \"logsView.paused.description\": \"Enable streaming to watch your OpenCode server activity.\",\n \"logsView.empty.waiting\": \"Waiting for server output...\",\n \"logsView.scrollToTop\": \"Scroll to top\",\n \"logsView.scrollToBottom\": \"Scroll to bottom\",\n\n \"infoView.logs.title\": \"Server Logs\",\n \"infoView.logs.actions.show\": \"Show server logs\",\n \"infoView.logs.actions.hide\": \"Hide server logs\",\n \"infoView.logs.actions.clear\": \"Clear logs\",\n \"infoView.logs.actions.back\": \"Back to conversation\",\n \"infoView.logs.paused.title\": \"Server logs are paused\",\n \"infoView.logs.paused.description\": \"Enable streaming to watch your OpenCode server activity.\",\n \"infoView.logs.empty.waiting\": \"Waiting for server output...\",\n \"infoView.logs.scrollToTop\": \"Scroll to top\",\n \"infoView.logs.scrollToBottom\": \"Scroll to bottom\",\n\n \"infoView.dispose.actions.dispose\": \"Dispose instance\",\n \"infoView.dispose.actions.disposing\": \"Disposing...\",\n \"infoView.dispose.confirm.title\": \"Dispose instance?\",\n \"infoView.dispose.confirm.message\": \"This clears cached per-project state for this directory and reloads the instance.\",\n \"infoView.dispose.confirm.confirmLabel\": \"Dispose\",\n \"infoView.dispose.confirm.cancelLabel\": \"Cancel\",\n \"infoView.dispose.toast.success\": \"Instance disposed. Reloading...\",\n \"infoView.dispose.toast.error\": \"Failed to dispose instance.\",\n} as const\n","export const markdownMessages = {\n \"markdown.codeBlock.copy.label\": \"Copy\",\n \"markdown.codeBlock.copy.copied\": \"Copied!\",\n \"markdown.codeBlock.copy.failed\": \"Failed\",\n \"markdown.codeBlock.wrap.enable\": \"Enable word wrap\",\n \"markdown.codeBlock.wrap.disable\": \"Disable word wrap\",\n\n \"markdown.copy\": \"Copy\",\n} as const\n","export const messagingMessages = {\n \"messageListHeader.sidebar.openSessionListAriaLabel\": \"Open session list\",\n \"messageListHeader.metrics.usedLabel\": \"Used\",\n \"messageListHeader.metrics.availableLabel\": \"Avail\",\n \"messageListHeader.commandPalette.ariaLabel\": \"Open command palette\",\n \"messageListHeader.commandPalette.button\": \"Command Palette\",\n \"messageListHeader.connection.connected\": \"Connected\",\n \"messageListHeader.connection.connecting\": \"Connecting...\",\n \"messageListHeader.connection.disconnected\": \"Disconnected\",\n\n \"messageSection.empty.logoAlt\": \"CodeNomad logo\",\n \"messageSection.empty.brandTitle\": \"CodeNomad\",\n \"messageSection.empty.title\": \"Start a conversation\",\n \"messageSection.empty.description\": \"Type a message below or open the Command Palette:\",\n \"messageSection.empty.tips.commandPalette\": \"Command Palette\",\n \"messageSection.empty.tips.askAboutCodebase\": \"Ask about your codebase\",\n \"messageSection.empty.tips.attachFilesPrefix\": \"Attach files with\",\n \"messageSection.loading.messages\": \"Loading messages...\",\n \"messageSection.loadError.title\": \"Could not load messages\",\n \"messageSection.loadError.detail\": \"OpenCode did not return the session messages.\",\n \"messageSection.loadError.reload\": \"Reload messages\",\n \"messageSection.scroll.toFirstAriaLabel\": \"Scroll to first message\",\n \"messageSection.scroll.toLatestAriaLabel\": \"Scroll to latest message\",\n \"messageSection.scroll.showControlsAriaLabel\": \"Show scroll controls\",\n \"messageSection.scroll.enableHoldAriaLabel\": \"Enable hold for long assistant replies\",\n \"messageSection.scroll.disableHoldAriaLabel\": \"Disable hold for long assistant replies\",\n \"messageSection.quote.addAsQuote\": \"Add as quote\",\n \"messageSection.quote.addAsCode\": \"Add as code\",\n \"messageSection.quote.copy\": \"Copy\",\n \"messageSection.quote.copied\": \"Copied!\",\n \"messageSection.quote.copyFailed\": \"Copy failed\",\n \"messageSection.search.ariaLabel\": \"Search chat history\",\n \"messageSection.search.placeholder\": \"Search current chat...\",\n \"messageSection.search.count.empty\": \"Search\",\n \"messageSection.search.count.minChars\": \"{count}+ chars\",\n \"messageSection.search.count.searching\": \"Searching...\",\n \"messageSection.search.count.none\": \"No matches\",\n \"messageSection.search.count.matches\": \"{current} / {total}\",\n \"messageSection.search.previousAriaLabel\": \"Previous match\",\n \"messageSection.search.nextAriaLabel\": \"Next match\",\n \"messageSection.search.closeAriaLabel\": \"Close search\",\n \"messageSection.search.searching\": \"Searching...\",\n \"messageSection.search.failed\": \"Search failed\",\n \"messageSection.search.retry\": \"Retry\",\n \"messageSection.search.noVisibleMatches\": \"No visible matches\",\n \"messageTimeline.ariaLabel\": \"Message timeline\",\n \"messageTimeline.segment.user.label\": \"You\",\n \"messageTimeline.segment.assistant.label\": \"Asst\",\n \"messageTimeline.segment.compaction.label\": \"Compaction\",\n \"messageTimeline.tool.fallbackLabel\": \"Tool Call\",\n \"messageTimeline.tooltip.userFallback\": \"User message\",\n \"messageTimeline.tooltip.assistantFallback\": \"Assistant response\",\n \"messageTimeline.tooltip.compaction.auto\": \"Auto Compaction\",\n \"messageTimeline.tooltip.compaction.manual\": \"User Compaction\",\n \"messageTimeline.text.filePrefix\": \"[File] {filename}\",\n \"messageTimeline.text.attachment\": \"Attachment\",\n \"messageBlock.tool.header\": \"Tool Call\",\n \"messageBlock.tool.unknown\": \"unknown\",\n \"messageBlock.tool.goToSession.label\": \"Go to Session\",\n \"messageBlock.tool.goToSession.title\": \"Go to session\",\n \"messageBlock.tool.goToSession.unavailableTitle\": \"Session not available yet\",\n\n \"messageBlock.compaction.ariaLabel\": \"Session compaction\",\n \"messageBlock.compaction.autoLabel\": \"Session auto-compacted\",\n \"messageBlock.compaction.manualLabel\": \"Session compacted by you\",\n \"messageBlock.usage.input\": \"Input\",\n \"messageBlock.usage.output\": \"Output\",\n \"messageBlock.usage.reasoning\": \"Reasoning\",\n \"messageBlock.usage.cacheRead\": \"Cache Read\",\n \"messageBlock.usage.cacheWrite\": \"Cache Write\",\n \"messageBlock.usage.cost\": \"Cost\",\n \"messageBlock.usage.expandAriaLabel\": \"Expand token metrics\",\n \"messageBlock.usage.collapseAriaLabel\": \"Collapse token metrics\",\n \"messageBlock.step.agentLabel\": \"Agent: {agent}\",\n \"messageBlock.step.modelLabel\": \"Model: {model}\",\n \"messageBlock.reasoning.thinkingLabel\": \"Thinking\",\n \"messageBlock.reasoning.thoughtLabel\": \"Thought\",\n \"messageBlock.reasoning.steps.one\": \"{count} step\",\n \"messageBlock.reasoning.steps.other\": \"{count} steps\",\n \"messageBlock.exploration.completed\": \"Explored: {tools}\",\n \"messageBlock.exploration.active\": \"Exploring: {tools}\",\n \"messageBlock.exploration.read.one\": \"{count} read\",\n \"messageBlock.exploration.read.other\": \"{count} reads\",\n \"messageBlock.exploration.search.one\": \"{count} search\",\n \"messageBlock.exploration.search.other\": \"{count} searches\",\n \"messageBlock.shell.completed\": \"Shell: {count}\",\n \"messageBlock.shell.active\": \"Shell: {count}\",\n \"messageBlock.reasoning.expandAriaLabel\": \"Expand thinking\",\n \"messageBlock.reasoning.collapseAriaLabel\": \"Collapse thinking\",\n \"messageBlock.reasoning.indicator.hide\": \"Hide\",\n \"messageBlock.reasoning.indicator.view\": \"View\",\n \"messageBlock.reasoning.detailsAriaLabel\": \"Reasoning details\",\n \"messageBlock.reasoning.thoughtsFallback\": \"Thoughts\",\n \"messageBlock.reasoning.thoughtFor.seconds.one\": \"Thought for {count} second\",\n \"messageBlock.reasoning.thoughtFor.seconds.other\": \"Thought for {count} seconds\",\n \"messageBlock.reasoning.thoughtFor.minutes.one\": \"Thought for {count} minute\",\n \"messageBlock.reasoning.thoughtFor.minutes.other\": \"Thought for {count} minutes\",\n \"messageBlock.reasoning.thoughtFor.hours.one\": \"Thought for {count} hour\",\n \"messageBlock.reasoning.thoughtFor.hours.other\": \"Thought for {count} hours\",\n \"messageBlock.reasoning.copyTitle\": \"Copy thoughts\",\n \"messageBlock.reasoning.copyAriaLabel\": \"Copy thoughts\",\n\n \"codeBlockInline.actions.copy\": \"Copy\",\n \"codeBlockInline.actions.copied\": \"Copied!\",\n\n \"messageItem.speaker.you\": \"You\",\n \"messageItem.speaker.assistant\": \"Assistant\",\n \"messageItem.actions.revert\": \"Revert\",\n \"messageItem.actions.revertTitle\": \"Undo changes up to here (deletes messages)\",\n \"messageItem.actions.fork\": \"Fork\",\n \"messageItem.actions.forkTitle\": \"Fork from this message\",\n \"messageItem.actions.copy\": \"Copy\",\n \"messageItem.actions.copyTitle\": \"Copy message\",\n \"messageItem.actions.copied\": \"Copied!\",\n \"messageItem.actions.more\": \"More actions\",\n \"messageItem.actions.speak\": \"Speak message\",\n \"messageItem.actions.generatingSpeech\": \"Generating speech\",\n \"messageItem.actions.stopSpeech\": \"Stop playback\",\n \"messageItem.actions.speak.error.title\": \"Speech playback failed\",\n \"messageItem.actions.speak.error.unsupported\": \"Speech playback is not supported in this browser.\",\n \"messageItem.actions.speak.error.unavailable\": \"Speech playback is unavailable until speech settings are configured.\",\n \"messageItem.actions.speak.error.generate\": \"Unable to generate speech for this message.\",\n \"messageItem.actions.deleteTechnicalParts\": \"Remove tools and reasoning from this response\",\n \"messageItem.actions.deleteTechnicalParts.confirmTitle\": \"Remove tools and reasoning?\",\n \"messageItem.actions.deleteTechnicalParts.confirmMessage\": \"Tool outputs: {toolCount}; reasoning blocks: {reasoningCount}. The final text will be preserved.\",\n \"messageItem.actions.deleteTechnicalParts.confirmLabel\": \"Remove\",\n \"messageItem.actions.deleteTechnicalParts.failedTitle\": \"Removal failed\",\n \"messageItem.actions.deleteTechnicalParts.failedMessage\": \"Failed to remove tools and reasoning from this response\",\n\n \"messageItem.duration.workedFor.seconds.one\": \"Worked for {count} second\",\n \"messageItem.duration.workedFor.seconds.other\": \"Worked for {count} seconds\",\n \"messageItem.duration.workedFor.minutes.one\": \"Worked for {count} minute\",\n \"messageItem.duration.workedFor.minutes.other\": \"Worked for {count} minutes\",\n \"messageItem.duration.workedFor.hours.one\": \"Worked for {count} hour\",\n \"messageItem.duration.workedFor.hours.other\": \"Worked for {count} hours\",\n\n \"messageItem.status.queued\": \"QUEUED\",\n \"messageItem.status.generating\": \"Generating...\",\n \"messageItem.status.sending\": \"Sending...\",\n \"messageItem.status.failedToSend\": \"Message failed to send\",\n \"messagePart.actions.delete\": \"Delete\",\n \"messagePart.actions.deleting\": \"Deleting...\",\n \"messagePart.actions.deleteFailedTitle\": \"Delete failed\",\n \"messagePart.actions.deleteFailedMessage\": \"Failed to delete item\",\n \"messagePart.pastedText.summary\": \"Pasted text\",\n \"messagePart.pastedText.lines.one\": \"{count} line\",\n \"messagePart.pastedText.lines.other\": \"{count} lines\",\n \"messagePart.pastedText.copyAriaLabel\": \"Copy pasted text block\",\n \"messageItem.attachment.defaultName\": \"attachment\",\n \"messageItem.attachment.downloadAriaLabel\": \"Download {name}\",\n \"messageItem.agentMeta.agentLabel\": \"Agent: {agent}\",\n \"messageItem.agentMeta.modelLabel\": \"Model: {model}\",\n \"messageItem.errors.authenticationFallback\": \"Authentication error\",\n \"messageItem.errors.outputLengthExceeded\": \"Message output length exceeded\",\n \"messageItem.errors.requestAborted\": \"Request was aborted\",\n \"messageItem.errors.unknownFallback\": \"Unknown error occurred\",\n\n \"attachmentChip.removeAriaLabel\": \"Remove attachment\",\n\n \"expandButton.toggleAriaLabel\": \"Toggle chat input height\",\n\n \"promptInput.placeholder.shell\": \"Run a shell command (Esc to exit)...\",\n \"promptInput.placeholder.default\": \"Type your message, @file, @agent, or paste images and text...\",\n \"promptInput.hints.shell.exit\": \"to exit shell mode\",\n \"promptInput.hints.shell.enable\": \"Shell mode\",\n \"promptInput.hints.commands\": \"Commands\",\n \"promptInput.history.previousAriaLabel\": \"Previous prompt\",\n \"promptInput.history.nextAriaLabel\": \"Next prompt\",\n \"promptInput.overlay.newLine\": \"New line\",\n \"promptInput.overlay.send\": \"Send\",\n \"promptInput.overlay.filesAgents\": \"Files/agents\",\n \"promptInput.overlay.history\": \"History\",\n \"promptInput.overlay.attachments\": \"• {count} file(s) attached\",\n \"promptInput.overlay.shellModeActive\": \"Shell mode active\",\n \"promptInput.overlay.press\": \"Press\",\n \"promptInput.overlay.againToAbort\": \"again to abort session\",\n \"promptInput.stopSession.ariaLabel\": \"Stop session\",\n \"promptInput.stopSession.title\": \"Stop session\",\n \"promptInput.background.title\": \"Move blocking tools to background (Cmd/Ctrl+B)\",\n \"promptInput.background.error.title\": \"Background action failed\",\n \"promptInput.background.error.message\": \"Unable to move blocking tools to the background\",\n \"promptInput.attachFiles.ariaLabel\": \"Attach files\",\n \"promptInput.attachFiles.title\": \"Attach files\",\n \"promptInput.attachFiles.dialogTitle\": \"Attach files\",\n \"promptInput.attachFiles.errorTitle\": \"Attach failed\",\n \"promptInput.attachFiles.skipped.title\": \"Some files were not attached\",\n \"promptInput.attachFiles.skipped.one\": \"1 selected file could not be attached because this environment did not expose a file path or supported preview data.\",\n \"promptInput.attachFiles.skipped.other\": \"{count} selected files could not be attached because this environment did not expose file paths or supported preview data.\",\n \"promptInput.attachFiles.tooLarge.one\": \"1 selected file could not be attached because it is larger than the 5 MB attachment limit.\",\n \"promptInput.clear.ariaLabel\": \"Clear prompt text\",\n \"promptInput.clear.title\": \"Clear prompt text\",\n \"promptInput.send.ariaLabel\": \"Send message\",\n \"promptInput.send.queueAriaLabel\": \"Queue message\",\n \"promptQueue.title\": \"Prompt queue ({count})\",\n \"promptQueue.delivery.queue\": \"Queued\",\n \"promptQueue.delivery.steer\": \"Steering\",\n \"promptQueue.attachments.one\": \"{count} attachment\",\n \"promptQueue.attachments.other\": \"{count} attachments\",\n \"promptQueue.actions.steer\": \"Steer now\",\n \"promptQueue.actions.queue\": \"Move to queue\",\n \"promptQueue.actions.edit\": \"Edit queued prompt\",\n \"promptQueue.actions.cancelEdit\": \"Cancel editing\",\n \"promptQueue.actions.remove\": \"Remove queued prompt\",\n \"promptQueue.error.title\": \"Queue action failed\",\n \"promptQueue.error.message\": \"Unable to update the prompt queue\",\n \"promptInput.send.errorFallback\": \"Failed to send message\",\n \"promptInput.send.errorTitle\": \"Send failed\",\n \"promptInput.conversationMode.enable.title\": \"Enable conversation mode\",\n \"promptInput.conversationMode.disable.title\": \"Disable conversation mode\",\n \"promptInput.conversationMode.error.title\": \"Conversation playback failed\",\n \"promptInput.conversationMode.error.message\": \"Unable to continue speaking assistant replies.\",\n \"promptInput.voiceInput.start.title\": \"Start voice input\",\n \"promptInput.voiceInput.stop.title\": \"Stop recording and transcribe\",\n \"promptInput.voiceInput.transcribing.title\": \"Transcribing audio\",\n \"promptInput.voiceInput.error.title\": \"Voice input failed\",\n \"promptInput.voiceInput.error.permission\": \"Microphone access is required to record voice input.\",\n \"promptInput.voiceInput.error.permissionDenied\": \"Microphone access was denied by macOS.\",\n \"promptInput.voiceInput.error.unsupported\": \"Voice input is not supported in this browser.\",\n \"promptInput.voiceInput.error.transcribe\": \"Unable to transcribe the recorded audio.\",\n \"promptInput.resizeHandle.title\": \"Drag to resize input height\",\n} as const\n","export const remoteAccessMessages = {\n \"remoteAccess.eyebrow\": \"Remote handover\",\n \"remoteAccess.title\": \"Connect to CodeNomad remotely\",\n \"remoteAccess.subtitle\": \"Use the addresses below to open CodeNomad from another device.\",\n \"remoteAccess.close\": \"Close remote access\",\n \"remoteAccess.refresh\": \"Refresh\",\n\n \"remoteAccess.sections.listeningMode.label\": \"Listening mode\",\n \"remoteAccess.sections.listeningMode.help\": \"Allow or limit remote handovers by binding to all interfaces or just localhost.\",\n \"remoteAccess.toggle.on\": \"On\",\n \"remoteAccess.toggle.off\": \"Off\",\n \"remoteAccess.toggle.title\": \"Allow connections from other IPs\",\n \"remoteAccess.toggle.caption.all\": \"Binding to 0.0.0.0\",\n \"remoteAccess.toggle.caption.local\": \"Binding to 127.0.0.1\",\n \"remoteAccess.toggle.note\": \"Changing this requires a restart and temporarily stops all active instances. Share the addresses below once the server restarts.\",\n \"remoteAccess.listeningMode.restartConfirm.message\": \"Restart to apply listening mode? This will stop all running instances.\",\n \"remoteAccess.listeningMode.restartConfirm.title.all\": \"Open to other devices\",\n \"remoteAccess.listeningMode.restartConfirm.title.local\": \"Limit to this device\",\n \"remoteAccess.listeningMode.restartConfirm.confirmLabel\": \"Restart now\",\n \"remoteAccess.listeningMode.restartConfirm.cancelLabel\": \"Cancel\",\n \"remoteAccess.restart.errorManual\": \"Unable to restart automatically. Please restart the app to apply the change.\",\n\n \"remoteAccess.sections.serverPassword.label\": \"Server password\",\n \"remoteAccess.sections.serverPassword.help\": \"Remote handovers require a password. Set a memorable one to enable logins from other devices.\",\n \"remoteAccess.authStatus.unavailable\": \"Authentication status unavailable.\",\n \"remoteAccess.username\": \"Username: {username}\",\n \"remoteAccess.password.status.set\": \"A password is set for remote access.\",\n \"remoteAccess.password.status.unset\": \"No memorable password is set yet. Set one to allow remote handover logins.\",\n \"remoteAccess.password.actions.cancel\": \"Cancel\",\n \"remoteAccess.password.actions.change\": \"Change password\",\n \"remoteAccess.password.actions.set\": \"Set password\",\n \"remoteAccess.password.form.newPassword\": \"New password\",\n \"remoteAccess.password.form.confirmPassword\": \"Confirm password\",\n \"remoteAccess.password.form.placeholder\": \"At least 8 characters\",\n \"remoteAccess.password.error.tooShort\": \"Password must be at least 8 characters.\",\n \"remoteAccess.password.error.mismatch\": \"Passwords do not match.\",\n \"remoteAccess.password.save.saving\": \"Saving…\",\n \"remoteAccess.password.save.label\": \"Save password\",\n\n \"remoteAccess.sections.addresses.label\": \"Reachable addresses\",\n \"remoteAccess.sections.addresses.help\": \"Launch or scan from another machine to hand over control.\",\n \"remoteAccess.addresses.loading\": \"Loading addresses…\",\n \"remoteAccess.addresses.none\": \"No addresses available yet.\",\n \"remoteAccess.addresses.actions.showOther\": \"Show {count} other addresses\",\n \"remoteAccess.addresses.actions.hideOther\": \"Hide other addresses\",\n \"remoteAccess.address.scope.network\": \"Network\",\n \"remoteAccess.address.scope.loopback\": \"Loopback\",\n \"remoteAccess.address.scope.internal\": \"Internal\",\n \"remoteAccess.address.open\": \"Open\",\n \"remoteAccess.address.showQr\": \"Show QR\",\n \"remoteAccess.address.hideQr\": \"Hide QR\",\n \"remoteAccess.address.qrAlt\": \"QR for {url}\",\n} as const\n","export const sessionMessages = {\n \"sessionPicker.title\": \"OpenCode • {folder}\",\n \"sessionPicker.empty.noPrevious\": \"No previous sessions\",\n \"sessionPicker.resume.title\": \"Resume a session ({count}):\",\n \"sessionPicker.session.untitled\": \"Untitled\",\n \"sessionPicker.divider.or\": \"or\",\n \"sessionPicker.new.title\": \"Start new session:\",\n \"sessionPicker.agents.loading\": \"Loading agents...\",\n \"sessionPicker.actions.creating\": \"Creating...\",\n \"sessionPicker.actions.createSession\": \"Create Session\",\n \"sessionPicker.actions.cancel\": \"Cancel\",\n\n \"sessionList.header.title\": \"Sessions\",\n \"sessionList.session.untitled\": \"Untitled\",\n \"sessionList.status.working\": \"Working\",\n \"sessionList.status.compacting\": \"Compacting\",\n \"sessionList.status.idle\": \"Idle\",\n \"sessionList.status.interrupted\": \"Interrupted\",\n \"sessionList.status.retrying\": \"Retrying\",\n \"sessionList.status.retryingIn\": \"Retrying in {seconds}s\",\n \"sessionList.status.retryTooltip\": \"{message} (Attempt {attempt})\",\n \"sessionList.status.retryToast\": \"{countdown}: {message} (Attempt {attempt})\",\n \"sessionList.status.needsPermission\": \"Needs Permission\",\n \"sessionList.status.needsInput\": \"Needs Input\",\n \"sessionList.expand.collapseAriaLabel\": \"Collapse session\",\n \"sessionList.expand.expandAriaLabel\": \"Expand session\",\n \"sessionList.expand.collapseTitle\": \"Collapse\",\n \"sessionList.expand.expandTitle\": \"Expand\",\n \"sessionList.actions.newSession.ariaLabel\": \"New session\",\n \"sessionList.actions.newSession.title\": \"New session\",\n \"sessionList.actions.copyId.ariaLabel\": \"Copy session ID\",\n \"sessionList.actions.copyId.title\": \"Copy session ID\",\n \"sessionList.actions.reload.ariaLabel\": \"Reload session\",\n \"sessionList.actions.reload.title\": \"Reload session\",\n \"sessionList.actions.rename.ariaLabel\": \"Rename session\",\n \"sessionList.actions.rename.title\": \"Rename session\",\n \"sessionList.actions.delete.ariaLabel\": \"Delete session\",\n \"sessionList.actions.delete.title\": \"Delete session\",\n \"sessionList.copyId.success\": \"Session ID copied\",\n \"sessionList.copyId.error\": \"Unable to copy session ID\",\n \"sessionList.reload.error\": \"Unable to reload session\",\n \"sessionList.delete.error\": \"Unable to delete session\",\n \"sessionList.delete.title\": \"Delete session\",\n \"sessionList.delete.confirmMessage\": \"Delete \\\"{label}\\\"? This cannot be undone.\",\n \"sessionList.delete.confirmLabel\": \"Delete\",\n \"sessionList.delete.cancelLabel\": \"Cancel\",\n \"sessionList.rename.error\": \"Unable to rename session\",\n\n \"sessionList.filter.placeholder\": \"Search sessions…\",\n \"sessionList.filter.ariaLabel\": \"Search sessions\",\n \"sessionList.loading.more\": \"Loading more sessions…\",\n \"sessionList.loading.initial\": \"Loading sessions…\",\n \"sessionList.loadError.title\": \"Unable to load sessions\",\n \"sessionList.loadError.detail\": \"OpenCode did not return the session list.\",\n \"sessionList.loadError.retry\": \"Retry\",\n \"sessionList.selection.selectAllLabel\": \"Select all\",\n \"sessionList.selection.selectAllAriaLabel\": \"Select all sessions\",\n \"sessionList.selection.clearLabel\": \"Clear\",\n \"sessionList.selection.clearAriaLabel\": \"Clear selection\",\n \"sessionList.selection.checkboxAriaLabel\": \"Select session\",\n \"sessionList.bulkDelete.button\": \"Delete {count}\",\n \"sessionList.bulkDelete.ariaLabel\": \"Delete {count} selected sessions\",\n \"sessionList.bulkDelete.title\": \"Delete sessions\",\n \"sessionList.bulkDelete.confirmMessage\": \"Delete {count} selected sessions? This cannot be undone.\",\n \"sessionList.bulkDelete.confirmLabel\": \"Delete\",\n \"sessionList.bulkDelete.cancelLabel\": \"Cancel\",\n \"sessionList.bulkDelete.error\": \"Unable to delete {count} sessions\",\n\n \"sessionRenameDialog.title\": \"Rename Session\",\n \"sessionRenameDialog.description.withLabel\": \"Update the title for \\\"{label}\\\".\",\n \"sessionRenameDialog.description.default\": \"Set a new title for this session.\",\n \"sessionRenameDialog.input.label\": \"Session name\",\n \"sessionRenameDialog.input.placeholder\": \"Enter a session name\",\n \"sessionRenameDialog.actions.cancel\": \"Cancel\",\n \"sessionRenameDialog.actions.rename\": \"Rename\",\n \"sessionRenameDialog.actions.renaming\": \"Renaming…\",\n\n \"sessionView.fallback.sessionNotFound\": \"Session not found\",\n \"sessionView.alerts.abortFailed.message\": \"Failed to stop session\",\n \"sessionView.alerts.abortFailed.title\": \"Stop failed\",\n \"sessionView.alerts.revertFailed.message\": \"Failed to revert to message\",\n \"sessionView.alerts.revertFailed.title\": \"Revert failed\",\n \"sessionView.alerts.deleteUpToFailed.message\": \"Failed to delete messages\",\n \"sessionView.alerts.deleteUpToFailed.title\": \"Delete failed\",\n \"sessionView.alerts.forkFailed.message\": \"Failed to fork session\",\n \"sessionView.alerts.forkFailed.title\": \"Fork failed\",\n \"sessionView.attachments.expandPastedTextAriaLabel\": \"Expand pasted text\",\n \"sessionView.attachments.insertPastedTextTitle\": \"Insert pasted text\",\n \"sessionView.attachments.removeAriaLabel\": \"Remove attachment\",\n\n \"sessionPreview.title\": \"Web preview\",\n \"sessionPreview.backToChat\": \"Back to chat\",\n \"sessionPreview.close\": \"Close preview\",\n \"sessionPreview.chat.button\": \"Back to chat\",\n \"sessionPreview.open.button\": \"Open web preview\",\n \"sessionPreview.open.title\": \"Open web preview\",\n \"sessionPreview.open.prompt\": \"Enter a trusted local or staging URL to preview in this session.\",\n \"sessionPreview.open.label\": \"Preview URL\",\n \"sessionPreview.open.placeholder\": \"https://staging.example.com\",\n \"sessionPreview.open.confirm\": \"Open preview\",\n \"sessionPreview.open.cancel\": \"Cancel\",\n \"sessionPreview.comment.mode\": \"Comment mode\",\n \"sessionPreview.comment.title\": \"Add preview comment\",\n \"sessionPreview.comment.prompt\": \"Describe what should change for the selected element.\",\n \"sessionPreview.comment.label\": \"Comment\",\n \"sessionPreview.comment.add\": \"Add comment\",\n \"sessionPreview.comment.cancel\": \"Cancel\",\n \"browserFrame.viewport\": \"Viewport size\",\n \"browserFrame.viewport.responsive\": \"Responsive viewport\",\n \"browserFrame.viewport.desktop\": \"Desktop viewport (1440 x 900)\",\n \"browserFrame.viewport.tablet\": \"Tablet viewport (768 x 1024)\",\n \"browserFrame.viewport.tabletLandscape\": \"Tablet landscape (1024 x 768)\",\n \"browserFrame.viewport.mobile\": \"Mobile viewport (390 x 844)\",\n \"browserFrame.viewport.mobileLandscape\": \"Mobile landscape (844 x 390)\",\n\n \"sessionEvents.sessionCompactedToast\": \"Session {label} was compacted\",\n \"sessionEvents.sessionError.unknown\": \"Unknown error\",\n \"sessionEvents.sessionError.title\": \"Session error\",\n \"sessionEvents.sessionError.message\": \"Error: {message}\",\n\n \"sessionState.cleanup.deepConfirm.message\": \"This cleanup may be slow, and may delete sessions you didn't intend to delete. Are you sure?\",\n \"sessionState.cleanup.deepConfirm.title\": \"Deep Clean Sessions\",\n \"sessionState.cleanup.deepConfirm.detail\": \"Deep Clean Sessions will delete all sessions that have no messages, remove any finished sub-agent sessions, and clear out any unused forks of a session.\",\n \"sessionState.cleanup.deepConfirm.confirmLabel\": \"Continue\",\n \"sessionState.cleanup.deepConfirm.cancelLabel\": \"Cancel\",\n \"sessionState.cleanup.toast.one\": \"Cleaned up {count} blank session\",\n \"sessionState.cleanup.toast.other\": \"Cleaned up {count} blank sessions\",\n} as const\n","export const settingsMessages = {\n \"instanceServiceStatus.sections.lsp\": \"LSP Servers\",\n \"instanceServiceStatus.sections.mcp\": \"MCP Servers\",\n \"instanceServiceStatus.sections.plugins\": \"Plugins\",\n \"instanceServiceStatus.lsp.loading\": \"Loading LSP servers...\",\n \"instanceServiceStatus.lsp.empty\": \"No LSP servers detected.\",\n \"instanceServiceStatus.lsp.status.connected\": \"Connected\",\n \"instanceServiceStatus.lsp.status.error\": \"Error\",\n \"instanceServiceStatus.mcp.loading\": \"Loading MCP servers...\",\n \"instanceServiceStatus.mcp.empty\": \"No MCP servers detected.\",\n \"instanceServiceStatus.mcp.toggleAriaLabel\": \"Toggle {name} MCP server\",\n \"instanceServiceStatus.plugins.loading\": \"Loading plugins...\",\n \"instanceServiceStatus.plugins.empty\": \"No active plugins.\",\n\n \"permissionBanner.pendingRequests.one\": \"{count} pending request\",\n \"permissionBanner.pendingRequests.other\": \"{count} pending requests\",\n \"permissionBanner.detail.permission.one\": \"{count} permission\",\n \"permissionBanner.detail.permission.other\": \"{count} permissions\",\n \"permissionBanner.detail.question.one\": \"{count} question\",\n \"permissionBanner.detail.question.other\": \"{count} questions\",\n \"permissionBanner.detail.form.one\": \"{count} form\",\n \"permissionBanner.detail.form.other\": \"{count} forms\",\n \"permissionBanner.detail.wrapper\": \" ({detail})\",\n\n \"agentSelector.placeholder\": \"Select agent...\",\n \"agentSelector.badge.subagent\": \"subagent\",\n \"agentSelector.none\": \"None\",\n \"agentSelector.trigger.primary\": \"Agent: {agent}\",\n\n \"modelSelector.placeholder.search\": \"Search models...\",\n \"modelSelector.none\": \"None\",\n \"modelSelector.trigger.primary\": \"Model: {model}\",\n \"modelSelector.trigger.ariaLabel\": \"Model: {model}, provider: {provider}, ID: {id}\",\n \"modelSelector.favoritesOnly.toggle.ariaLabel\": \"Toggle favorites only\",\n \"modelSelector.favoritesOnly.showAll\": \"Show all models\",\n \"modelSelector.favorite.add\": \"Add to favorites\",\n \"modelSelector.favorite.remove\": \"Remove from favorites\",\n \"modelSelector.manageProviders\": \"Manage Providers\",\n \"modelSelector.unavailableModel\": \"{model} (unavailable)\",\n \"settings.providers.actions.manageModels\": \"Manage models\",\n \"settings.providers.modelVisibility.back\": \"Back to providers\",\n \"settings.providers.modelVisibility.title\": \"Models for {provider}\",\n \"settings.providers.modelVisibility.subtitle\": \"Choose which models CodeNomad shows in model selectors.\",\n \"settings.providers.modelVisibility.search.label\": \"Search provider models\",\n \"settings.providers.modelVisibility.search.placeholder\": \"Search by model name or ID...\",\n \"settings.providers.modelVisibility.count.visible\": \"{visible} of {total} visible\",\n \"settings.providers.modelVisibility.actions.showAll\": \"Show all\",\n \"settings.providers.modelVisibility.actions.hideAll\": \"Hide all\",\n \"settings.providers.modelVisibility.list.empty\": \"No models match this search.\",\n \"settings.providers.modelVisibility.list.label\": \"Models for {provider}\",\n \"settings.providers.modelVisibility.save.failed\": \"Failed to save model visibility.\",\n\n \"thinkingSelector.variant.default\": \"Default\",\n \"thinkingSelector.label\": \"Thinking: {variant}\",\n\n \"envEditor.title\": \"Environment Variables\",\n \"envEditor.count.one\": \"({count} variable)\",\n \"envEditor.count.other\": \"({count} variables)\",\n \"envEditor.fields.name.placeholder\": \"Variable name\",\n \"envEditor.fields.name.readOnlyTitle\": \"Variable name (read-only)\",\n \"envEditor.fields.value.placeholder\": \"Variable value\",\n \"envEditor.fields.secure.enabled\": \"Value masked (secure)\",\n \"envEditor.fields.secure.disabled\": \"Click to mask value\",\n \"envEditor.fields.secure.masked\": \"Value hidden (secure)\",\n \"envEditor.actions.remove.title\": \"Remove variable\",\n \"envEditor.actions.add.title\": \"Add variable\",\n \"envEditor.empty\": \"No environment variables configured. Add variables above to customize the OpenCode environment.\",\n \"envEditor.help\": \"These variables will be available in the OpenCode environment when starting instances.\",\n\n \"contextUsagePanel.headings.tokens\": \"Tokens\",\n \"contextUsagePanel.headings.context\": \"Context\",\n \"contextUsagePanel.labels.input\": \"Input\",\n \"contextUsagePanel.labels.output\": \"Output\",\n \"contextUsagePanel.labels.cost\": \"Cost\",\n \"contextUsagePanel.included\": \"Included\",\n \"contextUsagePanel.labels.totalInput\": \"Total In\",\n \"contextUsagePanel.labels.totalOutput\": \"Total Out\",\n \"contextUsagePanel.labels.totalCost\": \"Total Cost\",\n \"contextUsagePanel.labels.totalReasoning\": \"Total Reasoning\",\n \"contextUsagePanel.labels.used\": \"Used\",\n \"contextUsagePanel.labels.available\": \"Avail\",\n \"contextUsagePanel.unavailable\": \"--\",\n\n \"providerUsage.title\": \"Usage\",\n \"providerUsage.tooltip\": \"Usage and reset windows for the provider selected by the active session.\",\n \"providerUsage.noSession\": \"Select a session to view plan usage.\",\n \"providerUsage.loading\": \"Loading usage...\",\n \"providerUsage.unsupported\": \"Usage is not available for this provider.\",\n \"providerUsage.notConfigured\": \"No compatible subscription credential was found.\",\n \"providerUsage.unavailable\": \"Usage is temporarily unavailable.\",\n \"providerUsage.unavailableValue\": \"--\",\n \"providerUsage.usedPercent\": \"{percent}% used\",\n \"providerUsage.resets\": \"Resets {time}\",\n \"providerUsage.progressLabel\": \"{window} plan usage\",\n \"providerUsage.windows.fiveHours\": \"5 hours\",\n \"providerUsage.windows.sevenDays\": \"7 days\",\n \"providerUsage.windows.sevenDaysSonnet\": \"7 days · Sonnet\",\n \"providerUsage.windows.sevenDaysOpus\": \"7 days · Opus\",\n \"providerUsage.windows.weekly\": \"Weekly\",\n \"providerUsage.windows.daily\": \"Daily\",\n \"providerUsage.windows.monthly\": \"Monthly\",\n \"providerUsage.windows.credits\": \"Credits\",\n \"providerUsage.windows.billingCycle\": \"Billing cycle\",\n \"providerUsage.windows.session\": \"Session\",\n \"providerUsage.windows.premium\": \"Premium requests\",\n \"providerUsage.windows.chat\": \"Chat\",\n \"providerUsage.windows.completions\": \"Completions\",\n \"providerUsage.windows.mcpTools\": \"MCP tools\",\n\n \"settings.title\": \"Settings\",\n \"settings.navigationAriaLabel\": \"Settings sections\",\n \"settings.close\": \"Close settings\",\n \"settings.content.eyebrow\": \"Workspace preferences\",\n \"settings.open.title\": \"Open settings\",\n \"settings.open.ariaLabel\": \"Open settings\",\n \"settings.nav.appearance\": \"Appearance\",\n \"settings.nav.general\": \"General\",\n \"settings.nav.chat\": \"Chat\",\n \"settings.nav.voice\": \"Voice\",\n \"settings.nav.connections\": \"Connections\",\n \"settings.nav.runtime\": \"Runtime\",\n \"settings.nav.advanced\": \"Advanced\",\n \"settings.nav.about\": \"About\",\n \"settings.general.language.subtitle\": \"Choose the language used throughout the application.\",\n \"settings.behavior.holdLongAssistantReplies.title\": \"Hold long assistant replies\",\n \"settings.behavior.holdLongAssistantReplies.subtitle\": \"Stop following automatically when a streaming reply grows beyond the viewport.\",\n \"settings.nav.notifications\": \"Notifications\",\n \"settings.nav.remote\": \"Remote Access\",\n \"settings.nav.speech\": \"Speech\",\n \"settings.nav.providers\": \"Providers\",\n \"settings.nav.opencode\": \"OpenCode\",\n \"settings.nav.configFiles\": \"Config Files\",\n \"settings.nav.info\": \"Info\",\n \"settings.scope.device\": \"This device\",\n \"settings.scope.server\": \"Server setting\",\n \"settings.common.enabled\": \"Enabled\",\n \"settings.common.disabled\": \"Disabled\",\n \"settings.section.appearance.title\": \"Appearance\",\n \"settings.section.appearance.subtitle\": \"Adjust how the app looks on this device.\",\n \"settings.appearance.theme.title\": \"Theme\",\n \"settings.appearance.theme.subtitle\": \"Choose the color mode used throughout the app.\",\n \"settings.appearance.theme.option.system\": \"Match your operating system setting\",\n \"settings.appearance.theme.option.light\": \"Use the light appearance\",\n \"settings.appearance.theme.option.dark\": \"Use the dark appearance\",\n \"settings.appearance.colorScheme.title\": \"Color scheme\",\n \"settings.appearance.colorScheme.subtitle\": \"Choose the palette used by clients connected to this CodeNomad server.\",\n \"settings.appearance.colorScheme.option.system\": \"System\",\n \"settings.appearance.colorScheme.option.light\": \"Light\",\n \"settings.appearance.colorScheme.option.codeNomadClassic\": \"CodeNomad Classic\",\n \"settings.appearance.colorScheme.option.basalt\": \"Basalt\",\n \"settings.appearance.colorScheme.option.fjord\": \"Fjord\",\n \"settings.appearance.colorScheme.option.lichen\": \"Lichen\",\n \"settings.appearance.colorScheme.option.velvet\": \"Velvet\",\n \"settings.appearance.colorScheme.option.ember\": \"Ember\",\n \"settings.appearance.colorScheme.option.custom\": \"Custom\",\n \"settings.appearance.colorScheme.description.system\": \"Follow your operating system appearance.\",\n \"settings.appearance.colorScheme.description.light\": \"A bright, neutral palette.\",\n \"settings.appearance.colorScheme.description.codeNomadClassic\": \"The original CodeNomad dark palette.\",\n \"settings.appearance.colorScheme.description.basalt\": \"Neutral charcoal with a cool blue accent.\",\n \"settings.appearance.colorScheme.description.fjord\": \"Deep blue-gray with a sea-green accent.\",\n \"settings.appearance.colorScheme.description.lichen\": \"Earthy green-gray with a moss accent.\",\n \"settings.appearance.colorScheme.description.velvet\": \"Deep plum with a warm peach accent.\",\n \"settings.appearance.colorScheme.description.ember\": \"Warm brown-black with a copper accent.\",\n \"settings.appearance.colorScheme.description.custom\": \"Build and save your own palette.\",\n \"settings.appearance.colorScheme.custom.appearance\": \"Custom appearance\",\n \"settings.appearance.colorScheme.custom.appearance.light\": \"Light\",\n \"settings.appearance.colorScheme.custom.appearance.dark\": \"Dark\",\n \"settings.appearance.colorScheme.custom.colors\": \"Colors\",\n \"settings.appearance.colorScheme.custom.field.surfaceBase\": \"Base surface\",\n \"settings.appearance.colorScheme.custom.field.surfaceSecondary\": \"Secondary surface\",\n \"settings.appearance.colorScheme.custom.field.surfaceMuted\": \"Muted surface\",\n \"settings.appearance.colorScheme.custom.field.borderBase\": \"Border\",\n \"settings.appearance.colorScheme.custom.field.textPrimary\": \"Primary text\",\n \"settings.appearance.colorScheme.custom.field.textMuted\": \"Muted text\",\n \"settings.appearance.colorScheme.custom.field.accentPrimary\": \"Accent\",\n \"settings.appearance.colorScheme.custom.field.statusSuccess\": \"Success\",\n \"settings.appearance.colorScheme.custom.field.statusWarning\": \"Warning\",\n \"settings.appearance.colorScheme.custom.field.statusError\": \"Error\",\n \"settings.appearance.colorScheme.custom.field.userAccent\": \"User\",\n \"settings.appearance.colorScheme.custom.field.agentAccent\": \"Agent\",\n \"settings.appearance.colorScheme.custom.field.compactionAccent\": \"Compaction\",\n \"settings.appearance.colorScheme.custom.field.yoloAccent\": \"YOLO mode\",\n \"settings.appearance.colorScheme.custom.pickerAriaLabel\": \"Choose {name}\",\n \"settings.appearance.colorScheme.custom.valueAriaLabel\": \"Hex value for {name}\",\n \"settings.appearance.colorScheme.custom.warning.format\": \"Use uppercase colors in #RRGGBB format.\",\n \"settings.appearance.colorScheme.custom.warning.contrast\": \"Increase color contrast before saving.\",\n \"settings.appearance.colorScheme.custom.reset\": \"Reset\",\n \"settings.appearance.colorScheme.custom.save\": \"Save\",\n \"settings.appearance.colorScheme.custom.saveError\": \"Could not save the palette.\",\n \"settings.appearance.startup.title\": \"Startup\",\n \"settings.appearance.startup.subtitle\": \"Choose what this device restores when CodeNomad starts.\",\n \"settings.appearance.startup.restore.title\": \"Restore previous state\",\n \"settings.appearance.startup.restore.subtitle\": \"Reopen workspace and sidecar tabs, active sessions, and unsent messages, and restore scroll positions, panel layout, window position, and zoom.\",\n \"settings.appearance.startup.clear.title\": \"Saved startup state\",\n \"settings.appearance.startup.clear.subtitle\": \"Remove saved tabs, drafts, scroll positions, and panel layout. CodeNomad and OpenCode data are not deleted.\",\n \"settings.appearance.startup.clear.action\": \"Clear saved state\",\n \"settings.appearance.startup.clearSuccess\": \"Saved startup state cleared.\",\n \"settings.appearance.startup.clearError\": \"Could not clear the saved startup state.\",\n \"settings.appearance.startup.updateError\": \"Could not update the startup restore setting.\",\n \"settings.section.notifications.title\": \"Notifications\",\n \"settings.section.notifications.subtitle\": \"Control OS-level notifications for session activity.\",\n \"settings.notifications.permission.granted\": \"Granted\",\n \"settings.notifications.permission.denied\": \"Denied\",\n \"settings.notifications.permission.default\": \"Not granted\",\n \"settings.notifications.permission.unsupported\": \"Unsupported\",\n \"settings.notifications.messages.unsupportedEnvironment\": \"OS notifications are not supported in this environment.\",\n \"settings.notifications.messages.permissionDenied\": \"Notification permission denied. Enable notifications in your system or browser settings.\",\n \"settings.notifications.messages.permissionNotGranted\": \"Notification permission not granted.\",\n \"settings.notifications.messages.unsupportedGeneral\": \"Notifications are not supported in this environment.\",\n \"settings.notifications.messages.permissionGranted\": \"Permission granted. You can now enable notifications.\",\n \"settings.notifications.messages.permissionRequestDenied\": \"Permission denied. You may need to enable notifications in your system or browser settings.\",\n \"settings.notifications.sessionStatus.title\": \"Session status notifications\",\n \"settings.notifications.sessionStatus.subtitle\": \"Receive alerts when sessions need your attention.\",\n \"settings.notifications.enable.title\": \"Enable notifications\",\n \"settings.notifications.enable.permission\": \"Permission: {permission}\",\n \"settings.notifications.requestPermission.title\": \"Request permission\",\n \"settings.notifications.requestPermission.subtitle\": \"Allow the app to send notifications on this device.\",\n \"settings.notifications.requestPermission.action\": \"Request\",\n \"settings.notifications.allowVisible.title\": \"Notify when the app is focused\",\n \"settings.notifications.allowVisible.subtitle\": \"Keep alerts enabled even while this window is visible.\",\n \"settings.notifications.unsupportedNote\": \"Notifications are not supported in this environment. The notifications control stays disabled.\",\n \"settings.notifications.events.title\": \"Notify me when\",\n \"settings.notifications.events.subtitle\": \"Choose which session events should send alerts.\",\n \"settings.notifications.events.needsInput\": \"Session needs input\",\n \"settings.notifications.events.idle\": \"Session becomes idle\",\n \"settings.notifications.status.enabled\": \"Notifications enabled\",\n \"settings.notifications.status.disabled\": \"Notifications disabled\",\n \"settings.notifications.status.unsupported\": \"Notifications unsupported\",\n \"settings.section.remote.title\": \"Remote Access\",\n \"settings.section.remote.subtitle\": \"Review how this server is exposed on your network and secure access credentials.\",\n \"settings.section.opencode.title\": \"OpenCode\",\n \"settings.section.opencode.subtitle\": \"Choose the OpenCode binary and environment used for new instances.\",\n \"settings.opencode.runtime.title\": \"Runtime\",\n \"settings.opencode.runtime.subtitle\": \"Configure which OpenCode binary new instances launch with.\",\n \"settings.opencode.logLevel.title\": \"OpenCode Log Level\",\n \"settings.opencode.logLevel.subtitle\": \"Control the log verbosity used when launching new OpenCode instances.\",\n \"settings.opencode.logLevel.selector.title\": \"Default log level\",\n \"settings.opencode.logLevel.selector.subtitle\": \"Choose how verbose new OpenCode instances should be.\",\n \"settings.opencode.logLevel.option.debug\": \"Debug\",\n \"settings.opencode.logLevel.option.info\": \"Info\",\n \"settings.opencode.logLevel.option.warn\": \"Warn\",\n \"settings.opencode.logLevel.option.error\": \"Error\",\n \"settings.opencode.update.title\": \"OpenCode version\",\n \"settings.opencode.update.subtitle\": \"Installed version of the configured OpenCode binary.\",\n \"settings.opencode.update.checking\": \"Reading installed version...\",\n \"settings.opencode.update.checkFailed\": \"Could not read the installed OpenCode version.\",\n \"settings.opencode.update.retry\": \"Try again\",\n \"settings.opencode.update.installed\": \"Installed version\",\n \"settings.opencode.update.upToDate\": \"OpenCode is up to date.\",\n \"settings.opencode.update.availableUnsupported\": \"OpenCode {version} is available. Automatic installation is not supported by OpenCode V2.\",\n \"settings.opencode.update.action\": \"Update to OpenCode {version}\",\n \"settings.opencode.update.updating\": \"Updating OpenCode...\",\n \"settings.opencode.update.requiresInstance\": \"Start a workspace with this binary to install the update.\",\n \"settings.opencode.update.success\": \"OpenCode {version} is installed. New instances will use the updated version.\",\n \"settings.opencode.update.failed\": \"The OpenCode update failed. Your installed version was not changed.\",\n \"settings.configFiles.title\": \"Config Files\",\n \"settings.configFiles.subtitle\": \"Edit allowlisted global configuration files on this server.\",\n \"settings.configFiles.selector.label\": \"File\",\n \"settings.configFiles.selector.placeholder\": \"Select config file\",\n \"settings.configFiles.actions.save\": \"Save\",\n \"settings.configFiles.actions.reload\": \"Reload\",\n \"settings.configFiles.state.unsaved\": \"Unsaved changes\",\n \"settings.configFiles.state.notCreated\": \"File will be created on save\",\n \"settings.configFiles.empty\": \"No config file selected.\",\n \"settings.configFiles.errors.loadList\": \"Failed to load config files.\",\n \"settings.configFiles.errors.loadContent\": \"Failed to load config file.\",\n \"settings.configFiles.errors.save\": \"Failed to save config file.\",\n \"settings.configFiles.toast.saveSuccess\": \"Config file saved.\",\n \"settings.configFiles.toast.saveError\": \"Failed to save config file.\",\n \"settings.configFiles.confirmDiscard.message\": \"Discard unsaved changes before continuing?\",\n \"settings.configFiles.confirmDiscard.confirmLabel\": \"Discard changes\",\n \"settings.configFiles.confirmDiscard.cancelLabel\": \"Keep editing\",\n\n \"settings.providers.title\": \"Provider Authentication\",\n \"settings.providers.target\": \"OpenCode instance: {workspace}\",\n \"settings.providers.subtitle\": \"Connect API keys or OAuth accounts for the active OpenCode instance.\",\n \"settings.providers.refresh\": \"Refresh\",\n \"settings.providers.selectProvider\": \"Select provider\",\n \"settings.providers.available.title\": \"Available Providers\",\n \"settings.providers.configured.title\": \"Configured Providers\",\n \"settings.providers.loading\": \"Loading provider authentication methods...\",\n \"settings.providers.empty.noInstance\": \"Start an OpenCode workspace before managing provider authentication.\",\n \"settings.providers.empty.noProviders\": \"No providers are available from this OpenCode instance.\",\n \"settings.providers.empty.noConfiguredProviders\": \"No providers are currently configured for this OpenCode instance.\",\n \"settings.providers.models.one\": \"{count} model\",\n \"settings.providers.models.other\": \"{count} models\",\n \"settings.providers.actions.connect\": \"Connect\",\n \"settings.providers.actions.disconnect\": \"Disconnect\",\n \"settings.providers.actions.remove\": \"Remove saved auth\",\n \"settings.providers.actions.close\": \"Close\",\n \"settings.providers.actions.continue\": \"Continue\",\n \"settings.providers.actions.working\": \"Working...\",\n \"settings.providers.method.title\": \"Authentication method\",\n \"settings.providers.method.subtitle\": \"Choose the flow OpenCode exposes for this provider.\",\n \"settings.providers.method.api\": \"API key\",\n \"settings.providers.method.oauth\": \"OAuth\",\n \"settings.providers.method.command\": \"Command\",\n \"settings.providers.method.mixed\": \"API key, OAuth, or command\",\n \"settings.providers.method.fallback\": \"API key\",\n \"settings.providers.status.available\": \"Available\",\n \"settings.providers.auth.title\": \"Connect {provider}\",\n \"settings.providers.auth.subtitle\": \"Authentication is saved inside the active OpenCode server.\",\n \"settings.providers.apiKey.label\": \"API key\",\n \"settings.providers.apiKey.placeholder\": \"Paste provider API key\",\n \"settings.providers.oauth.noPrompts\": \"This OAuth method does not need additional details before opening the browser.\",\n \"settings.providers.oauth.promptsUnsupported\": \"This OAuth method requires provider-specific prompt inputs that are not supported by the current SDK build.\",\n \"settings.providers.oauth.enterCode\": \"Complete the browser flow, then paste the authorization code.\",\n \"settings.providers.oauth.openPage\": \"Open authorization page\",\n \"settings.providers.oauth.openHere\": \"Open in this tab\",\n \"settings.providers.oauth.copyLink\": \"Copy link\",\n \"settings.providers.oauth.linkCopied\": \"Link copied\",\n \"settings.providers.oauth.popupBlocked\": \"Your browser may have blocked the authorization page. Use the actions above to continue the sign-in flow.\",\n \"settings.providers.oauth.popup.loadingTitle\": \"OpenCode authorization\",\n \"settings.providers.oauth.popup.loadingBody\": \"Preparing authorization page...\",\n \"settings.providers.oauth.codeLabel\": \"Authorization code\",\n \"settings.providers.oauth.codePlaceholder\": \"Paste code from provider\",\n \"settings.providers.oauth.submitCode\": \"Submit code\",\n \"settings.providers.oauth.waitingTitle\": \"Waiting for authorization\",\n \"settings.providers.oauth.cancelWait\": \"Cancel\",\n \"settings.providers.prompt.selectPlaceholder\": \"Select an option\",\n \"settings.providers.prompt.customValuesPlaceholder\": \"Additional values, separated by commas\",\n \"settings.providers.command.description\": \"OpenCode will run this provider's native authentication command.\",\n \"settings.providers.command.waitingTitle\": \"Waiting for command authentication\",\n \"settings.providers.command.waitingMessage\": \"Complete the instructions shown by the authentication command.\",\n \"settings.providers.success\": \"Provider authentication saved. Provider data has been refreshed.\",\n \"settings.providers.source.api\": \"Saved provider authentication\",\n \"settings.providers.source.config\": \"Configured in opencode.jsonc\",\n \"settings.providers.source.custom\": \"Configured by custom provider logic\",\n \"settings.providers.source.env\": \"Configured from environment variables\",\n \"settings.providers.source.unknown\": \"Configured provider source\",\n \"settings.providers.errors.loadFailed\": \"Failed to load provider authentication methods.\",\n \"settings.providers.errors.noAuthorization\": \"Provider did not return authorization data.\",\n \"settings.providers.errors.authorizationFailed\": \"Authorization failed.\",\n \"settings.providers.errors.removeFailed\": \"Failed to remove provider authentication.\",\n \"settings.providers.errors.envDisconnectUnavailable\": \"This provider is configured from environment variables and cannot be disconnected from the UI.\",\n\n\n \"settings.appearance.behavior.title\": \"Interaction\",\n \"settings.appearance.behavior.subtitle\": \"Control message, tool, diagnostics, and usage detail together.\",\n \"settings.behavior.expansionPresets.ariaLabel\": \"Transcript detail presets\",\n \"settings.behavior.expansionPreset.minimal.title\": \"Minimal\",\n \"settings.behavior.expansionPreset.minimal.description\": \"Keep most generated detail tucked away until needed.\",\n \"settings.behavior.expansionPreset.balanced.title\": \"Balanced\",\n \"settings.behavior.expansionPreset.balanced.description\": \"Show important actions while keeping noisy reads and fetches compact.\",\n \"settings.behavior.expansionPreset.detailed.title\": \"Detailed\",\n \"settings.behavior.expansionPreset.detailed.description\": \"Open most tool and thinking output for a fuller transcript.\",\n \"settings.behavior.expansionPreset.everything.title\": \"Everything\",\n \"settings.behavior.expansionPreset.everything.description\": \"Expand all tool and thinking output by default.\",\n \"settings.behavior.expansionPreset.custom.title\": \"Custom\",\n \"settings.behavior.expansionPreset.custom.description\": \"Your customized transcript detail defaults.\",\n \"settings.behavior.expansionDefaults.title\": \"Expansion defaults\",\n \"settings.behavior.expansionDefaults.itemColumn\": \"Item\",\n \"settings.behavior.expansionDefaults.stateColumn\": \"Default state\",\n \"settings.behavior.expansionDefaults.thinking\": \"thinking\",\n \"settings.behavior.expansionDefaults.otherTools\": \"Other\",\n \"settings.behavior.expansionDefaults.rowAriaLabel\": \"Default state for {item}\",\n \"settings.behavior.keyboardHints.title\": \"Keyboard shortcut hints\",\n \"settings.behavior.keyboardHints.subtitle\": \"Show keyboard shortcut hints across the UI.\",\n \"settings.behavior.thinking.title\": \"Thinking sections\",\n \"settings.behavior.thinking.subtitle\": \"Show or hide AI thinking sections in messages.\",\n \"settings.behavior.thinkingDefault.title\": \"Thinking default\",\n \"settings.behavior.thinkingDefault.subtitle\": \"Choose whether thinking sections start expanded or collapsed.\",\n \"settings.behavior.messageTimeline.title\": \"Message timeline\",\n \"settings.behavior.messageTimeline.subtitle\": \"Show or hide the message timeline sidebar.\",\n \"settings.behavior.timelineTools.title\": \"Timeline tool calls\",\n \"settings.behavior.timelineTools.subtitle\": \"Show or hide tool call entries in the message timeline.\",\n \"settings.behavior.diffView.title\": \"Diff view\",\n \"settings.behavior.diffView.subtitle\": \"Choose how tool-call diffs are displayed.\",\n \"settings.behavior.diffView.option.split\": \"Split\",\n \"settings.behavior.diffView.option.unified\": \"Unified\",\n \"settings.behavior.toolOutputsDefault.title\": \"Tool outputs default\",\n \"settings.behavior.toolOutputsDefault.subtitle\": \"Choose whether tool outputs start expanded or collapsed.\",\n \"settings.behavior.diagnosticsDefault.title\": \"Diagnostic\",\n \"settings.behavior.diagnosticsDefault.subtitle\": \"Choose whether diagnostics output starts expanded or collapsed.\",\n \"settings.behavior.toolInputsVisibility.title\": \"Input\",\n \"settings.behavior.toolInputsVisibility.subtitle\": \"Set default visibility for tool call input arguments.\",\n \"settings.behavior.usageMetrics.title\": \"Tokens\",\n \"settings.behavior.usageMetrics.subtitle\": \"Show or hide token and cost stats for assistant messages.\",\n \"settings.behavior.providerUsageCreditBalance.title\": \"Provider credit balance\",\n \"settings.behavior.providerUsageCreditBalance.subtitle\": \"Show supplemental provider credit balances in the Usage panel.\",\n \"settings.behavior.autoCleanup.title\": \"Auto-cleanup blank sessions\",\n \"settings.behavior.autoCleanup.subtitle\": \"Automatically clean up blank sessions when creating new ones.\",\n \"settings.behavior.keepUnseenSubagentIdle.title\": \"Keep subagent idle markers\",\n \"settings.behavior.keepUnseenSubagentIdle.subtitle\": \"Keep subagent idle markers visible until viewed instead of hiding them after 5 seconds.\",\n \"settings.behavior.focusExistingWindowOnSecondLaunch.title\": \"Focus existing window on second launch\",\n \"settings.behavior.focusExistingWindowOnSecondLaunch.subtitle\": \"Bring the most recently used CodeNomad window forward instead of opening a new one.\",\n \"settings.behavior.promptVoiceInput.title\": \"Prompt voice input\",\n \"settings.behavior.promptVoiceInput.subtitle\": \"Show the microphone control for speech-to-text prompt input when speech is configured.\",\n \"settings.behavior.promptSubmit.title\": \"Enter to submit\",\n \"settings.behavior.promptSubmit.subtitle\": \"Use Enter to submit prompts; Cmd/Ctrl+Enter inserts a new line.\",\n \"settings.behavior.followUpBehavior.title\": \"Follow-up behavior\",\n \"settings.behavior.followUpBehavior.subtitle\": \"Choose how prompts are delivered while a task is active; Cmd/Ctrl+Shift+Enter uses the other behavior.\",\n \"settings.behavior.followUpBehavior.option.steer\": \"Steer\",\n \"settings.behavior.followUpBehavior.option.queue\": \"Queue\",\n \"settings.speech.title\": \"Speech\",\n \"settings.speech.subtitle\": \"Configure speech-to-text now and text-to-speech groundwork for later features.\",\n \"settings.speech.provider.title\": \"Provider\",\n \"settings.speech.provider.subtitle\": \"Speech requests use the server-side speech adapter.\",\n \"settings.speech.provider.openaiCompatible\": \"OpenAI-compatible\",\n \"settings.speech.status.loading\": \"Checking configuration...\",\n \"settings.speech.status.configured\": \"Configured\",\n \"settings.speech.status.missing\": \"Missing API key\",\n \"settings.speech.status.partial\": \"Partially configured\",\n \"settings.speech.status.error\": \"Speech service unavailable\",\n \"settings.speech.apiKey.title\": \"API key\",\n \"settings.speech.apiKey.subtitle\": \"Used for CodeNomad-managed speech requests.\",\n \"settings.speech.apiKey.placeholder\": \"Enter a new API key\",\n \"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.\",\n \"settings.speech.apiKey.clearAction\": \"Clear saved key\",\n \"settings.speech.apiKey.clearPending\": \"The saved API key will be removed when you save.\",\n \"settings.speech.baseUrl.title\": \"Base URL\",\n \"settings.speech.baseUrl.subtitle\": \"Optional override for OpenAI-compatible speech endpoints.\",\n \"settings.speech.baseUrl.placeholder\": \"https://api.openai.com/v1\",\n \"settings.speech.sttModel.title\": \"Transcription model\",\n \"settings.speech.sttModel.subtitle\": \"Model used for prompt speech-to-text requests.\",\n \"settings.speech.ttsModel.title\": \"Speech model\",\n \"settings.speech.ttsModel.subtitle\": \"Default text-to-speech model reserved for future playback features.\",\n \"settings.speech.ttsVoice.title\": \"Default voice\",\n \"settings.speech.ttsVoice.subtitle\": \"Default text-to-speech voice reserved for future playback features.\",\n \"settings.speech.playbackMode.title\": \"Playback mode\",\n \"settings.speech.playbackMode.subtitle\": \"Choose whether TTS starts playing as audio streams in or after the full file is generated.\",\n \"settings.speech.playbackMode.streaming\": \"Streaming\",\n \"settings.speech.playbackMode.buffered\": \"Buffered\",\n \"settings.speech.ttsFormat.title\": \"Output format\",\n \"settings.speech.ttsFormat.subtitle\": \"Choose the audio format for synthesized speech. Streaming support depends on your provider and browser.\",\n \"settings.speech.help\": \"Prompt voice input appears when speech transcription is configured and supported. Message playback uses the TTS mode and format selected here.\",\n \"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.\",\n \"settings.speech.compatibility.browserStreamingUnavailable\": \"Your current browser cannot stream the selected TTS format. Choose buffered playback or switch to a different format.\",\n \"settings.speech.compatibility.runtimeNote\": \"All formats stay selectable in streaming mode. Some browser and provider combinations may still fail at playback time.\",\n \"settings.speech.testPlayback.action\": \"Test playback\",\n \"settings.speech.testPlayback.generating\": \"Generating sample\",\n \"settings.speech.testPlayback.stop\": \"Stop sample\",\n \"settings.speech.testPlayback.sample\": \"Thank you for using CodeNomad, your speech settings are working fine.\",\n \"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.\",\n \"settings.speech.testInput.action\": \"Test input\",\n \"settings.speech.testInput.stop\": \"Stop recording\",\n \"settings.speech.testInput.transcribing\": \"Transcribing\",\n \"settings.speech.testInput.requesting\": \"Starting…\",\n \"settings.speech.testInput.empty\": \"No speech detected\",\n \"settings.speech.save.action\": \"Save\",\n \"settings.speech.save.saving\": \"Saving...\",\n \"settings.speech.save.saved\": \"Saved\",\n \"settings.speech.save.unsaved\": \"Unsaved changes\",\n \"settings.speech.save.error\": \"Save failed\",\n \"settings.speech.separateProviders.title\": \"Separate providers for input and output\",\n \"settings.speech.separateProviders.subtitle\": \"Use different API keys and endpoints for voice input (STT) and output (TTS).\",\n \"settings.speech.stt.section.title\": \"Voice Input (Speech-to-Text)\",\n \"settings.speech.tts.section.title\": \"Voice Output (Text-to-Speech)\",\n \"settings.speech.stt.apiKey.title\": \"Input API key\",\n \"settings.speech.stt.apiKey.subtitle\": \"Used for speech-to-text transcription requests.\",\n \"settings.speech.stt.apiKey.placeholder\": \"Enter a new input API key\",\n \"settings.speech.stt.apiKey.storedNote\": \"A saved input API key is hidden. Enter a new value to replace it, or leave the field blank to keep it.\",\n \"settings.speech.stt.apiKey.usingShared\": \"Using the shared API key. Enter a new key to override.\",\n \"settings.speech.stt.apiKey.clearAction\": \"Clear saved input key\",\n \"settings.speech.stt.apiKey.clearPending\": \"The saved input API key will be removed when you save.\",\n \"settings.speech.stt.baseUrl.title\": \"Input base URL\",\n \"settings.speech.stt.baseUrl.subtitle\": \"OpenAI-compatible endpoint for transcription requests.\",\n \"settings.speech.stt.baseUrl.placeholder\": \"https://api.openai.com/v1\",\n \"settings.speech.stt.model.title\": \"Input model\",\n \"settings.speech.stt.model.subtitle\": \"Model used for speech-to-text.\",\n \"settings.speech.tts.apiKey.title\": \"Output API key\",\n \"settings.speech.tts.apiKey.subtitle\": \"Used for text-to-speech synthesis requests.\",\n \"settings.speech.tts.apiKey.placeholder\": \"Enter a new output API key\",\n \"settings.speech.tts.apiKey.storedNote\": \"A saved output API key is hidden. Enter a new value to replace it, or leave the field blank to keep it.\",\n \"settings.speech.tts.apiKey.usingShared\": \"Using the shared API key. Enter a new key to override.\",\n \"settings.speech.tts.apiKey.clearAction\": \"Clear saved output key\",\n \"settings.speech.tts.apiKey.clearPending\": \"The saved output API key will be removed when you save.\",\n \"settings.speech.tts.baseUrl.title\": \"Output base URL\",\n \"settings.speech.tts.baseUrl.subtitle\": \"OpenAI-compatible endpoint for synthesis requests.\",\n \"settings.speech.tts.baseUrl.placeholder\": \"https://api.openai.com/v1\",\n \"settings.speech.tts.model.title\": \"Output model\",\n \"settings.speech.tts.model.subtitle\": \"Model used for text-to-speech.\",\n \"settings.nav.sidecars\": \"SideCars\",\n \"settings.section.sidecars.eyebrow\": \"Server services\",\n \"settings.section.sidecars.title\": \"SideCars\",\n \"settings.section.sidecars.subtitle\": \"Configure local services listening on fixed ports that the server can proxy into tabs.\",\n \"sidecars.form.name\": \"Name\",\n \"sidecars.form.validation\": \"Enter a valid SideCar name and port.\",\n \"sidecars.form.port\": \"Port\",\n \"sidecars.form.insecure\": \"Use HTTP\",\n \"sidecars.form.protocol\": \"Protocol\",\n \"sidecars.form.protocol.help\": \"Choose how the proxy should connect to the local service.\",\n \"sidecars.form.protocol.https\": \"HTTPS\",\n \"sidecars.form.protocol.http\": \"HTTP\",\n \"sidecars.form.prefixMode\": \"Prefix mode\",\n \"sidecars.form.prefixMode.help\": \"Choose whether the SideCar receives the public /sidecars path prefix.\",\n \"sidecars.form.prefixMode.strip\": \"Strip prefix\",\n \"sidecars.form.prefixMode.preserve\": \"Preserve prefix\",\n \"sidecars.form.add\": \"Add SideCar\",\n \"sidecars.kind.port\": \"Port\",\n \"sidecars.status.running\": \"Running\",\n \"sidecars.status.stopped\": \"Stopped\",\n \"sidecars.basePath\": \"Base path\",\n \"sidecars.settings.listTitle\": \"Configured SideCars\",\n \"sidecars.settings.listSubtitle\": \"Review the port-based SideCars available in the picker.\",\n \"sidecars.settings.empty\": \"No SideCars configured yet.\",\n \"sidecars.picker.title\": \"Open SideCar\",\n \"sidecars.picker.loading\": \"Loading SideCars...\",\n \"sidecars.picker.subtitle\": \"Choose an available SideCar to open in a new tab.\",\n \"sidecars.picker.empty\": \"No port-based SideCars are available yet.\",\n \"sidecars.picker.close\": \"Close\",\n \"sidecars.open.errorTitle\": \"Unable to open SideCar\",\n \"sidecars.open.notFound\": \"SideCar not found.\",\n \"sidecars.open.notRunning\": \"SideCar is not reachable on its configured port.\",\n \"sidecars.back\": \"Back\",\n \"sidecars.refresh\": \"Refresh\",\n \"sidecars.path\": \"Path\",\n \"sidecars.go\": \"Go\",\n\n // Toast History Panel\n \"toastHistory.title\": \"Notification History\",\n \"toastHistory.empty\": \"No notifications yet\",\n \"toastHistory.empty.filter\": \"No matching notifications for this filter\",\n \"toastHistory.clearAll\": \"Clear all\",\n \"toastHistory.markAllRead\": \"Mark all read\",\n \"toastHistory.filter.label\": \"Filter notifications\",\n \"toastHistory.filter.all\": \"All\",\n \"toastHistory.filter.info\": \"Info\",\n \"toastHistory.filter.success\": \"Success\",\n \"toastHistory.filter.warning\": \"Warning\",\n \"toastHistory.filter.error\": \"Error\",\n \"toastHistory.today\": \"Today\",\n \"toastHistory.yesterday\": \"Yesterday\",\n \"toastHistory.earlier\": \"Earlier\",\n \"toastHistory.unread\": \"{count} unread\",\n \"toastHistory.viewSettings\": \"Settings\",\n \"toastHistory.close\": \"Close\",\n \"toastHistory.deleteItem\": \"Delete notification\",\n\n // Info Section\n \"settings.section.info.title\": \"About\",\n \"settings.section.info.subtitle\": \"View version, runtime, and gather diagnostic information.\",\n \"settings.info.version.server\": \"Server version\",\n \"settings.info.version.ui\": \"UI version\",\n \"settings.info.version.uiSource\": \"UI source\",\n \"settings.info.runtime.type\": \"Runtime\",\n \"settings.info.runtime.platform\": \"Platform\",\n \"settings.info.runtime.os\": \"Operating system\",\n \"settings.info.server.url\": \"Server URL\",\n \"settings.info.server.root\": \"Workspace root\",\n \"settings.info.updates.title\": \"Updates\",\n \"settings.info.updates.subtitle\": \"Check for new releases of CodeNomad.\",\n \"settings.info.updates.latest\": \"Latest version\",\n \"settings.info.updates.download\": \"Download update\",\n \"settings.info.updates.refresh\": \"Refresh\",\n \"settings.info.diagnostics.copyFailed\": \"Clipboard access denied. Use the download button instead.\",\n \"settings.info.diagnostics.title\": \"Diagnostics\",\n \"settings.info.diagnostics.subtitle\": \"Collect system and version info for bug reports.\",\n \"settings.info.diagnostics.copy\": \"Copy to clipboard\",\n \"settings.info.diagnostics.download\": \"Download .txt\",\n \"settings.info.diagnostics.copied\": \"Diagnostic info copied to clipboard.\",\n} as const\n","export const timeMessages = {\n \"time.relative.justNow\": \"just now\",\n \"time.relative.daysAgoShort\": \"{count}d ago\",\n \"time.relative.hoursAgoShort\": \"{count}h ago\",\n \"time.relative.minutesAgoShort\": \"{count}m ago\",\n} as const\n","export const toolCallMessages = {\n \"toolCall.pending.waitingToRun\": \"Waiting to run...\",\n \"toolCall.error.label\": \"Error:\",\n\n \"toolCall.header.copyTitle\": \"Copy tool call title\",\n \"toolCall.header.copyAriaLabel\": \"Copy tool call title\",\n \"toolCall.header.copyOutputTitle\": \"Copy tool output\",\n \"toolCall.header.copyOutputAriaLabel\": \"Copy tool output\",\n\n \"toolCall.header.showInputTitle\": \"Show Tool Arguments\",\n \"toolCall.header.showInputAriaLabel\": \"Show Tool Arguments\",\n \"toolCall.header.hideInputTitle\": \"Hide Tool Arguments\",\n \"toolCall.header.hideInputAriaLabel\": \"Hide Tool Arguments\",\n\n \"toolCall.io.input\": \"Tool Input\",\n \"toolCall.io.output\": \"Tool Output\",\n \"toolCall.io.copyInputTitle\": \"Copy tool input\",\n \"toolCall.io.copyInputAriaLabel\": \"Copy tool input\",\n \"toolCall.io.copyOutputTitle\": \"Copy tool output\",\n \"toolCall.io.copyOutputAriaLabel\": \"Copy tool output\",\n\n \"toolCall.diff.label\": \"Diff\",\n \"toolCall.diff.label.withPath\": \"Diff · {path}\",\n \"toolCall.diff.viewMode.ariaLabel\": \"Diff view mode\",\n \"toolCall.diff.viewMode.split\": \"Split\",\n \"toolCall.diff.viewMode.unified\": \"Unified\",\n \"toolCall.diff.switchToSplit\": \"Switch to split view\",\n \"toolCall.diff.switchToUnified\": \"Switch to unified view\",\n \"toolCall.diff.enableWordWrap\": \"Enable word wrap\",\n \"toolCall.diff.disableWordWrap\": \"Disable word wrap\",\n \"toolCall.diff.copyPatch\": \"Copy patch\",\n\n \"toolCall.diagnostics.title\": \"Diagnostics\",\n \"toolCall.diagnostics.ariaLabel\": \"Diagnostics\",\n \"toolCall.diagnostics.ariaLabel.withLabel\": \"Diagnostics {label}\",\n \"toolCall.diagnostics.severity.error.short\": \"ERR\",\n \"toolCall.diagnostics.severity.warning.short\": \"WARN\",\n \"toolCall.diagnostics.severity.info.short\": \"INFO\",\n\n \"toolCall.renderer.toolName.shell\": \"Shell\",\n \"toolCall.renderer.toolName.fetch\": \"Fetch\",\n \"toolCall.renderer.toolName.invalid\": \"Invalid\",\n \"toolCall.renderer.toolName.plan\": \"Plan\",\n \"toolCall.renderer.toolName.applyPatch\": \"Apply patch\",\n\n \"toolCall.renderer.action.working\": \"Working...\",\n \"toolCall.renderer.action.writingCommand\": \"Writing command...\",\n \"toolCall.renderer.action.preparingEdit\": \"Preparing edit...\",\n \"toolCall.renderer.action.readingFile\": \"Reading file...\",\n \"toolCall.renderer.action.preparingWrite\": \"Preparing write...\",\n \"toolCall.renderer.action.preparingPatch\": \"Preparing patch...\",\n \"toolCall.renderer.action.planning\": \"Planning...\",\n \"toolCall.renderer.action.fetchingFromWeb\": \"Fetching from the web...\",\n \"toolCall.renderer.action.findingFiles\": \"Finding files...\",\n \"toolCall.renderer.action.searchingContent\": \"Searching content...\",\n \"toolCall.renderer.action.listingDirectory\": \"Listing directory...\",\n\n \"toolCall.renderer.bash.title.timeout\": \"Timeout: {timeout}\",\n \"toolCall.renderer.read.detail.offset\": \"Offset: {offset}\",\n \"toolCall.renderer.read.detail.limit\": \"Limit: {limit}\",\n\n \"toolCall.renderer.todo.empty\": \"No items planned\",\n \"toolCall.renderer.todo.status.pending\": \"Pending\",\n \"toolCall.renderer.todo.status.inProgress\": \"In progress\",\n \"toolCall.renderer.todo.status.completed\": \"Completed\",\n \"toolCall.renderer.todo.status.cancelled\": \"Cancelled\",\n \"toolCall.renderer.todo.title.plan\": \"Plan\",\n \"toolCall.renderer.todo.title.creating\": \"Creating plan\",\n \"toolCall.renderer.todo.title.completing\": \"Completing plan\",\n \"toolCall.renderer.todo.title.updating\": \"Updating plan\",\n\n \"toolCall.permission.status.required\": \"Permission Required\",\n \"toolCall.permission.status.queued\": \"Permission Queued\",\n \"toolCall.permission.requestedDiff.label\": \"Requested diff\",\n \"toolCall.permission.requestedDiff.withPath\": \"Requested diff · {path}\",\n \"toolCall.permission.queuedText\": \"Waiting for earlier permission responses.\",\n \"toolCall.permission.actions.allowOnce\": \"Allow Once\",\n \"toolCall.permission.actions.alwaysAllow\": \"Always Allow\",\n \"toolCall.permission.actions.deny\": \"Deny\",\n \"toolCall.permission.shortcuts.allowOnce\": \"Allow once\",\n \"toolCall.permission.shortcuts.alwaysAllow\": \"Always allow\",\n \"toolCall.permission.rejectReason.placeholder\": \"Optional feedback for Deny, e.g. use a safer command...\",\n \"toolCall.permission.errors.unableToUpdate\": \"Unable to update permission\",\n\n \"permissionApproval.title\": \"Requests\",\n \"permissionApproval.empty\": \"No pending requests.\",\n \"permissionApproval.kind.permission\": \"Permission\",\n \"permissionApproval.kind.question\": \"Question\",\n \"permissionApproval.kind.form\": \"Form\",\n \"formRequest.selectPlaceholder\": \"Select an option\",\n \"formRequest.openExternal\": \"Open external form\",\n \"formRequest.cancel\": \"Cancel\",\n \"formRequest.submit\": \"Submit\",\n \"formRequest.submitting\": \"Submitting...\",\n \"formRequest.errors.reply\": \"Unable to submit form\",\n \"formRequest.errors.cancel\": \"Unable to cancel form\",\n \"formRequest.errors.validation\": \"Complete all required fields.\",\n \"formRequest.customValuesPlaceholder\": \"Other values, separated by commas\",\n \"permissionApproval.questionCount.one\": \"{count} question\",\n \"permissionApproval.questionCount.other\": \"{count} questions\",\n \"permissionApproval.status.active\": \"Active\",\n \"permissionApproval.actions.closeAriaLabel\": \"Close\",\n \"permissionApproval.actions.goToSession\": \"Go to Session\",\n \"permissionApproval.actions.loadingSession\": \"Loading…\",\n \"permissionApproval.actions.loadSession\": \"Load Session\",\n \"permissionApproval.actions.allowOnce\": \"Allow Once\",\n \"permissionApproval.actions.alwaysAllow\": \"Always Allow\",\n \"permissionApproval.actions.deny\": \"Deny\",\n \"permissionApproval.rejectReason.placeholder\": \"Optional feedback for Deny, e.g. use a safer command...\",\n \"permissionApproval.fallbackHint\": \"Load session for more information.\",\n \"permissionApproval.errors.unableToUpdatePermission\": \"Unable to update permission\",\n\n \"toolCall.question.status.required\": \"Question Required\",\n \"toolCall.question.status.queued\": \"Question Queued\",\n \"toolCall.question.status.questions\": \"Questions\",\n \"toolCall.question.action.awaitingAnswers\": \"Awaiting answers...\",\n \"toolCall.question.title.questions\": \"Questions\",\n \"toolCall.question.title.askingQuestions\": \"Asking questions\",\n \"toolCall.question.type.one\": \"Question\",\n \"toolCall.question.type.other\": \"Questions\",\n \"toolCall.question.number\": \"Q{number}:\",\n \"toolCall.question.multiple\": \"Multiple\",\n \"toolCall.question.custom.title\": \"Type a custom answer\",\n \"toolCall.question.custom.label\": \"Custom answer\",\n \"toolCall.question.custom.placeholder\": \"Type your own answer\",\n \"toolCall.question.actions.submit\": \"Submit\",\n \"toolCall.question.actions.dismiss\": \"Dismiss\",\n \"toolCall.question.shortcuts.submit\": \"Submit\",\n \"toolCall.question.shortcuts.dismiss\": \"Dismiss\",\n \"toolCall.question.queuedText\": \"Waiting for earlier responses.\",\n \"toolCall.question.validation.answerAll\": \"Please answer all questions before submitting.\",\n \"toolCall.question.errors.unableToReply\": \"Unable to reply\",\n \"toolCall.question.errors.unableToDismiss\": \"Unable to dismiss\",\n\n \"toolCall.task.action.delegating\": \"Delegating...\",\n \"toolCall.task.sections.prompt\": \"Prompt\",\n \"toolCall.task.sections.steps\": \"Steps\",\n \"toolCall.task.sections.output\": \"Output\",\n \"toolCall.task.steps.count\": \"{count} steps\",\n \"toolCall.task.meta.agentModel\": \"Agent: {agent} • Model: {model}\",\n \"toolCall.task.meta.agent\": \"Agent: {agent}\",\n \"toolCall.task.meta.model\": \"Model: {model}\",\n\n \"toolCall.status.pending\": \"Pending\",\n \"toolCall.status.running\": \"Running\",\n \"toolCall.status.completed\": \"Completed\",\n \"toolCall.status.error\": \"Error\",\n \"toolCall.status.unknown\": \"Unknown\",\n\n \"toolCall.applyPatch.action.preparing\": \"Preparing apply_patch...\",\n \"toolCall.applyPatch.title.withFileCount.one\": \"{tool} ({count} file)\",\n \"toolCall.applyPatch.title.withFileCount.other\": \"{tool} ({count} files)\",\n \"toolCall.applyPatch.fileFallback\": \"File {number}\",\n} as const\n","export function mergeMessageParts(...parts: Array<Record<string, string>>) {\n const result: Record<string, string> = {}\n\n for (const part of parts) {\n for (const [key, value] of Object.entries(part)) {\n if (key in result) {\n throw new Error(`Duplicate i18n message key: ${key}`)\n }\n result[key] = value\n }\n }\n\n return result\n}\n","import { advancedSettingsMessages } from \"./advancedSettings\"\nimport { appMessages } from \"./app\"\nimport { commandMessages } from \"./commands\"\nimport { dialogMessages } from \"./dialogs\"\nimport { filesystemMessages } from \"./filesystem\"\nimport { folderSelectionMessages } from \"./folderSelection\"\nimport { instanceMessages } from \"./instance\"\nimport { loadingScreenMessages } from \"./loadingScreen\"\nimport { logMessages } from \"./logs\"\nimport { markdownMessages } from \"./markdown\"\nimport { messagingMessages } from \"./messaging\"\nimport { remoteAccessMessages } from \"./remoteAccess\"\nimport { sessionMessages } from \"./session\"\nimport { settingsMessages } from \"./settings\"\nimport { timeMessages } from \"./time\"\nimport { toolCallMessages } from \"./toolCall\"\nimport { mergeMessageParts } from \"../merge\"\n\nexport const enMessages = mergeMessageParts(\n folderSelectionMessages,\n advancedSettingsMessages,\n loadingScreenMessages,\n timeMessages,\n appMessages,\n dialogMessages,\n filesystemMessages,\n instanceMessages,\n logMessages,\n sessionMessages,\n messagingMessages,\n toolCallMessages,\n markdownMessages,\n settingsMessages,\n remoteAccessMessages,\n commandMessages,\n)\n","import { createContext, createEffect, createMemo, createSignal, onCleanup, onMount, useContext } from \"solid-js\"\nimport type { ParentComponent } from \"solid-js\"\nimport { useConfig } from \"../../stores/preferences\"\nimport { enMessages } from \"./messages/en\"\n\ntype Messages = Record<string, string>\n\nexport type TranslateParams = Record<string, unknown>\n\nexport type Locale = \"en\" | \"es\" | \"fr\" | \"ru\" | \"ja\" | \"zh-Hans\" | \"he\" | \"de\" | \"ne\" | \"tr\"\n\nconst SUPPORTED_LOCALES: readonly Locale[] = [\"en\", \"es\", \"fr\", \"ru\", \"ja\", \"zh-Hans\", \"he\", \"de\", \"ne\", \"tr\"] as const\nconst SUPPORTED_LOCALES_BY_LOWER = new Map(SUPPORTED_LOCALES.map((locale) => [locale.toLowerCase(), locale]))\nconst RTL_LOCALES = new Set<Locale>([\"he\"])\n\nconst localeMessagesCache = new Map<Locale, Messages>([[\"en\", enMessages]])\nconst localeMessagesPromises = new Map<Locale, Promise<Messages>>()\n\nconst localeLoaders: Record<Locale, () => Promise<Messages>> = {\n en: async () => enMessages,\n es: async () => (await import(\"./messages/es\")).esMessages,\n fr: async () => (await import(\"./messages/fr\")).frMessages,\n ru: async () => (await import(\"./messages/ru\")).ruMessages,\n ja: async () => (await import(\"./messages/ja\")).jaMessages,\n \"zh-Hans\": async () => (await import(\"./messages/zh-Hans\")).zhHansMessages,\n he: async () => (await import(\"./messages/he\")).heMessages,\n de: async () => (await import(\"./messages/de\")).deMessages,\n ne: async () => (await import(\"./messages/ne\")).neMessages,\n tr: async () => (await import(\"./messages/tr\")).trMessages,\n}\n\nfunction getLocaleDirection(locale: Locale): \"ltr\" | \"rtl\" {\n return RTL_LOCALES.has(locale) ? \"rtl\" : \"ltr\"\n}\n\nfunction normalizeLocaleTag(value: string): string {\n return value.trim().replace(/_/g, \"-\")\n}\n\nfunction matchSupportedLocale(value: string | undefined): Locale | null {\n if (!value) return null\n\n const normalized = normalizeLocaleTag(value)\n const lower = normalized.toLowerCase()\n const exact = SUPPORTED_LOCALES_BY_LOWER.get(lower)\n if (exact) return exact\n\n const parts = lower.split(\"-\")\n const base = parts[0]\n if (!base) return null\n\n if (base === \"zh\") {\n const zhHans = SUPPORTED_LOCALES_BY_LOWER.get(\"zh-hans\")\n return zhHans ?? null\n }\n\n const baseMatch = SUPPORTED_LOCALES_BY_LOWER.get(base)\n return baseMatch ?? null\n}\n\nfunction detectNavigatorLocale(): Locale | null {\n if (typeof navigator === \"undefined\") return null\n\n const candidates = Array.isArray(navigator.languages) && navigator.languages.length > 0\n ? navigator.languages\n : navigator.language\n ? [navigator.language]\n : []\n\n for (const candidate of candidates) {\n const match = matchSupportedLocale(candidate)\n if (match) return match\n }\n\n return null\n}\n\nfunction interpolate(template: string, params?: Record<string, unknown>): string {\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (_match, key: string) => {\n const value = params[key]\n return value === undefined || value === null ? \"\" : String(value)\n })\n}\n\nfunction translateFrom(messages: Messages, key: string, params?: TranslateParams): string {\n const current = messages[key]\n const fallback = enMessages[key as keyof typeof enMessages]\n const template = current ?? fallback ?? key\n return interpolate(template, params)\n}\n\nconst [globalRevision, setGlobalRevision] = createSignal(0)\nlet globalMessages: Messages = enMessages\nlet globalLocale: Locale = \"en\"\n\nfunction getMessagesForLocale(locale: Locale): Messages {\n return localeMessagesCache.get(locale) ?? enMessages\n}\n\nasync function loadLocaleMessages(locale: Locale): Promise<Messages> {\n const cached = localeMessagesCache.get(locale)\n if (cached) {\n return cached\n }\n\n const pending = localeMessagesPromises.get(locale)\n if (pending) {\n return pending\n }\n\n const loader = localeLoaders[locale]\n const promise = loader()\n .then((messages) => {\n localeMessagesCache.set(locale, messages)\n localeMessagesPromises.delete(locale)\n return messages\n })\n .catch((error) => {\n localeMessagesPromises.delete(locale)\n throw error\n })\n\n localeMessagesPromises.set(locale, promise)\n return promise\n}\n\nexport async function preloadLocaleMessages(preferredLocale?: string | null): Promise<Locale> {\n const resolvedLocale = matchSupportedLocale(preferredLocale ?? undefined) ?? detectNavigatorLocale() ?? \"en\"\n try {\n globalMessages = await loadLocaleMessages(resolvedLocale)\n globalLocale = resolvedLocale\n setGlobalRevision((value) => value + 1)\n return resolvedLocale\n } catch {\n globalMessages = enMessages\n globalLocale = \"en\"\n setGlobalRevision((value) => value + 1)\n return \"en\"\n }\n}\n\nexport function tGlobal(key: string, params?: TranslateParams): string {\n globalRevision()\n return translateFrom(globalMessages, key, params)\n}\n\nexport interface I18nContextValue {\n locale: () => Locale\n t: (key: string, params?: TranslateParams) => string\n}\n\nconst I18nContext = createContext<I18nContextValue>()\n\nexport const I18nProvider: ParentComponent = (props) => {\n const { preferences } = useConfig()\n const [detectedLocale, setDetectedLocale] = createSignal<Locale>(globalLocale)\n const [resolvedLocale, setResolvedLocale] = createSignal<Locale>(globalLocale)\n const previousGlobalMessages = globalMessages\n const previousGlobalLocale = globalLocale\n const previousDocumentLanguage = typeof document !== \"undefined\" ? document.documentElement.lang : \"\"\n const previousDocumentDirection = typeof document !== \"undefined\" ? document.documentElement.dir : \"\"\n\n onMount(() => {\n const detected = detectNavigatorLocale()\n if (detected) setDetectedLocale(detected)\n })\n\n const locale = createMemo<Locale>(() => {\n const configured = matchSupportedLocale(preferences().locale)\n return configured ?? detectedLocale() ?? \"en\"\n })\n\n const messages = createMemo<Messages>(() => getMessagesForLocale(resolvedLocale()))\n\n function t(key: string, params?: TranslateParams): string {\n return translateFrom(messages(), key, params)\n }\n\n createEffect(() => {\n const nextLocale = locale()\n let cancelled = false\n\n void loadLocaleMessages(nextLocale)\n .then((loadedMessages) => {\n if (cancelled) {\n return\n }\n setResolvedLocale(nextLocale)\n globalLocale = nextLocale\n globalMessages = loadedMessages\n setGlobalRevision((value) => value + 1)\n })\n .catch(() => {\n if (cancelled) {\n return\n }\n setResolvedLocale(\"en\")\n globalMessages = enMessages\n globalLocale = \"en\"\n setGlobalRevision((value) => value + 1)\n })\n\n onCleanup(() => {\n cancelled = true\n })\n })\n\n createEffect(() => {\n if (typeof document === \"undefined\") return\n const activeLocale = locale()\n document.documentElement.dir = getLocaleDirection(activeLocale)\n document.documentElement.lang = activeLocale\n })\n\n onCleanup(() => {\n globalMessages = previousGlobalMessages\n globalLocale = previousGlobalLocale\n setGlobalRevision((value) => value + 1)\n if (typeof document !== \"undefined\") {\n document.documentElement.lang = previousDocumentLanguage\n document.documentElement.dir = previousDocumentDirection\n }\n })\n\n const value: I18nContextValue = {\n locale,\n t,\n }\n\n return <I18nContext.Provider value={value}>{props.children}</I18nContext.Provider>\n}\n\nexport function useI18n(): I18nContextValue {\n const context = useContext(I18nContext)\n if (!context) {\n throw new Error(\"useI18n must be used within I18nProvider\")\n }\n return context\n}\n","import { getLogger } from \"./logger\"\n\nexport type HostRuntime = \"electron\" | \"tauri\" | \"web\"\nexport type PlatformKind = \"desktop\" | \"mobile\"\nexport type WindowContextKind = \"local\" | \"remote\" | \"preferences\"\n\nexport interface RuntimeEnvironment {\n host: HostRuntime\n platform: PlatformKind\n windowContext: WindowContextKind\n}\n\ndeclare global {\n interface TauriCoreModule {\n invoke: <T = unknown>(cmd: string, args?: Record<string, unknown>) => Promise<T>\n }\n\n interface Window {\n __CODENOMAD_WINDOW_CONTEXT__?: WindowContextKind\n electronAPI?: ElectronAPI\n __TAURI__?: {\n core?: TauriCoreModule\n }\n }\n}\n\nfunction detectWindowContext(): WindowContextKind {\n if (typeof window === \"undefined\") {\n return \"remote\"\n }\n\n if (window.__CODENOMAD_WINDOW_CONTEXT__ === \"remote\") {\n return \"remote\"\n }\n\n if (window.__CODENOMAD_WINDOW_CONTEXT__ === \"local\") {\n return \"local\"\n }\n\n if (window.__CODENOMAD_WINDOW_CONTEXT__ === \"preferences\") {\n return \"preferences\"\n }\n\n const win = window as Window & { electronAPI?: unknown }\n if (typeof win.electronAPI !== \"undefined\" || typeof win.__TAURI__ !== \"undefined\") {\n return \"local\"\n }\n\n if (typeof navigator !== \"undefined\" && /tauri/i.test(navigator.userAgent)) {\n return \"local\"\n }\n\n return \"remote\"\n}\n\nfunction detectHost(): HostRuntime {\n if (typeof window === \"undefined\") {\n return \"web\"\n }\n\n const explicitHost = window.__CODENOMAD_RUNTIME_HOST__\n if (explicitHost) {\n return explicitHost\n }\n\n const win = window as Window & { electronAPI?: unknown }\n if (typeof win.electronAPI !== \"undefined\") {\n return \"electron\"\n }\n\n if (typeof win.__TAURI__ !== \"undefined\") {\n return \"tauri\"\n }\n\n if (typeof navigator !== \"undefined\" && /tauri/i.test(navigator.userAgent)) {\n return \"tauri\"\n }\n\n return \"web\"\n}\n\nfunction detectPlatform(): PlatformKind {\n if (typeof navigator === \"undefined\") {\n return \"desktop\"\n }\n\n const uaData = (navigator as any).userAgentData\n if (uaData?.mobile) {\n return \"mobile\"\n }\n\n const ua = navigator.userAgent.toLowerCase()\n if (/android|iphone|ipad|ipod|blackberry|mini|windows phone|mobile|silk/.test(ua)) {\n return \"mobile\"\n }\n\n return \"desktop\"\n}\n\nconst log = getLogger(\"actions\")\n\nlet cachedEnv: RuntimeEnvironment | null = null\n\nexport function detectRuntimeEnvironment(): RuntimeEnvironment {\n if (cachedEnv) {\n return cachedEnv\n }\n cachedEnv = {\n host: detectHost(),\n platform: detectPlatform(),\n windowContext: detectWindowContext(),\n }\n if (typeof window !== \"undefined\") {\n log.info(`[runtime] host=${cachedEnv.host} platform=${cachedEnv.platform} context=${cachedEnv.windowContext}`)\n }\n return cachedEnv\n}\n\nexport const runtimeEnv = detectRuntimeEnvironment()\n\nexport const isElectronHost = () => detectHost() === \"electron\"\nexport const isTauriHost = () => detectHost() === \"tauri\"\nexport const isWebHost = () => detectHost() === \"web\"\nexport const isLocalTauriHost = (\n environment: Pick<RuntimeEnvironment, \"host\" | \"windowContext\"> = detectRuntimeEnvironment(),\n) => environment.host === \"tauri\" && environment.windowContext === \"local\"\nexport const isDesktopHost = () => isElectronHost() || isTauriHost()\nexport const isMobilePlatform = () => detectPlatform() === \"mobile\"\nexport const isLocalWindow = () => detectWindowContext() === \"local\"\nexport const isRemoteWindow = () => detectWindowContext() === \"remote\"\nexport const isPreferencesWindow = () => detectWindowContext() === \"preferences\"\nexport const usesClientState = (\n environment: Pick<RuntimeEnvironment, \"windowContext\"> = detectRuntimeEnvironment(),\n) => environment.windowContext !== \"preferences\"\nexport const isNativeApplicationWindow = () => isLocalWindow() || isPreferencesWindow()\nexport const canUseNativeDialogs = () => isDesktopHost() && isNativeApplicationWindow()\nexport const canOpenRemoteWindows = () => isDesktopHost() && isNativeApplicationWindow()\nexport const canRestartCli = () => isDesktopHost() && isNativeApplicationWindow()\nexport const canUseDesktopFolderDrop = () => isDesktopHost() && isLocalWindow()\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nexport { __classPrivateFieldGet, __classPrivateFieldSet };\n","import { __classPrivateFieldSet, __classPrivateFieldGet } from './external/tslib/tslib.es6.js';\n\n// Copyright 2019-2024 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-License-Identifier: MIT\nvar _Channel_onmessage, _Channel_nextMessageIndex, _Channel_pendingMessages, _Channel_messageEndIndex, _Resource_rid;\n/**\n * Invoke your custom commands.\n *\n * This package is also accessible with `window.__TAURI__.core` when [`app.withGlobalTauri`](https://v2.tauri.app/reference/config/#withglobaltauri) in `tauri.conf.json` is set to `true`.\n * @module\n */\n/**\n * A key to be used to implement a special function\n * on your types that define how your type should be serialized\n * when passing across the IPC.\n * @example\n * Given a type in Rust that looks like this\n * ```rs\n * #[derive(serde::Serialize, serde::Deserialize)\n * enum UserId {\n * String(String),\n * Number(u32),\n * }\n * ```\n * `UserId::String(\"id\")` would be serialized into `{ String: \"id\" }`\n * and so we need to pass the same structure back to Rust\n * ```ts\n * import { SERIALIZE_TO_IPC_FN } from \"@tauri-apps/api/core\"\n *\n * class UserIdString {\n * id\n * constructor(id) {\n * this.id = id\n * }\n *\n * [SERIALIZE_TO_IPC_FN]() {\n * return { String: this.id }\n * }\n * }\n *\n * class UserIdNumber {\n * id\n * constructor(id) {\n * this.id = id\n * }\n *\n * [SERIALIZE_TO_IPC_FN]() {\n * return { Number: this.id }\n * }\n * }\n *\n * type UserId = UserIdString | UserIdNumber\n * ```\n *\n */\n// if this value changes, make sure to update it in:\n// 1. ipc.js\n// 2. process-ipc-message-fn.js\nconst SERIALIZE_TO_IPC_FN = '__TAURI_TO_IPC_KEY__';\n/**\n * Stores the callback in a known location, and returns an identifier that can be passed to the backend.\n * The backend uses the identifier to `eval()` the callback.\n *\n * @return An unique identifier associated with the callback function.\n *\n * @since 1.0.0\n */\nfunction transformCallback(\n// TODO: Make this not optional in v3\ncallback, once = false) {\n return window.__TAURI_INTERNALS__.transformCallback(callback, once);\n}\nclass Channel {\n constructor(onmessage) {\n _Channel_onmessage.set(this, void 0);\n // the index is used as a mechanism to preserve message order\n _Channel_nextMessageIndex.set(this, 0);\n _Channel_pendingMessages.set(this, []);\n _Channel_messageEndIndex.set(this, void 0);\n __classPrivateFieldSet(this, _Channel_onmessage, onmessage || (() => { }), \"f\");\n this.id = transformCallback((rawMessage) => {\n const index = rawMessage.index;\n if ('end' in rawMessage) {\n if (index == __classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\")) {\n this.cleanupCallback();\n }\n else {\n __classPrivateFieldSet(this, _Channel_messageEndIndex, index, \"f\");\n }\n return;\n }\n const message = rawMessage.message;\n // Process the message if we're at the right order\n if (index == __classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\")) {\n __classPrivateFieldGet(this, _Channel_onmessage, \"f\").call(this, message);\n __classPrivateFieldSet(this, _Channel_nextMessageIndex, __classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\") + 1, \"f\");\n // process pending messages\n while (__classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\") in __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")) {\n const message = __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")[__classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\")];\n __classPrivateFieldGet(this, _Channel_onmessage, \"f\").call(this, message);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n delete __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")[__classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\")];\n __classPrivateFieldSet(this, _Channel_nextMessageIndex, __classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\") + 1, \"f\");\n }\n if (__classPrivateFieldGet(this, _Channel_nextMessageIndex, \"f\") === __classPrivateFieldGet(this, _Channel_messageEndIndex, \"f\")) {\n this.cleanupCallback();\n }\n }\n // Queue the message if we're not\n else {\n // eslint-disable-next-line security/detect-object-injection\n __classPrivateFieldGet(this, _Channel_pendingMessages, \"f\")[index] = message;\n }\n });\n }\n cleanupCallback() {\n window.__TAURI_INTERNALS__.unregisterCallback(this.id);\n }\n set onmessage(handler) {\n __classPrivateFieldSet(this, _Channel_onmessage, handler, \"f\");\n }\n get onmessage() {\n return __classPrivateFieldGet(this, _Channel_onmessage, \"f\");\n }\n [(_Channel_onmessage = new WeakMap(), _Channel_nextMessageIndex = new WeakMap(), _Channel_pendingMessages = new WeakMap(), _Channel_messageEndIndex = new WeakMap(), SERIALIZE_TO_IPC_FN)]() {\n return `__CHANNEL__:${this.id}`;\n }\n toJSON() {\n // eslint-disable-next-line security/detect-object-injection\n return this[SERIALIZE_TO_IPC_FN]();\n }\n}\nclass PluginListener {\n constructor(plugin, event, channelId) {\n this.plugin = plugin;\n this.event = event;\n this.channelId = channelId;\n }\n async unregister() {\n return invoke(`plugin:${this.plugin}|remove_listener`, {\n event: this.event,\n channelId: this.channelId\n });\n }\n}\n/**\n * Adds a listener to a plugin event.\n *\n * @returns The listener object to stop listening to the events.\n *\n * @since 2.0.0\n */\nasync function addPluginListener(plugin, event, cb) {\n const handler = new Channel(cb);\n try {\n await invoke(`plugin:${plugin}|register_listener`, {\n event,\n handler\n });\n return new PluginListener(plugin, event, handler.id);\n }\n catch {\n // TODO(v3): remove this fallback\n // note: we must try with camelCase here for backwards compatibility\n await invoke(`plugin:${plugin}|registerListener`, { event, handler });\n return new PluginListener(plugin, event, handler.id);\n }\n}\n/**\n * Get permission state for a plugin.\n *\n * This should be used by plugin authors to wrap their actual implementation.\n */\nasync function checkPermissions(plugin) {\n return invoke(`plugin:${plugin}|check_permissions`);\n}\n/**\n * Request permissions.\n *\n * This should be used by plugin authors to wrap their actual implementation.\n */\nasync function requestPermissions(plugin) {\n return invoke(`plugin:${plugin}|request_permissions`);\n}\n/**\n * Sends a message to the backend.\n * @example\n * ```typescript\n * import { invoke } from '@tauri-apps/api/core';\n * await invoke('login', { user: 'tauri', password: 'poiwe3h4r5ip3yrhtew9ty' });\n * ```\n *\n * @param cmd The command name.\n * @param args The optional arguments to pass to the command.\n * @param options The request options.\n * @return A promise resolving or rejecting to the backend response.\n *\n * @since 1.0.0\n */\nasync function invoke(cmd, args = {}, options) {\n return window.__TAURI_INTERNALS__.invoke(cmd, args, options);\n}\n/**\n * Convert a device file path to an URL that can be loaded by the webview.\n * Note that `asset:` and `http://asset.localhost` must be added to [`app.security.csp`](https://v2.tauri.app/reference/config/#csp-1) in `tauri.conf.json`.\n * Example CSP value: `\"csp\": \"default-src 'self' ipc: http://ipc.localhost; img-src 'self' asset: http://asset.localhost\"` to use the asset protocol on image sources.\n *\n * Additionally, `\"enable\" : \"true\"` must be added to [`app.security.assetProtocol`](https://v2.tauri.app/reference/config/#assetprotocolconfig)\n * in `tauri.conf.json` and its access scope must be defined on the `scope` array on the same `assetProtocol` object.\n *\n * @param filePath The file path.\n * @param protocol The protocol to use. Defaults to `asset`. You only need to set this when using a custom protocol.\n * @example\n * ```typescript\n * import { appDataDir, join } from '@tauri-apps/api/path';\n * import { convertFileSrc } from '@tauri-apps/api/core';\n * const appDataDirPath = await appDataDir();\n * const filePath = await join(appDataDirPath, 'assets/video.mp4');\n * const assetUrl = convertFileSrc(filePath);\n *\n * const video = document.getElementById('my-video');\n * const source = document.createElement('source');\n * source.type = 'video/mp4';\n * source.src = assetUrl;\n * video.appendChild(source);\n * video.load();\n * ```\n *\n * @return the URL that can be used as source on the webview.\n *\n * @since 1.0.0\n */\nfunction convertFileSrc(filePath, protocol = 'asset') {\n return window.__TAURI_INTERNALS__.convertFileSrc(filePath, protocol);\n}\n/**\n * A rust-backed resource stored through `tauri::Manager::resources_table` API.\n *\n * The resource lives in the main process and does not exist\n * in the Javascript world, and thus will not be cleaned up automatically\n * except on application exit. If you want to clean it up early, call {@linkcode Resource.close}\n *\n * @example\n * ```typescript\n * import { Resource, invoke } from '@tauri-apps/api/core';\n * export class DatabaseHandle extends Resource {\n * static async open(path: string): Promise<DatabaseHandle> {\n * const rid: number = await invoke('open_db', { path });\n * return new DatabaseHandle(rid);\n * }\n *\n * async execute(sql: string): Promise<void> {\n * await invoke('execute_sql', { rid: this.rid, sql });\n * }\n * }\n * ```\n */\nclass Resource {\n get rid() {\n return __classPrivateFieldGet(this, _Resource_rid, \"f\");\n }\n constructor(rid) {\n _Resource_rid.set(this, void 0);\n __classPrivateFieldSet(this, _Resource_rid, rid, \"f\");\n }\n /**\n * Destroys and cleans up this resource from memory.\n * **You should not call any method on this object anymore and should drop any reference to it.**\n */\n async close() {\n return invoke('plugin:resources|close', {\n rid: this.rid\n });\n }\n}\n_Resource_rid = new WeakMap();\nfunction isTauri() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n return !!(globalThis || window).isTauri;\n}\n\nexport { Channel, PluginListener, Resource, SERIALIZE_TO_IPC_FN, addPluginListener, checkPermissions, convertFileSrc, invoke, isTauri, requestPermissions, transformCallback };\n","import { invoke, transformCallback } from './core.js';\n\n// Copyright 2019-2024 Tauri Programme within The Commons Conservancy\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-License-Identifier: MIT\n/**\n * The event system allows you to emit events to the backend and listen to events from it.\n *\n * This package is also accessible with `window.__TAURI__.event` when [`app.withGlobalTauri`](https://v2.tauri.app/reference/config/#withglobaltauri) in `tauri.conf.json` is set to `true`.\n * @module\n */\n/**\n * @since 1.1.0\n */\nvar TauriEvent;\n(function (TauriEvent) {\n TauriEvent[\"WINDOW_RESIZED\"] = \"tauri://resize\";\n TauriEvent[\"WINDOW_MOVED\"] = \"tauri://move\";\n TauriEvent[\"WINDOW_CLOSE_REQUESTED\"] = \"tauri://close-requested\";\n TauriEvent[\"WINDOW_DESTROYED\"] = \"tauri://destroyed\";\n TauriEvent[\"WINDOW_FOCUS\"] = \"tauri://focus\";\n TauriEvent[\"WINDOW_BLUR\"] = \"tauri://blur\";\n TauriEvent[\"WINDOW_SCALE_FACTOR_CHANGED\"] = \"tauri://scale-change\";\n TauriEvent[\"WINDOW_THEME_CHANGED\"] = \"tauri://theme-changed\";\n TauriEvent[\"WINDOW_CREATED\"] = \"tauri://window-created\";\n TauriEvent[\"WEBVIEW_CREATED\"] = \"tauri://webview-created\";\n TauriEvent[\"DRAG_ENTER\"] = \"tauri://drag-enter\";\n TauriEvent[\"DRAG_OVER\"] = \"tauri://drag-over\";\n TauriEvent[\"DRAG_DROP\"] = \"tauri://drag-drop\";\n TauriEvent[\"DRAG_LEAVE\"] = \"tauri://drag-leave\";\n})(TauriEvent || (TauriEvent = {}));\n/**\n * Unregister the event listener associated with the given name and id.\n *\n * @ignore\n * @param event The event name\n * @param eventId Event identifier\n * @returns\n */\nasync function _unlisten(event, eventId) {\n window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(event, eventId);\n await invoke('plugin:event|unlisten', {\n event,\n eventId\n });\n}\n/**\n * Listen to an emitted event to any {@link EventTarget|target}.\n *\n * @example\n * ```typescript\n * import { listen } from '@tauri-apps/api/event';\n * const unlisten = await listen<string>('error', (event) => {\n * console.log(`Got error, payload: ${event.payload}`);\n * });\n *\n * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted\n * unlisten();\n * ```\n *\n * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.\n * @param handler Event handler callback.\n * @param options Event listening options.\n * @returns A promise resolving to a function to unlisten to the event.\n * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted.\n *\n * @since 1.0.0\n */\nasync function listen(event, handler, options) {\n var _a;\n const target = typeof (options === null || options === void 0 ? void 0 : options.target) === 'string'\n ? { kind: 'AnyLabel', label: options.target }\n : ((_a = options === null || options === void 0 ? void 0 : options.target) !== null && _a !== void 0 ? _a : { kind: 'Any' });\n return invoke('plugin:event|listen', {\n event,\n target,\n handler: transformCallback(handler)\n }).then((eventId) => {\n return async () => _unlisten(event, eventId);\n });\n}\n/**\n * Listens once to an emitted event to any {@link EventTarget|target}.\n *\n * @example\n * ```typescript\n * import { once } from '@tauri-apps/api/event';\n * interface LoadedPayload {\n * loggedIn: boolean,\n * token: string\n * }\n * const unlisten = await once<LoadedPayload>('loaded', (event) => {\n * console.log(`App is loaded, loggedIn: ${event.payload.loggedIn}, token: ${event.payload.token}`);\n * });\n *\n * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted\n * unlisten();\n * ```\n *\n * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.\n * @param handler Event handler callback.\n * @param options Event listening options.\n * @returns A promise resolving to a function to unlisten to the event.\n * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted.\n *\n * @since 1.0.0\n */\nasync function once(event, handler, options) {\n return listen(event, (eventData) => {\n void _unlisten(event, eventData.id);\n handler(eventData);\n }, options);\n}\n/**\n * Emits an event to all {@link EventTarget|targets}.\n *\n * @example\n * ```typescript\n * import { emit } from '@tauri-apps/api/event';\n * await emit('frontend-loaded', { loggedIn: true, token: 'authToken' });\n * ```\n *\n * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.\n * @param payload Event payload.\n *\n * @since 1.0.0\n */\nasync function emit(event, payload) {\n await invoke('plugin:event|emit', {\n event,\n payload\n });\n}\n/**\n * Emits an event to all {@link EventTarget|targets} matching the given target.\n *\n * @example\n * ```typescript\n * import { emitTo } from '@tauri-apps/api/event';\n * await emitTo('main', 'frontend-loaded', { loggedIn: true, token: 'authToken' });\n * ```\n *\n * @param target Label of the target Window/Webview/WebviewWindow or raw {@link EventTarget} object.\n * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.\n * @param payload Event payload.\n *\n * @since 2.0.0\n */\nasync function emitTo(target, event, payload) {\n const eventTarget = typeof target === 'string' ? { kind: 'AnyLabel', label: target } : target;\n await invoke('plugin:event|emit_to', {\n target: eventTarget,\n event,\n payload\n });\n}\n\nexport { TauriEvent, emit, emitTo, listen, once };\n"],"file":"assets/index-ef9_CbWU.js"}
@@ -1,2 +1,2 @@
1
- import{t as g,b as P,l as b,i as A,r as v}from"./index-BfORYhCR.js";import{V as M,e as N,t as _,d as w,i as n,m as H}from"./monaco-viewer-BB3_mBkA.js";import{k as E,e as S,n as T,o as U,S as I,a as R}from"./git-diff-vendor-ChbWBukG.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";const z="/assets/CodeNomad-Icon-bmTWNPXy.png";var B=_("<div class=loading-wrapper role=status aria-live=polite><img class=loading-logo width=180 height=180><div class=loading-heading><h1 class=loading-title>CodeNomad</h1></div><div class=loading-card><div class=loading-row><div class=spinner aria-hidden=true></div><span></span></div><div class=phrase-controls><button type=button>"),D=_("<p class=loading-status>"),F=_("<div class=loading-error>");const C=["loadingScreen.phrases.neurons","loadingScreen.phrases.daydreaming","loadingScreen.phrases.goggles","loadingScreen.phrases.reorganizingFiles","loadingScreen.phrases.coffee","loadingScreen.phrases.nodeModules","loadingScreen.phrases.actNatural","loadingScreen.phrases.rewritingHistory","loadingScreen.phrases.stretch","loadingScreen.phrases.keyboardControl"];function y(h){const o=C.filter(m=>m!==h),i=o.length>0?o:C,a=Math.floor(Math.random()*i.length);return i[a]}function G(){typeof document>"u"||(document.documentElement.dataset.runtimeHost=v.host,document.documentElement.dataset.runtimePlatform=v.platform)}function L(){const[h,o]=S(y()),[i,a]=S(null),[m,l]=S(null),K=()=>o(y(h()));return T(()=>{G(),o(y());const c=[];async function d(){try{const r=await b("cli:error",t=>{const e=(t==null?void 0:t.payload)||{};e.error&&(a(e.error),l("loadingScreen.status.issue"))}),p=await b("cli:status",t=>{const e=(t==null?void 0:t.payload)||{};if(e.state==="error"&&e.error){a(e.error),l("loadingScreen.status.issue");return}e.state&&e.state!=="ready"&&(a(null),l(null))});c.push(r,p);const s=await A("cli_get_status");(s==null?void 0:s.state)==="error"&&s.error&&(a(s.error),l("loadingScreen.status.issue"))}catch(r){a(String(r)),l("loadingScreen.status.issue")}}P()&&d(),U(()=>{c.forEach(r=>{try{r()}catch{}})})}),(()=>{var c=B(),d=c.firstChild,r=d.nextSibling;r.firstChild;var p=r.nextSibling,s=p.firstChild,t=s.firstChild,e=t.nextSibling,x=s.nextSibling,$=x.firstChild;return w(d,"src",z),n(r,E(I,{get when(){return m()},children:f=>(()=>{var u=D();return n(u,()=>g(f())),u})()}),null),n(e,()=>g(h())),$.$$click=K,n($,()=>g("loadingScreen.actions.showAnother")),n(p,(()=>{var f=H(()=>!!i());return()=>f()&&(()=>{var u=F();return n(u,i),u})()})(),null),R(()=>w(d,"alt",g("loadingScreen.logoAlt"))),c})()}const k=document.getElementById("loading-root");if(!k)throw new Error(g("loadingScreen.errors.missingRoot"));M(()=>E(L,{}),k);N(["click"]);
2
- //# sourceMappingURL=loading-CLjF2dnt.js.map
1
+ import{t as g,b as P,l as b,i as A,r as v}from"./index-ef9_CbWU.js";import{V as M,e as N,t as _,d as w,i as n,m as H}from"./monaco-viewer-BB3_mBkA.js";import{k as E,e as S,n as T,o as U,S as I,a as R}from"./git-diff-vendor-ChbWBukG.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";const z="/assets/CodeNomad-Icon-bmTWNPXy.png";var B=_("<div class=loading-wrapper role=status aria-live=polite><img class=loading-logo width=180 height=180><div class=loading-heading><h1 class=loading-title>CodeNomad</h1></div><div class=loading-card><div class=loading-row><div class=spinner aria-hidden=true></div><span></span></div><div class=phrase-controls><button type=button>"),D=_("<p class=loading-status>"),F=_("<div class=loading-error>");const C=["loadingScreen.phrases.neurons","loadingScreen.phrases.daydreaming","loadingScreen.phrases.goggles","loadingScreen.phrases.reorganizingFiles","loadingScreen.phrases.coffee","loadingScreen.phrases.nodeModules","loadingScreen.phrases.actNatural","loadingScreen.phrases.rewritingHistory","loadingScreen.phrases.stretch","loadingScreen.phrases.keyboardControl"];function y(h){const o=C.filter(m=>m!==h),i=o.length>0?o:C,a=Math.floor(Math.random()*i.length);return i[a]}function G(){typeof document>"u"||(document.documentElement.dataset.runtimeHost=v.host,document.documentElement.dataset.runtimePlatform=v.platform)}function L(){const[h,o]=S(y()),[i,a]=S(null),[m,l]=S(null),K=()=>o(y(h()));return T(()=>{G(),o(y());const c=[];async function d(){try{const r=await b("cli:error",t=>{const e=(t==null?void 0:t.payload)||{};e.error&&(a(e.error),l("loadingScreen.status.issue"))}),p=await b("cli:status",t=>{const e=(t==null?void 0:t.payload)||{};if(e.state==="error"&&e.error){a(e.error),l("loadingScreen.status.issue");return}e.state&&e.state!=="ready"&&(a(null),l(null))});c.push(r,p);const s=await A("cli_get_status");(s==null?void 0:s.state)==="error"&&s.error&&(a(s.error),l("loadingScreen.status.issue"))}catch(r){a(String(r)),l("loadingScreen.status.issue")}}P()&&d(),U(()=>{c.forEach(r=>{try{r()}catch{}})})}),(()=>{var c=B(),d=c.firstChild,r=d.nextSibling;r.firstChild;var p=r.nextSibling,s=p.firstChild,t=s.firstChild,e=t.nextSibling,x=s.nextSibling,$=x.firstChild;return w(d,"src",z),n(r,E(I,{get when(){return m()},children:f=>(()=>{var u=D();return n(u,()=>g(f())),u})()}),null),n(e,()=>g(h())),$.$$click=K,n($,()=>g("loadingScreen.actions.showAnother")),n(p,(()=>{var f=H(()=>!!i());return()=>f()&&(()=>{var u=F();return n(u,i),u})()})(),null),R(()=>w(d,"alt",g("loadingScreen.logoAlt"))),c})()}const k=document.getElementById("loading-root");if(!k)throw new Error(g("loadingScreen.errors.missingRoot"));M(()=>E(L,{}),k);N(["click"]);
2
+ //# sourceMappingURL=loading-CanSHf7z.js.map