@cat-factory/app 0.174.0 → 0.178.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 (34) hide show
  1. package/README.md +52 -13
  2. package/app/components/board/nodes/BlockNode.vue +30 -0
  3. package/app/components/environments/steps/EnvPickStep.vue +3 -0
  4. package/app/components/layout/IntegrationBackTitle.vue +11 -8
  5. package/app/components/layout/IntegrationsHub.vue +35 -56
  6. package/app/components/layout/ModelProvidersHub.vue +250 -0
  7. package/app/components/panels/InspectorPanel.vue +3 -28
  8. package/app/components/panels/inspector/ContainerSummary.vue +54 -62
  9. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +11 -0
  10. package/app/components/panels/inspector/ServiceValidationConfig.vue +99 -1
  11. package/app/components/settings/ComposeEnvironmentSetupSection.vue +102 -0
  12. package/app/components/settings/InfrastructureWindow.vue +11 -1
  13. package/app/composables/api/validationChecks.ts +8 -0
  14. package/app/composables/useIntegrationBack.ts +5 -2
  15. package/app/composables/useNavContributions.ts +1 -1
  16. package/app/modular/nav-contributions.spec.ts +64 -21
  17. package/app/modular/nav-contributions.ts +59 -26
  18. package/app/pages/index.vue +4 -0
  19. package/app/stores/ui/modals.ts +32 -6
  20. package/app/stores/validationChecks.ts +17 -2
  21. package/app/types/validationChecks.ts +3 -0
  22. package/app/utils/validationDetection.spec.ts +51 -0
  23. package/app/utils/validationDetection.ts +67 -0
  24. package/i18n/locales/de.json +110 -33
  25. package/i18n/locales/en.json +110 -33
  26. package/i18n/locales/es.json +110 -33
  27. package/i18n/locales/fr.json +110 -33
  28. package/i18n/locales/he.json +110 -33
  29. package/i18n/locales/it.json +110 -33
  30. package/i18n/locales/ja.json +110 -33
  31. package/i18n/locales/pl.json +110 -33
  32. package/i18n/locales/tr.json +110 -33
  33. package/i18n/locales/uk.json +110 -33
  34. package/package.json +2 -2
@@ -111,6 +111,8 @@
111
111
  "repositories": "リポジトリ",
112
112
  "addFromRepo": "既存のリポジトリから追加",
113
113
  "bootstrapRepo": "リポジトリをブートストラップ",
114
+ "models": "モデル",
115
+ "modelProviders": "モデルプロバイダー",
114
116
  "integrations": "連携",
115
117
  "infrastructure": "インフラストラクチャ",
116
118
  "sandbox": "サンドボックス",
@@ -122,8 +124,7 @@
122
124
  "modelConfiguration": "モデル設定",
123
125
  "accountSettings": "アカウント設定",
124
126
  "operatorDashboard": "プラットフォームの可観測性",
125
- "reports": "レポート",
126
- "environmentSetup": "環境セットアップ"
127
+ "reports": "レポート"
127
128
  },
