Atopile extension webview'leri için frontend standartları: mimarı, sözleşmeler, tasarım sistemi ve test iş akışı.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/frontend
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/frontend/SKILL.md \
-o ~/.claude/skills/frontend/SKILL.md Bu beceriyi, atopile'de frontend özelliklerini oluştururken veya değiştirirken kullanın.
Varsayılan hedef, extension webview'leridir (ui-server + vscode-atopile).
Bağımlılık yüklemesi:
cd src/ui-server
bun install
Frontend-only döngüsü (backend entegrasyonu olmadan):
cd src/ui-server
bun run dev
bun run test
bun run build
Webview entegrasyonu döngüsü (backend + Vite):
cd src/ui-server
./dev.sh
Extension paketleme/yükleme döngüsü:
ato dev compile && ato dev install cursor
# veya
ato dev compile && ato dev install vscode
Komut referansı:
bun install: JS bağımlılıklarını yükleyin/senkronize edin.bun run dev: yerel Vite dev sunucusunu başlatın (frontend-only iterasyon).bun run test: yerel Vitest paketi bir kez çalıştırın.bun run build: yerel tsc && vite build çalıştırın../dev.sh: tarayıcıda entegrasyon testi için backend + Vite çalıştırın.ato dev compile: extension yapılarını derleyin (varsayılan hedef all).ato dev install cursor|vscode: en son derlenmiş extension .vsix yükleyin.ato dev ui: paylaşılan component kütüphanesi bileşenlerini gösteren bir web sayfası açın.src/ui-server/src/src/ui-server/src/api/src/ui-server/src/store/src/ui-server/src/hooks/src/ui-server/src/components/src/ui-server/src/components/shared/src/ui-server/src/utils/src/ui-server/src/styles/src/ui-server/src/types/src/ui-server/src/__tests__/src/vscode-atopile/src/src/atopile/visualizer/web/src/src/atopile/layout_server/frontend/src/src/ui-server'dan oluşturulur ve src/vscode-atopile tarafından yüklenir.ato dev compile ve ato dev install yaygın extension geliştirici döngüsüdür.src/atopile/visualizer/web ayrı bir uygulamadır ve referans desenidir, varsayılan hedef değildir.Değişiklikleri kapsam içinde ve tahmin edilebilir tutmak için bu desenleri kullanın.
components/, styles/, küçük hooks/ kullanımına dokununapi/ eşlemesi + store state geçişleri + UI'ı güncelleyinVarsayılan mimari:
Katman sınırları:
api/: HTTP + WS taşıması ve yük eşlemesistore/: yazılı uygulama state'i, aksiyonları, seçicilericomponents/: render/oluşturmautils/lib: saf dönüşümler/mantıkSchema-ilk sözleşme iş akışı:
Yapmayın:
Özellik başına bir kanonik kullanıcı akışı uygulayın.
Fallback akış dalları eklemeyin. Bağımlılık/state kullanılamıyorsa, aynı akış bağlamında açık bir dur-state hatası gösterin.
WebSocket'i şunlar için kullanın:
HTTP'yi şunlar için kullanın:
Gerekli WS istemci davranışı:
Önerilen WS istemci davranışı:
api/ modülünde merkezi hale getirinÖrnek zarf şekli:
type WsMessage =
| { type: "state"; data: AppState }
| { type: "event"; event: EventType; data: EventPayload }
| {
type: "action_result";
action: string;
requestId?: string;
result: { success: boolean; error?: string };
};
Yeni ilkel öğeler oluşturmadan önce:
src/ui-server/src/components/shared/ kontrol edin.src/ui-server/src/utils/ içinde mevcut mantığı kontrol edin.src/atopile/visualizer/web/src/lib/ ve src/atopile/visualizer/web/src/workers/ kontrol edin.src/vscode-atopile/src/ içinde tutun.Paylaşılan'a taşıyın:
Eşdeğerler oluşturmadan önce src/ui-server/src/components/shared/ içindeki bileşenleri yeniden kullanmayı tercih edin.
Yeni bir bileşen gerekiyorsa, onu src/ui-server/src/components/shared/ içinde oluşturun ve özellikte yeniden kullanın.
Mümkünse, karmaşık bileşenleri mevcut paylaşılan bileşenlerden oluşturun.
Bu yardımcıları genişletmeyi tercih edin:
src/ui-server/src/utils/codeHighlight.tsxsrc/ui-server/src/utils/nameValidation.tssrc/ui-server/src/utils/packageUtils.tssrc/ui-server/src/utils/searchUtils.tsYararlı bağımsız referans:
src/atopile/visualizer/web/src/lib/exportUtils.tsYazılı API sınırı örneği:
export async function fetchBuilds(
projectRoot: string,
): Promise<BuildSummary[]> {
const res = await fetch(
`/api/builds?project_root=${encodeURIComponent(projectRoot)}`,
);
if (!res.ok) throw new APIError(res.status, "Failed to fetch builds");
const data = (await res.json()) as { builds: BuildSummary[] };
return data.builds;
}
Tüm yüzeylerde uygulayın:
default/hover/focus-visible/active/disabled/loading)Tokenleştirilmiş kontrol örneği:
.btn-default {
background: var(--accent);
color: var(--text-on-accent);
border: 1px solid var(--accent);
border-radius: var(--radius-md);
padding: 0 var(--spacing-md);
}
.btn-default:hover:not(:disabled) {
background: var(--accent-hover);
border-color: var(--accent-hover);
}
.btn-default:focus-visible {
outline: 2px solid var(--info);
outline-offset: 1px;
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
Gerekli:
Gerekli:
requestAnimationFrame kullanınOperasyonel kontroller:
ui-server)src/ui-server/src/api/ içinde veri/aksiyon yöntemleri uygulayıncomponents/ içinde paneli oluşturuncomponents/shared/ ilkelleri yeniden kullanınutils/ veya özelleştirilmiş lib/ modülüne koyun.Bir kanonik akış kullanın:
Gerekli:
En azından test edin:
Önerilen:
Özellik başına minimum:
Örnek matris (build sırası):
Aracılar tarayıcı akışında önce kendi kendini test etmelidir:
cd src/ui-server
./dev.sh
Sonra:
İlgili sayfalar:
http://127.0.0.1:5173/http://127.0.0.1:5173/log-viewer.htmlhttp://127.0.0.1:5173/migrate.htmlhttp://127.0.0.1:5173/test-explorer.htmlBu yerleşik dev uç noktalarını kullanın:
curl -sS -X POST http://127.0.0.1:5173/api/screenshot \
-H 'Content-Type: application/json' \
-d '{"path":"/","name":"default","waitMs":1200}'
curl -sS -X POST http://127.0.0.1:5173/api/screenshot \
-H 'Content-Type: application/json' \
-d '{"path":"/","name":"projects-expanded","uiActions":[{"type":"openSection","sectionId":"projects"}],"uiActionWaitMs":600}'
curl -sS http://127.0.0.1:5173/api/ui-logs
Otomasyon korkuluğu:
data-testid veya semantik roller)Bir özellik ancak tüm bunlar doğru olduğunda yapılmış olur:
- [ ] Tek kanonik akış korunur (fallback yolu eklenmemiş)
- [ ] API/WS değişiklikleri için Pydantic modelleri güncellenmiş
- [ ] Oluşturulan TS schema/türleri yeniden oluşturulmuş ve işlenmiş
- [ ] WS yeniden bağlanma/resync davranışı doğrulanmış
- [ ] Tarayıcı dev viewer akışı doğrulanmış (`./dev.sh`)
- [ ] Ekran görüntüleri + UI günlükleri gözden geçirilmiş (onaylanmamış runtime hatası yok)
- [ ] Eklenen/güncellenen: store testi, taşıma testi, UI etkileşim testi
- [ ] Tarayıcı kontrolleri yapıldıktan sonra kullanıcıdan extension host'ta test etmesi istenir
Herhangi bir yaratıcı çalışmaya başlamadan önce bunu mutlaka kullanın - feature oluştururken, component inşa ederken, functionality eklerken veya davranış değiştirirken. Kullanıcı niyetini, gereksinimleri ve tasarımı implementation öncesinde araştırır.
Uygulama tamamlandığında, tüm testler geçtiğinde ve çalışmanızı nasıl entegre edeceğinize karar vermeniz gerektiğinde kullanın - merge, PR veya cleanup seçeneklerini sunarak geliştirme sürecinin tamamlanmasını rehberlik eder.
Kod incelemesi geri bildirimi alırken, önerileri uygulamadan önce kullanın; özellikle geri bildirim belirsiz veya teknik olarak şüpheli görünüyorsa - performatif anlaşmadan veya körü körüne uygulamadan ziyade teknik titizlik ve doğrulama gerekir.
Görevleri tamamlarken, büyük özellikleri hayata geçirirken veya merge etmeden önce çalışmanın gereksinimleri karşıladığını doğrulamak için kullanın.
Yeni bir feature üzerinde çalışmaya başlarken veya implementasyon planını yürütmeden önce kullanın - native araçlar veya git worktree fallback aracılığıyla izole edilmiş bir workspace sağlar.
Herhangi bir konuşma başlatırken kullanın - skill'lerin nasıl bulunacağını ve kullanılacağını belirler, clarification soruları da dahil olmak üzere HERHANGİ bir yanıt vermeden önce skill invocation gerektirir.