feat(tasks-ui): readability pass, height-budget fix and leftover sweep

The native port is finished off with the readability work the earlier rounds
left open, plus the cleanup of everything the shadcn era or the older canvas
left behind.

- Geometry: node height is now composed from named parts (chrome, two title
  lines, meta row) and per-node extras, so a teammate card that carries a task
  line no longer gets clipped by the old fixed 68px budget; the layout spec
  follows the new model and GRAPH_ROW_STRIDE stays exported for it.
- Readability: row rhythm (28-32px), three ink levels for title/meta/owner,
  truncation with title hints, current-row and hover expressed as an accent bar
  plus a hover fill (no shadows), phase frames and edges back on the l1/l2
  hairlines, control cluster uniformly 28px, drawer durations on tabular
  figures, kill action revealed on hover/focus without shifting the row, no
  horizontal overflow at 360px.
- Task window: the markdown body is pulled onto the page scale (12px body,
  12/13px headings, tightened list indent and paragraph spacing) while the
  shared MarkdownText/markdownTextProps contract is untouched.
- Cleanup: dead stylesheet rules, unused TSX exports and helpers, stale
  comments that still described the retired Variant-D canvas, zero-reference
  i18n keys across the dictionaries, and the Tailwind/shadcn/Variant-D
  narrative in the design doc, AGENTS.md and the plugin guide (kept as one
  short "why it was rolled back" section).