128
129
  "board": {
129
130
  "toast": {
@@ -394,6 +395,7 @@
394
395
  "dragToResize": "ドラッグしてサイズ変更",
395
396
  "addFirstTask": "最初のタスクを追加",
396
397
  "createInitiativeTitle": "イニシアチブを作成",
398
+ "huntBugsTitle": "バグをハント",
397
399
  "accessDenied": {
398
400
  "title": "アクセスが拒否されました",
399
401
  "hint": "このサービスの基盤となるリポジトリにアクセスする権限がありません。"
@@ -631,12 +633,12 @@
631
633
  "inspector": {
632
634
  "detectRepoUnresolved": "このブロックのリポジトリは接続済みの GitHub リポジトリに含まれていないため、読み取れません。GitHub を接続または同期してから、もう一度お試しください。",
633
635
  "container": {
634
- "title": "内容",
635
- "hint": "このブロック内のモジュールとタスク。エントリをクリックするとボード上で選択されます。",
636
- "modules": "モジュール ({count})",
636
+ "modulesTitle": "モジュール",
637
+ "modulesHint": "このサービス内のモジュール。クリックするとボード上で選択されます。",
637
638
  "taskCount": "{count} 件のタスク | {count} 件のタスク",
638
- "allTasks": "すべてのタスク ({count})",
639
- "tasks": "タスク ({count})",
639
+ "tasksTitle": "タスク",
640
+ "allTasksTitle": "すべてのタスク",
641
+ "tasksHint": "このブロック内のタスク。クリックするとボード上で選択されます。",
640
642
  "addTask": "タスクを追加",
641
643
  "noTasks": "タスクはまだありません。追加して作業を始めましょう。",
642
644
  "servicesHint": "サービスは長期間存続し、完了しません。作業はそのタスクとモジュールで行われます。"
@@ -1102,7 +1104,34 @@
1102
1104
  "save": "検査を保存",
1103
1105
  "savedToast": "検査を保存しました",
1104
1106
  "saveFailed": "検査を保存できませんでした",
1105
- "clearFailed": "検査を消去できませんでした"
1107
+ "clearFailed": "検査を消去できませんでした",
1108
+ "detect": {
1109
+ "action": "自動検出",
1110
+ "hint": "このサービスのリポジトリからチェックを提案します",
1111
+ "added": "{count} 件のチェックを追加しました | {count} 件のチェックを追加しました",
1112
+ "found": "{ecosystems} を検出しました。",
1113
+ "capped": "一部の候補は省略されました。1 つのサービスに設定できるチェックは最大 {max} 件です。",
1114
+ "nothingNew": "追加する項目はありません",
1115
+ "alreadyPresent": "検出されたコマンドはすべて既に一覧にあります。",
1116
+ "unrecognised": "リポジトリのルートで既知のエコシステムを認識できませんでした。コマンドを手動で追加してください。",
1117
+ "repo_unavailable": "このサービスにはリポジトリが紐付いていないため、調べる対象がありません。",
1118
+ "failed": "リポジトリを読み取れませんでした"
1119
+ },
1120
+ "ecosystem": {
1121
+ "node": "Node.js",
1122
+ "python": "Python",
1123
+ "go": "Go",
1124
+ "rust": "Rust",
1125
+ "maven": "Maven",
1126
+ "gradle": "Gradle",
1127
+ "dotnet": ".NET",
1128
+ "ruby": "Ruby",
1129
+ "php": "PHP",
1130
+ "elixir": "Elixir",
1131
+ "make": "Make",
1132
+ "just": "just",
1133
+ "task": "Task"
1134
+ }
1106
1135
  }
1107
1136
  },
1108
1137
  "panels": {
@@ -1318,8 +1347,6 @@
1318
1347
  "lastIncorporatedRequirements": "最後に取り込まれた要件",
1319
1348
  "priorDocHint": "前回のレビューより。これをベースに、上の説明を編集して再送信してください。",
1320
1349
  "bootstrapping": "ブートストラップ中…",
1321
- "importIssue": "Issue をインポート",
1322
- "connectTracker": "トラッカーを接続",
1323
1350
  "spawnFromDocument": "ドキュメントから生成",
1324
1351
  "viewRequirements": "要件を表示",
1325
1352
  "reRun": "再実行",
@@ -1353,8 +1380,7 @@
1353
1380
  "title": "このサービスをアーカイブしますか?",
1354
1381
  "body": "「{name}」とそのタスクはボードから非表示になります。いつでも復元できます。"
1355
1382
  },
1356
- "runBlocked": "未完了の依存関係によってブロックされています: {names} | {count} 件の未完了の依存関係によってブロックされています: {names}",
1357
- "huntBugs": "バグをハント"
1383
+ "runBlocked": "未完了の依存関係によってブロックされています: {names} | {count} 件の未完了の依存関係によってブロックされています: {names}"
1358
1384
  }
1359
1385
  },
1360
1386
  "observability": {
@@ -1936,7 +1962,8 @@
1936
1962
  },
1937
1963
  "integrationBack": {
1938
1964
  "backToMySetup": "マイセットアップに戻る",
1939
- "backToIntegrations": "Integrations に戻る"
1965
+ "backToIntegrations": "Integrations に戻る",
1966
+ "backToModelProviders": "モデルプロバイダーに戻る"
1940
1967
  },
1941
1968
  "commandBar": {
1942
1969
  "searchPlaceholder": "検索またはコマンドを実行…",
@@ -1997,23 +2024,21 @@
1997
2024
  },
1998
2025
  "integrationsHub": {
1999
2026
  "title": "Integrations",
2000
- "intro": "このワークスペースが連携できる外部システムを接続・管理します。",
2027
+ "intro": "このワークスペースが連携できる任意の外部システムを接続・管理します。エージェントを動かすモデルはモデルプロバイダーにあります。",
2001
2028
  "searchPlaceholder": "Integrations を検索…",
2002
2029
  "noMatches": "\"{query}\" に一致する Integration はありません。",
2003
2030
  "getStarted": {
2004
2031
  "title": "はじめに",
2005
- "body": "コードソースとモデルプロバイダーを接続して、最初のパイプラインを実行しましょう。"
2032
+ "body": "コードソースを接続すると、パイプラインが作業対象を持てるようになります。"
2006
2033
  },
2007
2034
  "status": {
2008
2035
  "connected": "接続済み",
2009
- "keyConnected": "キー接続済み",
2010
2036
  "notConnected": "未接続",
2011
2037
  "needsAttention": "対応が必要",
2012
2038
  "disabled": "無効",
2013
2039
  "recommended": "おすすめ"
2014
2040
  },
2015
2041
  "groups": {
2016
- "models": "モデルとプロバイダー",
2017
2042
  "sourceControl": "ソース管理",
2018
2043
  "communication": "コミュニケーション",
2019
2044
  "documents": "ドキュメント",
@@ -2023,16 +2048,6 @@
2023
2048
  "personal": "個人(あなたのみ)"
2024
2049
  },
2025
2050
  "items": {
2026
- "openrouter": {
2027
- "description": "300以上のモデルへの単一ゲートウェイ。キーを追加すれば、1か所でモデルを有効化できます。"
2028
- },
2029
- "vendors": {
2030
- "label": "ベンダーとキー",
2031
- "description": "ワークスペースの LLM サブスクリプションとプロバイダー API キー。"
2032
- },
2033
- "personalSubs": {
2034
- "label": "個人サブスクリプション (Claude、ChatGPT/Codex、GLM)"
2035
- },
2036
2051
  "github": {
2037
2052
  "description": "ワークスペースの GitHub App を接続し、リポジトリ、PR、Issue を閲覧します。"
2038
2053
  },
@@ -2072,10 +2087,6 @@
2072
2087
  "label": "マイ GitHub トークン",
2073
2088
  "description": "自分が開始した実行 (push、PR、CI、マージ) に使用するパーソナルアクセストークン。"
2074
2089
  },
2075
- "localRunners": {
2076
- "label": "マイローカルランナー",
2077
- "description": "自分のマシンで動かすモデルランナー (Ollama、LM Studio、vLLM…)。"
2078
- },
2079
2090
  "documentTemplates": {
2080
2091
  "label": "テンプレートと例"
2081
2092
  },
@@ -2085,6 +2096,45 @@
2085
2096
  }
2086
2097
  }
