@cat-factory/app 0.46.11 → 0.47.0

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 (42) hide show
  1. package/app/components/auth/AuthGate.vue +3 -2
  2. package/app/components/auth/LoginScreen.vue +172 -32
  3. package/app/components/auth/ResetPasswordScreen.vue +16 -13
  4. package/app/components/auth/UserMenu.vue +3 -2
  5. package/app/components/layout/AccountDeploymentSettings.vue +307 -37
  6. package/app/components/layout/AccountFragmentSettings.vue +2 -3
  7. package/app/components/layout/AccountTeamSettings.vue +75 -45
  8. package/app/components/layout/AiProvidersBanner.vue +11 -11
  9. package/app/components/layout/BoardSwitcher.vue +63 -29
  10. package/app/components/layout/CommandBar.vue +68 -54
  11. package/app/components/layout/GitHubPatBanner.vue +13 -6
  12. package/app/components/layout/IntegrationBackTitle.vue +4 -1
  13. package/app/components/layout/IntegrationsHub.vue +67 -49
  14. package/app/components/layout/NotificationsInbox.vue +48 -19
  15. package/app/components/layout/PersonalSetupModal.vue +26 -16
  16. package/app/components/layout/ProviderConfigBanner.vue +14 -9
  17. package/app/components/layout/SideBar.vue +20 -18
  18. package/app/components/layout/SpendWarningBanner.vue +16 -16
  19. package/app/components/providers/ApiKeysSection.vue +27 -3
  20. package/app/components/providers/PersonalSubscriptionSection.vue +18 -4
  21. package/app/components/providers/SignInRequiredNotice.vue +19 -0
  22. package/app/components/settings/AccountSettingsPanel.vue +9 -6
  23. package/app/components/settings/IssueTrackerPanel.vue +114 -53
  24. package/app/components/settings/LocalModeSettingsPanel.vue +60 -28
  25. package/app/components/settings/LocalModelEndpointsPanel.vue +72 -27
  26. package/app/components/settings/MergeThresholdsPanel.vue +93 -45
  27. package/app/components/settings/ModelConfigurationPanel.vue +62 -36
  28. package/app/components/settings/ObservabilityConnectionPanel.vue +65 -35
  29. package/app/components/settings/OpenRouterCatalogPanel.vue +70 -40
  30. package/app/components/settings/ProviderConnectionPanel.vue +115 -61
  31. package/app/components/settings/ServiceFragmentDefaultsPanel.vue +9 -12
  32. package/app/components/settings/UserSecretsSection.vue +37 -18
  33. package/app/components/settings/WorkspaceSettingsPanel.vue +114 -62
  34. package/app/composables/api/auth.ts +7 -0
  35. package/app/stores/auth.ts +25 -1
  36. package/app/types/accountSettings.ts +4 -0
  37. package/i18n/locales/en.json +908 -0
  38. package/i18n/locales/es.json +899 -0
  39. package/i18n/locales/fr.json +899 -0
  40. package/i18n/locales/pl.json +899 -0
  41. package/i18n/locales/uk.json +899 -0
  42. package/package.json +2 -2
@@ -710,5 +710,904 @@
710
710
  "userPrompt": "Запит користувача",
711
711
  "details": "Деталі"
712
712
  }
