@cat-factory/app 0.274.0 → 0.276.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/README.md +158 -4
- package/app/components/board/LaneViewControl.vue +87 -0
- package/app/components/board/nodes/BlockNode.vue +31 -11
- package/app/components/board/nodes/FrameSwimlanes.vue +139 -0
- package/app/components/board/nodes/InitiativeCard.vue +9 -28
- package/app/components/board/nodes/LaneGroup.vue +93 -0
- package/app/components/board/nodes/LaneTask.vue +66 -0
- package/app/components/board/nodes/TaskCard.vue +16 -2
- package/app/components/board/nodes/TaskLane.vue +82 -0
- package/app/components/layout/BoardToolbar.vue +4 -0
- package/app/components/layout/CommandBar.vue +8 -1
- package/app/components/layout/RolePrompt.vue +75 -0
- package/app/components/layout/SideBar.vue +22 -13
- package/app/components/layout/UiRoleSwitcher.vue +73 -0
- package/app/components/panels/InspectorPanel.vue +15 -2
- package/app/components/panels/inspector/TaskStructure.vue +70 -3
- package/app/components/settings/WorkspaceSettingsPanel.vue +59 -0
- package/app/composables/useBlockDrag.ts +47 -17
- package/app/composables/useBlockQueries.ts +27 -24
- package/app/composables/useFrameLanes.ts +177 -0
- package/app/composables/useNavContributions.ts +3 -0
- package/app/composables/useTaskExpansion.ts +1 -1
- package/app/docs/consumer-extensions.md +20 -6
- package/app/modular/external-tools.spec.ts +0 -45
- package/app/modular/external-tools.ts +12 -23
- package/app/modular/nav-contributions.spec.ts +176 -17
- package/app/modular/nav-contributions.ts +106 -23
- package/app/modular/nav-gates.ts +11 -2
- package/app/modular/registry.spec.ts +1 -0
- package/app/modular/tutorial-tours.spec.ts +5 -3
- package/app/modular/tutorial-tours.ts +53 -8
- package/app/pages/index.vue +36 -7
- package/app/stores/board/placement.ts +7 -0
- package/app/stores/board.spec.ts +119 -14
- package/app/stores/laneView.spec.ts +61 -0
- package/app/stores/laneView.ts +85 -0
- package/app/stores/launchPrompt.ts +63 -0
- package/app/stores/taskExpansion.spec.ts +1 -1
- package/app/stores/taskExpansion.ts +1 -1
- package/app/stores/tutorial.ts +4 -4
- package/app/stores/uiMode.spec.ts +11 -0
- package/app/stores/uiMode.ts +14 -2
- package/app/stores/uiRole.spec.ts +185 -0
- package/app/stores/uiRole.ts +86 -0
- package/app/stores/workspaceSettings.ts +4 -0
- package/app/utils/framePlacement.ts +9 -4
- package/app/utils/laneGeometry.spec.ts +69 -0
- package/app/utils/laneGeometry.ts +104 -0
- package/app/utils/laneSort.spec.ts +236 -0
- package/app/utils/laneSort.ts +306 -0
- package/app/utils/swimlanes.spec.ts +259 -0
- package/app/utils/swimlanes.ts +355 -0
- package/app/utils/uiMode.spec.ts +12 -0
- package/app/utils/uiMode.ts +24 -6
- package/app/utils/uiRole.ts +123 -0
- package/i18n/locales/de.json +104 -3
- package/i18n/locales/en.json +110 -3
- package/i18n/locales/es.json +104 -3
- package/i18n/locales/fr.json +104 -3
- package/i18n/locales/he.json +104 -3
- package/i18n/locales/it.json +104 -3
- package/i18n/locales/ja.json +104 -3
- package/i18n/locales/pl.json +104 -3
- package/i18n/locales/tr.json +104 -3
- package/i18n/locales/uk.json +104 -3
- package/package.json +2 -2
- package/app/components/board/nodes/DraggableTask.vue +0 -58
- package/app/components/board/nodes/ModuleFrame.vue +0 -73
- package/app/stores/tutorial.prompt.ts +0 -59
package/i18n/locales/pl.json
CHANGED
|
@@ -32,6 +32,25 @@
|
|
|
32
32
|
"switchTo": "Przełącz na {mode}",
|
|
33
33
|
"pinned": "Ustawione przez to wdrożenie"
|
|
34
34
|
},
|
|
35
|
+
"uiRole": {
|
|
36
|
+
"switcher": "Twoja rola",
|
|
37
|
+
"roles": {
|
|
38
|
+
"engineer": "Inżynier",
|
|
39
|
+
"productManager": "Menedżer produktu",
|
|
40
|
+
"designer": "Projektant"
|
|
41
|
+
},
|
|
42
|
+
"hints": {
|
|
43
|
+
"engineer": "Wszystko: planowanie pracy, uruchamianie, przegląd i scalanie oraz konfiguracja platformy, na której to działa.",
|
|
44
|
+
"productManager": "Te same powierzchnie co u inżyniera: planowanie pracy, uruchamianie i prowadzenie jej aż do scalenia.",
|
|
45
|
+
"designer": "Prostsza tablica: usługi, które już na niej są, praca w toku i nowe zadania z projektu lub zgłoszenia."
|
|
46
|
+
},
|
|
47
|
+
"prompt": {
|
|
48
|
+
"title": "Nad czym pracujesz?",
|
|
49
|
+
"intro": "Wybierz najbliższą opcję, a aplikacja otworzy się na powierzchniach potrzebnych do tej pracy. To zmienia to, co WIDZISZ, a nie to, co możesz zrobić.",
|
|
50
|
+
"change": "Możesz to zmienić w dowolnym momencie u góry panelu bocznego.",
|
|
51
|
+
"later": "Nie teraz"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
35
54
|
"common": {
|
|
36
55
|
"loading": "Ładowanie…",
|
|
37
56
|
"save": "Zapisz",
|
|
@@ -490,6 +509,71 @@
|
|
|
490
509
|
"label": "Epik",
|
|
491
510
|
"activeCount": "{count} aktywnych",
|
|
492
511
|
"noTasksYet": "Brak zadań"
|
|
512
|
+
},
|
|
513
|
+
"lanes": {
|
|
514
|
+
"viewTitle": "Uporządkuj",
|
|
515
|
+
"resetView": "Przywróć ustawienia domyślne",
|
|
516
|
+
"notStarted": {
|
|
517
|
+
"label": "Nierozpoczęte",
|
|
518
|
+
"empty": "Nic nie czeka na podjęcie."
|
|
519
|
+
},
|
|
520
|
+
"inProgress": {
|
|
521
|
+
"label": "W toku",
|
|
522
|
+
"empty": "Brak trwających uruchomień."
|
|
523
|
+
},
|
|
524
|
+
"needsYou": {
|
|
525
|
+
"label": "Czeka na ciebie",
|
|
526
|
+
"empty": "Nic na ciebie nie czeka."
|
|
527
|
+
},
|
|
528
|
+
"done": {
|
|
529
|
+
"label": "Ukończone",
|
|
530
|
+
"empty": "Nic jeszcze nie zostało ukończone.",
|
|
531
|
+
"hiddenByCap": "+{count} niewyświetlonych",
|
|
532
|
+
"hiddenByAge": "+{count} poza okresem przechowywania",
|
|
533
|
+
"undated": "{count} bez zapisanej daty",
|
|
534
|
+
"allWithheld": "Ukończone zadania są tu liczone, ale nie wypisywane, zgodnie z ustawieniami tej tablicy."
|
|
535
|
+
},
|
|
536
|
+
"reason": {
|
|
537
|
+
"unstarted": "Gotowe do rozpoczęcia",
|
|
538
|
+
"dependencies": "Czeka na zależność",
|
|
539
|
+
"running": "W trakcie",
|
|
540
|
+
"backgroundReview": "Przegląd w tle",
|
|
541
|
+
"decision": "Potrzebna decyzja",
|
|
542
|
+
"approval": "Potrzebna zgoda",
|
|
543
|
+
"failed": "Uruchomienie nie powiodło się",
|
|
544
|
+
"budgetPaused": "Wstrzymane przez budżet wydatków",
|
|
545
|
+
"prAwaitingMerge": "Pull request czeka na scalenie",
|
|
546
|
+
"parked": "Czeka na człowieka",
|
|
547
|
+
"unclassified": "Nierozpoznany status",
|
|
548
|
+
"merged": "Scalone"
|
|
549
|
+
},
|
|
550
|
+
"sort": {
|
|
551
|
+
"heading": "Sortuj według",
|
|
552
|
+
"smart": "Zalecane dla każdej kolumny",
|
|
553
|
+
"title": "Tytuł (A–Z)",
|
|
554
|
+
"oldest_activity": "Najcichsze najpierw",
|
|
555
|
+
"newest_activity": "Ostatnio aktywne",
|
|
556
|
+
"longest_wait": "Najdłużej czekające",
|
|
557
|
+
"severity_desc": "Waga (od najwyższej)",
|
|
558
|
+
"impact_desc": "Szacowany wpływ (od najwyższego)",
|
|
559
|
+
"task_type": "Typ zadania"
|
|
560
|
+
},
|
|
561
|
+
"group": {
|
|
562
|
+
"heading": "Grupuj według",
|
|
563
|
+
"none": "Bez grupowania",
|
|
564
|
+
"module": "Moduł",
|
|
565
|
+
"task_type": "Typ zadania",
|
|
566
|
+
"initiative": "Inicjatywa",
|
|
567
|
+
"epic": "Epik",
|
|
568
|
+
"blocking_reason": "Czego wymaga",
|
|
569
|
+
"catchAll": {
|
|
570
|
+
"module": "Bez modułu",
|
|
571
|
+
"task_type": "Bez typu",
|
|
572
|
+
"initiative": "Poza inicjatywą",
|
|
573
|
+
"epic": "Poza epikiem",
|
|
574
|
+
"blocking_reason": "Niesklasyfikowane"
|
|
575
|
+
}
|
|
576
|
+
}
|
|
493
577
|
}
|
|
494
578
|
},
|
|
495
579
|
"contextAttachments": {
|
|
@@ -1124,11 +1208,12 @@
|
|
|
1124
1208
|
"title": "Struktura",
|
|
1125
1209
|
"hint": "Gdzie w usłudze znajduje się to zadanie i jakich standardów kodu przestrzegają jego agenci.",
|
|
1126
1210
|
"module": "Moduł",
|
|
1127
|
-
"modulePlaceholder": "
|
|
1128
|
-
"moduleHint": "Moduł usługi, do którego należy to zadanie
|
|
1211
|
+
"modulePlaceholder": "Wybierz lub wpisz moduł",
|
|
1212
|
+
"moduleHint": "Moduł usługi, do którego należy to zadanie; tablica grupuje po nim kolumny. Moduł, który jeszcze nie istnieje, powstaje w chwili wdrożenia zadania.",
|
|
1129
1213
|
"bestPractices": "Dobre praktyki",
|
|
1130
1214
|
"bestPracticesEmpty": "Brak. Agenci stosują swoje domyślne wytyczne.",
|
|
1131
|
-
"bestPracticesHint": "Fragmenty dobrych praktyk dołączane do promptów agentów tego zadania, oprócz standardów na poziomie usługi."
|
|
1215
|
+
"bestPracticesHint": "Fragmenty dobrych praktyk dołączane do promptów agentów tego zadania, oprócz standardów na poziomie usługi.",
|
|
1216
|
+
"moduleNone": "Bez modułu"
|
|
1132
1217
|
},
|
|
1133
1218
|
"runSettings": {
|
|
1134
1219
|
"title": "Ustawienia uruchamiania",
|
|
@@ -2387,6 +2472,7 @@
|
|
|
2387
2472
|
"shortcuts": "Skróty klawiszowe",
|
|
2388
2473
|
"bugHunt": "Polowanie na błędy",
|
|
2389
2474
|
"toggleUiMode": "Zmień tryb interfejsu",
|
|
2475
|
+
"chooseRole": "Zmień swoją rolę",
|
|
2390
2476
|
"foundationalServices": "Usługi fundamentalne",
|
|
2391
2477
|
"notificationSettings": "Zarządzaj routingiem powiadomień"
|
|
2392
2478
|
},
|
|
@@ -2411,6 +2497,7 @@
|
|
|
2411
2497
|
"shortcuts": "skróty klawiatura klawisze pomoc",
|
|
2412
2498
|
"bugHunt": "błąd bug polowanie triage zaległości zgłoszenia nieprzypisane",
|
|
2413
2499
|
"toggleUiMode": "interfejs tryb podstawowy zaawansowany pokaż ukryj",
|
|
2500
|
+
"chooseRole": "rola inżynier menedżer produktu projektant persona prostszy widok",
|
|
2414
2501
|
"tutorial": "samouczek przewodnik pomoc nauka wprowadzenie",
|
|
2415
2502
|
"foundationalServices": "wspólna możliwość platforma usługa api kontrakt openapi katalog",
|
|
2416
2503
|
"notificationSettings": "powiadomienia e-mail routing kanały skrzynka"
|
|
@@ -3643,6 +3730,15 @@
|
|
|
3643
3730
|
"advisory": "Informacyjny (zapisuj, nigdy nie wstrzymuj)",
|
|
3644
3731
|
"off": "Wyłączone (pomiń kontrolę)"
|
|
3645
3732
|
}
|
|
3733
|
+
},
|
|
3734
|
+
"doneLane": {
|
|
3735
|
+
"heading": "Kolumna „Ukończone”",
|
|
3736
|
+
"body": "Ile ukończonej pracy pozostaje widoczne w kolumnie „Ukończone” każdej usługi. Oba limity tylko ukrywają karty: ukryte zadanie zostaje na tablicy, nadal da się je wyszukać i nadal liczy się do sumy kolumny.",
|
|
3737
|
+
"maxItems": "Wyświetlane karty",
|
|
3738
|
+
"zeroHint": "Ukończone zadania będą liczone, ale nigdy wypisywane.",
|
|
3739
|
+
"ageToggle": "Ukryj także zadania ukończone dawno temu",
|
|
3740
|
+
"days": "Przechowuj (dni)",
|
|
3741
|
+
"hidesOnlyHint": "Nic nie jest usuwane. Zadania bez zapisanej daty ukończenia nigdy nie są ukrywane z powodu wieku."
|
|
3646
3742
|
}
|
|
3647
3743
|
},
|
|
3648
3744
|
"localModelEndpoints": {
|
|
@@ -7453,6 +7549,7 @@
|
|
|
7453
7549
|
"failedRun": "Nieudane uruchomienie",
|
|
7454
7550
|
"infrastructure": "Backend wykonawczy podłączony do tego workspace’u",
|
|
7455
7551
|
"advancedTier": "Zaawansowany tryb interfejsu",
|
|
7552
|
+
"fullSurface": "Rola inżyniera lub menedżera produktu",
|
|
7456
7553
|
"designSource": "Podłączone źródło projektów"
|
|
7457
7554
|
},
|
|
7458
7555
|
"overlay": {
|
|
@@ -7494,6 +7591,10 @@
|
|
|
7494
7591
|
"title": "Sterowanie tablicą",
|
|
7495
7592
|
"body": "Tymi przyciskami przybliżasz, oddalasz lub dopasowujesz całą tablicę do widoku."
|
|
7496
7593
|
},
|
|
7594
|
+
"role": {
|
|
7595
|
+
"title": "Twoja rola",
|
|
7596
|
+
"body": "Tablica dostosowuje się do twojej pracy: inżynierowie i menedżerowie produktu widzą wszystkie powierzchnie, projektanci prostszą, która wprowadza pracę i ją śledzi. Możesz to zmienić tutaj w każdej chwili."
|
|
7597
|
+
},
|
|
7497
7598
|
"interfaceTier": {
|
|
7498
7599
|
"title": "Tryb podstawowy i zaawansowany",
|
|
7499
7600
|
"body": "Interfejs startuje w trybie podstawowym, który pokazuje codzienne powierzchnie pracy. Przełącz się tutaj na zaawansowany, gdy potrzebujesz także powierzchni do eksperymentów, zakładania repozytoriów i pracy operacyjnej."
|
package/i18n/locales/tr.json
CHANGED
|
@@ -32,6 +32,25 @@
|
|
|
32
32
|
"switchTo": "{mode} moduna geç",
|
|
33
33
|
"pinned": "Bu dağıtım tarafından belirlendi"
|
|
34
34
|
},
|
|
35
|
+
"uiRole": {
|
|
36
|
+
"switcher": "Rolünüz",
|
|
37
|
+
"roles": {
|
|
38
|
+
"engineer": "Mühendis",
|
|
39
|
+
"productManager": "Ürün yöneticisi",
|
|
40
|
+
"designer": "Tasarımcı"
|
|
41
|
+
},
|
|
42
|
+
"hints": {
|
|
43
|
+
"engineer": "Her şey: işi planlama, çalıştırma, inceleyip birleştirme ve işin üzerinde koştuğu platformu kurma.",
|
|
44
|
+
"productManager": "Mühendisle aynı yüzeyler: işi planlama, çalıştırma ve birleştirmeye kadar takip etme.",
|
|
45
|
+
"designer": "Daha yalın bir pano: panoda hâlihazırda bulunan servisler, süren işler ve bir tasarımdan ya da sorundan açılan yeni görevler."
|
|
46
|
+
},
|
|
47
|
+
"prompt": {
|
|
48
|
+
"title": "Ne üzerinde çalışıyorsunuz?",
|
|
49
|
+
"intro": "En yakın seçeneği seçin; uygulama o işin ihtiyaç duyduğu yüzeylerle açılır. Bu, NE GÖRDÜĞÜNÜZÜ değiştirir, ne yapabileceğinizi değil.",
|
|
50
|
+
"change": "Bunu kenar çubuğunun üstünden dilediğiniz zaman değiştirebilirsiniz.",
|
|
51
|
+
"later": "Şimdi değil"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
35
54
|
"common": {
|
|
36
55
|
"loading": "Yükleniyor…",
|
|
37
56
|
"save": "Kaydet",
|
|
@@ -490,6 +509,71 @@
|
|
|
490
509
|
"label": "Epik",
|
|
491
510
|
"activeCount": "{count} etkin",
|
|
492
511
|
"noTasksYet": "Henüz görev yok"
|
|
512
|
+
},
|
|
513
|
+
"lanes": {
|
|
514
|
+
"viewTitle": "Düzenle",
|
|
515
|
+
"resetView": "Varsayılanlara sıfırla",
|
|
516
|
+
"notStarted": {
|
|
517
|
+
"label": "Başlamadı",
|
|
518
|
+
"empty": "Ele alınmayı bekleyen bir şey yok."
|
|
519
|
+
},
|
|
520
|
+
"inProgress": {
|
|
521
|
+
"label": "Sürüyor",
|
|
522
|
+
"empty": "Devam eden çalıştırma yok."
|
|
523
|
+
},
|
|
524
|
+
"needsYou": {
|
|
525
|
+
"label": "Seni bekliyor",
|
|
526
|
+
"empty": "Seni bekleyen bir şey yok."
|
|
527
|
+
},
|
|
528
|
+
"done": {
|
|
529
|
+
"label": "Tamamlandı",
|
|
530
|
+
"empty": "Henüz tamamlanan bir şey yok.",
|
|
531
|
+
"hiddenByCap": "+{count} gösterilmiyor",
|
|
532
|
+
"hiddenByAge": "+{count} saklama penceresinin dışında",
|
|
533
|
+
"undated": "{count} kayıtlı tarihi yok",
|
|
534
|
+
"allWithheld": "Tamamlanan görevler burada sayılır ancak bu panonun ayarları gereği listelenmez."
|
|
535
|
+
},
|
|
536
|
+
"reason": {
|
|
537
|
+
"unstarted": "Başlamaya hazır",
|
|
538
|
+
"dependencies": "Bir bağımlılığı bekliyor",
|
|
539
|
+
"running": "Çalışıyor",
|
|
540
|
+
"backgroundReview": "Arka planda inceleniyor",
|
|
541
|
+
"decision": "Karar gerekiyor",
|
|
542
|
+
"approval": "Onay gerekiyor",
|
|
543
|
+
"failed": "Çalıştırma başarısız",
|
|
544
|
+
"budgetPaused": "Harcama bütçesi nedeniyle duraklatıldı",
|
|
545
|
+
"prAwaitingMerge": "Pull request birleştirilmeyi bekliyor",
|
|
546
|
+
"parked": "Bir kişiyi bekliyor",
|
|
547
|
+
"unclassified": "Tanınmayan durum",
|
|
548
|
+
"merged": "Birleştirildi"
|
|
549
|
+
},
|
|
550
|
+
"sort": {
|
|
551
|
+
"heading": "Sıralama",
|
|
552
|
+
"smart": "Her kolon için önerilen",
|
|
553
|
+
"title": "Başlık (A–Z)",
|
|
554
|
+
"oldest_activity": "En sessizler önce",
|
|
555
|
+
"newest_activity": "En son etkin olanlar",
|
|
556
|
+
"longest_wait": "En uzun bekleyenler",
|
|
557
|
+
"severity_desc": "Önem (en yüksekten)",
|
|
558
|
+
"impact_desc": "Tahmini etki (en yüksekten)",
|
|
559
|
+
"task_type": "Görev türü"
|
|
560
|
+
},
|
|
561
|
+
"group": {
|
|
562
|
+
"heading": "Gruplama",
|
|
563
|
+
"none": "Gruplama yok",
|
|
564
|
+
"module": "Modül",
|
|
565
|
+
"task_type": "Görev türü",
|
|
566
|
+
"initiative": "Girişim",
|
|
567
|
+
"epic": "Epik",
|
|
568
|
+
"blocking_reason": "Neye ihtiyacı var",
|
|
569
|
+
"catchAll": {
|
|
570
|
+
"module": "Modül yok",
|
|
571
|
+
"task_type": "Tür yok",
|
|
572
|
+
"initiative": "Bir girişimde değil",
|
|
573
|
+
"epic": "Bir epikte değil",
|
|
574
|
+
"blocking_reason": "Sınıflandırılmadı"
|
|
575
|
+
}
|
|
576
|
+
}
|
|
493
577
|
}
|
|
494
578
|
},
|
|
495
579
|
"contextAttachments": {
|
|
@@ -1124,11 +1208,12 @@
|
|
|
1124
1208
|
"title": "Yapı",
|
|
1125
1209
|
"hint": "Bu görevin servisi içinde nerede bulunduğu ve ajanlarının hangi kod standartlarını izlediği.",
|
|
1126
1210
|
"module": "Modül",
|
|
1127
|
-
"modulePlaceholder": "
|
|
1128
|
-
"moduleHint": "Bu görevin ait olduğu servis modül
|
|
1211
|
+
"modulePlaceholder": "Bir modül seç veya yaz",
|
|
1212
|
+
"moduleHint": "Bu görevin ait olduğu servis modülü; pano kolonları buna göre gruplar. Henüz var olmayan bir modül, görev uygulandığında oluşturulur.",
|
|
1129
1213
|
"bestPractices": "En iyi uygulamalar",
|
|
1130
1214
|
"bestPracticesEmpty": "Yok. Ajanlar varsayılan yönergelerini izler.",
|
|
1131
|
-
"bestPracticesHint": "Servis düzeyindeki standartlara ek olarak bu görevin ajanlarının prompt'larına eklenen en iyi uygulama parçaları."
|
|
1215
|
+
"bestPracticesHint": "Servis düzeyindeki standartlara ek olarak bu görevin ajanlarının prompt'larına eklenen en iyi uygulama parçaları.",
|
|
1216
|
+
"moduleNone": "Modül yok"
|
|
1132
1217
|
},
|
|
1133
1218
|
"runSettings": {
|
|
1134
1219
|
"title": "Çalıştırma ayarları",
|
|
@@ -2387,6 +2472,7 @@
|
|
|
2387
2472
|
"shortcuts": "Klavye kısayolları",
|
|
2388
2473
|
"bugHunt": "Hata avı",
|
|
2389
2474
|
"toggleUiMode": "Arayüz modunu değiştir",
|
|
2475
|
+
"chooseRole": "Rolünüzü değiştirin",
|
|
2390
2476
|
"foundationalServices": "Temel hizmetler",
|
|
2391
2477
|
"notificationSettings": "Bildirim yönlendirmesini yönet"
|
|
2392
2478
|
},
|
|
@@ -2411,6 +2497,7 @@
|
|
|
2411
2497
|
"shortcuts": "kısayollar klavye tuşlar yardım",
|
|
2412
2498
|
"bugHunt": "hata bug av önceliklendirme birikmiş kayıt atanmamış",
|
|
2413
2499
|
"toggleUiMode": "arayüz mod temel gelişmiş göster gizle",
|
|
2500
|
+
"chooseRole": "rol mühendis ürün yöneticisi tasarımcı persona daha yalın görünüm",
|
|
2414
2501
|
"tutorial": "eğitim tur rehber yardım öğren tanıtım",
|
|
2415
2502
|
"foundationalServices": "ortak yetenek platform hizmet api sözleşme openapi katalog",
|
|
2416
2503
|
"notificationSettings": "bildirimler e-posta yönlendirme kanallar gelen kutusu"
|
|
@@ -3785,6 +3872,15 @@
|
|
|
3785
3872
|
"advisory": "Bilgilendirici (kaydet, asla bekletme)",
|
|
3786
3873
|
"off": "Kapalı (denetimi atla)"
|
|
3787
3874
|
}
|
|
3875
|
+
},
|
|
3876
|
+
"doneLane": {
|
|
3877
|
+
"heading": "«Tamamlandı» kolonu",
|
|
3878
|
+
"body": "Her servis çerçevesinin «Tamamlandı» kolonunun ne kadar bitmiş işi görünür tuttuğu. İki sınır da yalnızca kartları gizler: gizlenen bir görev panoda kalır, aranabilir kalır ve kolonun toplamına dahil kalır.",
|
|
3879
|
+
"maxItems": "Gösterilen kartlar",
|
|
3880
|
+
"zeroHint": "Tamamlanan görevler sayılacak ama hiç listelenmeyecek.",
|
|
3881
|
+
"ageToggle": "Uzun süre önce tamamlanan görevleri de gizle",
|
|
3882
|
+
"days": "Sakla (gün)",
|
|
3883
|
+
"hidesOnlyHint": "Hiçbir şey silinmez. Tamamlanma tarihi kayıtlı olmayan görevler yaşları nedeniyle asla gizlenmez."
|
|
3788
3884
|
}
|
|
3789
3885
|
},
|
|
3790
3886
|
"localModelEndpoints": {
|
|
@@ -7453,6 +7549,7 @@
|
|
|
7453
7549
|
"failedRun": "Başarısız olmuş bir çalıştırma",
|
|
7454
7550
|
"infrastructure": "Bu çalışma alanına bağlı bir yürütme arka ucu",
|
|
7455
7551
|
"advancedTier": "Gelişmiş arayüz modu",
|
|
7552
|
+
"fullSurface": "Mühendis veya Ürün yöneticisi rolü",
|
|
7456
7553
|
"designSource": "Bağlı bir tasarım kaynağı"
|
|
7457
7554
|
},
|
|
7458
7555
|
"overlay": {
|
|
@@ -7494,6 +7591,10 @@
|
|
|
7494
7591
|
"title": "Pano denetimleri",
|
|
7495
7592
|
"body": "Bu denetimlerle yakınlaşır, uzaklaşır veya tüm panoyu görünüme sığdırırsınız."
|
|
7496
7593
|
},
|
|
7594
|
+
"role": {
|
|
7595
|
+
"title": "Rolünüz",
|
|
7596
|
+
"body": "Pano yaptığınız işe göre ayarlanır: mühendisler ve ürün yöneticileri tüm yüzeyleri görür, tasarımcılar ise işi içeri alıp takip eden daha yalın bir pano kullanır. Bunu buradan dilediğiniz zaman değiştirebilirsiniz."
|
|
7597
|
+
},
|
|
7497
7598
|
"interfaceTier": {
|
|
7498
7599
|
"title": "Temel ve gelişmiş",
|
|
7499
7600
|
"body": "Arayüz, günlük çalışma yüzeylerini gösteren temel modda başlar. Deneme, depo kurma ve işletme yüzeylerini de istediğinizde buradan gelişmiş moda geçin."
|
package/i18n/locales/uk.json
CHANGED
|
@@ -32,6 +32,25 @@
|
|
|
32
32
|
"switchTo": "Перейти на {mode}",
|
|
33
33
|
"pinned": "Визначено цим розгортанням"
|
|
34
34
|
},
|
|
35
|
+
"uiRole": {
|
|
36
|
+
"switcher": "Ваша роль",
|
|
37
|
+
"roles": {
|
|
38
|
+
"engineer": "Інженер",
|
|
39
|
+
"productManager": "Продукт-менеджер",
|
|
40
|
+
"designer": "Дизайнер"
|
|
41
|
+
},
|
|
42
|
+
"hints": {
|
|
43
|
+
"engineer": "Усе: планувати роботу, запускати її, перевіряти та зливати, а також налаштовувати платформу, на якій це працює.",
|
|
44
|
+
"productManager": "Ті самі поверхні, що й у інженера: планувати роботу, запускати її та супроводжувати до злиття.",
|
|
45
|
+
"designer": "Простіша дошка: сервіси, які вже на ній, робота в процесі та нові завдання з дизайну або звернення."
|
|
46
|
+
},
|
|
47
|
+
"prompt": {
|
|
48
|
+
"title": "Над чим ви працюєте?",
|
|
49
|
+
"intro": "Виберіть найближчий варіант, і застосунок відкриється на поверхнях, потрібних для цієї роботи. Це змінює те, що ви БАЧИТЕ, а не те, що вам дозволено.",
|
|
50
|
+
"change": "Це можна змінити будь-коли вгорі бічної панелі.",
|
|
51
|
+
"later": "Не зараз"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
35
54
|
"common": {
|
|
36
55
|
"loading": "Завантаження…",
|
|
37
56
|
"save": "Зберегти",
|
|
@@ -490,6 +509,71 @@
|
|
|
490
509
|
"label": "Епік",
|
|
491
510
|
"activeCount": "{count} активних",
|
|
492
511
|
"noTasksYet": "Поки немає завдань"
|
|
512
|
+
},
|
|
513
|
+
"lanes": {
|
|
514
|
+
"viewTitle": "Упорядкувати",
|
|
515
|
+
"resetView": "Скинути до типових значень",
|
|
516
|
+
"notStarted": {
|
|
517
|
+
"label": "Не розпочато",
|
|
518
|
+
"empty": "Немає нічого, що очікує на виконання."
|
|
519
|
+
},
|
|
520
|
+
"inProgress": {
|
|
521
|
+
"label": "У роботі",
|
|
522
|
+
"empty": "Немає активних запусків."
|
|
523
|
+
},
|
|
524
|
+
"needsYou": {
|
|
525
|
+
"label": "Потрібні ви",
|
|
526
|
+
"empty": "Ніщо не очікує на вас."
|
|
527
|
+
},
|
|
528
|
+
"done": {
|
|
529
|
+
"label": "Готово",
|
|
530
|
+
"empty": "Поки нічого не завершено.",
|
|
531
|
+
"hiddenByCap": "+{count} не показано",
|
|
532
|
+
"hiddenByAge": "+{count} поза вікном зберігання",
|
|
533
|
+
"undated": "{count} без записаної дати",
|
|
534
|
+
"allWithheld": "Завершені завдання тут підраховуються, але не перелічуються, згідно з налаштуваннями цієї дошки."
|
|
535
|
+
},
|
|
536
|
+
"reason": {
|
|
537
|
+
"unstarted": "Готове до старту",
|
|
538
|
+
"dependencies": "Очікує на залежність",
|
|
539
|
+
"running": "Виконується",
|
|
540
|
+
"backgroundReview": "Перевірка у фоні",
|
|
541
|
+
"decision": "Потрібне рішення",
|
|
542
|
+
"approval": "Потрібне схвалення",
|
|
543
|
+
"failed": "Запуск не вдався",
|
|
544
|
+
"budgetPaused": "Припинено через бюджет витрат",
|
|
545
|
+
"prAwaitingMerge": "Pull request очікує на злиття",
|
|
546
|
+
"parked": "Очікує на людину",
|
|
547
|
+
"unclassified": "Нерозпізнаний стан",
|
|
548
|
+
"merged": "Злито"
|
|
549
|
+
},
|
|
550
|
+
"sort": {
|
|
551
|
+
"heading": "Сортувати за",
|
|
552
|
+
"smart": "Рекомендовано для кожної колонки",
|
|
553
|
+
"title": "Назва (А–Я)",
|
|
554
|
+
"oldest_activity": "Найтихіші спершу",
|
|
555
|
+
"newest_activity": "Найактивніші останнім часом",
|
|
556
|
+
"longest_wait": "Ті, що чекають найдовше",
|
|
557
|
+
"severity_desc": "Критичність (від вищої)",
|
|
558
|
+
"impact_desc": "Оцінений вплив (від вищого)",
|
|
559
|
+
"task_type": "Тип завдання"
|
|
560
|
+
},
|
|
561
|
+
"group": {
|
|
562
|
+
"heading": "Групувати за",
|
|
563
|
+
"none": "Без групування",
|
|
564
|
+
"module": "Модуль",
|
|
565
|
+
"task_type": "Тип завдання",
|
|
566
|
+
"initiative": "Ініціатива",
|
|
567
|
+
"epic": "Епік",
|
|
568
|
+
"blocking_reason": "Що потрібно",
|
|
569
|
+
"catchAll": {
|
|
570
|
+
"module": "Без модуля",
|
|
571
|
+
"task_type": "Без типу",
|
|
572
|
+
"initiative": "Поза ініціативою",
|
|
573
|
+
"epic": "Поза епіком",
|
|
574
|
+
"blocking_reason": "Не класифіковано"
|
|
575
|
+
}
|
|
576
|
+
}
|
|
493
577
|
}
|
|
494
578
|
},
|
|
495
579
|
"contextAttachments": {
|
|
@@ -1124,11 +1208,12 @@
|
|
|
1124
1208
|
"title": "Структура",
|
|
1125
1209
|
"hint": "Де це завдання розташоване у своєму сервісі та яких стандартів коду дотримуються його агенти.",
|
|
1126
1210
|
"module": "Модуль",
|
|
1127
|
-
"modulePlaceholder": "
|
|
1128
|
-
"moduleHint": "Модуль сервісу, до якого належить це
|
|
1211
|
+
"modulePlaceholder": "Виберіть або введіть модуль",
|
|
1212
|
+
"moduleHint": "Модуль сервісу, до якого належить це завдання; дошка групує колонки за ним. Модуль, якого ще немає, створюється під час реалізації завдання.",
|
|
1129
1213
|
"bestPractices": "Найкращі практики",
|
|
1130
1214
|
"bestPracticesEmpty": "Немає. Агенти дотримуються типових інструкцій.",
|
|
1131
|
-
"bestPracticesHint": "Фрагменти найкращих практик, що додаються до промптів агентів цього завдання, на додачу до стандартів рівня сервісу."
|
|
1215
|
+
"bestPracticesHint": "Фрагменти найкращих практик, що додаються до промптів агентів цього завдання, на додачу до стандартів рівня сервісу.",
|
|
1216
|
+
"moduleNone": "Без модуля"
|
|
1132
1217
|
},
|
|
1133
1218
|
"runSettings": {
|
|
1134
1219
|
"title": "Налаштування запуску",
|
|
@@ -2387,6 +2472,7 @@
|
|
|
2387
2472
|
"shortcuts": "Комбінації клавіш",
|
|
2388
2473
|
"bugHunt": "Полювання на помилки",
|
|
2389
2474
|
"toggleUiMode": "Змінити режим інтерфейсу",
|
|
2475
|
+
"chooseRole": "Змінити роль",
|
|
2390
2476
|
"foundationalServices": "Базові сервіси",
|
|
2391
2477
|
"notificationSettings": "Керувати маршрутизацією сповіщень"
|
|
2392
2478
|
},
|
|
@@ -2411,6 +2497,7 @@
|
|
|
2411
2497
|
"shortcuts": "комбінації клавіатура клавіші довідка",
|
|
2412
2498
|
"bugHunt": "помилка баг полювання сортування беклог запити не призначені",
|
|
2413
2499
|
"toggleUiMode": "інтерфейс режим базовий розширений показати сховати",
|
|
2500
|
+
"chooseRole": "роль інженер продукт-менеджер дизайнер персона простіший вигляд",
|
|
2414
2501
|
"tutorial": "навчання тур посібник довідка допомога знайомство",
|
|
2415
2502
|
"foundationalServices": "спільна можливість платформа сервіс api контракт openapi каталог",
|
|
2416
2503
|
"notificationSettings": "сповіщення пошта маршрутизація канали скринька"
|
|
@@ -3643,6 +3730,15 @@
|
|
|
3643
3730
|
"advisory": "Рекомендаційний (записувати, ніколи не зупиняти)",
|
|
3644
3731
|
"off": "Вимкнено (пропускати перевірку)"
|
|
3645
3732
|
}
|
|
3733
|
+
},
|
|
3734
|
+
"doneLane": {
|
|
3735
|
+
"heading": "Колонка «Готово»",
|
|
3736
|
+
"body": "Скільки завершеної роботи колонка «Готово» кожного сервісу тримає на видноті. Обидва обмеження лише приховують картки: приховане завдання залишається на дошці, залишається доступним для пошуку й залишається у загальній кількості колонки.",
|
|
3737
|
+
"maxItems": "Показані картки",
|
|
3738
|
+
"zeroHint": "Завершені завдання підраховуватимуться, але не перелічуватимуться.",
|
|
3739
|
+
"ageToggle": "Також приховувати завдання, завершені давно",
|
|
3740
|
+
"days": "Зберігати (днів)",
|
|
3741
|
+
"hidesOnlyHint": "Нічого не видаляється. Завдання без записаної дати завершення ніколи не приховуються за віком."
|
|
3646
3742
|
}
|
|
3647
3743
|
},
|
|
3648
3744
|
"localModelEndpoints": {
|
|
@@ -7453,6 +7549,7 @@
|
|
|
7453
7549
|
"failedRun": "Запуск, що завершився помилкою",
|
|
7454
7550
|
"infrastructure": "Бекенд виконання, підключений до цього робочого простору",
|
|
7455
7551
|
"advancedTier": "Розширений режим інтерфейсу",
|
|
7552
|
+
"fullSurface": "Роль інженера або продукт-менеджера",
|
|
7456
7553
|
"designSource": "Підключене джерело дизайну"
|
|
7457
7554
|
},
|
|
7458
7555
|
"overlay": {
|
|
@@ -7494,6 +7591,10 @@
|
|
|
7494
7591
|
"title": "Керування дошкою",
|
|
7495
7592
|
"body": "Цими елементами ви наближаєте, віддаляєте або вміщуєте всю дошку у видиму область."
|
|
7496
7593
|
},
|
|
7594
|
+
"role": {
|
|
7595
|
+
"title": "Ваша роль",
|
|
7596
|
+
"body": "Дошка налаштовується під вашу роботу: інженери та продукт-менеджери бачать усі поверхні, а дизайнери бачать простішу, яка приносить роботу й супроводжує її. Це можна змінити тут будь-коли."
|
|
7597
|
+
},
|
|
7497
7598
|
"interfaceTier": {
|
|
7498
7599
|
"title": "Базовий і розширений режим",
|
|
7499
7600
|
"body": "Інтерфейс стартує в базовому режимі, який показує щоденні робочі поверхні. Перемкніться тут на розширений, коли потрібні також поверхні для експериментів, створення репозиторіїв і операційної роботи."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.276.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.41",
|
|
42
42
|
"wretch": "^3.0.9",
|
|
43
|
-
"@cat-factory/contracts": "0.
|
|
43
|
+
"@cat-factory/contracts": "0.315.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import TaskCard from './TaskCard.vue'
|
|
3
|
-
import { useBlockDrag } from '~/composables/useBlockDrag'
|
|
4
|
-
|
|
5
|
-
const props = defineProps<{ taskId: string }>()
|
|
6
|
-
const board = useBoardStore()
|
|
7
|
-
const { t } = useI18n()
|
|
8
|
-
const expansion = useTaskExpansionStore()
|
|
9
|
-
const task = computed(() => board.getBlock(props.taskId))
|
|
10
|
-
const { draggingId, startDrag } = useBlockDrag()
|
|
11
|
-
|
|
12
|
-
// An expanded pipeline grows downward over its neighbours, so it must stack above the
|
|
13
|
-
// other (compact) task cards — never let a neighbour render on top of the pipeline. Reads
|
|
14
|
-
// the same predicate the pipeline itself renders on, so the two can't disagree.
|
|
15
|
-
const expanded = computed(() => expansion.isExpanded(props.taskId))
|
|
16
|
-
|
|
17
|
-
// Once a task is merged it stops being a unit of work and becomes part of the
|
|
18
|
-
// architecture: it no longer renders as a draggable card (arrows fall back to its
|
|
19
|
-
// container), so we never leave a zero-size anchor behind.
|
|
20
|
-
const merged = computed(() => task.value?.status === 'done')
|
|
21
|
-
|
|
22
|
-
function onHandle(e: PointerEvent) {
|
|
23
|
-
if (task.value) startDrag(task.value, e, { reparent: true })
|
|
24
|
-
}
|
|
25
|
-
</script>
|
|
26
|
-
|
|
27
|
-
<template>
|
|
28
|
-
<template v-if="task">
|
|
29
|
-
<!-- in-flight task → draggable work card (merged tasks render nothing) -->
|
|
30
|
-
<div
|
|
31
|
-
v-if="!merged"
|
|
32
|
-
class="absolute w-[210px]"
|
|
33
|
-
:style="{
|
|
34
|
-
left: task.position.x + 'px',
|
|
35
|
-
top: task.position.y + 'px',
|
|
36
|
-
zIndex: draggingId === taskId ? 60 : expanded ? 20 : 10,
|
|
37
|
-
// While this task is being dragged it must not capture hit-tests, so the
|
|
38
|
-
// drop-zone (service or module) beneath the cursor can be resolved on
|
|
39
|
-
// release — including the drag handle, which lives in this wrapper above
|
|
40
|
-
// the card and would otherwise mask the zone under it.
|
|
41
|
-
pointerEvents: draggingId === taskId ? 'none' : undefined,
|
|
42
|
-
}"
|
|
43
|
-
>
|
|
44
|
-
<!-- drag handle (`nopan` so the pane doesn't pan on a start-drag from here) -->
|
|
45
|
-
<div
|
|
46
|
-
class="nodrag nopan flex cursor-grab touch-none items-center justify-center rounded-t-lg border border-b-0 border-slate-700 bg-slate-800/80 py-px active:cursor-grabbing pointer-coarse:py-2"
|
|
47
|
-
:title="t('board.frame.dragTask')"
|
|
48
|
-
@pointerdown="onHandle"
|
|
49
|
-
>
|
|
50
|
-
<UIcon
|
|
51
|
-
name="i-lucide-grip-horizontal"
|
|
52
|
-
class="h-3 w-3 text-slate-500 pointer-coarse:h-5 pointer-coarse:w-5"
|
|
53
|
-
/>
|
|
54
|
-
</div>
|
|
55
|
-
<TaskCard :task-id="taskId" class="!rounded-t-none" />
|
|
56
|
-
</div>
|
|
57
|
-
</template>
|
|
58
|
-
</template>
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import DraggableTask from './DraggableTask.vue'
|
|
3
|
-
import ResizeGrips from './ResizeGrips.vue'
|
|
4
|
-
import { MODULE_META } from '~/utils/catalog'
|
|
5
|
-
import { useBlockDrag } from '~/composables/useBlockDrag'
|
|
6
|
-
|
|
7
|
-
const props = defineProps<{ moduleId: string }>()
|
|
8
|
-
const board = useBoardStore()
|
|
9
|
-
const ui = useUiStore()
|
|
10
|
-
const { t } = useI18n()
|
|
11
|
-
|
|
12
|
-
const mod = computed(() => board.getBlock(props.moduleId))
|
|
13
|
-
const tasks = computed(() => board.tasksOf(props.moduleId))
|
|
14
|
-
const size = computed(() => board.containerSize(props.moduleId))
|
|
15
|
-
const selected = computed(() => ui.selectedBlockId === props.moduleId)
|
|
16
|
-
|
|
17
|
-
// A module groups the tasks inside it. We label it by how many tasks are still in
|
|
18
|
-
// flight, falling back to the total task count once everything inside has merged.
|
|
19
|
-
const inflight = computed(() => tasks.value.filter((t) => t.status !== 'done').length)
|
|
20
|
-
const total = computed(() => tasks.value.length)
|
|
21
|
-
|
|
22
|
-
const { draggingId, startDrag } = useBlockDrag()
|
|
23
|
-
|
|
24
|
-
// modules move within their service but don't get reparented
|
|
25
|
-
function onHandle(e: PointerEvent) {
|
|
26
|
-
if (mod.value) startDrag(mod.value, e)
|
|
27
|
-
}
|
|
28
|
-
</script>
|
|
29
|
-
|
|
30
|
-
<template>
|
|
31
|
-
<div
|
|
32
|
-
v-if="mod"
|
|
33
|
-
:data-block-id="mod.id"
|
|
34
|
-
class="absolute rounded-xl border border-violet-500/40 bg-violet-500/[0.06]"
|
|
35
|
-
:class="{ 'ring-1 ring-white': selected }"
|
|
36
|
-
:style="{
|
|
37
|
-
left: mod.position.x + 'px',
|
|
38
|
-
top: mod.position.y + 'px',
|
|
39
|
-
width: size.w + 'px',
|
|
40
|
-
height: size.h + 'px',
|
|
41
|
-
zIndex: draggingId === moduleId ? 50 : 5,
|
|
42
|
-
}"
|
|
43
|
-
>
|
|
44
|
-
<!-- module header / drag handle (`nopan` so a start-drag moves it, not the pane) -->
|
|
45
|
-
<div
|
|
46
|
-
class="nodrag nopan flex h-[30px] cursor-grab touch-none items-center gap-1 rounded-t-xl bg-violet-500/15 px-2 active:cursor-grabbing"
|
|
47
|
-
@pointerdown="onHandle"
|
|
48
|
-
@click.stop="ui.select(moduleId)"
|
|
49
|
-
>
|
|
50
|
-
<UIcon
|
|
51
|
-
:name="MODULE_META.icon"
|
|
52
|
-
class="h-3.5 w-3.5 shrink-0"
|
|
53
|
-
:style="{ color: MODULE_META.color }"
|
|
54
|
-
/>
|
|
55
|
-
<span class="truncate text-[11px] font-semibold text-violet-100">{{ mod.title }}</span>
|
|
56
|
-
<span v-if="inflight" class="ms-auto shrink-0 text-[9px] text-violet-300/70">
|
|
57
|
-
{{ t('board.frame.taskCount', { count: inflight }, inflight) }}
|
|
58
|
-
</span>
|
|
59
|
-
<span v-else-if="total" class="ms-auto shrink-0 text-[9px] text-violet-300/70">
|
|
60
|
-
{{ t('board.frame.taskCount', { count: total }, total) }}
|
|
61
|
-
</span>
|
|
62
|
-
</div>
|
|
63
|
-
|
|
64
|
-
<!-- drop zone for this module's tasks -->
|
|
65
|
-
<div :data-drop-zone="mod.id" class="relative" :style="{ height: size.h - 30 + 'px' }">
|
|
66
|
-
<DraggableTask v-for="t in tasks" :key="t.id" :task-id="t.id" />
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
<!-- Every border and corner of the module box is a resize grip, the same component (and so
|
|
70
|
-
the same hit bands + content-preserving north/west behaviour) the service frame uses. -->
|
|
71
|
-
<ResizeGrips :block="mod" tone="module" />
|
|
72
|
-
</div>
|
|
73
|
-
</template>
|