2087
2098
  },
2099
+ "modelProvidersHub": {
2100
+ "title": "モデルプロバイダー",
2101
+ "intro": "エージェントを動かすエンジンです。パイプラインのステップを実行するには、少なくとも1つのプロバイダーが接続されている必要があります。",
2102
+ "searchPlaceholder": "プロバイダーを検索…",
2103
+ "noMatches": "「{query}」に一致するプロバイダーはありません。",
2104
+ "getStarted": {
2105
+ "title": "プロバイダーが未接続です",
2106
+ "body": "モデルに到達できるまでエージェントのステップは実行できません。OpenRouter のキーが幅広いカタログを最も早く使える方法ですが、ベンダーキー、個人プラン、自分のローカルランナーでも同様に動作します。"
2107
+ },
2108
+ "status": {
2109
+ "connected": "接続済み",
2110
+ "keyConnected": "キー接続済み",
2111
+ "notConnected": "未接続",
2112
+ "recommended": "おすすめ",
2113
+ "connectedCount": "接続なし | {count}件接続済み | {count}件接続済み"
2114
+ },
2115
+ "groups": {
2116
+ "workspace": "ワークスペースのプロバイダー",
2117
+ "personal": "個人(あなたのみ)",
2118
+ "personalNote": "これらはワークスペースではなくあなたのアカウントに属し、あなたが開始した実行にのみ使われます。マイセットアップにも表示されます。"
2119
+ },
2120
+ "items": {
2121
+ "openrouter": {
2122
+ "description": "300以上のモデルへの単一ゲートウェイ。キーを追加すれば、1か所でモデルを有効化できます。"
2123
+ },
2124
+ "vendors": {
2125
+ "label": "ベンダーとキー",
2126
+ "description": "ワークスペースの LLM サブスクリプションとプロバイダー API キー。"
2127
+ },
2128
+ "personalSubs": {
2129
+ "label": "マイサブスクリプション",
2130
+ "description": "個人パスワードでアンロックする個人利用プラン(Claude、GLM、Codex)。"
2131
+ },
2132
+ "localRunners": {
2133
+ "label": "マイローカルランナー",
2134
+ "description": "自分のマシンで動かすモデルランナー(Ollama、LM Studio、vLLM)。"
2135
+ }
2136
+ }
2137
+ },
2088
2138
  "shortcuts": {
2089
2139
  "title": "キーボードショートカット",
2090
2140
  "commandBar": "コマンドバーを開く",
@@ -2794,6 +2844,32 @@
2794
2844
  "removeFailed": "共有スタックを削除できませんでした"
2795
2845
  }
