Refactor application architecture and shared functionality

This commit is contained in:
Jakub Syty
2026-08-21 10:59:47 +02:00
398 changed files with 28819 additions and 4361 deletions
+70 -14
View File
@@ -998,6 +998,8 @@ export const dict: Record<I18nKey, string> = {
"gitView.pr.field.draft": "Чернетка",
"gitView.pr.field.title": "Назва",
"gitView.pr.githubNotConnected": "GitHub не підключено",
"gitView.pr.history.merged": "PR #{number} злито в {base}.",
"gitView.pr.history.closed": "PR #{number} закрито.",
"gitView.pr.loadingDescription": "Завантаження опису...",
"gitView.pr.mergeMethod.merge": "Створити коміт злиття",
"gitView.pr.mergeMethod.rebase": "Перебазувати та злити",
@@ -1187,12 +1189,12 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.blocked.structuredOutput.descriptionUnknownModel": "Small model не підтримує структуровані відповіді, потрібні для розбору.",
"contextRail.surface.plan.description": "Перегляд поточного плану",
"contextRail.surface.pr.description": "Створюйте, переглядайте та зливайте pull request поточної гілки",
"contextRail.surface.notes.description": "Нотатки, задачі та плани проєкту",
"contextRail.surface.notes.description": "Нотатки, завдання, плани та памʼять агента для проєкту",
"contextRail.surface.context.description": "Контекст сесії та використання токенів",
"contextRail.surface.browser.description": "Вбудований браузер",
"contextRail.surface.preview.description": "Перегляд дев-сервера",
"contextRail.surface.chat.description": "Сесія, відкрита поруч",
"contextRail.surface.notes": "Нотатки проєкту",
"contextRail.surface.notes": "Знання проєкту",
"contextRail.editorTree.toggle": "Перемкнути дерево файлів",
"contextPanel.browser.open": "Відкрити панель браузера",
"contextPanel.browser.addressAria": "Адреса браузера",
@@ -1286,6 +1288,14 @@ export const dict: Record<I18nKey, string> = {
"sidebarFilesTree.toast.writeNotSupported": "Запис не підтримується",
"sidebarFilesTree.toast.fileCreated": "Файл створено",
"sidebarFilesTree.toast.operationFailed": "Операція не вдалася",
"sidebarFilesTree.toast.uploaded": "Файли завантажено",
"sidebarFilesTree.toast.uploadedWithoutConflicts": "Файли без конфліктів завантажено",
"sidebarFilesTree.toast.uploadFailed": "Деякі файли не вдалося завантажити",
"sidebarFilesTree.drop.target": "Завантажити в {path}",
"sidebarFilesTree.drop.uploading": "Завантаження файлів у {path}",
"sidebarFilesTree.dialog.uploadConflicts.title": "Замінити наявні файли?",
"sidebarFilesTree.dialog.uploadConflicts.description": "Файли з такими назвами вже існують у {path}. Заміну неможливо скасувати.",
"sidebarFilesTree.dialog.uploadConflicts.replace": "Замінити",
"sidebarFilesTree.toast.folderNameRequired": "Потрібно вказати назву папки",
"sidebarFilesTree.toast.folderCreated": "Папку створено",
"sidebarFilesTree.toast.nameRequired": "Потрібно вказати назву",
@@ -1393,10 +1403,12 @@ export const dict: Record<I18nKey, string> = {
"contextUsage.mobile.usedTokens": "Використані токени",
"contextUsage.mobile.contextLimit": "Обмеження контексту",
"contextUsage.mobile.outputLimit": "Ліміт виводу",
"contextUsage.mobile.cost": "Вартість",
"contextUsage.mobile.usage": "Використання",
"contextUsage.tooltip.usedTokens": "Використані токени: {tokens}",
"contextUsage.tooltip.contextLimit": "Обмеження контексту: {tokens}",
"contextUsage.tooltip.outputLimit": "Ліміт виводу: {tokens}",
"contextUsage.tooltip.cost": "Вартість: {cost}",
"contextSidebar.session.untitled": "Сесія без назви",
"contextSidebar.empty.openSession": "Відкрийте сесію, щоб перевірити контекст.",
"contextSidebar.section.context": "Контекст",
@@ -1423,6 +1435,7 @@ export const dict: Record<I18nKey, string> = {
"planView.file.defaultName": "план",
"planView.title.default": "План",
"planView.error.saveFailed": "Не вдалося зберегти",
"planView.error.loadFailed": "Не вдалося завантажити цей план",
"planView.error.previewUnavailable": "Попередній перегляд недоступний",
"planView.error.switchToEditMode": "Перейдіть у режим редагування, щоб усунути проблему.",
"planView.error.writeFailed": "Помилка запису",
@@ -1517,11 +1530,46 @@ export const dict: Record<I18nKey, string> = {
"diffView.hunk.unsupported": "Додавання окремих шматків до індексу не підтримується в цьому середовищі.",
"rightSidebar.contextNotesTodo.plan.defaultTitle": "План",
"rightSidebar.contextNotesTodo.empty.selectProject": "Виберіть проєкт, щоб додати нотатки та завдання.",
"rightSidebar.contextNotesTodo.notes.title": "Швидкі нотатки - {project}",
"rightSidebar.contextNotesTodo.notes.placeholder": "Зберігайте контекст, нагадування або посилання",
"rightSidebar.contextNotesTodo.todo.title": "Todo",
"rightSidebar.contextNotesTodo.todo.itemsSingle": "{count} пункт",
"rightSidebar.contextNotesTodo.todo.itemsPlural": "пунктів: {count}",
"rightSidebar.contextNotesTodo.notes.addAria": "Додати нотатку",
"rightSidebar.contextNotesTodo.notes.empty": "Нотаток ще немає. Занотуйте контекст, нагадування або посилання.",
"rightSidebar.contextNotesTodo.notes.actions.expand": "Розгорнути нотатку",
"rightSidebar.contextNotesTodo.notes.actions.collapse": "Згорнути нотатку",
"rightSidebar.contextNotesTodo.notes.actions.delete": "Видалити нотатку",
"rightSidebar.contextNotesTodo.notes.actions.pin": "Закріпити в контексті агента",
"rightSidebar.contextNotesTodo.notes.actions.unpin": "Відкріпити з контексту агента",
"rightSidebar.contextNotesTodo.notes.source.selection": "З чату",
"rightSidebar.contextNotesTodo.notes.source.agent": "Від агента",
"rightSidebar.contextNotesTodo.search.placeholder": "Пошук",
"rightSidebar.contextNotesTodo.search.clear": "Очистити пошук",
"rightSidebar.contextNotesTodo.search.noResults": "Нічого не знайдено за запитом «{query}».",
"rightSidebar.contextNotesTodo.toast.deleteNoteFailed": "Не вдалося видалити нотатку",
"rightSidebar.contextNotesTodo.toast.createNoteFailed": "Не вдалося створити нотатку",
"rightSidebar.contextNotesTodo.tabs.notes": "Нотатки",
"rightSidebar.contextNotesTodo.tabs.todos": "Todo",
"rightSidebar.contextNotesTodo.tabs.plans": "Плани",
"rightSidebar.contextNotesTodo.plans.actions.back": "Назад до планів",
"rightSidebar.contextNotesTodo.tabs.memory": "Памʼять",
"rightSidebar.contextNotesTodo.sections.label": "Розділи контексту проєкту",
"rightSidebar.contextNotesTodo.sections.resize": "Змінити ширину бічної панелі розділів",
"rightSidebar.contextNotesTodo.memory.scope.project": "Проєкт",
"rightSidebar.contextNotesTodo.memory.scope.label": "Область памʼяті",
"rightSidebar.contextNotesTodo.memory.scope.global": "Про вас",
"rightSidebar.contextNotesTodo.memory.type.fact": "факт",
"rightSidebar.contextNotesTodo.memory.badge.new": "нове",
"rightSidebar.contextNotesTodo.memory.flagged": "Не надсилається агенту — виглядає як інструкція",
"rightSidebar.contextNotesTodo.memory.badge.changed": "змінено",
"rightSidebar.contextNotesTodo.memory.type.preference": "вподобання",
"rightSidebar.contextNotesTodo.memory.type.reference": "посилання",
"rightSidebar.contextNotesTodo.memory.actions.delete": "Забути цей запис",
"rightSidebar.contextNotesTodo.memory.actions.editTitle": "Заголовок запису",
"rightSidebar.contextNotesTodo.memory.actions.editBody": "Текст запису",
"rightSidebar.contextNotesTodo.memory.toast.saveFailed": "Не вдалося зберегти запис",
"rightSidebar.contextNotesTodo.memory.toast.deleteFailed": "Не вдалося забути запис",
"rightSidebar.contextNotesTodo.memory.empty.nothing": "Агент ще нічого сюди не записав.",
"rightSidebar.contextNotesTodo.memory.empty.noMatches": "Жоден збережений запис не відповідає пошуку.",
"rightSidebar.contextNotesTodo.memory.empty.noProject": "Відкрийте проєкт, щоб побачити, що агент про нього памʼятає.",
"rightSidebar.contextNotesTodo.memory.empty.unavailable": "Не вдалося завантажити памʼять. Нічого не втрачено — спробуйте ще раз.",
"rightSidebar.contextNotesTodo.todo.clearCompleted": "Очистити завершені",
"rightSidebar.contextNotesTodo.todo.inputPlaceholder": "Додати завдання",
"rightSidebar.contextNotesTodo.todo.addAria": "Додати завдання",
@@ -1532,13 +1580,9 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.todo.actions.delete": "Видалити \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.send": "Надіслати \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.reorder": "Змінити порядок \"{text}\"",
"rightSidebar.contextNotesTodo.todo.resizeAria": "Змінити розмір списку завдань",
"rightSidebar.contextNotesTodo.todo.sendMenu.currentSession": "Надіслати до поточної сесії",
"rightSidebar.contextNotesTodo.todo.sendMenu.newSession": "Надіслати до нової сесії",
"rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession": "Надіслати до нової сесії в worktree",
"rightSidebar.contextNotesTodo.plans.title": "Плани",
"rightSidebar.contextNotesTodo.plans.filesSingle": "Файл: {count}",
"rightSidebar.contextNotesTodo.plans.filesPlural": "Файлів: {count}",
"rightSidebar.contextNotesTodo.plans.importFromFile": "Імпортувати план із файлу",
"rightSidebar.contextNotesTodo.plans.empty": "Ще немає збережених планів.",
"rightSidebar.contextNotesTodo.plans.deletePlan": "Видалити план",
@@ -1558,6 +1602,7 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.toast.sentToNewSession": "Завдання надіслано до нової сесії",
"rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession": "Завдання надіслано до нової сесії в worktree",
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "Не вдалося надіслати завдання",
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "Не вдалося оновити план",
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "Не вдалося видалити план",
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "Файл плану порожній",
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "Не вдалося імпортувати план",
@@ -1993,6 +2038,9 @@ export const dict: Record<I18nKey, string> = {
"chat.revert.toast.undo": "Відкочено до {preview}",
"chat.revert.toast.redo": "Повторено",
"chat.revert.toast.restored": "Всі повідомлення відновлено",
"chat.toast.opencodeRestartInterrupted.title": "Чат перервано",
"chat.toast.opencodeRestartInterrupted.description": "OpenCode перезапустився, поки відповідь ще формувалася. Надішліть повідомлення, щоб продовжити.",
"chat.toast.opencodeRestartInterrupted.openSession": "Відкрити сесію",
"chat.errorBoundary.title": "Помилка чату",
"chat.errorBoundary.description": "В інтерфейсі чату сталася помилка. Причиною може бути тимчасова проблема з мережею або пошкоджені дані повідомлення.",
"chat.errorBoundary.sessionLabel": "Сесія",
@@ -2983,13 +3031,15 @@ export const dict: Record<I18nKey, string> = {
"contextFileOpen.failure.unreadable": "Failed to open file",
"quota.window.5h": "5-Hour",
"quota.window.7d": "7-Day Limit",
"quota.window.7dSonnet": "7-Day Sonnet Limit",
"quota.window.7dOpus": "7-Day Opus Limit",
"quota.window.weekly": "Weekly Limit",
"quota.window.extraUsage": "Додаткове використання",
"quota.window.weekly": "Щотижня",
"quota.window.daily": "Daily",
"quota.window.monthly": "Monthly Limit",
"quota.window.monthly": "Щомісяця",
"quota.window.credits": "Credits",
"quota.window.creditsBalance": "Credits Balance",
"quota.window.monthlyCredits": "Місячні кредити",
"quota.window.purchasedCredits": "Придбані кредити",
"quota.window.freeCredits": "Безкоштовні кредити",
"quota.window.billingCycle": "Billing Cycle",
"quota.window.auto": "Auto",
"quota.window.api": "API",
@@ -3032,6 +3082,12 @@ export const dict: Record<I18nKey, string> = {
'chat.workStatus.subagent.askedQuestion': 'поставив питання',
'chat.workStatus.section.contextBreakdown': 'Джерела контексту',
'chat.workStatus.breakdown.skills': 'Скіли',
'chat.workStatus.breakdown.pinnedNote': 'нотатка',
'chat.workStatus.breakdown.unpin': 'Відкріпити від контексту',
'chat.workStatus.breakdown.pinnedPlan': 'план',
'chat.workStatus.breakdown.memory': 'Памʼять агента',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} закріплено',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} закріплено',
'chat.workStatus.breakdown.mcp': 'Сервери MCP',
'chat.workStatus.action.openChanges': 'Відкрити зміни',
'chat.workStatus.action.openGit': 'Відкрити панель Git',