713
+ },
714
+ "auth": {
715
+ "gate": {
716
+ "loading": "Завантаження…"
717
+ },
718
+ "localMode": {
719
+ "continueWith": "Продовжити з {provider}",
720
+ "enterPatTitle": "Або увійдіть за допомогою особистого токена доступу",
721
+ "tokenPlaceholder": "вставте токен {provider}",
722
+ "createToken": "Створити токен {provider} ↗",
723
+ "submit": "Увійти",
724
+ "orDivider": "або",
725
+ "failed": "Не вдалося увійти. Перевірте токен і спробуйте ще раз."
726
+ },
727
+ "signInRequired": {
728
+ "personalSubscriptions": "Особисті підписки зберігаються у вашому обліковому записі, але це розгортання працює без входу, тому їх не можна зберегти тут. Скористайтеся пулом робочого простору або ключем API постачальника.",
729
+ "userApiKeys": "Ваші особисті ключі API зберігаються у вашому обліковому записі, але це розгортання працює без входу, тому їх не можна зберегти тут. Змініть область на «Цей робочий простір», щоб додати спільний ключ."
730
+ },
731
+ "login": {
732
+ "appTitle": "Architecture Board",
733
+ "subtitle": "Увійдіть, щоб продовжити.",
734
+ "inviteSubtitle": "Прийміть запрошення, щоб продовжити.",
735
+ "forgotSubtitle": "Скиньте свій пароль.",
736
+ "continueWithGithub": "Продовжити з GitHub",
737
+ "continueWithGoogle": "Продовжити з Google",
738
+ "or": "або",
739
+ "namePlaceholder": "Ім'я (необов'язково)",
740
+ "emailPlaceholder": "Електронна пошта",
741
+ "passwordPlaceholder": "Пароль",
742
+ "createAccount": "Створити обліковий запис",
743
+ "signIn": "Увійти",
744
+ "signUp": "Зареєструватися",
745
+ "needAccount": "Потрібен обліковий запис? {signUp}",
746
+ "haveAccount": "Вже маєте обліковий запис? {signIn}",
747
+ "forgotPassword": "Забули пароль?",
748
+ "forgotSent": "Якщо обліковий запис для цієї електронної пошти існує, посилання для скидання пароля вже в дорозі. Перевірте свою поштову скриньку.",
749
+ "sendResetLink": "Надіслати посилання для скидання",
750
+ "backToSignIn": "Повернутися до входу",
751
+ "signInFailed": "Не вдалося увійти. Перевірте свої дані та спробуйте ще раз.",
752
+ "genericError": "Щось пішло не так. Спробуйте ще раз."
753
+ },
754
+ "resetPassword": {
755
+ "title": "Скинути пароль",
756
+ "subtitle": "Виберіть новий пароль для свого облікового запису.",
757
+ "doneBody": "Ваш пароль було скинуто. Тепер ви можете увійти за допомогою нового пароля.",
758
+ "goToSignIn": "Перейти до входу",
759
+ "missingToken": "У цьому посиланні для скидання відсутній токен. Запросіть нове посилання на екрані входу.",
760
+ "backToSignIn": "Повернутися до входу",
761
+ "newPasswordPlaceholder": "Новий пароль",
762
+ "confirmPasswordPlaceholder": "Підтвердьте новий пароль",
763
+ "submit": "Скинути пароль",
764
+ "errorTooShort": "Пароль має містити щонайменше 8 символів.",
765
+ "errorMismatch": "Паролі не збігаються.",
766
+ "errorInvalidLink": "Це посилання для скидання пароля недійсне або термін його дії минув."
767
+ },
768
+ "userMenu": {
769
+ "mySetup": "Моє налаштування",
770
+ "signOut": "Вийти"
771
+ }
772
+ },
773
+ "layout": {
774
+ "accountDeployment": {
775
+ "title": "Інтеграції розгортання",
776
+ "intro": "Облікові дані, спільні для всіх робочих просторів цього облікового запису, зашифровані у стані спокою. Значення ніколи не показуються після збереження; залиште поле порожнім, щоб зберегти наявний секрет.",
777
+ "configured": "Налаштовано",
778
+ "notSet": "Не задано",
779
+ "clear": "Очистити",
780
+ "loadFailed": "Не вдалося завантажити налаштування розгортання",
781
+ "slack": {
782
+ "title": "Застосунок Slack (OAuth)",
783
+ "description": "Вмикає потік OAuth \"Add to Slack\". Без нього робочі простори все одно можуть під'єднати Slack, вставивши токен бота.",
784
+ "clientId": "Ідентифікатор клієнта",
785
+ "clientSecret": "Секрет клієнта",
786
+ "redirectUrl": "URL перенаправлення",
787
+ "validation": "Введіть ідентифікатор клієнта, секрет та URL перенаправлення",
788
+ "saved": "OAuth Slack збережено",
789
+ "saveFailed": "Не вдалося зберегти OAuth Slack",
790
+ "cleared": "OAuth Slack очищено",
791
+ "clearFailed": "Не вдалося очистити OAuth Slack"
792
+ },
793
+ "web": {
794
+ "title": "Вебпошук контейнера",
795
+ "description": "Постачальник пошуку, до якого агенти в контейнері звертаються через проксі бекенду. Задайте ключ Brave (рекомендовано) або власний URL SearXNG (з необов'язковим ключем bearer).",
796
+ "configured": "Налаштовано ({provider})",
797
+ "braveKey": "Ключ API Brave",
798
+ "searxngUrl": "URL SearXNG",
799
+ "searxngKey": "Ключ SearXNG (необов'язково)",
800
+ "validation": "Введіть ключ Brave або URL SearXNG",
801
+ "saved": "Ключі вебпошуку збережено",
802
+ "saveFailed": "Не вдалося зберегти ключі вебпошуку",
803
+ "cleared": "Ключі вебпошуку очищено",
804
+ "clearFailed": "Не вдалося очистити ключі вебпошуку"
805
+ },
806
+ "contentStorage": {
807
+ "title": "Сховище вмісту",
808
+ "description": "Де зберігаються знімки екрана тестувальника UI та еталонні зображення дизайну для цього облікового запису. Метадані завжди зберігаються в базі даних; до обраного бекенду надходять лише байти файлів.",
809
+ "default": "За замовчуванням ({backend})",
810
+ "backends": {
811
+ "off": "Вимкнено (сховище вимкнено)",
812
+ "fs": "Локальна файлова система",
813
+ "s3": "Amazon S3 / сумісне з S3",
814
+ "r2": "Cloudflare R2",
815
+ "db": "База даних Postgres"
816
+ },
817
+ "basePath": "Базовий шлях (за замовчуванням: .file-storage)",
818
+ "region": "Регіон (напр. us-east-1)",
819
+ "bucket": "Bucket",
820
+ "prefix": "Префікс ключа (необов’язково)",
821
+ "endpoint": "Endpoint (необов’язково, сумісний з S3)",
822
+ "forcePathStyle": "Примусова адресація у стилі шляху (більшість сховищ, сумісних із S3)",
823
+ "accessKeys": "Ключі доступу",
824
+ "accessKeyId": "Ідентифікатор ключа доступу",
825
+ "secretAccessKey": "Секретний ключ доступу",
826
+ "keysHint": "Ключі запечатані в стані спокою й ніколи не показуються після збереження; залиште порожнім, щоб зберегти наявні ключі.",
827
+ "regionBucketValidation": "Введіть регіон і bucket S3",
828
+ "bothKeysValidation": "Введіть і ідентифікатор ключа доступу, і секрет",
829
+ "keysValidation": "Введіть ідентифікатор ключа доступу та секрет S3",
830
+ "saved": "Сховище вмісту збережено",
831
+ "saveFailed": "Не вдалося зберегти сховище вмісту"
832
+ }
833
+ },
834
+ "accountFragments": {
835
+ "intro": "Рекомендовані практики, спільні для всіх дошок цього облікового запису. Кожна дошка успадковує їх і може перевизначити або додати власні. Агенти, що знають код (coder, reviewer, architect, fixers), вплітають релевантні з них у свій промпт."
836
+ },
837
+ "accountTeam": {
838
+ "roles": {
839
+ "admin": "Адміністратор",
840
+ "developer": "Розробник",
841
+ "product": "Продукт"
842
+ },
843
+ "org": {
844
+ "ctaTitle": "Запросіть учасників команди та керуйте ролями",
845
+ "ctaBody": "Учасники, ролі та запрошення існують в організації. Створіть її, щоб запрошувати учасників команди та керувати їхніми ролями; ваші особисті дошки залишаються незмінними.",
846
+ "namePlaceholder": "Acme Inc.",
847
+ "create": "Створити організацію",
848
+ "created": "Організацію створено"
849
+ },
850
+ "members": {
851
+ "title": "Учасники",
852
+ "empty": "Учасників поки немає."
853
+ },
854
+ "invite": {
855
+ "title": "Запросити учасника команди",
856
+ "submit": "Запросити",
857
+ "revoke": "Відкликати запрошення",
858
+ "created": "Запрошення створено",
859
+ "createdEmailed": "Електронного листа надіслано (або скопіюйте посилання зі списку нижче).",
860
+ "createdShareLink": "Поділіться посиланням для прийняття з учасником команди.",
861
+ "status": {
862
+ "pending": "Очікує",
863
+ "accepted": "Прийнято",
864
+ "revoked": "Відкликано"
865
+ }
866
+ },
867
+ "email": {
868
+ "title": "Відправник пошти",
869
+ "notEnabled": "Надсилання пошти не ввімкнено для цього розгортання. Запрошення все одно створюють посилання для прийняття, яким можна поділитися.",
870
+ "connectedAs": "Під'єднано через {provider} як {from}",
871
+ "disconnect": "Від'єднати",
872
+ "connect": "Під'єднати відправника пошти",
873
+ "connected": "Відправника пошти під'єднано",
874
+ "fromPlaceholder": "Адреса відправника",
875
+ "apiKeyPlaceholder": "Ключ API постачальника",
876
+ "providers": {
877
+ "resend": "Resend",
878
+ "sendgrid": "SendGrid"
879
+ }
880
+ },
881
+ "apiKeys": {
882
+ "title": "Ключі API облікового запису"
883
+ },
884
+ "errors": {
885
+ "updateRoles": "Не вдалося оновити ролі",
886
+ "loadSettings": "Не вдалося завантажити налаштування команди",
887
+ "createOrg": "Не вдалося створити організацію",
888
+ "sendInvite": "Не вдалося надіслати запрошення",
889
+ "revokeInvite": "Не вдалося відкликати запрошення",
890
+ "connectEmail": "Не вдалося під'єднати відправника пошти",
891
+ "disconnectEmail": "Не вдалося від'єднати відправника пошти"
892
+ }
893
+ },
894
+ "boardSwitcher": {
895
+ "accountFallback": "Обліковий запис",
896
+ "boardFallback": "Дошка",
897
+ "providers": {
898
+ "docker": "Docker (локально)",
899
+ "custom": "Власний"
900
+ },
901
+ "account": {
902
+ "newOrg": "Нова організація…",
903
+ "settings": "Налаштування облікового запису…",
904
+ "defaultProvider": "Хмарний провайдер за замовчуванням"
905
+ },
906
+ "board": {
907
+ "new": "Нова дошка…",
908
+ "rename": "Перейменувати дошку…",
909
+ "delete": "Видалити дошку"
910
+ },
911
+ "prompt": {
912
+ "create": "Створити",
913
+ "nameLabel": "Назва",
914
+ "descriptionLabel": "Опис",
915
+ "descriptionHint": "Необов'язково",
916
+ "descriptionPlaceholder": "Для чого ця дошка?",
917
+ "account": {
918
+ "title": "Нова організація",
919
+ "placeholder": "Acme Inc."
920
+ },
921
+ "board": {
922
+ "title": "Нова дошка",
923
+ "placeholder": "Дошка без назви"
924
+ },
925
+ "rename": {
926
+ "title": "Налаштування дошки",
927
+ "placeholder": "Назва дошки"
928
+ }
929
+ },
930
+ "toast": {
931
+ "updateProviderFailed": "Не вдалося оновити провайдера за замовчуванням",
932
+ "switchAccountFailed": "Не вдалося змінити обліковий запис",
933
+ "openBoardFailed": "Не вдалося відкрити дошку",
934
+ "boardDeleted": "Дошку видалено",
935
+ "deleteBoardFailed": "Не вдалося видалити дошку"
936
+ }
937
+ },
938
+ "notifications": {
939
+ "heading": "Потребує вашої уваги",
940
+ "overdue": "Прострочено",
941
+ "openPr": "Відкрити PR",
942
+ "dismiss": "Відхилити",
943
+ "action": {
944
+ "merge_review": "Злити",
945
+ "pipeline_complete": "Підтвердити та злити",
946
+ "ci_failed": "Повторити запуск",
947
+ "test_failed": "Повторити запуск",
948
+ "requirement_review": "Позначити прочитаним",
949
+ "clarity_review": "Позначити прочитаним",
950
+ "release_regression": "Підтвердити отримання",
951
+ "decision_required": "Позначити прочитаним",
952
+ "human_test_ready": "Позначити прочитаним",
953
+ "visual_confirmation_ready": "Позначити прочитаним",
954
+ "human_review": "Позначити прочитаним",
955
+ "followup_pending": "Позначити прочитаним",
956
+ "markRead": "Позначити прочитаним"
957
+ }
958
+ },
959
+ "aiProvidersBanner": {
960
+ "setup": {
961
+ "title": "Модель ШІ не налаштовано",
962
+ "body": "Агентам потрібна модель для роботи. ШІ працює одразу лише в розгортанні Cloudflare з увімкненим Workers AI. Інакше підключіть ключ постачальника, підписку, проксі або локальний виконавець, щоб продовжити.",
963
+ "action": "Налаштувати ШІ"
964
+ },
965
+ "preset": {
966
+ "title": "Типовий пресет моделей використовує недоступні моделі",
967
+ "body": "Завдання, що використовують типовий пресет, завершаться невдало. Відредагуйте пресет або налаштуйте відсутнього постачальника.",
968
+ "action": "Переглянути пресет"
969
+ }
970
+ },
971
+ "githubPatBanner": {
972
+ "title": "GitHub PAT не налаштовано",
973
+ "body": "Локальний режим звертається до GitHub за допомогою особистого токена доступу. Без нього кроки агента, які клонують, надсилають, відкривають PR, перевіряють CI або зливають, завершаться невдало.",
974
+ "createToken": "Створити токен GitHub (області попередньо вибрані)",
975
+ "thenSet": "Потім встановіть {envVar} і перезапустіть."
976
+ },
977
+ "providerConfigBanner": {
978
+ "titleMany": "Постачальники потребують налаштування",
979
+ "titleOne": {
980
+ "environment": "Постачальник середовища потребує налаштування",
981
+ "runner-pool": "Пул виконавців потребує налаштування"
982
+ },
983
+ "body": "Постачальника підключено до цього екземпляра, але йому бракує обов'язкових налаштувань, тож він ще не може працювати. Додайте обов'язкові поля, щоб завершити його підключення.",
984
+ "action": {
985
+ "environment": "Налаштувати постачальника середовища",
986
+ "runner-pool": "Налаштувати пул виконавців"
987
+ }
988
+ },
989
+ "spendWarningBanner": {
990
+ "title": "Досягнуто ліміту витрат, виконання агентів призупинено",
991
+ "body": "Витрати на токени цього місяця досягли налаштованого бюджету, тому запущені конвеєри було призупинено, щоб уникнути подальших витрат. Виконання відновиться автоматично, коли бюджет оновиться наступного місяця, або щойно ліміт буде підвищено.",
992
+ "spent": "Витрачено",
993
+ "budget": "Бюджет",
994
+ "tokens": "Токени",
995
+ "resume": "Усе одно відновити",
996
+ "resumeHint": "Відновлення продовжує витрати; його знову призупинять, якщо бюджет усе ще перевищено."
997
+ },
998
+ "personalSetup": {
999
+ "title": "Моє налаштування",
1000
+ "intro": "Ваші особисті підключення, що використовуються для запусків, які ви розпочинаєте, і видимі лише вам.",
1001
+ "connected": "Підключено",
1002
+ "notConnected": "Не підключено",
1003
+ "connectedCount": "{count} підключено | {count} підключено | {count} підключено",
1004
+ "sourceControl": {
1005
+ "title": "Контроль версій"
1006
+ },
1007
+ "githubToken": {
1008
+ "label": "Мій токен GitHub",
1009
+ "description": "Особистий токен доступу, що використовується для запусків, які ви розпочинаєте (надсилання, PR, CI, злиття)."
1010
+ },
1011
+ "models": {
1012
+ "title": "Моделі"
1013
+ },
1014
+ "localRunners": {
1015
+ "label": "Мої локальні виконавці",
1016
+ "description": "Виконавці моделей на вашій власній машині (Ollama, LM Studio, vLLM)."
1017
+ },
1018
+ "subscriptions": {
1019
+ "label": "Мої підписки",
1020
+ "description": "Плани індивідуального використання, які ви розблоковуєте особистим паролем (Claude, GLM, Codex)."
1021
+ }
1022
+ },
1023
+ "integrationBack": {
1024
+ "backToMySetup": "Назад до Моє налаштування",
1025
+ "backToIntegrations": "Назад до Інтеграції"
1026
+ },
1027
+ "commandBar": {
1028
+ "searchPlaceholder": "Знайдіть або виконайте команду…",
1029
+ "noMatches": "Немає відповідних команд.",
1030
+ "groups": {
1031
+ "create": "Створити",
1032
+ "repositories": "Репозиторії",
1033
+ "integrations": "Інтеграції",
1034
+ "workspace": "Робочий простір",
1035
+ "account": "Обліковий запис"
1036
+ },
1037
+ "cmd": {
1038
+ "newPipeline": "Створити конвеєр",
1039
+ "addFromRepo": "Додати сервіс з наявного репозиторію",
1040
+ "bootstrapRepo": "Ініціалізувати новий репозиторій",
1041
+ "githubManage": "Керувати підключенням GitHub",
1042
+ "githubConnect": "Підключити GitHub",
1043
+ "slackManage": "Керувати сповіщеннями Slack",
1044
+ "slackConnect": "Підключити Slack",
1045
+ "sourceManage": "Керувати {source}",
1046
+ "sourceConnect": "Підключити {source}",
1047
+ "documentImport": "Імпортувати та створити з документів",
1048
+ "taskImport": "Імпортувати тикети",
1049
+ "fragments": "Бібліотека фрагментів контексту",
1050
+ "mergeThresholds": "Пороги злиття",
1051
+ "workspaceSettings": "Налаштування робочого простору",
1052
+ "modelConfiguration": "Конфігурація моделей",
1053
+ "serviceFragmentDefaults": "Типові найкращі практики сервісу",
1054
+ "accountSettings": "Налаштування облікового запису",
1055
+ "localModels": "Мої локальні виконавці",
1056
+ "sandbox": "Відкрити пісочницю"
1057
+ },
1058
+ "keywords": {
1059
+ "newPipeline": "конвеєр агенти ланцюг pipeline",
1060
+ "addFromRepo": "github імпорт наявний",
1061
+ "bootstrapRepo": "каркас створити еталонна архітектура",
1062
+ "github": "git репозиторії pull requests тикети",
1063
+ "slack": "slack сповіщення канал згадки",
1064
+ "documentSource": "документ джерело prd rfc",
1065
+ "documentImport": "документ імпорт створити",
1066
+ "taskSource": "завдання джерело трекер тикети",
1067
+ "taskImport": "завдання імпорт тикети",
1068
+ "fragments": "prompt фрагменти найкращі практики настанови контекст",
1069
+ "mergeThresholds": "злиття політика пресет автозлиття ci",
1070
+ "workspaceSettings": "ліміт запущені завдання на сервіс очікування ескалація прострочення сповіщення тайм-аут",
1071
+ "modelConfiguration": "модель llm маршрутизація тип агента пресет типовий конфігурація",
1072
+ "serviceFragmentDefaults": "фрагмент найкращі практики настанова сервіс типовий обізнаний з кодом",
1073
+ "accountSettings": "обліковий запис команда учасники ролі запрошення електронна пошта ключі api фрагмент найкращі практики бібліотека контекст організація особисте",
1074
+ "localModels": "модель локальна виконавець ollama lm studio llamacpp vllm endpoint",
1075
+ "sandbox": "пісочниця prompt модель тест експеримент суддя fixture benchmark оцінка"
1076
+ }
1077
+ },
1078
+ "integrationsHub": {
1079
+ "title": "Інтеграції",
1080
+ "intro": "Підключайте зовнішні системи, які може приєднати цей робочий простір, і керуйте ними.",
1081
+ "searchPlaceholder": "Пошук інтеграцій…",
1082
+ "noMatches": "Жодна інтеграція не відповідає \"{query}\".",
1083
+ "getStarted": {
1084
+ "title": "Початок роботи",
1085
+ "body": "Підключіть джерело коду й постачальника моделей, щоб запустити свій перший конвеєр."
1086
+ },
1087
+ "status": {
1088
+ "connected": "Підключено",
1089
+ "keyConnected": "Ключ підключено",
1090
+ "notConnected": "Не підключено",
1091
+ "needsAttention": "Потребує уваги",
1092
+ "disabled": "Вимкнено",
1093
+ "recommended": "Рекомендовано"
1094
+ },
1095
+ "groups": {
1096
+ "models": "Моделі та постачальники",
1097
+ "sourceControl": "Контроль версій",
1098
+ "communication": "Комунікація",
1099
+ "documents": "Документи",
1100
+ "taskTrackers": "Трекери завдань",
1101
+ "observability": "Спостережуваність",
1102
+ "infrastructure": "Інфраструктура",
1103
+ "personal": "Особисте (лише ви)"
1104
+ },
1105
+ "items": {
1106
+ "openrouter": {
1107
+ "description": "Єдиний шлюз до понад 300 моделей. Додайте свій ключ і вмикайте моделі в одному місці."
1108
+ },
1109
+ "vendors": {
1110
+ "label": "Постачальники та ключі",
1111
+ "description": "Підписки LLM робочого простору та ключі API постачальників."
1112
+ },
1113
+ "github": {
1114
+ "description": "Підключіть GitHub App робочого простору, переглядайте репозиторії, PR-и та тикети."
1115
+ },
1116
+ "slack": {
1117
+ "description": "Спрямовуйте сповіщення до простору Slack вашої команди."
1118
+ },
1119
+ "documentSource": {
1120
+ "description": "Приєднайте {source} як джерело документів для контексту вимог."
1121
+ },
1122
+ "documentImport": {
1123
+ "label": "Імпортувати та створити",
1124
+ "description": "Отримайте документи з підключеного джерела та створіть структуру."
1125
+ },
1126
+ "taskSource": {
1127
+ "description": "Приєднайте {source}, щоб імпортувати тикети трекера й посилатися на них."
1128
+ },
1129
+ "taskImport": {
1130
+ "label": "Імпортувати тикети",
1131
+ "description": "Отримайте тикети з підключеного трекера на дошку."
1132
+ },
1133
+ "trackerSettings": {
1134
+ "label": "Налаштування трекера тикетів"
1135
+ },
1136
+ "observability": {
1137
+ "label": "Стан після випуску",
1138
+ "description": "Стежте за моніторами й SLO після випуску версії (Datadog)."
1139
+ },
1140
+ "environment": {
1141
+ "label": "Ефемерні середовища",
1142
+ "description": "Де агент Tester виконується щодо живого середовища попереднього перегляду."
1143
+ },
1144
+ "runnerPool": {
1145
+ "label": "Самостійно розміщений пул виконавців",
1146
+ "description": "Де виконуються агенти коду, коли не використовуються Cloudflare Containers."
1147
+ },
1148
+ "localMode": {
1149
+ "label": "Локальний режим",
1150
+ "description": "Пул теплих контейнерів і повторне використання checkout на репозиторій для локального виконавця."
1151
+ },
1152
+ "githubPat": {
1153
+ "label": "Мій токен GitHub",
1154
+ "description": "Особистий токен доступу, який використовується для запусків, що ви розпочинаєте (pushes, PR-и, CI, злиття)."
1155
+ },
1156
+ "localRunners": {
1157
+ "label": "Мої локальні виконавці",
1158
+ "description": "Ваші виконавці моделей на власній машині (Ollama, LM Studio, vLLM…)."
1159
+ }
1160
+ }
1161
+ }
1162
+ },
1163
+ "settings": {
1164
+ "modelConfiguration": {
1165
+ "title": "Налаштування моделей",
1166
+ "subtitle": "Набори налаштувань, які призначають модель кожному агенту. Завдання обирає один із них; за замовчуванням завдання використовують стандартний набір робочого простору.",
1167
+ "back": "Назад",
1168
+ "closeEsc": "Закрити (Esc)",
1169
+ "quota": "квота",
1170
+ "list": {
1171
+ "intro": "Кожен набір задає {baseModel} для кожного агента, з необов'язковими перевизначеннями для окремих агентів. Модель, закріплена за окремим завданням, усе одно має перевагу над набором.",
1172
+ "introBaseModel": "базову модель",
1173
+ "newPreset": "Новий набір",
1174
+ "loadingCatalog": "Завантаження каталогу моделей…",
1175
+ "default": "За замовчуванням",
1176
+ "setDefaultTitle": "Зробити стандартним для робочого простору",
1177
+ "editTitle": "Редагувати набір",
1178
+ "deleteDisabledTitle": "Стандартний набір не можна видалити",
1179
+ "deleteTitle": "Видалити набір",
1180
+ "basePrefix": "Базова:",
1181
+ "overrideCount": "{count} перевизначення | {count} перевизначення | {count} перевизначень",
1182
+ "empty": "Наборів ще немає. Створіть один, щоб призначити моделі вашим агентам."
1183
+ },
1184
+ "editor": {
1185
+ "useBaseModel": "Використати базову модель",
1186
+ "baseModel": "Базова модель",
1187
+ "nameLabel": "Назва",
1188
+ "namePlaceholder": "напр. Kimi K2.7",
1189
+ "baseModelLabel": "Базова модель (застосовується до кожного агента)",
1190
+ "makeDefault": "Зробити стандартним для робочого простору",
1191
+ "perAgentOverrides": "Перевизначення для окремих агентів",
1192
+ "filterPlaceholder": "Фільтрувати агентів…",
1193
+ "noAgentsMatch": "Жоден агент не відповідає \"{filter}\".",
1194
+ "saveChanges": "Зберегти зміни",
1195
+ "createPreset": "Створити набір"
1196
+ },
1197
+ "toast": {
1198
+ "setDefaultFailed": "Не вдалося встановити стандартний набір",
1199
+ "deleteFailed": "Не вдалося видалити набір",
1200
+ "nameRequiredTitle": "Потрібна назва",
1201
+ "nameRequiredBody": "Дайте набору назву.",
1202
+ "saveFailed": "Не вдалося зберегти набір"
1203
+ }
1204
+ },
1205
+ "account": {
1206
+ "title": "Налаштування облікового запису",
1207
+ "noAccount": "Обліковий запис не вибрано.",
1208
+ "tabs": {
1209
+ "team": "Команда та доступ",
1210
+ "fragments": "Фрагменти контексту"
1211
+ }
1212
+ },
1213
+ "providerConnection": {
1214
+ "fallbackTitle": "Постачальник",
1215
+ "kind": {
1216
+ "environment": {
1217
+ "title": "Постачальник ефемерних середовищ",
1218
+ "blurb": "Місце, де агент Tester працює проти живого середовища попереднього перегляду. Налаштуйте параметри для робочого простору та облікові дані, потрібні вашому постачальнику."
1219
+ },
1220
+ "runner-pool": {
1221
+ "title": "Самостійно розміщений пул виконавців",
1222
+ "blurb": "Місце, де працюють агенти кодування, коли не використовуються контейнери Cloudflare. Налаштуйте кінцеву точку планувальника пулу та облікові дані."
1223
+ }
1224
+ },
1225
+ "delegation": {
1226
+ "title": "Локальне делегування",
1227
+ "intro": "Типово ця машина виконує все локально — контейнерні агенти на Docker хоста, а інфраструктуру Tester через docker-compose всередині контейнера. Увімкніть опції нижче, щоб делегувати будь-яке з цих завдань зовнішньому сервісу. Застосовується лише в локальному режимі.",
1228
+ "agentsToggle": "Запускати контейнерні агенти в пулі виконавців",
1229
+ "agentsHint": "Надсилайте кожного контейнерного агента (кодер, tester, об'єднувач, bootstrap, …) до самостійно розміщеного пулу виконавців цього робочого простору замість Docker хоста.",
1230
+ "registerPoolPrompt": "Спершу {link}, щоб увімкнути це.",
1231
+ "registerPoolLink": "Зареєструйте пул виконавців",
1232
+ "envToggle": "Надавати середовища Tester через постачальника",
1233
+ "envHint": "Підніміть середовище попереднього перегляду Tester через постачальника середовищ, налаштованого нижче, замість docker-compose всередині контейнера. Спершу підключіть постачальника, щоб увімкнути це.",
1234
+ "updateFailed": "Не вдалося оновити делегування"
1235
+ },
1236
+ "runnerPoolLocalHint": "Зареєструйте свій пул тут, а потім увімкніть «Запускати контейнерні агенти в пулі виконавців» на екрані {link}, щоб спрямувати до нього агентів цього робочого простору.",
1237
+ "ephemeralEnvironments": "Ефемерні середовища",
1238
+ "viewLogs": "Переглянути журнали",
1239
+ "hideLogs": "Сховати журнали",
1240
+ "connectedAt": "Підключено · {baseUrl}",
1241
+ "missingConfig": "Відсутня обов'язкова конфігурація: {fields}",
1242
+ "manifestEditorUnavailable": "Цього постачальника налаштовують, складаючи маніфест. Вбудований редактор маніфестів ще недоступний — наразі зареєструйте його через API.",
1243
+ "form": {
1244
+ "updateConfiguration": "Оновити конфігурацію",
1245
+ "connect": "Підключити",
1246
+ "reenterSecrets": "Введіть секретне поле повторно, щоб зберегти зміни — збережені секрети доступні лише для запису й не показуються. | Введіть секретні поля повторно, щоб зберегти зміни — збережені секрети доступні лише для запису й не показуються. | Введіть секретні поля повторно, щоб зберегти зміни — збережені секрети доступні лише для запису й не показуються.",
1247
+ "optionalLabel": "{label} (необов'язково)"
1248
+ },
1249
+ "field": {
1250
+ "defaultsTo": "Типово: {value}"
1251
+ },
1252
+ "test": {
1253
+ "button": "Перевірити підключення",
1254
+ "ok": "Підключення в порядку",
1255
+ "failed": "Не вдалося підключитися"
1256
+ },
1257
+ "toast": {
1258
+ "saved": "{title} збережено",
1259
+ "saveFailed": "Не вдалося зберегти підключення",
1260
+ "removed": "Підключення видалено",
1261
+ "removeFailed": "Не вдалося видалити підключення"
1262
+ }
1263
+ },
1264
+ "serviceFragmentDefaults": {
1265
+ "intro": "Виберіть фрагменти з найкращими практиками, з якими стартує кожен новий сервіс. Їхні поради вплітаються в промпт кожного агента, що працює з кодом (кодер, рецензент, архітектор, виправлячі), на завданнях сервісу. Набір можна уточнити окремо для кожного сервісу в його інспекторі; зміна цього типового значення не впливає на вже наявні сервіси.",
1266
+ "defaultFragments": "Типові фрагменти",
1267
+ "addFragment": "Додати фрагмент",
1268
+ "empty": "Немає — нові сервіси стартують без фрагментів на рівні сервісу.",
1269
+ "saveFailed": "Не вдалося зберегти типові фрагменти",
1270
+ "footer": {
1271
+ "question": "Потрібно додати чи відредагувати самі фрагменти (написані вручну, пов'язані документи, репозиторії)?",
1272
+ "manageBoard": "Керувати бібліотекою фрагментів цієї дошки →",
1273
+ "manageAccount": "Керувати фрагментами облікового запису →"
1274
+ }
1275
+ },
1276
+ "issueTracker": {
1277
+ "filing": {
1278
+ "heading": "Де реєструються тикети",
1279
+ "description": "Циклічний конвеєр технічного боргу створює тикет перед реалізацією й реєструє його в цьому трекері. Виберіть {none}, щоб пропустити реєстрацію.",
1280
+ "none": "Немає",
1281
+ "githubHint": "GitHub Issues використовує встановлений GitHub App, який ще не під'єднано. Встановіть його в {link} — реєстрація залишається вимкненою до того часу.",
1282
+ "githubHintLink": "Інтеграції → GitHub",
1283
+ "jiraHint": "Jira ще не під'єднано. {link}, щоб реєструвати й пов'язувати тикети.",
1284
+ "linearHint": "Linear ще не під'єднано. {link}, щоб реєструвати й пов'язувати тикети.",
1285
+ "connectLink": "Під'єднайте",
1286
+ "jiraProjectKey": "Ключ проєкту Jira",
1287
+ "jiraProjectKeyHelp": "Нові тикети реєструються в цьому проєкті.",
1288
+ "linearTeamId": "Ідентифікатор команди Linear",
1289
+ "linearTeamIdHelp": "Нові тикети створюються в цій команді (Linear вимагає команду для створення тикета)."
1290
+ },
1291
+ "vendor": {
1292
+ "github": "GitHub Issues",
1293
+ "jira": "Jira",
1294
+ "linear": "Linear"
1295
+ },
1296
+ "linking": {
1297
+ "heading": "Пов'язуйте тикети як контекст",
1298
+ "description": "Коли джерело доступне, ви можете імпортувати його тикети та прикріпити їх до завдання, щоб агенти бачили опис тикета й коментарі під час реалізації. Це незалежно від трекера реєстрації вище.",
1299
+ "github": {
1300
+ "available": "Використовує встановлений GitHub App — облікові дані не потрібні.",
1301
+ "unavailable": "Встановіть GitHub App (Інтеграції → GitHub), щоб запропонувати це джерело."
1302
+ },
1303
+ "checkSetup": "Перевірити налаштування",
1304
+ "install": "Встановити",
1305
+ "connected": "Під'єднано.",
1306
+ "jira": {
1307
+ "connectHint": "Під'єднайтеся за допомогою облікового запису Jira та токена API."
1308
+ },
1309
+ "linear": {
1310
+ "connectHint": "Під'єднайтеся за допомогою особистого ключа API Linear."
1311
+ },
1312
+ "connect": "Під'єднати"
1313
+ },
1314
+ "writeback": {
1315
+ "heading": "Зворотний запис",
1316
+ "description": "Записуйте назад до пов'язаних тикетів завдання в міру просування його pull request. Кожен перемикач — це значення за замовчуванням робочого простору, і його можна перевизначити для завдання в інспекторі. Тикети GitHub закриваються нативно; тикети Jira переходять до першого статусу у своїй категорії {done}.",
1317
+ "done": "Готово",
1318
+ "commentOnOpen": {
1319
+ "label": "Коментувати, коли відкривається PR",
1320
+ "help": "Публікує коментар у пов'язаному тикеті з посиланням на новий pull request."
1321
+ },
1322
+ "resolveOnMerge": {
1323
+ "label": "Закрити як вирішене, коли PR зливається",
1324
+ "help": "Коментує, що PR злито, а потім закриває / вирішує пов'язаний тикет."
1325
+ }
1326
+ },
1327
+ "probeFailure": {
1328
+ "title": "Відстеження тикетів недоступне",
1329
+ "disabled": "Інтеграцію джерел завдань вимкнено в цьому розгортанні (її ключ шифрування не налаштовано). Встановіть ENCRYPTION_KEY на бекенді, щоб увімкнути відстеження тикетів.",
1330
+ "serverError": "Служба відстеження тикетів повернула помилку (HTTP {status}): {message}. Зазвичай це означає, що бекенд не повністю мігровано/налаштовано.",
1331
+ "loadFailedStatus": "Не вдалося завантажити налаштування трекера тикетів (HTTP {status}): {message}",
1332
+ "loadFailed": "Не вдалося завантажити налаштування трекера тикетів: {message}"
1333
+ },
1334
+ "toast": {
1335
+ "saved": "Трекер тикетів збережено",
1336
+ "saveFailed": "Не вдалося зберегти налаштування",
1337
+ "updateFailed": "Не вдалося оновити",
1338
+ "checkFailed": "Перевірка не вдалася"
1339
+ }
1340
+ },
1341
+ "userSecrets": {
1342
+ "title": "Мій токен GitHub",
1343
+ "intro": "Зберігайте особистий токен доступу, що використовується для запусків, які {you} розпочинаєте — пуші, pull request-и, шлюз CI та злиття приписуються вашому доступу GitHub. Зберігається {scope}; токен доступний лише для запису й більше ніколи не показується.",
1344
+ "introYou": "ви",
1345
+ "introScope": "лише для вас",
1346
+ "connectedStored": "Під'єднано · токен збережено",
1347
+ "replaceToken": "Замінити токен",
1348
+ "addToken": "Додати токен",
1349
+ "labelField": "Мітка (необов'язково)",
1350
+ "optionalField": "{label} (необов'язково)",
1351
+ "testConnection": "Перевірити з'єднання",
1352
+ "tokenValid": "Токен дійсний",
1353
+ "tokenRejected": "Токен відхилено",
1354
+ "secretFallback": "Секрет",
1355
+ "toast": {
1356
+ "saved": "{label} збережено",
1357
+ "saveFailed": "Не вдалося зберегти секрет",
1358
+ "removed": "Секрет видалено",
1359
+ "removeFailed": "Не вдалося видалити секрет"
1360
+ }
1361
+ },
1362
+ "mergeThresholds": {
1363
+ "intro": "Іменовані політики автоматичного злиття, які може обрати завдання. Після проходження CI агент {merger} оцінює PR за складністю, ризиком і впливом (0-100%); PR зливається автоматично лише тоді, коли кожна оцінка дорівнює або нижча за межі набору, інакше формується сповіщення про перегляд. Набір за замовчуванням керує будь-яким завданням, яке не обирає жодного.",
1364
+ "mergerAgent": "merger",
1365
+ "concern": {
1366
+ "none": "Немає (завжди зупиняти)",
1367
+ "low": "Низький",
1368
+ "medium": "Середній",
1369
+ "high": "Високий (ніколи не зупиняти)"
1370
+ },
1371
+ "presetNamePlaceholder": "Назва набору",
1372
+ "default": "За замовчуванням",
1373
+ "makeDefault": "Зробити за замовчуванням",
1374
+ "deleteDefaultBlocked": "Набір за замовчуванням не можна видалити",
1375
+ "deletePreset": "Видалити набір",
1376
+ "field": {
1377
+ "maxComplexity": "Макс. складність %",
1378
+ "maxRisk": "Макс. ризик %",
1379
+ "maxImpact": "Макс. вплив %",
1380
+ "ciMaxAttempts": "Спроби виправлення CI",
1381
+ "maxRequirementIterations": "Ітерації вимог",
1382
+ "maxRequirementConcernAllowed": "Авто-пропуск зауважень до"
1383
+ },
1384
+ "newPreset": "Новий набір",
1385
+ "create": {
1386
+ "name": "Назва",
1387
+ "namePlaceholder": "напр. Обережний",
1388
+ "complexity": "Складн.%",
1389
+ "risk": "Ризик%",
1390
+ "impact": "Вплив%",
1391
+ "ciFix": "Випр. CI",
1392
+ "reqIter": "Ітер. вим.",
1393
+ "autoPass": "Авто-пропуск до"
1394
+ },
1395
+ "add": "Додати",
1396
+ "toast": {
1397
+ "saved": "Набір збережено",
1398
+ "saveFailed": "Не вдалося зберегти набір",
1399
+ "created": "Набір створено",
1400
+ "createFailed": "Не вдалося створити набір",
1401
+ "defaultFailed": "Не вдалося встановити за замовчуванням",
1402
+ "deleteFailed": "Не вдалося видалити набір"
1403
+ }
1404
+ },
1405
+ "observabilityConnection": {
1406
+ "title": "Стан після випуску",
1407
+ "intro": "Після випуску шлюз {gate} спостерігає за налаштованими моніторами/SLO спостережуваності. У разі регресії він запускає чергового агента для розслідування (людина вирішує, чи відкочувати). Призначте, за якими моніторами/SLO спостерігає сервіс, в інспекторі цього сервісу.",
1408
+ "connection": {
1409
+ "heading": "З'єднання",
1410
+ "provider": "Постачальник"
1411
+ },
1412
+ "datadog": {
1413
+ "site": "Сайт Datadog",
1414
+ "apiKey": "Ключ API",
1415
+ "appKey": "Ключ застосунку"
1416
+ },
1417
+ "saveConnection": "Зберегти з'єднання",
1418
+ "disconnect": "Від'єднати",
1419
+ "incident": {
1420
+ "heading": "Збагачення інцидентів",
1421
+ "configured": "Налаштовано",
1422
+ "notSet": "Не встановлено",
1423
+ "description": "Необов'язково. У разі регресії результат розслідування чергового публікується в інциденті, який ці системи ВЖЕ відкрили за тими самими сигналами (анотувати, ніколи не сповіщати повторно). Секрети доступні лише для запису: порожнє поле залишає збережене значення без змін.",
1424
+ "pagerDutyToken": "Токен API PagerDuty",
1425
+ "pagerDutyFromEmail": "Електронна пошта відправника PagerDuty",
1426
+ "incidentIoKey": "Ключ API incident.io",
1427
+ "clear": "Очистити"
1428
+ },
1429
+ "status": {
1430
+ "notConnected": "Не під'єднано",
1431
+ "connected": "Під'єднано",
1432
+ "connectedWithSite": "Під'єднано ({site})"
1433
+ },
1434
+ "toast": {
1435
+ "loadFailed": "Не вдалося завантажити налаштування спостережуваності",
1436
+ "incidentCredsRequired": "Введіть облікові дані PagerDuty або incident.io",
1437
+ "incidentSaved": "Збагачення інцидентів збережено",
1438
+ "incidentSaveFailed": "Не вдалося зберегти збагачення інцидентів",
1439
+ "incidentDisconnectFailed": "Не вдалося від'єднати збагачення інцидентів",
1440
+ "connected": "Спостережуваність під'єднано",
1441
+ "connectFailed": "Не вдалося зберегти з'єднання",
1442
+ "disconnectFailed": "Не вдалося від'єднати"
1443
+ }
1444
+ },
1445
+ "localMode": {
1446
+ "title": "Локальний режим",
1447
+ "intro": "Налаштування локального запускача контейнерів, збережене на розгортанні цієї машини (воно замінило змінні середовища {poolVars} / {harnessVars}). Збереження змінює розмір теплого пулу наживо, без потреби в перезапуску; поточні запуски зберігають контейнер, який вони вже утримують.",
1448
+ "pool": {
1449
+ "heading": "Теплий пул контейнерів",
1450
+ "description": "Тримайте бездіяльні контейнери оснащення готовими та повторно призначайте один (віддаючи перевагу контейнеру, який уже містить репозиторій запуску) замість холодного старту на кожен запуск. Розмір пулу 0 вимикає його. Потребує середовища родини Docker (Docker/Podman/OrbStack/Colima); ігнорується на Apple {appleContainer}.",
1451
+ "size": {
1452
+ "label": "Розмір пулу",
1453
+ "help": "Макс. бездіяльних теплих контейнерів. 0 = пулінг вимкнено."
1454
+ },
1455
+ "minWarm": {
1456
+ "label": "Попередній розігрів під час запуску",
1457
+ "help": "Контейнери, що запускаються під час старту сервісу."
1458
+ },
1459
+ "max": {
1460
+ "label": "Макс. контейнерів",
1461
+ "help": "Жорстке обмеження (призначені + бездіяльні). Порожнє = розмір пулу.",
1462
+ "placeholder": "(розмір пулу)"
1463
+ },
1464
+ "idleTimeout": {
1465
+ "label": "Час бездіяльності (хвилини)",
1466
+ "help": "Вилучити бездіяльний контейнер з пулу після."
1467
+ }
1468
+ },
1469
+ "checkout": {
1470
+ "heading": "Повторне використання робочої копії",
1471
+ "description": "Коли теплий контейнер уже містить репозиторій запуску, оснащення повторно використовує його робочу копію для репозиторію (очищення + отримання + перемикання гілки) замість клонування з нуля.",
1472
+ "workspaceRoot": {
1473
+ "label": "Корінь робочого простору",
1474
+ "help": "Абсолютний каталог у контейнері, де розташована повторно використовувана робоча копія."
1475
+ },
1476
+ "cleanKeep": {
1477
+ "label": "Зберегти під час очищення (через кому)",
1478
+ "help": "Каталоги кешу залежностей, які зберігає очищення на кожен запуск."
1479
+ }
1480
+ },
1481
+ "toast": {
1482
+ "saved": "Локальні налаштування збережено",
1483
+ "saveFailed": "Не вдалося зберегти локальні налаштування"
1484
+ }
1485
+ },
1486
+ "openRouterCatalog": {
1487
+ "intro": "Отримайте доступ до {models} через єдиний шлюз. Додайте свій ключ OpenRouter нижче, а потім увімкніть потрібні моделі. Вони з'являються в селекторі моделей разом із вікном контексту та ціною й враховуються у вашому бюджеті витрат.",
1488
+ "introModels": "понад 300 моделей",
1489
+ "connectHeading": "Підключіть свій ключ OpenRouter",
1490
+ "step1": "Відкрийте {link} і створіть ключ API.",
1491
+ "step1Link": "openrouter.ai → Ключі ↗",
1492
+ "step2": "Скопіюйте ключ (починається з {prefix}) і вставте його нижче.",
1493
+ "scope": "Область",
1494
+ "scopeWorkspace": "Цей робочий простір",
1495
+ "scopeUser": "Мої ключі (лише я)",
1496
+ "labelOptional": "Мітка (необов'язково)",
1497
+ "labelPlaceholder": "напр. ключ команди",
1498
+ "apiKey": "Ключ API",
1499
+ "connectAndBrowse": "Підключити й переглянути",
1500
+ "keyConnected": "Ключ OpenRouter підключено",
1501
+ "manageKeys": "Керувати в Постачальники та ключі",
1502
+ "refresh": "Оновити каталог",
1503
+ "enableRecommended": "Увімкнути рекомендовані",
1504
+ "filterPlaceholder": "Фільтрувати за назвою або слагом…",
1505
+ "empty": "Поки що немає моделей. Натисніть {action}, щоб завантажити актуальний список з OpenRouter.",
1506
+ "enabledCount": "увімкнено {count} модель | увімкнено {count} моделі | увімкнено {count} моделей",
1507
+ "context": "{value} ctx",
1508
+ "contextThousands": "{value}K ctx",
1509
+ "price": "{input}/{output} за Mtok",
1510
+ "toast": {
1511
+ "connected": "Ключ OpenRouter підключено",
1512
+ "connectFailed": "Не вдалося підключити ключ",
1513
+ "rejected": "OpenRouter відхилив ключ.",
1514
+ "unreachable": "Не вдалося зв'язатися з OpenRouter",
1515
+ "connectFirst": "Спершу підключіть ключ OpenRouter.",
1516
+ "saved": "Каталог OpenRouter збережено",
1517
+ "saveFailed": "Не вдалося зберегти каталог"
1518
+ }
1519
+ },
1520
+ "workspaceSettings": {
1521
+ "title": "Налаштування робочого простору",
1522
+ "tabs": {
1523
+ "workspace": "Робочий простір",
1524
+ "budget": "Бюджет",
1525
+ "merge": "Пороги злиття",
1526
+ "tracker": "Трекер задач",
1527
+ "fragments": "Найкращі практики сервісу"
1528
+ },
1529
+ "waiting": {
1530
+ "heading": "Очікування на людину",
1531
+ "body": "Запуск, призупинений на рішенні людини (перегляд, схвалення, злиття), чекає стільки, скільки потрібно, і ніколи не скасовується. Після цієї кількості хвилин його сповіщення стає червоним і позначається як {overdue} у вхідних.",
1532
+ "overdue": "Прострочено",
1533
+ "escalateAfter": "Ескалувати через (хвилини)"
1534
+ },
1535
+ "taskLimit": {
1536
+ "heading": "Запущені задачі на сервіс",
1537
+ "body": "Обмежте, скільки задач можуть виконуватися одночасно в межах одного сервісу. Запуск задачі понад ліміт відхиляється з чітким повідомленням, доки запущена задача не завершиться.",
1538
+ "mode": "Режим",
1539
+ "maxRunning": "Максимум запущених задач",
1540
+ "maxPerType": "Максимум задач типу {type}",
1541
+ "modes": {
1542
+ "off": "Без обмеження",
1543
+ "shared": "Спільний для всіх типів",
1544
+ "per_type": "На тип задачі"
1545
+ }
1546
+ },
1547
+ "taskTypes": {
1548
+ "feature": "функція",
1549
+ "bug": "помилка",
1550
+ "document": "документ",
1551
+ "spike": "spike"
1552
+ },
1553
+ "observability": {
1554
+ "heading": "Спостережуваність агента",
1555
+ "body": "Зберігайте повний контекст, наданий кожному агенту: складені промпти, вбудовані фрагменти найкращих практик і повний вміст файлів, впроваджених у його контейнер, щоб згодом їх можна було переглянути у вікні спостережуваності. Тіла зберігаються протягом того самого вікна, що й телеметрія LLM для кожного виклику. Вимкніть, щоб припинити зберігання (наявні знімки видаляються за політикою зберігання).",
1556
+ "toggle": "Зберігати повний контекст агента"
1557
+ },
1558
+ "retention": {
1559
+ "heading": "Зберігання знімків екрана",
1560
+ "body": "Як довго зберігати знімки екрана від тестувальника UI та еталонні дизайнерські зображення, з якими їх порівнюють (візуальна перевірка). Щоденне завдання очищення видаляє як байти зображень, так і їхні метадані, щойно вони виходять за межі цього вікна.",
1561
+ "days": "Зберігання (днів)"
1562
+ },
1563
+ "kaizen": {
1564
+ "heading": "Агент Kaizen",
1565
+ "body": "Після завершення кожного запуску агент Kaizen оцінює, як пройшов кожен крок агента, від плавного й ефективного до заплутаного й хаотичного, і рекомендує покращення промпту/моделі. Комбінація промпт + агент + модель, яка п'ять разів поспіль отримує високу оцінку без рекомендацій, позначається як перевірена й більше не оцінюється. Оцінювання виконується у фоновому режимі й показується в деталях запуску та на екрані Kaizen. Налаштуйте модель оцінювача в Конфігурації моделей (агент \"Kaizen\").",
1566
+ "toggle": "Оцінювати запуски агентів за допомогою Kaizen"
1567
+ },
1568
+ "budget": {
1569
+ "heading": "Місячний бюджет витрат",
1570
+ "body": "Використання токенів вимірюється за кожен виклик LLM, оцінюється та обмежується цим бюджетом. Після його досягнення запуски в цьому робочому просторі призупиняються, а на дошці з'являється попередження. Залиште порожнім, щоб успадкувати вбудоване значення за замовчуванням (близько 100 EUR/місяць).",
1571
+ "monthlyLimit": "Місячний ліміт",
1572
+ "defaultPlaceholder": "За замовчуванням",
1573
+ "currency": "Валюта (ISO 4217)",
1574
+ "save": "Зберегти бюджет"
1575
+ },
1576
+ "toast": {
1577
+ "saved": "Налаштування збережено",
1578
+ "saveFailed": "Не вдалося зберегти налаштування",
1579
+ "budgetSaved": "Бюджет збережено",
1580
+ "budgetSaveFailed": "Не вдалося зберегти бюджет"
1581
+ }
1582
+ },
1583
+ "localModelEndpoints": {
1584
+ "title": "Мої локальні раннери",
1585
+ "intro": "Спрямуйте агентів на LLM, що працює на {ownMachine} (Ollama, LM Studio, llama.cpp, vLLM або будь-який сервер, сумісний з OpenAI). Раннер зберігається {justForYou} (раннер працює на вашому комп'ютері), а ввімкнені моделі автоматично з'являються в селекторі моделей. Ключ API (більшість раннерів його ігнорують) доступний лише для запису й більше ніколи не показується.",
1586
+ "introOwnMachine": "вашому власному комп'ютері",
1587
+ "introJustForYou": "лише для вас",
1588
+ "modelCount": "{count} модель | {count} моделі | {count} моделей",
1589
+ "keySet": "ключ встановлено",
1590
+ "edit": "Редагувати",
1591
+ "editRunner": "Редагувати раннер",
1592
+ "addRunner": "Додати раннер",
1593
+ "runnerType": "Тип раннера",
1594
+ "labelOptional": "Мітка (необов'язково)",
1595
+ "labelPlaceholder": "Мій {name}",
1596
+ "baseUrl": "Базова URL-адреса",
1597
+ "apiKeyOptional": "Ключ API (необов'язково)",
1598
+ "apiKeyKeepPlaceholder": "залиште порожнім, щоб зберегти збережений ключ",
1599
+ "apiKeyIgnorePlaceholder": "більшість раннерів його ігнорують",
1600
+ "testConnection": "Перевірити з'єднання",
1601
+ "unreachable": "Не вдалося зв'язатися з раннером.",
1602
+ "reachable": "Доступний · {count} модель | Доступний · {count} моделі | Доступний · {count} моделей",
1603
+ "noModels": "Жодної моделі не повідомлено.",
1604
+ "enableModels": "Увімкнути моделі",
1605
+ "toast": {
1606
+ "saved": "{name} збережено",
1607
+ "saveFailed": "Не вдалося зберегти раннер",
1608
+ "removed": "Раннер видалено",
1609
+ "removeFailed": "Не вдалося видалити раннер"
1610
+ }
1611
+ }
713
1612
  }
714
1613
  }