2796
2846
  },
2847
+ "composeEnvSetup": {
2848
+ "title": "サービス向け Docker Compose ガイド付きセットアップ",
2849
+ "lead": "compose のパスやセットアップ手順を手書きする代わりに、1つのサービスのテスト環境を立ち上げるための Docker Compose レシピ作成をガイドします。",
2850
+ "how": {
2851
+ "title": "仕組み",
2852
+ "scan": "サービスにリンクされたリポジトリを調べ、compose ファイル、プロファイル、env ファイル、シードダンプを探します。",
2853
+ "analyse": "任意で環境アナリストエージェントを実行し、リポジトリ自身のスクリプトからセットアップ手順とヘルスゲートを草案します。",
2854
+ "preflight": "レシピのプリフライトチェックを、実際にプロビジョニングするマシン上で実行します。",
2855
+ "save": "レシピをサービスに保存し、ワークスペースの Docker Compose ハンドラーを登録します。",
2856
+ "outcome": "以降、パイプラインが実際の環境を必要とするたびに Deployer がそのスタックをそのまま立ち上げ、Tester がそれに対して実行されます。保存するまで何も適用されません。"
2857
+ },
2858
+ "needed": {
2859
+ "title": "必要なケース",
2860
+ "running": "サービスのテストにアプリの実行が必要な場合(API や UI のテスト、マイグレーション、シードデータ)。",
2861
+ "compose": "サービスが Docker Compose でプロビジョニングされ、まだレシピが保存されていない場合。",
2862
+ "setup": "スタックの起動に複数のコマンドが必要な場合(プロファイル、env ファイル、シードデータ、準備完了チェック)。"
2863
+ },
2864
+ "notNeeded": {
2865
+ "title": "不要なケース",
2866
+ "inContainer": "パイプラインが lint、ビルド、ユニットテストのみを行う場合。これらは PR 前の検証チェックとしてエージェントコンテナ内で実行され、環境はプロビジョニングされません。",
2867
+ "otherBackend": "サービスが別の方法でプロビジョニングされる場合(Kubernetes、クラウドプレビュー、インフラなし)。代わりに上部で設定してください。",
2868
+ "noRepo": "サービスにリンクされたリポジトリがなく、調べる対象がない場合。"
2869
+ },
2870
+ "start": "ガイド付きセットアップを開始",
2871
+ "rerunHint": "保存済みのレシピを変更するには、いつでも再実行できます。"
2872
+ },
2797
2873
  "localMode": {
2798
2874
  "title": "ローカルモード",
2799
2875
  "intro": "ローカルコンテナランナーの調整設定で、このマシンのデプロイに保存されます ({poolVars} / {harnessVars} 環境変数を置き換えました)。保存するとウォームプールがライブでサイズ変更され、再起動は不要です。実行中のランは、すでに保持しているコンテナをそのまま使います。",
@@ -5269,8 +5345,8 @@
5269
5345
  },