Verified here: typecheck and lint clean; 133 files / 1413 tests; build with no
radix-ui or --tw- strings in lib/client.js (988.9 KiB); the 70-assertion
real-browser contract at 70/70 with the 20 reference screenshots regenerated;
mount e2e 7/7.
This commit is contained in:
Menghuan1918
2026-09-27 22:18:19 +08:00
parent ae4280c70e
commit b554665bde
35 changed files with 856 additions and 1388 deletions
-36
View File
@@ -78,29 +78,16 @@ export const tr: Record<string, string> = {
openWithSettingsRemove: 'Kaldır',
openWithSettingsInvalidHint: 'Adı eksik veya {path}/scheme:// içermeyen şablonlu düzenleyiciler menüde gösterilmez',
newTab: 'Yeni sekme',
openExplorer: 'Gezgin',
brokenSymlink: 'Bozuk sembolik bağ',
openGit: 'Git paneli',
newTerminal: 'Yeni terminal',
terminalLimit: 'Terminal sınırına ulaşıldı (3)',
close: 'Kapat',
closeOtherTabs: 'Diğer sekmeleri kapat',
closeLeftTabs: 'Soldaki sekmeleri kapat',
closeRightTabs: 'Sağdaki sekmeleri kapat',
floatDropHint: 'Serbest pencerede açmak için bırakın',
dockToSidebar: 'Kenar çubuğuna geri dön',
pinTerminal: 'Terminali Sabitle',
pinAgentTerminal: 'Agent Terminalini Sabitle',
pinToWorkspace: 'Çalışma Alanına Sabitle',
pinToGlobal: 'Genel Olarak Sabitle',
unpinTerminal: 'Sabitlemeyi Kaldır',
pinnedTerminalTooltip: '{kind} · {scope} · {cwd}',
pinnedTerminalKindUi: 'UI Terminali',
pinnedTerminalKindAgent: 'Agent Terminali',
pinnedTerminalScopeWorkspace: 'Çalışma alanına sabitlendi',
pinnedTerminalScopeGlobal: 'Genel olarak sabitlendi',
pinnedRailLabel: 'Sabitlenmiş Terminaller',
closePinnedTerminal: 'Terminali Kapat',
collapseBottomPanel: 'Alt paneli daralt',
expandBottomPanel: 'Alt paneli genişlet',
terminalError: 'Terminal bağlantısı başarısız',
@@ -132,10 +119,6 @@ export const tr: Record<string, string> = {
loading: 'Yükleniyor…',
error: 'Yükleme başarısız',
retry: 'Yeniden dene',
splitLeft: 'Sola böl',
splitRight: 'Sağa böl',
splitUp: 'Yukarı böl',
splitDown: 'Aşağı böl',
notRepo: 'Bu dizin bir git deposu değil',
noChanges: 'Değişiklik yok',
statusTruncated: 'Çok fazla değişiklik var; yalnızca ilk 2000 giriş gösteriliyor',
@@ -145,7 +128,6 @@ export const tr: Record<string, string> = {
unstageAll: 'Tümünü sahnelemeden kaldır',
commitPlaceholder: 'İşleme iletisi (Ctrl+Enter)',
commit: 'İşle',
commitError: 'İşleme başarısız',
branch: 'Dal',
worktree: 'Çalışma ağacı',
checkoutError: 'Dal değiştirme başarısız',
@@ -169,7 +151,6 @@ export const tr: Record<string, string> = {
diffDeleted: 'Silindi',
diffRenamed: 'Yeniden adlandırıldı',
diffExpand: '{count} satır daha göster',
diffCollapse: 'Daralt',
discard: 'Değişiklikleri at',
discardTitle: 'Değişiklikleri at',
discardDesc: 'Bu, «{path}» öğesinin çalışma ağacı değişikliklerini atar (geri alınamaz).',
@@ -190,18 +171,14 @@ export const tr: Record<string, string> = {
loadMore: 'Daha fazla yükle',
historyLoadError: 'Daha fazla geçmiş yüklenemedi',
produced: 'Üretilenler',
producedOpen: 'Kenar çubuğunda aç',
disconnected: 'Terminal bağlantısı kesildi, yeniden bağlanılıyor…',
exited: 'Terminal süreci sonlandı',
noSession: 'Kenar çubuğunu kullanmak için bir oturum seçin',
pluginNotLoaded: 'Eklenti yüklenmedi; sekme kullanılamıyor:',
hiddenFiles: 'Gizli dosyalar',
parent: 'Üst dizin',
copied: 'Kopyalandı',
copy: 'Kopyala',
newFile: 'Yeni dosya',
openEditor: 'Düzenleyiciyi aç',
gitDetail: 'Değişiklik ayrıntılarını görüntüle',
referenceFile: '@dosya',
addToConversation: 'Sohbete ekle',
copyRelative: 'Göreli yolu kopyala',
@@ -245,7 +222,6 @@ export const tr: Record<string, string> = {
settingsSchemeCustomDesc: 'Tam denetim: özel CSS enjekte et (yerleşik stilleri geçersiz kılabilir) ve başlık çubuğu kaydırma mesafesini ayarla',
settingsSchemeDetectedSuffix: 'algılandı',
settingsCustomCssTitle: 'Özel CSS',
settingsCustomCssDesc: 'Sayfanın sonuna eklenen stiller (basamakta sonra yazılan kazanır; JS ile yazılmış satır içi değişkenleri geçersiz kılmak için !important kullanın)',
settingsCustomCssPlaceholder: '/* örn. özel çizili başlık çubuğu olan bir kabuk için 36px ayır */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
settingsSaveFailed: 'Kaydetme başarısız',
settingsConflict: 'Ayar başka bir pencerede değiştirildi — lütfen yeniden deneyin',
@@ -268,7 +244,6 @@ export const tr: Record<string, string> = {
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
settingsFontSizeTitle: 'Terminal yazı boyutu',
settingsFontSizeDesc: 'px cinsinden terminal yazı boyutu (9–32, varsayılan 13)',
settingsFontSizeSuffix: 'px',
settingsShellTitle: 'Kabuk yolu',
settingsShellDesc: 'Arayüz ve model terminalleri için başlatılan kabuk (mutlak yol veya yalın yürütülebilir). Boş, eski sırayı korur: yaml config.shell → $SHELL / oturum açma kabuğu / Windows powershell.exe. Sonradan açılan terminaller için geçerli',
settingsShellPlaceholder: 'ör. /bin/zsh (boş = otomatik)',
@@ -310,19 +285,14 @@ export const tr: Record<string, string> = {
browserEmbedBlockedDesc: 'Site başka sayfalar içinde gösterilmeyi yasaklıyor (X-Frame-Options / frame-ancestors), bu yüzden kenar çubuğunda yüklenemiyor. Bunun yerine doğrudan tarayıcınızda açın.',
browserEmbedAnyway: 'Yine de yükle',
subagent: 'Görevler',
openSubagent: 'Görevler',
subagentMainAgent: 'Ana aracı',
subagentEmpty: 'Alt aracı yok',
subagentEmptyDesc: 'Ana aracının altında doğan alt aracılar burada görünür',
subagentRunning: 'Çalışıyor',
subagentInactive: 'Etkin değil',
subagentModeOneShot: 'Tek seferlik',
subagentModeContinuable: 'Sürdürülebilir',
subagentCount: '{count} alt aracı',
subagentCountRunning: '{count} alt aracı · {running} çalışıyor',
subagentDiagCorrupt: 'Bozuk',
subagentDiagUnsupported: 'Desteklenmiyor',
subagentDiagUnavailable: 'Kullanılamıyor',
subagentThinking: 'Düşünüyor…',
sideChat: 'Yan sohbet (beta)',
sideChatNew: 'Yeni iş parçacığı',
@@ -343,10 +313,7 @@ export const tr: Record<string, string> = {
sideChatThink: 'Düşünme',
sideChatInjection: 'Bağlam enjekte edildi',
sideChatSend: 'Gönder',
sideChatCancel: 'Durdur',
sideChatCancelTitle: 'Geçerli turu durdur (sıradaki iş korunur)',
sideChatClose: 'İş parçacığını kapat',
sideChatCloseTitle: 'İş parçacığının aracısını serbest bırak (geçmiş korunur)',
sideChatError: 'Yan sohbet hatası: {message}',
sideChatTurnUsage: 'Giriş {input} tok · Çıkış {output} tok',
sideChatBlockCollapse: 'Daralt',
@@ -382,7 +349,6 @@ export const tr: Record<string, string> = {
jobDurationMinutes: '{minutes} dk {seconds} sn',
jobDurationHours: '{hours} sa {minutes} dk',
jobViewOutput: 'Çıkışı görüntüle',
jobHideOutput: 'Çıkışı gizle',
jobNoOutput: 'Henüz çıkış yok',
jobNotReadYet: 'Modelin bu işin çıkışını okuması bekleniyor; model job_output çalıştırdıktan sonra çıkış burada görünür',
jobOutputTruncated: 'Çıkış kırpıldı',
@@ -400,7 +366,6 @@ export const tr: Record<string, string> = {
settingsViewModeGraphDesc: 'Yakınlaştırma ve kaydırma ile katmanlı düğüm grafiği',
settingsViewModeTree: 'Ağaç',
settingsViewModeTreeDesc: 'Klasik girintili ağaç, klavye ile gezilebilir',
tasksWorkflowMember: 'İş akışı üyesi',
tasksFoldCompleted: '✓ {count} tamamlandı',
tasksFoldExpand: 'Tamamlanan düğümleri genişlet',
tasksFoldCollapse: 'Tamamlanan düğümleri daralt',
@@ -421,7 +386,6 @@ export const tr: Record<string, string> = {
tasksStateError: 'Hata',
teamBoard: 'Takım görev panosu',
teamChip: 'Takım {members} üye · {tasks} görev',
teamMembers: 'Üyeler',
teamTasksEmpty: 'Henüz paylaşılan görev yok',
teamTaskCreate: 'Yeni görev',
teamTaskSubject: 'Konu',