@cat-factory/app 0.237.0 → 0.238.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.
- package/app/components/board/nodes/BlockNode.vue +33 -152
- package/app/components/context/ContextAttachmentFields.vue +9 -7
- package/app/components/documents/ContextDocumentPicker.vue +130 -12
- package/app/components/documents/TaskContextDocs.vue +18 -16
- package/app/components/panels/AgentStepDetail.vue +11 -0
- package/app/components/panels/StepToolServers.logic.spec.ts +60 -0
- package/app/components/panels/StepToolServers.logic.ts +58 -0
- package/app/components/panels/StepToolServers.vue +105 -0
- package/app/components/tasks/BugHuntModal.vue +70 -61
- package/app/components/tasks/ContextIssuePicker.vue +52 -28
- package/app/components/tasks/TaskImportModal.vue +55 -39
- package/app/composables/useContainerTargets.spec.ts +112 -0
- package/app/composables/useContainerTargets.ts +62 -0
- package/app/stores/ui/navigation.ts +8 -31
- package/app/types/toolServers.ts +2 -0
- package/app/utils/containerTargets.ts +71 -0
- package/app/utils/sourcePicker.spec.ts +258 -0
- package/app/utils/sourcePicker.ts +251 -0
- package/i18n/locales/de.json +23 -6
- package/i18n/locales/en.json +23 -6
- package/i18n/locales/es.json +23 -6
- package/i18n/locales/fr.json +23 -6
- package/i18n/locales/he.json +23 -6
- package/i18n/locales/it.json +23 -6
- package/i18n/locales/ja.json +23 -6
- package/i18n/locales/pl.json +23 -6
- package/i18n/locales/tr.json +23 -6
- package/i18n/locales/uk.json +23 -6
- package/package.json +2 -2
- package/app/utils/taskSources.spec.ts +0 -100
- package/app/utils/taskSources.ts +0 -76
package/i18n/locales/it.json
CHANGED
|
@@ -1983,6 +1983,22 @@
|
|
|
1983
1983
|
"reduced": "Cosa ha ridotto l'efficacia",
|
|
1984
1984
|
"obstacles": "Ostacoli principali"
|
|
1985
1985
|
},
|
|
1986
|
+
"toolServers": {
|
|
1987
|
+
"heading": "Server di strumenti (MCP)",
|
|
1988
|
+
"dispatchedAs": "Risolto per l’agente {agent} avviato da questo passaggio.",
|
|
1989
|
+
"allTools": "Tutti gli strumenti esposti da questo server.",
|
|
1990
|
+
"narrowed": "Limitato a: {tools}",
|
|
1991
|
+
"reason": {
|
|
1992
|
+
"harnessUnsupported": "non era disponibile: la CLI dell'agente di questo passo non ha un client MCP.",
|
|
1993
|
+
"transportUnsupported": "non era disponibile: la CLI dell'agente di questo passo non riesce a raggiungere server di questo tipo.",
|
|
1994
|
+
"missingSecret": "non era disponibile: una credenziale che gli serve non è impostata per questa lavagna.",
|
|
1995
|
+
"reservedSecret": "non era disponibile: chiede una variabile che appartiene alla configurazione della piattaforma, quindi va cambiata la dichiarazione.",
|
|
1996
|
+
"oauthNotConnected": "non era disponibile: nessuno ha ancora collegato questa lavagna al server.",
|
|
1997
|
+
"oauthTokenFailed": "non era disponibile: la connessione ha smesso di produrre un token di accesso.",
|
|
1998
|
+
"overBudget": "non era disponibile: questo agente dichiara più server di strumenti di quanti ne porti una singola esecuzione.",
|
|
1999
|
+
"unknown": "non era disponibile ({reason})."
|
|
2000
|
+
}
|
|
2001
|
+
},
|
|
1986
2002
|
"adherence": {
|
|
1987
2003
|
"heading": "Aderenza alle best practice",
|
|
1988
2004
|
"headingHint": "Gli standard di buone pratiche inseriti nel prompt di questo revisore, e quanto fedelmente ha giudicato che la modifica segua ciascuno.",
|
|
@@ -2911,20 +2927,14 @@
|
|
|
2911
2927
|
},
|
|
2912
2928
|
"shared": "Condiviso",
|
|
2913
2929
|
"sharedTitle": "Condiviso tra i workspace di questa org",
|
|
2914
|
-
"bootstrapping": "Bootstrap in corso…",
|
|
2915
2930
|
"bootstrappingRepository": "Bootstrap del repository in corso…",
|
|
2916
2931
|
"bootstrapStepsCount": "{completed}/{total} fasi",
|
|
2917
|
-
"runFailed": "Esecuzione fallita",
|
|
2918
|
-
"mergedOfTotal": "{merged}/{total} unite",
|
|
2919
|
-
"noTasksYet": "Ancora nessuna attività",
|
|
2920
|
-
"prCount": "{count} PR",
|
|
2921
2932
|
"prReadyCount": "{count} PR pronte",
|
|
2922
2933
|
"taskCount": "{count} attività | {count} attività",
|
|
2923
2934
|
"moduleCount": "{count} modulo | {count} moduli",
|
|
2924
2935
|
"addTaskTitle": "Aggiungi attività",
|
|
2925
2936
|
"createTaskFromIssueTitle": "Crea attività da issue",
|
|
2926
2937
|
"addRecurringTitle": "Aggiungi pipeline ricorrente",
|
|
2927
|
-
"collapseTitle": "Comprimi",
|
|
2928
2938
|
"dragService": "Trascina il servizio",
|
|
2929
2939
|
"dragTask": "Trascina l'attività",
|
|
2930
2940
|
"dragToResize": "Trascina per ridimensionare",
|
|
@@ -3786,6 +3796,11 @@
|
|
|
3786
3796
|
"noMatches": "Nessuna pagina corrispondente.",
|
|
3787
3797
|
"emptySearchable": "Cerca per titolo, oppure scegli un documento importato.",
|
|
3788
3798
|
"emptyRefOnly": "Incolla l'URL o l'ID di una pagina per allegarla.",
|
|
3799
|
+
"sourceLabel": "Fonte",
|
|
3800
|
+
"noSource": "Scegli una fonte",
|
|
3801
|
+
"connectSource": "Collega {label}",
|
|
3802
|
+
"needsSource": "Collega una sorgente di documenti per allegare una pagina.",
|
|
3803
|
+
"needsSourceAdmin": "Nessuna sorgente di documenti è collegata. Chiedi a un amministratore del workspace di collegarne una.",
|
|
3789
3804
|
"refChecking": "Verifica del riferimento…",
|
|
3790
3805
|
"refUnrecognized": "Non è un riferimento {source}. Formato atteso: {expected}",
|
|
3791
3806
|
"refOtherSource": "È un link {claimed}, non un link {source}.",
|
|
@@ -3922,6 +3937,7 @@
|
|
|
3922
3937
|
"searchIssues": "Cerca issue",
|
|
3923
3938
|
"searchPlaceholder": "Cerca per titolo, incolla l'URL di una issue, o digita un numero di issue…",
|
|
3924
3939
|
"createTasksIn": "Crea attività in",
|
|
3940
|
+
"creatingIn": "Le nuove attività vengono create in {container}",
|
|
3925
3941
|
"needFrameFirst": "Aggiungi prima un frame di servizio alla board per creare attività dalle issue.",
|
|
3926
3942
|
"searchFailed": "Ricerca non riuscita: {error}",
|
|
3927
3943
|
"searchResults": "Risultati della ricerca",
|
|
@@ -3974,6 +3990,7 @@
|
|
|
3974
3990
|
"labels": "Etichette",
|
|
3975
3991
|
"labelsHelp": "Separate da virgole. Devono essere tutte presenti.",
|
|
3976
3992
|
"adoptInto": "Aggiungi il bug scelto a",
|
|
3993
|
+
"adoptingInto": "Il bug scelto viene aggiunto a {container}",
|
|
3977
3994
|
"run": "Cerca",
|
|
3978
3995
|
"running": "Lettura della bacheca e valutazione di quanto trovato…",
|
|
3979
3996
|
"huntFailed": "La caccia non è riuscita",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -404,20 +404,14 @@
|
|
|
404
404
|
},
|
|
405
405
|
"shared": "共有",
|
|
406
406
|
"sharedTitle": "この組織内のワークスペース間で共有",
|
|
407
|
-
"bootstrapping": "ブートストラップ中…",
|
|
408
407
|
"bootstrappingRepository": "リポジトリをブートストラップ中…",
|
|
409
408
|
"bootstrapStepsCount": "{completed}/{total} ステップ",
|
|
410
|
-
"runFailed": "実行に失敗しました",
|
|
411
|
-
"mergedOfTotal": "{merged}/{total} マージ済み",
|
|
412
|
-
"noTasksYet": "タスクはまだありません",
|
|
413
|
-
"prCount": "{count} 件の PR",
|
|
414
409
|
"prReadyCount": "{count} 件の PR が準備完了",
|
|
415
410
|
"taskCount": "{count} 件のタスク | {count} 件のタスク",
|
|
416
411
|
"moduleCount": "{count} 件のモジュール | {count} 件のモジュール",
|
|
417
412
|
"addTaskTitle": "タスクを追加",
|
|
418
413
|
"createTaskFromIssueTitle": "課題からタスクを作成",
|
|
419
414
|
"addRecurringTitle": "繰り返しパイプラインを追加",
|
|
420
|
-
"collapseTitle": "折りたたむ",
|
|
421
415
|
"dragService": "サービスをドラッグ",
|
|
422
416
|
"dragTask": "タスクをドラッグ",
|
|
423
417
|
"dragToResize": "ドラッグしてサイズ変更",
|
|
@@ -1420,6 +1414,22 @@
|
|
|
1420
1414
|
"reduced": "効果を下げた要因",
|
|
1421
1415
|
"obstacles": "主な障害"
|
|
1422
1416
|
},
|
|
1417
|
+
"toolServers": {
|
|
1418
|
+
"heading": "ツールサーバー(MCP)",
|
|
1419
|
+
"dispatchedAs": "このステップが起動した {agent} エージェント向けに解決されました。",
|
|
1420
|
+
"allTools": "このサーバーが公開するすべてのツール。",
|
|
1421
|
+
"narrowed": "次に限定: {tools}",
|
|
1422
|
+
"reason": {
|
|
1423
|
+
"harnessUnsupported": "は利用できませんでした: このステップを実行したエージェント CLI に MCP クライアントがありません。",
|
|
1424
|
+
"transportUnsupported": "は利用できませんでした: このステップを実行したエージェント CLI はこの種類のサーバーに接続できません。",
|
|
1425
|
+
"missingSecret": "は利用できませんでした: 必要な認証情報がこのボードに設定されていません。",
|
|
1426
|
+
"reservedSecret": "は利用できませんでした: プラットフォーム自身の設定が使う変数を要求しているため、宣言側を変更する必要があります。",
|
|
1427
|
+
"oauthNotConnected": "は利用できませんでした: このボードはまだ接続されていません。",
|
|
1428
|
+
"oauthTokenFailed": "は利用できませんでした: 接続からアクセストークンが発行されなくなりました。",
|
|
1429
|
+
"overBudget": "は利用できませんでした: このエージェントは 1 回の実行が運べる数を超えるツールサーバーを宣言しています。",
|
|
1430
|
+
"unknown": "は利用できませんでした({reason})。"
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1423
1433
|
"adherence": {
|
|
1424
1434
|
"heading": "ベストプラクティスの遵守",
|
|
1425
1435
|
"headingHint": "このレビュアーのプロンプトに折り込まれたベストプラクティス標準と、変更が各標準にどれだけ従っているとレビュアーが判断したかです。",
|
|
@@ -4169,6 +4179,11 @@
|
|
|
4169
4179
|
"noMatches": "一致するページがありません。",
|
|
4170
4180
|
"emptySearchable": "タイトルで検索するか、インポート済みドキュメントを選択してください。",
|
|
4171
4181
|
"emptyRefOnly": "ページの URL または ID を貼り付けて添付します。",
|
|
4182
|
+
"sourceLabel": "ソース",
|
|
4183
|
+
"noSource": "ソースを選択",
|
|
4184
|
+
"connectSource": "{label} を接続",
|
|
4185
|
+
"needsSource": "ページを添付するにはドキュメントソースを接続してください。",
|
|
4186
|
+
"needsSourceAdmin": "ドキュメントソースが接続されていません。ワークスペースの管理者に接続を依頼してください。",
|
|
4172
4187
|
"refChecking": "参照を確認しています…",
|
|
4173
4188
|
"refUnrecognized": "{source} の参照ではありません。想定される形式: {expected}",
|
|
4174
4189
|
"refOtherSource": "これは {claimed} のリンクであり、{source} のものではありません。",
|
|
@@ -4305,6 +4320,7 @@
|
|
|
4305
4320
|
"searchIssues": "課題を検索",
|
|
4306
4321
|
"searchPlaceholder": "タイトルで検索、課題の URL を貼り付け、または課題番号を入力…",
|
|
4307
4322
|
"createTasksIn": "タスクの作成先",
|
|
4323
|
+
"creatingIn": "新しいタスクは {container} に作成されます",
|
|
4308
4324
|
"needFrameFirst": "課題からタスクを作成するには、先にボードにサービスフレームを追加してください。",
|
|
4309
4325
|
"searchFailed": "検索に失敗しました: {error}",
|
|
4310
4326
|
"searchResults": "検索結果",
|
|
@@ -4357,6 +4373,7 @@
|
|
|
4357
4373
|
"labels": "ラベル",
|
|
4358
4374
|
"labelsHelp": "カンマ区切り。すべて付いている必要があります。",
|
|
4359
4375
|
"adoptInto": "選んだバグの追加先",
|
|
4376
|
+
"adoptingInto": "選んだバグは {container} に追加されます",
|
|
4360
4377
|
"run": "ハント",
|
|
4361
4378
|
"running": "ボードを読み取り、見つかったものを評価しています…",
|
|
4362
4379
|
"huntFailed": "ハントに失敗しました",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -404,20 +404,14 @@
|
|
|
404
404
|
},
|
|
405
405
|
"shared": "Współdzielone",
|
|
406
406
|
"sharedTitle": "Współdzielone między obszarami roboczymi tej organizacji",
|
|
407
|
-
"bootstrapping": "Inicjalizacja…",
|
|
408
407
|
"bootstrappingRepository": "Inicjalizacja repozytorium…",
|
|
409
408
|
"bootstrapStepsCount": "{completed}/{total} kroków",
|
|
410
|
-
"runFailed": "Uruchomienie nie powiodło się",
|
|
411
|
-
"mergedOfTotal": "{merged}/{total} scalonych",
|
|
412
|
-
"noTasksYet": "Brak zadań",
|
|
413
|
-
"prCount": "{count} PR",
|
|
414
409
|
"prReadyCount": "{count} PR gotowych",
|
|
415
410
|
"taskCount": "{count} zadanie | {count} zadania | {count} zadań",
|
|
416
411
|
"moduleCount": "{count} moduł | {count} moduły | {count} modułów",
|
|
417
412
|
"addTaskTitle": "Dodaj zadanie",
|
|
418
413
|
"createTaskFromIssueTitle": "Utwórz zadanie ze zgłoszenia",
|
|
419
414
|
"addRecurringTitle": "Dodaj cykliczny pipeline",
|
|
420
|
-
"collapseTitle": "Zwiń",
|
|
421
415
|
"dragService": "Przeciągnij usługę",
|
|
422
416
|
"dragTask": "Przeciągnij zadanie",
|
|
423
417
|
"dragToResize": "Przeciągnij, aby zmienić rozmiar",
|
|
@@ -1420,6 +1414,22 @@
|
|
|
1420
1414
|
"reduced": "Co obniżyło skuteczność",
|
|
1421
1415
|
"obstacles": "Kluczowe przeszkody"
|
|
1422
1416
|
},
|
|
1417
|
+
"toolServers": {
|
|
1418
|
+
"heading": "Serwery narzędzi (MCP)",
|
|
1419
|
+
"dispatchedAs": "Ustalone dla agenta {agent} uruchomionego przez ten krok.",
|
|
1420
|
+
"allTools": "Wszystkie narzędzia udostępniane przez ten serwer.",
|
|
1421
|
+
"narrowed": "Ograniczone do: {tools}",
|
|
1422
|
+
"reason": {
|
|
1423
|
+
"harnessUnsupported": "nie był dostępny: CLI agenta, na którym działał ten krok, nie ma klienta MCP.",
|
|
1424
|
+
"transportUnsupported": "nie był dostępny: CLI agenta, na którym działał ten krok, nie dosięga serwera tego rodzaju.",
|
|
1425
|
+
"missingSecret": "nie był dostępny: potrzebne mu poświadczenie nie jest ustawione dla tej tablicy.",
|
|
1426
|
+
"reservedSecret": "nie był dostępny: prosi o zmienną należącą do konfiguracji samej platformy, więc trzeba zmienić deklarację.",
|
|
1427
|
+
"oauthNotConnected": "nie był dostępny: nikt jeszcze nie połączył z nim tej tablicy.",
|
|
1428
|
+
"oauthTokenFailed": "nie był dostępny: połączenie przestało wydawać token dostępu.",
|
|
1429
|
+
"overBudget": "nie był dostępny: ten agent deklaruje więcej serwerów narzędzi, niż niesie jedno uruchomienie.",
|
|
1430
|
+
"unknown": "nie był dostępny ({reason})."
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1423
1433
|
"adherence": {
|
|
1424
1434
|
"heading": "Zgodność z najlepszymi praktykami",
|
|
1425
1435
|
"headingHint": "Standardy dobrych praktyk wplecione w prompt tego recenzenta oraz to, jak ściśle jego zdaniem zmiana trzyma się każdego z nich.",
|
|
@@ -4169,6 +4179,11 @@
|
|
|
4169
4179
|
"noMatches": "Brak pasujących stron.",
|
|
4170
4180
|
"emptySearchable": "Wyszukaj według tytułu lub wybierz zaimportowany dokument.",
|
|
4171
4181
|
"emptyRefOnly": "Wklej adres URL lub identyfikator strony, aby ją dołączyć.",
|
|
4182
|
+
"sourceLabel": "Źródło",
|
|
4183
|
+
"noSource": "Wybierz źródło",
|
|
4184
|
+
"connectSource": "Połącz {label}",
|
|
4185
|
+
"needsSource": "Połącz źródło dokumentów, aby dołączyć stronę.",
|
|
4186
|
+
"needsSourceAdmin": "Nie podłączono żadnego źródła dokumentów. Poproś administratora przestrzeni roboczej, aby je podłączył.",
|
|
4172
4187
|
"refChecking": "Sprawdzanie odwołania…",
|
|
4173
4188
|
"refUnrecognized": "To nie jest odwołanie {source}. Oczekiwano: {expected}",
|
|
4174
4189
|
"refOtherSource": "To jest link {claimed}, a nie {source}.",
|
|
@@ -4305,6 +4320,7 @@
|
|
|
4305
4320
|
"searchIssues": "Szukaj zgłoszeń",
|
|
4306
4321
|
"searchPlaceholder": "Szukaj według tytułu, wklej adres URL zgłoszenia lub wpisz numer zgłoszenia…",
|
|
4307
4322
|
"createTasksIn": "Utwórz zadania w",
|
|
4323
|
+
"creatingIn": "Nowe zadania powstaną w {container}",
|
|
4308
4324
|
"needFrameFirst": "Najpierw dodaj ramę usługi do tablicy, aby tworzyć zadania ze zgłoszeń.",
|
|
4309
4325
|
"searchFailed": "Wyszukiwanie nie powiodło się: {error}",
|
|
4310
4326
|
"searchResults": "Wyniki wyszukiwania",
|
|
@@ -4357,6 +4373,7 @@
|
|
|
4357
4373
|
"labels": "Etykiety",
|
|
4358
4374
|
"labelsHelp": "Oddzielone przecinkami. Wszystkie muszą występować.",
|
|
4359
4375
|
"adoptInto": "Dodaj wybrany błąd do",
|
|
4376
|
+
"adoptingInto": "Wybrany błąd trafi do {container}",
|
|
4360
4377
|
"run": "Poluj",
|
|
4361
4378
|
"running": "Odczytywanie tablicy i ocenianie znalezionych zgłoszeń…",
|
|
4362
4379
|
"huntFailed": "Polowanie nie powiodło się",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -404,20 +404,14 @@
|
|
|
404
404
|
},
|
|
405
405
|
"shared": "Paylaşılan",
|
|
406
406
|
"sharedTitle": "Bu organizasyondaki çalışma alanları arasında paylaşılan",
|
|
407
|
-
"bootstrapping": "Bootstrap yapılıyor…",
|
|
408
407
|
"bootstrappingRepository": "Depo bootstrap'lanıyor…",
|
|
409
408
|
"bootstrapStepsCount": "{completed}/{total} adım",
|
|
410
|
-
"runFailed": "Çalıştırma başarısız oldu",
|
|
411
|
-
"mergedOfTotal": "{merged}/{total} birleştirildi",
|
|
412
|
-
"noTasksYet": "Henüz görev yok",
|
|
413
|
-
"prCount": "{count} PR",
|
|
414
409
|
"prReadyCount": "{count} PR hazır",
|
|
415
410
|
"taskCount": "{count} görev | {count} görev",
|
|
416
411
|
"moduleCount": "{count} modül | {count} modül",
|
|
417
412
|
"addTaskTitle": "Görev ekle",
|
|
418
413
|
"createTaskFromIssueTitle": "Sorundan görev oluştur",
|
|
419
414
|
"addRecurringTitle": "Yinelenen pipeline ekle",
|
|
420
|
-
"collapseTitle": "Daralt",
|
|
421
415
|
"dragService": "Servisi sürükle",
|
|
422
416
|
"dragTask": "Görevi sürükle",
|
|
423
417
|
"dragToResize": "Yeniden boyutlandırmak için sürükle",
|
|
@@ -1420,6 +1414,22 @@
|
|
|
1420
1414
|
"reduced": "Etkinliği azaltan etkenler",
|
|
1421
1415
|
"obstacles": "Başlıca engeller"
|
|
1422
1416
|
},
|
|
1417
|
+
"toolServers": {
|
|
1418
|
+
"heading": "Araç sunucuları (MCP)",
|
|
1419
|
+
"dispatchedAs": "Bu adımın çalıştırdığı {agent} ajanı için çözümlendi.",
|
|
1420
|
+
"allTools": "Bu sunucunun sunduğu tüm araçlar.",
|
|
1421
|
+
"narrowed": "Şunlarla sınırlandı: {tools}",
|
|
1422
|
+
"reason": {
|
|
1423
|
+
"harnessUnsupported": "kullanılamadı: bu adımın çalıştığı ajan CLI'sinde MCP istemcisi yok.",
|
|
1424
|
+
"transportUnsupported": "kullanılamadı: bu adımın çalıştığı ajan CLI'si bu türden bir sunucuya erişemiyor.",
|
|
1425
|
+
"missingSecret": "kullanılamadı: ihtiyaç duyduğu kimlik bilgisi bu pano için ayarlanmamış.",
|
|
1426
|
+
"reservedSecret": "kullanılamadı: platformun kendi yapılandırmasına ait bir değişken istiyor, bu yüzden bildirimin değişmesi gerekiyor.",
|
|
1427
|
+
"oauthNotConnected": "kullanılamadı: bu panoyu henüz kimse ona bağlamadı.",
|
|
1428
|
+
"oauthTokenFailed": "kullanılamadı: bağlantı artık erişim jetonu üretmiyor.",
|
|
1429
|
+
"overBudget": "kullanılamadı: bu ajan tek bir çalıştırmanın taşıdığından fazla araç sunucusu bildiriyor.",
|
|
1430
|
+
"unknown": "kullanılamadı ({reason})."
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1423
1433
|
"adherence": {
|
|
1424
1434
|
"heading": "En iyi uygulamalara uyum",
|
|
1425
1435
|
"headingHint": "Bu gözden geçirenin istemine eklenen iyi uygulama standartları ve değişikliğin her birine ne kadar uyduğuna dair değerlendirmesi.",
|
|
@@ -4169,6 +4179,11 @@
|
|
|
4169
4179
|
"noMatches": "Eşleşen sayfa yok.",
|
|
4170
4180
|
"emptySearchable": "Başlığa göre ara veya içe aktarılmış bir belge seç.",
|
|
4171
4181
|
"emptyRefOnly": "Eklemek için bir sayfa URL'si veya ID'si yapıştır.",
|
|
4182
|
+
"sourceLabel": "Kaynak",
|
|
4183
|
+
"noSource": "Bir kaynak seç",
|
|
4184
|
+
"connectSource": "{label} bağla",
|
|
4185
|
+
"needsSource": "Bir sayfa eklemek için bir belge kaynağı bağla.",
|
|
4186
|
+
"needsSourceAdmin": "Bağlı belge kaynağı yok. Bir çalışma alanı yöneticisinden birini bağlamasını iste.",
|
|
4172
4187
|
"refChecking": "Referans denetleniyor…",
|
|
4173
4188
|
"refUnrecognized": "Bu bir {source} referansı değil. Beklenen: {expected}",
|
|
4174
4189
|
"refOtherSource": "Bu bir {claimed} bağlantısı, {source} bağlantısı değil.",
|
|
@@ -4305,6 +4320,7 @@
|
|
|
4305
4320
|
"searchIssues": "Sorunlarda ara",
|
|
4306
4321
|
"searchPlaceholder": "Başlığa göre ara, bir sorun URL'si yapıştır veya bir sorun numarası yaz…",
|
|
4307
4322
|
"createTasksIn": "Görevleri şurada oluştur",
|
|
4323
|
+
"creatingIn": "Yeni görevler {container} içinde oluşturulur",
|
|
4308
4324
|
"needFrameFirst": "Sorunlardan görev oluşturmak için önce panoya bir servis çerçevesi ekle.",
|
|
4309
4325
|
"searchFailed": "Arama başarısız: {error}",
|
|
4310
4326
|
"searchResults": "Arama sonuçları",
|
|
@@ -4357,6 +4373,7 @@
|
|
|
4357
4373
|
"labels": "Etiketler",
|
|
4358
4374
|
"labelsHelp": "Virgülle ayrılır. Hepsinin bulunması gerekir.",
|
|
4359
4375
|
"adoptInto": "Seçilen hatayı şuraya ekle",
|
|
4376
|
+
"adoptingInto": "Seçilen hata {container} içine eklenir",
|
|
4360
4377
|
"run": "Avla",
|
|
4361
4378
|
"running": "Pano okunuyor ve bulunanlar değerlendiriliyor…",
|
|
4362
4379
|
"huntFailed": "Av başarısız oldu",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -404,20 +404,14 @@
|
|
|
404
404
|
},
|
|
405
405
|
"shared": "Спільне",
|
|
406
406
|
"sharedTitle": "Спільне для робочих просторів цієї організації",
|
|
407
|
-
"bootstrapping": "Ініціалізація…",
|
|
408
407
|
"bootstrappingRepository": "Ініціалізація репозиторію…",
|
|
409
408
|
"bootstrapStepsCount": "{completed}/{total} кроків",
|
|
410
|
-
"runFailed": "Запуск не вдався",
|
|
411
|
-
"mergedOfTotal": "{merged}/{total} злито",
|
|
412
|
-
"noTasksYet": "Поки немає завдань",
|
|
413
|
-
"prCount": "{count} PR",
|
|
414
409
|
"prReadyCount": "{count} PR готово",
|
|
415
410
|
"taskCount": "{count} завдання | {count} завдання | {count} завдань",
|
|
416
411
|
"moduleCount": "{count} модуль | {count} модулі | {count} модулів",
|
|
417
412
|
"addTaskTitle": "Додати завдання",
|
|
418
413
|
"createTaskFromIssueTitle": "Створити завдання зі звернення",
|
|
419
414
|
"addRecurringTitle": "Додати періодичний конвеєр",
|
|
420
|
-
"collapseTitle": "Згорнути",
|
|
421
415
|
"dragService": "Перетягнути сервіс",
|
|
422
416
|
"dragTask": "Перетягнути завдання",
|
|
423
417
|
"dragToResize": "Перетягніть, щоб змінити розмір",
|
|
@@ -1420,6 +1414,22 @@
|
|
|
1420
1414
|
"reduced": "Що знизило ефективність",
|
|
1421
1415
|
"obstacles": "Основні перешкоди"
|
|
1422
1416
|
},
|
|
1417
|
+
"toolServers": {
|
|
1418
|
+
"heading": "Сервери інструментів (MCP)",
|
|
1419
|
+
"dispatchedAs": "Визначено для агента {agent}, якого запустив цей крок.",
|
|
1420
|
+
"allTools": "Усі інструменти, які надає цей сервер.",
|
|
1421
|
+
"narrowed": "Обмежено до: {tools}",
|
|
1422
|
+
"reason": {
|
|
1423
|
+
"harnessUnsupported": "був недоступний: у CLI агента, на якому виконувався цей крок, немає клієнта MCP.",
|
|
1424
|
+
"transportUnsupported": "був недоступний: CLI агента, на якому виконувався цей крок, не досягає сервера такого типу.",
|
|
1425
|
+
"missingSecret": "був недоступний: потрібні йому облікові дані не задані для цієї дошки.",
|
|
1426
|
+
"reservedSecret": "був недоступний: він просить змінну, що належить власній конфігурації платформи, тож потрібно змінити оголошення.",
|
|
1427
|
+
"oauthNotConnected": "був недоступний: цю дошку ще ніхто до нього не під’єднав.",
|
|
1428
|
+
"oauthTokenFailed": "був недоступний: з’єднання перестало видавати токен доступу.",
|
|
1429
|
+
"overBudget": "був недоступний: цей агент оголошує більше серверів інструментів, ніж несе один запуск.",
|
|
1430
|
+
"unknown": "був недоступний ({reason})."
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1423
1433
|
"adherence": {
|
|
1424
1434
|
"heading": "Дотримання найкращих практик",
|
|
1425
1435
|
"headingHint": "Стандарти найкращих практик, вплетені в промпт цього рецензента, і наскільки, на його думку, зміна відповідає кожному з них.",
|
|
@@ -4169,6 +4179,11 @@
|
|
|
4169
4179
|
"noMatches": "Немає відповідних сторінок.",
|
|
4170
4180
|
"emptySearchable": "Шукайте за назвою або виберіть імпортований документ.",
|
|
4171
4181
|
"emptyRefOnly": "Вставте URL або ідентифікатор сторінки, щоб долучити її.",
|
|
4182
|
+
"sourceLabel": "Джерело",
|
|
4183
|
+
"noSource": "Виберіть джерело",
|
|
4184
|
+
"connectSource": "Підключити {label}",
|
|
4185
|
+
"needsSource": "Підключіть джерело документів, щоб долучити сторінку.",
|
|
4186
|
+
"needsSourceAdmin": "Не підключено жодного джерела документів. Попросіть адміністратора робочого простору підключити його.",
|
|
4172
4187
|
"refChecking": "Перевіряємо посилання…",
|
|
4173
4188
|
"refUnrecognized": "Це не посилання {source}. Очікується: {expected}",
|
|
4174
4189
|
"refOtherSource": "Це посилання {claimed}, а не {source}.",
|
|
@@ -4305,6 +4320,7 @@
|
|
|
4305
4320
|
"searchIssues": "Шукати завдання",
|
|
4306
4321
|
"searchPlaceholder": "Шукайте за назвою, вставте URL завдання або введіть номер завдання…",
|
|
4307
4322
|
"createTasksIn": "Створити завдання в",
|
|
4323
|
+
"creatingIn": "Нові завдання створюються в {container}",
|
|
4308
4324
|
"needFrameFirst": "Спочатку додайте рамку сервісу на дошку, щоб створювати завдання з тікетів.",
|
|
4309
4325
|
"searchFailed": "Не вдалося виконати пошук: {error}",
|
|
4310
4326
|
"searchResults": "Результати пошуку",
|
|
@@ -4357,6 +4373,7 @@
|
|
|
4357
4373
|
"labels": "Мітки",
|
|
4358
4374
|
"labelsHelp": "Через кому. Усі мають бути присутні.",
|
|
4359
4375
|
"adoptInto": "Додати обрану помилку до",
|
|
4376
|
+
"adoptingInto": "Обрана помилка додається до {container}",
|
|
4360
4377
|
"run": "Полювати",
|
|
4361
4378
|
"running": "Читаємо дошку та оцінюємо знайдене…",
|
|
4362
4379
|
"huntFailed": "Полювання не вдалося",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.238.0",
|
|
4
4
|
"description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"valibot": "^1.4.2",
|
|
41
41
|
"vue": "3.5.40",
|
|
42
42
|
"wretch": "^3.0.9",
|
|
43
|
-
"@cat-factory/contracts": "0.
|
|
43
|
+
"@cat-factory/contracts": "0.258.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { buildSourceChoices, reconcileSource } from './taskSources'
|
|
3
|
-
import type { TaskSourceState } from '~/types/domain'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The pure tracker-selection behind `<ContextIssuePicker>` and `<BugHuntModal>`. Pins what
|
|
7
|
-
* the always-visible selector promises: the tracker in use is named even when it is the only
|
|
8
|
-
* one, a tracker the workspace hasn't got yet is offered as something to ADD (worded for its
|
|
9
|
-
* actual state), and the selection stays valid as the offered set changes underneath it.
|
|
10
|
-
*/
|
|
11
|
-
const state = (source: string, { available = true, enabled = true } = {}): TaskSourceState =>
|
|
12
|
-
({
|
|
13
|
-
source,
|
|
14
|
-
label: source.toUpperCase(),
|
|
15
|
-
icon: `i-lucide-${source}`,
|
|
16
|
-
available,
|
|
17
|
-
enabled,
|
|
18
|
-
credentialFields: [],
|
|
19
|
-
refLabel: '',
|
|
20
|
-
refPlaceholder: '',
|
|
21
|
-
}) as unknown as TaskSourceState
|
|
22
|
-
|
|
23
|
-
describe('buildSourceChoices', () => {
|
|
24
|
-
it('lists a single offered tracker, marked active (the selector is never hidden)', () => {
|
|
25
|
-
const groups = buildSourceChoices([state('github')], 'github')
|
|
26
|
-
expect(groups).toEqual([
|
|
27
|
-
[
|
|
28
|
-
{
|
|
29
|
-
action: 'select',
|
|
30
|
-
source: 'github',
|
|
31
|
-
label: 'GITHUB',
|
|
32
|
-
icon: 'i-lucide-github',
|
|
33
|
-
active: true,
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
])
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('marks only the selected tracker active', () => {
|
|
40
|
-
const [offered] = buildSourceChoices([state('github'), state('jira')], 'jira')
|
|
41
|
-
expect(offered!.map((c) => [c.source, 'active' in c && c.active])).toEqual([
|
|
42
|
-
['github', false],
|
|
43
|
-
['jira', true],
|
|
44
|
-
])
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('offers an unavailable tracker as `connect` and an available-but-off one as `enable`', () => {
|
|
48
|
-
const [, addable] = buildSourceChoices(
|
|
49
|
-
[state('github'), state('jira', { available: false }), state('linear', { enabled: false })],
|
|
50
|
-
'github',
|
|
51
|
-
)
|
|
52
|
-
expect(addable).toEqual([
|
|
53
|
-
{ action: 'connect', source: 'jira', label: 'JIRA', icon: 'i-lucide-jira' },
|
|
54
|
-
{ action: 'enable', source: 'linear', label: 'LINEAR', icon: 'i-lucide-linear' },
|
|
55
|
-
])
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
// What a surface's "nothing connected yet" state renders its add buttons from: it flattens
|
|
59
|
-
// the groups, so every choice there has to be addable. A `select` leaking through would
|
|
60
|
-
// offer to connect a tracker the workspace already has.
|
|
61
|
-
it('yields only addable choices when the workspace offers no tracker', () => {
|
|
62
|
-
const choices = buildSourceChoices(
|
|
63
|
-
[state('jira', { available: false }), state('linear', { enabled: false })],
|
|
64
|
-
undefined,
|
|
65
|
-
).flat()
|
|
66
|
-
expect(choices.map((c) => c.action)).toEqual(['connect', 'enable'])
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
it('drops empty groups so the menu renders no stray separator', () => {
|
|
70
|
-
expect(buildSourceChoices([state('github')], 'github')).toHaveLength(1)
|
|
71
|
-
expect(buildSourceChoices([state('jira', { available: false })], undefined)).toHaveLength(1)
|
|
72
|
-
expect(buildSourceChoices([], undefined)).toEqual([])
|
|
73
|
-
})
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
describe('reconcileSource', () => {
|
|
77
|
-
it('selects the tracker the user just went off to connect, once it is offered', () => {
|
|
78
|
-
expect(reconcileSource(['github', 'jira'], 'github', 'jira')).toBe('jira')
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
it('keeps the current selection while the connect is still pending', () => {
|
|
82
|
-
expect(reconcileSource(['github'], 'github', 'jira')).toBe('github')
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
it('keeps a still-offered selection', () => {
|
|
86
|
-
expect(reconcileSource(['github', 'jira'], 'jira', null)).toBe('jira')
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
it('falls back to the first offered tracker when the selection stopped being offered', () => {
|
|
90
|
-
expect(reconcileSource(['github'], 'jira', null)).toBe('github')
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
it('selects the first offered tracker when nothing is selected yet', () => {
|
|
94
|
-
expect(reconcileSource(['github'], undefined, null)).toBe('github')
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
it('resolves to nothing when the workspace offers no tracker at all', () => {
|
|
98
|
-
expect(reconcileSource([], 'jira', 'jira')).toBeUndefined()
|
|
99
|
-
})
|
|
100
|
-
})
|
package/app/utils/taskSources.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import type { TaskSourceKind, TaskSourceState } from '~/types/domain'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Pure tracker-selection logic shared by every surface that picks a task source: which
|
|
5
|
-
* tracker is selected, and what its menu offers. Kept out of the components so their
|
|
6
|
-
* `computed`s and the unit spec call the same code.
|
|
7
|
-
*
|
|
8
|
-
* The menu is deliberately two-tier — pick an already-offered tracker, or go and add
|
|
9
|
-
* one — because a tracker-picking surface is exactly where a user discovers the tracker
|
|
10
|
-
* they want is missing, and sending them off to the Integrations hub loses whatever they
|
|
11
|
-
* had in progress. Today `<ContextIssuePicker>` (attach a context issue) and
|
|
12
|
-
* `<BugHuntModal>` (scan a board for bugs) both render it.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/** One row of a tracker menu. */
|
|
16
|
-
export type SourceChoice =
|
|
17
|
-
/** An offered tracker the surface can use right now. */
|
|
18
|
-
| { action: 'select'; source: TaskSourceKind; label: string; icon: string; active: boolean }
|
|
19
|
-
/**
|
|
20
|
-
* A configured tracker that is not offered yet, so it can be added from here. `connect`
|
|
21
|
-
* has no credential/App behind it; `enable` is connected but toggled off for the
|
|
22
|
-
* workspace. Both open the same connect modal, which serves either case — only the
|
|
23
|
-
* wording differs, so the user isn't told to "connect" something already connected.
|
|
24
|
-
*/
|
|
25
|
-
| { action: 'connect' | 'enable'; source: TaskSourceKind; label: string; icon: string }
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* A tracker menu, as non-empty groups (the offered trackers, then the ones the user could
|
|
29
|
-
* add). Empty groups are dropped so the menu never renders a stray separator.
|
|
30
|
-
*/
|
|
31
|
-
export function buildSourceChoices(
|
|
32
|
-
sources: TaskSourceState[],
|
|
33
|
-
selected: TaskSourceKind | undefined,
|
|
34
|
-
): SourceChoice[][] {
|
|
35
|
-
const offered: SourceChoice[] = []
|
|
36
|
-
const addable: SourceChoice[] = []
|
|
37
|
-
for (const s of sources) {
|
|
38
|
-
if (s.available && s.enabled) {
|
|
39
|
-
offered.push({
|
|
40
|
-
action: 'select',
|
|
41
|
-
source: s.source,
|
|
42
|
-
label: s.label,
|
|
43
|
-
icon: s.icon,
|
|
44
|
-
active: s.source === selected,
|
|
45
|
-
})
|
|
46
|
-
} else {
|
|
47
|
-
addable.push({
|
|
48
|
-
action: s.available ? 'enable' : 'connect',
|
|
49
|
-
source: s.source,
|
|
50
|
-
label: s.label,
|
|
51
|
-
icon: s.icon,
|
|
52
|
-
})
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return [offered, addable].filter((group) => group.length > 0)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* The source a surface should hold once the offered set changes — after a connect, a
|
|
60
|
-
* disconnect, or the per-workspace toggle flipping elsewhere.
|
|
61
|
-
*
|
|
62
|
-
* `awaiting` is the tracker the user just left to connect: the moment it becomes offered
|
|
63
|
-
* it wins, so they land back on the source they went to add rather than on whatever was
|
|
64
|
-
* selected before. Otherwise a still-offered selection is kept, and a selection that
|
|
65
|
-
* stopped being offered falls back to the first one (reading a tracker the workspace no
|
|
66
|
-
* longer offers only yields errors).
|
|
67
|
-
*/
|
|
68
|
-
export function reconcileSource(
|
|
69
|
-
offered: TaskSourceKind[],
|
|
70
|
-
selected: TaskSourceKind | undefined,
|
|
71
|
-
awaiting: TaskSourceKind | null,
|
|
72
|
-
): TaskSourceKind | undefined {
|
|
73
|
-
if (awaiting && offered.includes(awaiting)) return awaiting
|
|
74
|
-
if (selected && offered.includes(selected)) return selected
|
|
75
|
-
return offered[0]
|
|
76
|
-
}
|