5270
5346
  "environmentWizard": {
5271
5347
  "progress": "ステップ {index} / {total}",
5272
- "title": "テスト環境をセットアップ",
5273
- "subtitle": "Docker Compose レシピを検出・確認・保存して、Deployer がプロビジョニングできるようにします。",
5348
+ "title": "Docker Compose 環境セットアップ",
5349
+ "subtitle": "サービスのテスト環境を立ち上げる Docker Compose レシピを作成します。リポジトリの調査、確認、プリフライト、保存の順に進みます。",
5274
5350
  "recommended": "推奨",
5275
5351
  "steps": {
5276
5352
  "pick": "サービス選択",
@@ -5280,6 +5356,7 @@
5280
5356
  },
5281
5357
  "pick": {
5282
5358
  "intro": "Docker Compose 環境をセットアップするサービスを選択します。",
5359
+ "scope": "変更されるのは選んだサービスだけです。後で再実行すればレシピを編集できます。",
5283
5360
  "empty": "サービスがまだありません。まずサービスを追加してください。"
5284
5361
  },
5285
5362
  "review": {
@@ -111,6 +111,8 @@
111
111
  "repositories": "Repozytoria",
112
112
  "addFromRepo": "Dodaj z istniejącego repozytorium",
113
113
  "bootstrapRepo": "Zainicjuj repozytorium",
114
+ "models": "Modele",
115
+ "modelProviders": "Dostawcy modeli",
114
116
  "integrations": "Integracje",
115
117
  "sandbox": "Piaskownica",
116
118
  "kaizen": "Kaizen",
@@ -122,8 +124,7 @@
122
124
  "accountSettings": "Ustawienia konta",
123
125
  "operatorDashboard": "Obserwowalność platformy",
124
126
  "reports": "Raporty",
125
- "infrastructure": "Infrastruktura",
126
- "environmentSetup": "Konfiguracja środowiska"
127
+ "infrastructure": "Infrastruktura"
127
128
  },
128
129
  "board": {
129
130
  "toast": {
@@ -394,6 +395,7 @@
394
395
  "dragToResize": "Przeciągnij, aby zmienić rozmiar",
395
396
  "addFirstTask": "Dodaj pierwsze zadanie",
396
397
  "createInitiativeTitle": "Utworz inicjatywe",
398
+ "huntBugsTitle": "Poluj na błędy",
397
399
  "accessDenied": {
398
400
  "title": "Brak uprawnień",
399
401
  "hint": "Nie masz dostępu do repozytorium powiązanego z tą usługą."
@@ -631,12 +633,12 @@
631
633
  "inspector": {
632
634
  "detectRepoUnresolved": "Repozytorium tego bloku nie znajduje się wśród połączonych repozytoriów GitHub, więc nie można go odczytać. Połącz lub zsynchronizuj GitHub dla tego repozytorium, a następnie spróbuj ponownie.",
633
635
  "container": {
634
- "title": "Zawartość",
635
- "hint": "Moduły i zadania wewnątrz tego bloku. Kliknij pozycję, aby zaznaczyć na tablicy.",
636
- "modules": "Moduły ({count})",
636
+ "modulesTitle": "Moduły",
637
+ "modulesHint": "Moduły wewnątrz tej usługi. Kliknij moduł, aby zaznaczyć go na tablicy.",
637
638
  "taskCount": "{count} zadanie | {count} zadania | {count} zadań",
638
- "allTasks": "Wszystkie zadania ({count})",
639
- "tasks": "Zadania ({count})",
639
+ "tasksTitle": "Zadania",
640
+ "allTasksTitle": "Wszystkie zadania",
641
+ "tasksHint": "Zadania wewnątrz tego bloku. Kliknij zadanie, aby zaznaczyć je na tablicy.",
640
642
  "addTask": "Dodaj zadanie",
641
643
  "noTasks": "Brak zadań. Dodaj jedno, aby rozpocząć pracę.",
642
644
  "servicesHint": "Usługi są długowieczne i nie kończą się. Praca odbywa się w ich zadaniach i modułach."
@@ -1102,7 +1104,34 @@
1102
1104
  "save": "Zapisz sprawdzenia",
1103
1105
  "savedToast": "Sprawdzenia zapisane",
1104
1106
  "saveFailed": "Nie udało się zapisać sprawdzeń",
1105
- "clearFailed": "Nie udało się wyczyścić sprawdzeń"
1107
+ "clearFailed": "Nie udało się wyczyścić sprawdzeń",
1108
+ "detect": {
1109
+ "action": "Wykryj",
1110
+ "hint": "Zaproponuj testy na podstawie repozytorium tej usługi",
1111
+ "added": "Dodano {count} test | Dodano {count} testy | Dodano {count} testów",
1112
+ "found": "Rozpoznano: {ecosystems}.",
1113
+ "capped": "Część propozycji pominięto — usługa przyjmuje najwyżej {max} testów.",
1114
+ "nothingNew": "Nie ma czego dodać",
1115
+ "alreadyPresent": "Wszystkie wykryte polecenia są już na liście.",
1116
+ "unrecognised": "W katalogu głównym repozytorium nie rozpoznano znanego ekosystemu. Dodaj polecenia ręcznie.",
1117
+ "repo_unavailable": "Do tej usługi nie podpięto repozytorium, więc nie ma czego sprawdzać.",
1118
+ "failed": "Nie udało się odczytać repozytorium"
1119
+ },
1120
+ "ecosystem": {
1121
+ "node": "Node.js",
1122
+ "python": "Python",
1123
+ "go": "Go",
1124
+ "rust": "Rust",
1125
+ "maven": "Maven",
1126
+ "gradle": "Gradle",
1127
+ "dotnet": ".NET",
1128
+ "ruby": "Ruby",
1129
+ "php": "PHP",
1130
+ "elixir": "Elixir",
1131
+ "make": "Make",
1132
+ "just": "just",
1133
+ "task": "Task"
1134
+ }
1106
1135
  }
1107
1136
  },
1108
1137
  "panels": {
@@ -1318,8 +1347,6 @@
1318
1347
  "lastIncorporatedRequirements": "Ostatnie włączone wymagania",
1319
1348
  "priorDocHint": "Z poprzedniej recenzji. Użyj go jako bazy: edytuj opis powyżej i prześlij ponownie.",
1320
1349
  "bootstrapping": "Inicjowanie…",
1321
- "importIssue": "Importuj zgłoszenie",
1322
- "connectTracker": "Połącz tracker",
1323
1350
  "spawnFromDocument": "Utwórz z dokumentu",
1324
1351
  "viewRequirements": "Wyświetl wymagania",
1325
1352
  "reRun": "Uruchom ponownie",
@@ -1353,8 +1380,7 @@
1353
1380
  "title": "Zarchiwizować tę usługę?",
1354
1381
  "body": "„{name}” i jej zadania zostaną ukryte z tablicy. Możesz przywrócić usługę w dowolnej chwili."
1355
1382
  },
1356
- "runBlocked": "Zablokowane przez niedokończoną zależność: {names} | Zablokowane przez {count} niedokończone zależności: {names} | Zablokowane przez {count} niedokończonych zależności: {names}",
1357
- "huntBugs": "Poluj na błędy"
1383
+ "runBlocked": "Zablokowane przez niedokończoną zależność: {names} | Zablokowane przez {count} niedokończone zależności: {names} | Zablokowane przez {count} niedokończonych zależności: {names}"
1358
1384
  }
1359
1385
  },
1360
1386
  "observability": {
@@ -1936,7 +1962,8 @@
1936
1962
  },
1937
1963
  "integrationBack": {
1938
1964
  "backToMySetup": "Powrót do Moja konfiguracja",
1939
- "backToIntegrations": "Powrót do Integracje"
1965
+ "backToIntegrations": "Powrót do Integracje",
1966
+ "backToModelProviders": "Powrót do Dostawcy modeli"
1940
1967
  },
1941
1968
  "commandBar": {
1942
1969
  "searchPlaceholder": "Wyszukaj lub uruchom polecenie…",
@@ -1997,23 +2024,21 @@
1997
2024
  },
1998
2025
  "integrationsHub": {
1999
2026
  "title": "Integracje",
2000
- "intro": "Połącz i zarządzaj zewnętrznymi systemami, które ten obszar roboczy może powiązać.",
2027
+ "intro": "Połącz opcjonalne systemy zewnętrzne, które ten obszar roboczy może powiązać, i zarządzaj nimi. Modele, na których działają Twoi agenci, znajdziesz w sekcji Dostawcy modeli.",
2001
2028
  "searchPlaceholder": "Szukaj integracji…",
2002
2029
  "noMatches": "Żadna integracja nie pasuje do \"{query}\".",
2003
2030
  "getStarted": {
2004
2031
  "title": "Wprowadzenie",
2005
- "body": "Połącz źródło kodu i dostawcę modeli, aby uruchomić swój pierwszy potok."
2032
+ "body": "Połącz źródło kodu, aby Twoje potoki miały nad czym pracować."
2006
2033
  },
2007
2034
  "status": {
2008
2035
  "connected": "Połączono",
2009
- "keyConnected": "Klucz połączony",
2010
2036
  "notConnected": "Niepołączono",
2011
2037
  "needsAttention": "Wymaga uwagi",
2012
2038
  "disabled": "Wyłączono",
2013
2039
  "recommended": "Zalecane"
2014
2040
  },
2015
2041
  "groups": {
2016
- "models": "Modele i dostawcy",
2017
2042
  "sourceControl": "Kontrola wersji",
2018
2043
  "communication": "Komunikacja",
2019
2044
  "documents": "Dokumenty",
@@ -2023,16 +2048,6 @@
2023
2048
  "personal": "Osobiste (tylko Ty)"
2024
2049
  },
2025
2050
  "items": {
2026
- "openrouter": {
2027
- "description": "Jedna brama do ponad 300 modeli. Dodaj swój klucz i włącz modele w jednym miejscu."
2028
- },
2029
- "vendors": {
2030
- "label": "Dostawcy i klucze",
2031
- "description": "Subskrypcje LLM obszaru roboczego i klucze API dostawców."
2032
- },
2033
- "personalSubs": {
2034
- "label": "Subskrypcje osobiste (Claude, ChatGPT/Codex, GLM)"
2035
- },
2036
2051
  "github": {
2037
2052
  "description": "Połącz aplikację GitHub App obszaru roboczego, przeglądaj repozytoria, PR-y i zgłoszenia."
2038
2053
  },
@@ -2072,10 +2087,6 @@
2072
2087
  "label": "Mój token GitHub",
2073
2088
  "description": "Osobisty token dostępu używany do uruchomień, które rozpoczynasz (pushe, PR-y, CI, scalanie)."
2074
2089
  },
2075
- "localRunners": {
2076
- "label": "Moje lokalne silniki",
2077
- "description": "Twoje silniki modeli na własnej maszynie (Ollama, LM Studio, vLLM…)."
2078
- },
2079
2090
  "documentTemplates": {
2080
2091
  "label": "Szablony i przykłady"
2081
2092
  },
@@ -2085,6 +2096,45 @@
2085
2096
  }
2086
2097
  }
2087
2098
  },
2099
+ "modelProvidersHub": {
2100
+ "title": "Dostawcy modeli",
2101
+ "intro": "Silniki, na których działają Twoi agenci. Zanim jakikolwiek krok potoku będzie mógł się wykonać, musi być połączony co najmniej jeden dostawca.",
2102
+ "searchPlaceholder": "Szukaj dostawców…",
2103
+ "noMatches": "Żaden dostawca nie pasuje do \"{query}\".",
2104
+ "getStarted": {
2105
+ "title": "Nie połączono jeszcze żadnego dostawcy",
2106
+ "body": "Kroki agenta nie mogą się wykonać, dopóki model nie będzie osiągalny. Klucz OpenRouter to najszybszy sposób na odblokowanie szerokiego katalogu, ale klucze dostawców, plan osobisty lub własny lokalny silnik sprawdzą się tak samo dobrze."
2107
+ },
2108
+ "status": {
2109
+ "connected": "Połączono",
2110
+ "keyConnected": "Klucz połączony",
2111
+ "notConnected": "Niepołączono",
2112
+ "recommended": "Zalecane",
2113
+ "connectedCount": "{count} połączony | {count} połączone | {count} połączonych"
2114
+ },
2115
+ "groups": {
2116
+ "workspace": "Dostawcy obszaru roboczego",
2117
+ "personal": "Osobiste (tylko Ty)",
2118
+ "personalNote": "Należą do Twojego konta, a nie do obszaru roboczego, i są używane tylko w uruchomieniach, które sam rozpoczynasz. Są też wymienione w sekcji Moja konfiguracja."
2119
+ },
2120
+ "items": {
2121
+ "openrouter": {
2122
+ "description": "Jedna brama do ponad 300 modeli. Dodaj swój klucz i włącz modele w jednym miejscu."
2123
+ },
2124
+ "vendors": {
2125
+ "label": "Dostawcy i klucze",
2126
+ "description": "Subskrypcje LLM obszaru roboczego i klucze API dostawców."
2127
+ },
2128
+ "personalSubs": {
2129
+ "label": "Moje subskrypcje",
2130
+ "description": "Plany do użytku indywidualnego, które odblokowujesz osobistym hasłem (Claude, GLM, Codex)."
2131
+ },
2132
+ "localRunners": {
2133
+ "label": "Moje lokalne silniki",
2134
+ "description": "Silniki modeli na Twojej własnej maszynie (Ollama, LM Studio, vLLM)."
2135
+ }
2136
+ }
2137
+ },
2088
2138
  "shortcuts": {
2089
2139
  "title": "Skróty klawiszowe",
2090
2140
  "commandBar": "Otwórz pasek poleceń",
@@ -2653,6 +2703,32 @@
2653
2703
  "removeFailed": "Nie udało się usunąć współdzielonego stosu"
2654
2704
  }
2655
2705
  },
2706
+ "composeEnvSetup": {
2707
+ "title": "Kreator konfiguracji Docker Compose dla usługi",
2708
+ "lead": "Prowadzi jedną usługę przez tworzenie receptury Docker Compose, z której stawiane są jej środowiska testowe, zamiast ręcznego wpisywania ścieżki compose i kroków przygotowania.",
2709
+ "how": {
2710
+ "title": "Jak to działa",
2711
+ "scan": "Skanuje powiązane repozytorium usługi w poszukiwaniu plików compose, profili, plików env i zrzutów danych początkowych.",
2712
+ "analyse": "Opcjonalnie uruchamia agenta analizującego środowisko, aby na podstawie skryptów repozytorium naszkicować kroki przygotowania i bramkę kondycji.",
2713
+ "preflight": "Uruchamia kontrole wstępne receptury na maszynie, która będzie ją stawiać.",
2714
+ "save": "Zapisuje recepturę na usłudze i rejestruje obsługę Docker Compose w obszarze roboczym.",
2715
+ "outcome": "Od tej pory Deployer stawia dokładnie ten stos, ilekroć potok potrzebuje żywego środowiska, a Tester działa przeciwko niemu. Nic nie zostaje zastosowane, dopóki nie zapiszesz."
2716
+ },
2717
+ "needed": {
2718
+ "title": "Potrzebujesz tego, gdy",
2719
+ "running": "Testy usługi wymagają faktycznie działającej aplikacji: testy API lub interfejsu, migracje, dane początkowe.",
2720
+ "compose": "Usługa jest stawiana przez Docker Compose i nie ma jeszcze zapisanej receptury.",
2721
+ "setup": "Postawienie stosu wymaga więcej niż jednego polecenia: profili, plików env, danych początkowych lub kontroli gotowości."
2722
+ },
2723
+ "notNeeded": {
2724
+ "title": "Możesz to pominąć, gdy",
2725
+ "inContainer": "Potok tylko sprawdza lintem, buduje lub uruchamia testy jednostkowe. Dzieje się to w kontenerze agenta jako kontrole przed PR, bez stawiania żadnego środowiska.",
2726
+ "otherBackend": "Usługa jest stawiana w inny sposób (Kubernetes, podgląd w chmurze albo bez infrastruktury). Skonfiguruj to powyżej.",
2727
+ "noRepo": "Usługa nie ma powiązanego repozytorium, więc nie ma czego skanować."
2728
+ },
2729
+ "start": "Rozpocznij konfigurację",
2730
+ "rerunHint": "Uruchom ponownie w dowolnym momencie, aby zmienić zapisaną recepturę."
2731
+ },
2656
2732
  "localMode": {
2657
2733
  "title": "Tryb lokalny",
2658
2734
  "intro": "Strojenie lokalnego uruchamiacza kontenerów, przechowywane we wdrożeniu tej maszyny (zastąpiło zmienne środowiskowe {poolVars} / {harnessVars}). Zapisanie zmienia rozmiar ciepłej puli na żywo, bez potrzeby restartu; trwające uruchomienia zachowują kontener, który już mają.",
@@ -5257,8 +5333,8 @@
5257
5333
  },
5258
5334
  "environmentWizard": {
5259
5335
  "progress": "Krok {index} z {total}",
5260
- "title": "Skonfiguruj środowisko testowe",
5261
- "subtitle": "Wykryj, przejrzyj i zapisz przepis Docker Compose, aby Deployer go udostępnił.",
5336
+ "title": "Konfiguracja środowiska Docker Compose",
5337
+ "subtitle": "Zbuduj recepturę Docker Compose, z której stawiane środowiska testowe usługi: skanowanie repozytorium, przegląd, kontrole wstępne, zapis.",
5262
5338
  "recommended": "zalecane",
5263
5339
  "steps": {
5264
5340
  "pick": "Wybierz usługę",
@@ -5268,6 +5344,7 @@
5268
5344
  },
5269
5345
  "pick": {
5270
5346
  "intro": "Wybierz usługę, dla której skonfigurować środowisko Docker Compose.",
5347
+ "scope": "Zmienia się tylko wybrana usługa. Uruchom to ponownie później, aby edytować jej recepturę.",
5271
5348
  "empty": "Brak usług. Najpierw dodaj usługę."
5272
5349
  },
5273
5350
  "review": {