@atezer/figma-mcp-bridge 1.7.24 → 1.7.26
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/.claude-plugin/plugin.json +37 -0
- package/.cursor-plugin/plugin.json +21 -0
- package/CHANGELOG.md +37 -0
- package/README.md +4 -3
- package/agents/ds-auditor.md +35 -0
- package/agents/screen-builder.md +35 -0
- package/agents/token-syncer.md +32 -0
- package/assets/logo.png +0 -0
- package/commands/add-library.md +122 -0
- package/commands/ds-add.md +255 -0
- package/commands/ds-sync.md +314 -0
- package/commands/implement.md +43 -0
- package/commands/install-library.md +73 -0
- package/commands/setup.md +26 -0
- package/commands/test.md +39 -0
- package/commands/update.md +25 -0
- package/dist/core/audit-log.d.ts +4 -0
- package/dist/core/audit-log.d.ts.map +1 -1
- package/dist/core/audit-log.js +12 -0
- package/dist/core/audit-log.js.map +1 -1
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +6 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/plugin-bridge-connector.d.ts +16 -16
- package/dist/core/plugin-bridge-connector.d.ts.map +1 -1
- package/dist/core/plugin-bridge-connector.js +2 -1
- package/dist/core/plugin-bridge-connector.js.map +1 -1
- package/dist/core/plugin-bridge-server.d.ts +5 -3
- package/dist/core/plugin-bridge-server.d.ts.map +1 -1
- package/dist/core/plugin-bridge-server.js +34 -22
- package/dist/core/plugin-bridge-server.js.map +1 -1
- package/dist/core/response-cache.d.ts +16 -0
- package/dist/core/response-cache.d.ts.map +1 -0
- package/dist/core/response-cache.js +46 -0
- package/dist/core/response-cache.js.map +1 -0
- package/dist/core/response-guard.d.ts +1 -1
- package/dist/core/response-guard.d.ts.map +1 -1
- package/dist/core/response-guard.js +20 -14
- package/dist/core/response-guard.js.map +1 -1
- package/dist/core/types/figma.d.ts +6 -0
- package/dist/core/types/figma.d.ts.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/local-plugin-only.d.ts.map +1 -1
- package/dist/local-plugin-only.js +202 -140
- package/dist/local-plugin-only.js.map +1 -1
- package/f-mcp-plugin/manifest.json +1 -1
- package/hooks/hooks.json +26 -0
- package/package.json +8 -1
- package/skills/BRAND_PROFILE_SCHEMA.md +113 -0
- package/skills/SKILL_INDEX.md +194 -0
- package/skills/TOOL_MAPPING.md +111 -0
- package/skills/ai-handoff-export/SKILL.md +262 -0
- package/skills/apply-figma-design-system/SKILL.md +104 -0
- package/skills/audit-figma-design-system/SKILL.md +278 -0
- package/skills/code-design-mapper/SKILL.md +370 -0
- package/skills/component-documentation/SKILL.md +198 -0
- package/skills/design-drift-detector/SKILL.md +407 -0
- package/skills/design-system-rules/SKILL.md +407 -0
- package/skills/design-token-pipeline/SKILL.md +619 -0
- package/skills/ds-impact-analysis/SKILL.md +266 -0
- package/skills/figjam-diagram-builder/SKILL.md +180 -0
- package/skills/figma-a11y-audit/SKILL.md +587 -0
- package/skills/figma-canvas-ops/SKILL.md +325 -0
- package/skills/figma-screen-analyzer/SKILL.md +243 -0
- package/skills/fix-figma-design-system-finding/SKILL.md +117 -0
- package/skills/fmcp-project-rules/SKILL.md +93 -0
- package/skills/generate-figma-library/SKILL.md +598 -0
- package/skills/generate-figma-screen/SKILL.md +689 -0
- package/skills/implement-design/SKILL.md +473 -0
- package/skills/ux-copy-guidance/SKILL.md +381 -0
- package/skills/visual-qa-compare/SKILL.md +174 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# Design System Güncelle (Resume Destekli)
|
|
2
|
+
|
|
3
|
+
Mevcut bir tasarım sistemi kütüphanesini Figma'dan senkronize eder. Tam sync, kısmi sync ve resume (yarım kalanı devam ettirme) destekler.
|
|
4
|
+
|
|
5
|
+
## Argüman
|
|
6
|
+
$ARGUMENTS
|
|
7
|
+
|
|
8
|
+
Argüman olabilir:
|
|
9
|
+
- Boş → aktif veya tek kütüphaneyi sync et (belirsizse kullanıcıya sor)
|
|
10
|
+
- `<library-id>` → o kütüphanenin tüm section'larını sync et
|
|
11
|
+
- `<library-id> <section>` → sadece o section (tokens, components, icons, mobile, assets)
|
|
12
|
+
- `<library-id> --restart` → checkpoint'ten bağımsız sıfırdan başla
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Adım 1: Hedef Belirleme
|
|
17
|
+
|
|
18
|
+
1. `$ARGUMENTS` boşsa:
|
|
19
|
+
- `.claude/design-systems/` altındaki kütüphaneleri listele
|
|
20
|
+
- Tek kütüphane → onu kullan
|
|
21
|
+
- Birden fazla → kullanıcıya sor: "Hangi kütüphaneyi güncelleyeyim?"
|
|
22
|
+
|
|
23
|
+
2. Kütüphane ID → `.claude/design-systems/<id>/` dizini yoksa:
|
|
24
|
+
```
|
|
25
|
+
❌ "<id>" adında bir kütüphane bulunamadı.
|
|
26
|
+
💡 Mevcut kütüphaneleri görmek için: ls .claude/design-systems/
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
3. Section belirtilmemişse → tüm section'lar (meta'ya göre)
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Adım 2: `_meta.md` Oku
|
|
34
|
+
|
|
35
|
+
`.claude/design-systems/<id>/_meta.md` dosyasını oku ve şu bilgileri çıkar:
|
|
36
|
+
|
|
37
|
+
- Kaynak-section eşleştirme tablosu
|
|
38
|
+
- Sync durumu (TAMAMLANDI / YARIM KALDI / HATA)
|
|
39
|
+
- Son sync tarihi
|
|
40
|
+
- İstatistikler
|
|
41
|
+
|
|
42
|
+
**Eğer durum "YARIM KALDI" ise:**
|
|
43
|
+
```
|
|
44
|
+
📋 Son sync yarım kalmış: components 87/163
|
|
45
|
+
Kaldığı yerden devam edeyim mi? (evet / sıfırdan başla / iptal)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Adım 3: Bağlantı Kontrolü
|
|
51
|
+
|
|
52
|
+
`mcp__figma-mcp-bridge__figma_list_connected_files` çağır.
|
|
53
|
+
|
|
54
|
+
Kaynak-section tablosundaki her file key için:
|
|
55
|
+
- Bağlı → ✅ işaretle
|
|
56
|
+
- Bağlı değil → ❌ işaretle
|
|
57
|
+
|
|
58
|
+
Hiçbir kaynak bağlı değilse → DUR:
|
|
59
|
+
```
|
|
60
|
+
❌ Hiçbir Figma kaynağı bağlı değil.
|
|
61
|
+
Lütfen:
|
|
62
|
+
1. İlgili Figma dosyalarını aç
|
|
63
|
+
2. F-MCP Bridge plugin'i çalıştır
|
|
64
|
+
3. Tekrar dene
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Bazı kaynaklar bağlı, bazıları değil → kullanıcıya bildir:
|
|
68
|
+
```
|
|
69
|
+
⚠️ Bazı kaynaklar bağlı değil:
|
|
70
|
+
✅ main (❖ SUI)
|
|
71
|
+
❌ assets (💼 Assets)
|
|
72
|
+
|
|
73
|
+
Sadece bağlı olanları güncelleyeyim mi? (evet / iptal)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Adım 4: Yedekleme
|
|
79
|
+
|
|
80
|
+
Her section'ın mevcut MD dosyasını `.bak` olarak kopyala:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Her section için
|
|
84
|
+
cp .claude/design-systems/<id>/tokens.md .claude/design-systems/<id>/tokens.md.bak
|
|
85
|
+
cp .claude/design-systems/<id>/components.md .claude/design-systems/<id>/components.md.bak
|
|
86
|
+
# ...
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Not:** Dosya yoksa `.bak` oluşturulmaz (yeni section için sorun değil).
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Adım 5: Resume Kontrolü (Her Section İçin)
|
|
94
|
+
|
|
95
|
+
Her hedef section için:
|
|
96
|
+
|
|
97
|
+
1. Mevcut MD dosyasını oku (varsa)
|
|
98
|
+
2. `### <BileşenAdı>` başlıklarını regex ile çıkar → **"done" listesi**
|
|
99
|
+
3. Figma'dan güncel listeyi al (`figma_search_components`)
|
|
100
|
+
4. `kalan = güncel - done`
|
|
101
|
+
5. Eğer `kalan` boşsa → section zaten tam, atla
|
|
102
|
+
6. Değilse → sadece eksik olanları işle
|
|
103
|
+
|
|
104
|
+
**Örnek:**
|
|
105
|
+
```
|
|
106
|
+
📖 components.md'de 87 bileşen başlığı var
|
|
107
|
+
📋 Figma'da 163 bileşen var
|
|
108
|
+
🎯 İşlenecek: 76 bileşen (kaldığı yerden)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Adım 6: Section Bazlı Sync
|
|
114
|
+
|
|
115
|
+
### 6a. Tokens Section
|
|
116
|
+
|
|
117
|
+
Kaynaklardan `tokens.md` yazan olanlar için:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
📥 Tokens çekiliyor...
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
1. `mcp__figma-mcp-bridge__figma_get_variables` (fileKey, verbosity: "full")
|
|
124
|
+
2. `mcp__figma-mcp-bridge__figma_get_styles` (fileKey, verbosity: "full")
|
|
125
|
+
3. Gelen data'dan tokens.md'yi yeniden üret:
|
|
126
|
+
- Header + son sync tarihi
|
|
127
|
+
- Primitive Colors (aile tablosu)
|
|
128
|
+
- Semantic Colors (Light/Dark)
|
|
129
|
+
- Typography
|
|
130
|
+
- Spacing & Scale
|
|
131
|
+
- Breakpoints
|
|
132
|
+
- Border Radius
|
|
133
|
+
- Depth (Shadow)
|
|
134
|
+
4. Dosyayı tek seferde yaz (tokens.md append-based değil)
|
|
135
|
+
5. Progress: "✅ tokens: <N> token"
|
|
136
|
+
|
|
137
|
+
### 6b. Components / Icons / Mobile Section
|
|
138
|
+
|
|
139
|
+
Bileşen bazlı section'lar için **batch'li resume destekli akış**:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
📥 Components çekiliyor (76/163 eksik)...
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
1. Figma'dan full isim listesi çek (zaten Adım 5'te yaptın)
|
|
146
|
+
2. "Kalan" listesini 5'er batch'e böl
|
|
147
|
+
3. Her batch için:
|
|
148
|
+
a. **Paralel** 5 `figma_get_component` çağrısı
|
|
149
|
+
b. Her başarılı bileşen için:
|
|
150
|
+
- Markdown bloğu oluştur (variant, size, state, platform notları)
|
|
151
|
+
- `### <BileşenAdı>` başlığı ile MD'nin sonuna append et
|
|
152
|
+
- Progress: "📊 X/<toplam> (son: <ad> ✓)"
|
|
153
|
+
c. Başarısız olanlar için:
|
|
154
|
+
- 3 retry (1s, 2s, 4s exponential backoff)
|
|
155
|
+
- Hâlâ başarısız → `failed_items` listesine ekle + devam
|
|
156
|
+
4. Batch arası pause yok, hemen sonraki batch'e geç
|
|
157
|
+
|
|
158
|
+
**Not:** Her bileşen tek seferde append edilir. Yarım yazma yok.
|
|
159
|
+
|
|
160
|
+
### 6c. Assets Section
|
|
161
|
+
|
|
162
|
+
Assets genellikle logo/grafik. `figma_search_components` + liste olarak yaz. Detay fetch gerekmez.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Adım 7: Hata Yönetimi
|
|
167
|
+
|
|
168
|
+
| Hata Tipi | Davranış |
|
|
169
|
+
|-----------|----------|
|
|
170
|
+
| **API timeout (tek bileşen)** | 3x retry (1s, 2s, 4s) → sonra `failed_items`'a ekle, devam et |
|
|
171
|
+
| **Figma bridge disconnect (orta)** | DUR + `_meta.md`'yi "YARIM KALDI" olarak işaretle + kullanıcıya bildir |
|
|
172
|
+
| **Permission denied** | O section'ı atla + uyar, diğer section'larla devam |
|
|
173
|
+
| **Invalid response** | Skip + `failed_items`'a ekle, devam |
|
|
174
|
+
| **Disk full** | DUR + kullanıcıya bildir |
|
|
175
|
+
| **Kullanıcı iptal (Ctrl+C)** | Mevcut durum korunur, yarım append yok |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Adım 8: `_meta.md` Güncelle
|
|
180
|
+
|
|
181
|
+
Sync tamamlandıktan (veya yarım kaldıktan) sonra `_meta.md`'yi güncelle:
|
|
182
|
+
|
|
183
|
+
### Tam Başarı:
|
|
184
|
+
```markdown
|
|
185
|
+
## Sync Durumu
|
|
186
|
+
- **Son başarılı sync:** 2026-04-09T12:30:00Z
|
|
187
|
+
- **Durum:** ✅ TAMAMLANDI
|
|
188
|
+
- **Eksik section'lar:** (yok)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Kısmi Başarı:
|
|
192
|
+
```markdown
|
|
193
|
+
## Sync Durumu
|
|
194
|
+
- **Son başarılı sync:** 2026-04-09T12:30:00Z
|
|
195
|
+
- **Durum:** ⚠️ KISMI BAŞARI
|
|
196
|
+
- **Başarısız öğeler:** Custom Button (timeout), Slot (invalid type)
|
|
197
|
+
- **Devam komutu:** `/ds-sync sui components`
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Yarım Kaldı:
|
|
201
|
+
```markdown
|
|
202
|
+
## Sync Durumu
|
|
203
|
+
- **Son başarılı sync:** (önceki) 2026-04-05T10:00:00Z
|
|
204
|
+
- **Durum:** ⚠️ YARIM KALDI (components: 87/163)
|
|
205
|
+
- **Eksik section'lar:** components
|
|
206
|
+
- **Devam komutu:** `/ds-sync sui components`
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
İstatistikleri de güncelle:
|
|
210
|
+
```markdown
|
|
211
|
+
## İstatistikler
|
|
212
|
+
- Token sayısı: 841
|
|
213
|
+
- Bileşen sayısı: 160 (3 başarısız)
|
|
214
|
+
- İkon sayısı: 697
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Sync geçmişine yeni satır ekle:
|
|
218
|
+
```markdown
|
|
219
|
+
## Sync Geçmişi
|
|
220
|
+
- 2026-04-09: initial sync
|
|
221
|
+
- 2026-04-09: components yeniden senkronize edildi (160/163)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Adım 9: Cleanup
|
|
227
|
+
|
|
228
|
+
### Tam Başarı:
|
|
229
|
+
- `.bak` dosyalarını sil (gerekmez artık)
|
|
230
|
+
- Kullanıcıya rapor:
|
|
231
|
+
```
|
|
232
|
+
✅ SUI sync tamamlandı.
|
|
233
|
+
⏱️ Süre: 18 dakika 32 saniye
|
|
234
|
+
📊 İstatistikler:
|
|
235
|
+
• tokens: 841 öğe
|
|
236
|
+
• components: 163 öğe ✓
|
|
237
|
+
• icons: 697 öğe ✓
|
|
238
|
+
• mobile: 30 öğe ✓
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Kısmi Başarı:
|
|
242
|
+
- `.bak` dosyalarını TUT (rollback mümkün)
|
|
243
|
+
- Kullanıcıya rapor:
|
|
244
|
+
```
|
|
245
|
+
⚠️ Kısmi başarı:
|
|
246
|
+
✅ 160/163 bileşen tamamlandı
|
|
247
|
+
❌ 3 hata:
|
|
248
|
+
• Custom Button (timeout)
|
|
249
|
+
• Slot (invalid type)
|
|
250
|
+
• .Stepper_2 (permission)
|
|
251
|
+
💡 Tekrar denemek için: /ds-sync sui components
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Tam Başarısızlık (hiçbir şey alınamadı):
|
|
255
|
+
- `.bak`'tan geri yükle:
|
|
256
|
+
```bash
|
|
257
|
+
cp tokens.md.bak tokens.md
|
|
258
|
+
cp components.md.bak components.md
|
|
259
|
+
```
|
|
260
|
+
- Hata raporu göster
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Progress Formatı
|
|
265
|
+
|
|
266
|
+
Sync sırasında kullanıcıya düzenli olarak bildirim ver:
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
📥 SUI sync başlıyor (tahmini 18 dk)...
|
|
270
|
+
📊 tokens: 841/841 ✓ (45s)
|
|
271
|
+
📊 components: 5/163 (son: Button ✓)
|
|
272
|
+
📊 components: 10/163 (son: Input ✓)
|
|
273
|
+
📊 components: 15/163 (son: Select ✓)
|
|
274
|
+
...
|
|
275
|
+
📊 components: 163/163 ✓ (8m 20s)
|
|
276
|
+
📊 icons: 200/697 (son: .check/v1 ✓)
|
|
277
|
+
📊 icons: 697/697 ✓ (5m 12s)
|
|
278
|
+
📊 mobile: 30/30 ✓ (1m 45s)
|
|
279
|
+
✅ Tamamlandı.
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Resume Senaryosu Detay
|
|
285
|
+
|
|
286
|
+
**Senaryo:** Kullanıcı dün `/ds-sync sui` çalıştırdı, 87/163 bileşende crash oldu. Bugün tekrar çalıştırıyor.
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
Kullanıcı: /ds-sync sui
|
|
290
|
+
Claude: [_meta.md oku]
|
|
291
|
+
Claude: "📋 Son sync yarım kalmış: components 87/163
|
|
292
|
+
Kaldığı yerden devam edeyim mi? (evet/sıfırdan/iptal)"
|
|
293
|
+
Kullanıcı: "evet"
|
|
294
|
+
Claude: [components.md oku, 87 başlık say]
|
|
295
|
+
Claude: [figma_search_components → 163 isim]
|
|
296
|
+
Claude: [kalan = 163 - 87 = 76]
|
|
297
|
+
Claude: "📖 76 bileşen eksik. Devam ediyorum..."
|
|
298
|
+
Claude: [88, 89, 90, ... 163]
|
|
299
|
+
Claude: [mobile section'a geç]
|
|
300
|
+
Claude: [icons section'a geç]
|
|
301
|
+
Claude: "✅ SUI sync tamamlandı."
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**Kod yok. Sadece talimatlar.** Claude Read + figma MCP + Write araçlarıyla yapar.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## Doğal Dil Desteği
|
|
309
|
+
|
|
310
|
+
Slash command olmadan da aynı mantığı uygula:
|
|
311
|
+
- "SUI'yi güncelle" → `/ds-sync sui`
|
|
312
|
+
- "Sadece SUI bileşenlerini güncelle" → `/ds-sync sui components`
|
|
313
|
+
- "Yarım kalan SUI sync'i devam ettir" → `/ds-sync sui` (resume otomatik)
|
|
314
|
+
- "devam et" (önceki sync'ten sonra) → resume
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Implement Command
|
|
2
|
+
|
|
3
|
+
Implement a feature or fix using best practices for this MCP server project.
|
|
4
|
+
|
|
5
|
+
## Instructions
|
|
6
|
+
|
|
7
|
+
When implementing features for the F-MCP ATezer server:
|
|
8
|
+
|
|
9
|
+
1. **Use MCP SDK Patterns**
|
|
10
|
+
- Follow Model Context Protocol TypeScript SDK conventions
|
|
11
|
+
- Use `McpServer` from `@modelcontextprotocol/sdk/server/mcp.js`
|
|
12
|
+
- Use Zod for input schema validation
|
|
13
|
+
- Return proper content structures: `{ content: [{ type: "text", text: "..." }] }`
|
|
14
|
+
|
|
15
|
+
2. **Follow Architecture**
|
|
16
|
+
- Maintain separation of concerns (Server → Tools → Managers)
|
|
17
|
+
- Use Puppeteer for browser automation
|
|
18
|
+
- Use Chrome DevTools Protocol for console monitoring
|
|
19
|
+
- Implement intelligent log truncation (from AgentDesk patterns)
|
|
20
|
+
|
|
21
|
+
3. **Code Quality**
|
|
22
|
+
- Write TypeScript with strict mode
|
|
23
|
+
- Add JSDoc comments for public APIs
|
|
24
|
+
- Follow existing code style (Prettier + ESLint)
|
|
25
|
+
- Write tests for new features (Jest)
|
|
26
|
+
|
|
27
|
+
4. **Testing**
|
|
28
|
+
- Unit tests for business logic
|
|
29
|
+
- Integration tests for tool handlers
|
|
30
|
+
- Maintain 70%+ code coverage
|
|
31
|
+
|
|
32
|
+
5. **Documentation**
|
|
33
|
+
- Update README.md if adding new tools
|
|
34
|
+
- Update docs/ARCHITECTURE.md for significant changes
|
|
35
|
+
- Add inline comments for complex logic
|
|
36
|
+
|
|
37
|
+
## Example Usage
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
/sc:implement Add error categorization to console logs
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This will activate the implementation agent with context about the MCP server project.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Tasarım Sistemi Kütüphanesi Kur / Güncelle
|
|
2
|
+
|
|
3
|
+
Kullanıcı "kütüphane kur", "library kur", "library install", "kütüphane yükle", "kütüphane güncelle" dediğinde veya bir `.md` dosya yolu verip "bunu kur" dediğinde bu komutu uygula.
|
|
4
|
+
|
|
5
|
+
## Kullanım
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/install-library /Users/isim/Downloads/sui.md
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Akış
|
|
12
|
+
|
|
13
|
+
### Adım 1 — Dosyayı bul
|
|
14
|
+
|
|
15
|
+
Kullanıcı bir dosya yolu verdiyse onu kullan. Vermediyse sor:
|
|
16
|
+
> "Kütüphane dosyasının yolunu verin (örn: ~/Downloads/sui.md)"
|
|
17
|
+
|
|
18
|
+
Dosyanın varlığını kontrol et. Yoksa: "Bu dosya bulunamadı. Yolu kontrol edin."
|
|
19
|
+
|
|
20
|
+
### Adım 2 — Dosyayı doğrula
|
|
21
|
+
|
|
22
|
+
Dosyayı oku ve şunları kontrol et:
|
|
23
|
+
1. İlk satırda `# ` ile başlayan bir başlık var mı
|
|
24
|
+
2. `File Key` içeren bir tablo satırı var mı
|
|
25
|
+
3. `## Genel Bilgi` bölümü var mı
|
|
26
|
+
|
|
27
|
+
Üçünden biri yoksa:
|
|
28
|
+
> "Bu dosya geçerli bir kütüphane dosyası gibi görünmüyor. `/add-library` ile yeni bir kütüphane oluşturabilirsiniz."
|
|
29
|
+
|
|
30
|
+
### Adım 3 — Kütüphane adını çıkar
|
|
31
|
+
|
|
32
|
+
Dosyanın ilk satırındaki başlıktan kütüphane adını al:
|
|
33
|
+
- `# SUI — Sahibinden Design System` → dosya adı: `sui.md`
|
|
34
|
+
- `# Primer — GitHub Design System` → dosya adı: `primer.md`
|
|
35
|
+
|
|
36
|
+
Adı küçük harfe çevir, Türkçe karakterleri koru, boşlukları tire yap.
|
|
37
|
+
|
|
38
|
+
### Adım 4 — Kopyala veya güncelle
|
|
39
|
+
|
|
40
|
+
Hedef: `.claude/libraries/{kütüphane-adı}.md`
|
|
41
|
+
|
|
42
|
+
**Yeni kurulum:** Dosyayı hedefe kopyala.
|
|
43
|
+
|
|
44
|
+
**Güncelleme (dosya zaten varsa):**
|
|
45
|
+
1. Mevcut dosyadaki `Son tarama` tarihini oku
|
|
46
|
+
2. Yeni dosyadaki `Son tarama` tarihini oku
|
|
47
|
+
3. Kullanıcıya bildir:
|
|
48
|
+
> "SUI kütüphanesi zaten kurulu (son tarama: 2026-04-10). Yeni versiyon: 2026-04-15. Güncellemek istediğinize emin misiniz?"
|
|
49
|
+
4. Onay alırsan üzerine yaz
|
|
50
|
+
|
|
51
|
+
### Adım 5 — Sistem dosyalarını kontrol et
|
|
52
|
+
|
|
53
|
+
1. **`.gitignore`** — `.claude/libraries/` satırı yoksa ekle
|
|
54
|
+
2. Dosya başarıyla kopyalandığını doğrula
|
|
55
|
+
|
|
56
|
+
### Adım 6 — Kullanıcıya bildir
|
|
57
|
+
|
|
58
|
+
Kısa özet:
|
|
59
|
+
|
|
60
|
+
**Yeni kurulum için:**
|
|
61
|
+
> ✅ {Kütüphane Adı} kuruldu.
|
|
62
|
+
>
|
|
63
|
+
> Skill'ler artık bu kütüphaneyi otomatik olarak tanıyacak. Figma'da plugin bağlıyken kütüphanedeki bileşen ve token'lara erişebilirsiniz.
|
|
64
|
+
|
|
65
|
+
**Güncelleme için:**
|
|
66
|
+
> ✅ {Kütüphane Adı} güncellendi ({eski tarih} → {yeni tarih}).
|
|
67
|
+
|
|
68
|
+
## Kurallar
|
|
69
|
+
|
|
70
|
+
- Kullanıcıya teknik adım anlatma. Dosya yolunu al, gerisini sen yap.
|
|
71
|
+
- `project-context.md`'yi DEĞİŞTİRME — kütüphane sistemi zaten `.claude/libraries/` dizinini taramayı biliyor.
|
|
72
|
+
- Dosya kopyalaması için `cp` komutu kullan, dosya içeriğini okuyup yazma (büyük dosyalarda sorun olur).
|
|
73
|
+
- Güncelleme sırasında eski dosyayı yedekleme — kullanıcı zaten orijinal dosyaya sahip.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# F-MCP Kurulum
|
|
2
|
+
|
|
3
|
+
Kullanıcı "kur", "setup", "install", "bunu kur", GitHub linki verip kurulum isterse bu komutu uygula.
|
|
4
|
+
|
|
5
|
+
## Talimatlar
|
|
6
|
+
|
|
7
|
+
Kullanıcıya terminal komutu verme. Her şeyi sen yap:
|
|
8
|
+
|
|
9
|
+
1. Repo clone edilmiş mi kontrol et: `ls package.json 2>/dev/null && node -e "console.log(require('./package.json').name)"`
|
|
10
|
+
2. Clone edilmişse: `bash scripts/setup.sh` çalıştır
|
|
11
|
+
3. Clone edilmemişse: `git clone https://github.com/atezer/FMCP.git && cd FMCP && bash scripts/setup.sh` çalıştır
|
|
12
|
+
4. Kullanıcıya sadece şunu söyle:
|
|
13
|
+
|
|
14
|
+
> Kurulum tamamlandı. Claude'u yeniden başlat ve Figma'da Plugins → F-MCP ATezer Bridge → yeşil "Ready" yazısını gör.
|
|
15
|
+
|
|
16
|
+
## Hata durumunda
|
|
17
|
+
|
|
18
|
+
- Git yoksa: Xcode Command Line Tools kurulumu öner (macOS'ta otomatik gelir)
|
|
19
|
+
- Node.js yoksa: setup.sh zaten Homebrew ile otomatik kurar
|
|
20
|
+
- Her şey başarısızsa: kullanıcıya "https://github.com/atezer/FMCP adresindeki README'yi takip edin" de
|
|
21
|
+
|
|
22
|
+
## Önemli
|
|
23
|
+
|
|
24
|
+
- Kullanıcıya ASLA terminal komutu yapıştırmasını söyleme
|
|
25
|
+
- Kullanıcıya ASLA teknik adımları açıklama
|
|
26
|
+
- Sadece sonucu bildir ve "yeniden başlat" de
|
package/commands/test.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Test Command
|
|
2
|
+
|
|
3
|
+
Run tests and ensure code quality for the F-MCP ATezer server.
|
|
4
|
+
|
|
5
|
+
## Instructions
|
|
6
|
+
|
|
7
|
+
1. **Run Test Suite**
|
|
8
|
+
```bash
|
|
9
|
+
npm test
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
2. **Watch Mode** (for development)
|
|
13
|
+
```bash
|
|
14
|
+
npm run test:watch
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
3. **Coverage Report**
|
|
18
|
+
```bash
|
|
19
|
+
npm run test:coverage
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
4. **Test Requirements**
|
|
23
|
+
- All new code must have tests
|
|
24
|
+
- Maintain 70%+ coverage threshold
|
|
25
|
+
- Tests must pass before commits
|
|
26
|
+
- Use descriptive test names
|
|
27
|
+
|
|
28
|
+
5. **Test Structure**
|
|
29
|
+
- Unit tests: `src/**/*.test.ts`
|
|
30
|
+
- Integration tests: `tests/**/*.test.ts`
|
|
31
|
+
- Use Jest with ts-jest preset
|
|
32
|
+
|
|
33
|
+
## Example Usage
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
/sc:test
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This will run the complete test suite and report results.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# F-MCP Güncelleme
|
|
2
|
+
|
|
3
|
+
Kullanıcı "güncelle", "update", "F-MCP'yi güncelle" gibi bir şey söylediğinde bu komutu uygula.
|
|
4
|
+
|
|
5
|
+
## Talimatlar
|
|
6
|
+
|
|
7
|
+
Kullanıcıya terminal komutu verme. Her şeyi sen yap:
|
|
8
|
+
|
|
9
|
+
1. Repo kökünde `bash scripts/update.sh` çalıştır
|
|
10
|
+
2. Sonucu kontrol et — yeni sürüm numarasını kullanıcıya bildir
|
|
11
|
+
3. Kullanıcıya sadece şunu söyle:
|
|
12
|
+
|
|
13
|
+
> Güncelleme tamamlandı (vX.Y.Z). Claude'u yeniden başlat ve Figma'da plugin'i kapat-aç.
|
|
14
|
+
|
|
15
|
+
## Hata durumunda
|
|
16
|
+
|
|
17
|
+
- `scripts/update.sh` yoksa: `git pull origin main && npm install && npm run build:local` çalıştır
|
|
18
|
+
- Node.js yoksa: `bash scripts/setup.sh` öner (bu da otomatik kurar)
|
|
19
|
+
- Git conflict varsa: kullanıcıya bildir, `git stash` ile çöz
|
|
20
|
+
|
|
21
|
+
## Önemli
|
|
22
|
+
|
|
23
|
+
- Kullanıcıya ASLA terminal komutu yapıştırmasını söyleme
|
|
24
|
+
- Kullanıcıya ASLA teknik adımları açıklama
|
|
25
|
+
- Sadece sonucu bildir ve "yeniden başlat" de
|
package/dist/core/audit-log.d.ts
CHANGED
|
@@ -23,4 +23,8 @@ export declare function auditTool(path: string | undefined, method: string, succ
|
|
|
23
23
|
* Log plugin connection / disconnection.
|
|
24
24
|
*/
|
|
25
25
|
export declare function auditPlugin(path: string | undefined, event: "plugin_connect" | "plugin_disconnect"): void;
|
|
26
|
+
/**
|
|
27
|
+
* Flush and close the audit log stream. Call on graceful shutdown.
|
|
28
|
+
*/
|
|
29
|
+
export declare function closeAuditLog(): void;
|
|
26
30
|
//# sourceMappingURL=audit-log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,OAAO,CAAC;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AA8BD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,CAQtF;AAED;;GAEG;AACH,wBAAgB,SAAS,CACxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GACjB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,IAAI,CAEzG"}
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,OAAO,CAAC;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AA8BD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,CAQtF;AAED;;GAEG;AACH,wBAAgB,SAAS,CACxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GACjB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,IAAI,CAEzG;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
package/dist/core/audit-log.js
CHANGED
|
@@ -60,4 +60,16 @@ export function auditTool(path, method, success, error, durationMs) {
|
|
|
60
60
|
export function auditPlugin(path, event) {
|
|
61
61
|
auditLog(path, { event });
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Flush and close the audit log stream. Call on graceful shutdown.
|
|
65
|
+
*/
|
|
66
|
+
export function closeAuditLog() {
|
|
67
|
+
if (stream) {
|
|
68
|
+
try {
|
|
69
|
+
stream.end();
|
|
70
|
+
}
|
|
71
|
+
catch { /* ignore */ }
|
|
72
|
+
stream = null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
63
75
|
//# sourceMappingURL=audit-log.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAoB,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEpC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAWtB,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,SAAS,SAAS,CAAC,IAAY;IAC9B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC;QACJ,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,MAAM,GAAG,IAAI,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,SAAS;IACV,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAwB,EAAE,KAA6B;IAC/E,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO;IACjC,MAAM,IAAI,GAAe,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACpE,IAAI,CAAC;QACJ,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,IAAI,EAAE,CAAC;IACR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACxB,IAAwB,EACxB,MAAc,EACd,OAAgB,EAChB,KAAc,EACd,UAAmB;IAEnB,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAwB,EAAE,KAA6C;IAClG,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAoB,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEpC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAWtB,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,SAAS,SAAS,CAAC,IAAY;IAC9B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC;QACJ,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,MAAM,GAAG,IAAI,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,SAAS;IACV,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAwB,EAAE,KAA6B;IAC/E,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO;IACjC,MAAM,IAAI,GAAe,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACpE,IAAI,CAAC;QACJ,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,IAAI,EAAE,CAAC;IACR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACxB,IAAwB,EACxB,MAAc,EACd,OAAgB,EAChB,KAAc,EACd,UAAmB;IAEnB,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAwB,EAAE,KAA6C;IAClG,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC5B,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,IAAI,CAAC;IACf,CAAC;AACF,CAAC"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import type { ServerConfig } from './types/index.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function loadConfig(): ServerConfig;
|
|
9
9
|
/**
|
|
10
|
-
* Get configuration
|
|
10
|
+
* Get configuration (cached after first load)
|
|
11
11
|
*/
|
|
12
12
|
export declare function getConfig(): ServerConfig;
|
|
13
13
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2BrD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAyBzC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2BrD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAyBzC;AAID;;GAEG;AACH,wBAAgB,SAAS,IAAI,YAAY,CAIxC"}
|
package/dist/core/config.js
CHANGED
|
@@ -55,10 +55,14 @@ export function loadConfig() {
|
|
|
55
55
|
// No config file found, use defaults
|
|
56
56
|
return DEFAULT_CONFIG;
|
|
57
57
|
}
|
|
58
|
+
let cachedConfig = null;
|
|
58
59
|
/**
|
|
59
|
-
* Get configuration
|
|
60
|
+
* Get configuration (cached after first load)
|
|
60
61
|
*/
|
|
61
62
|
export function getConfig() {
|
|
62
|
-
|
|
63
|
+
if (cachedConfig)
|
|
64
|
+
return cachedConfig;
|
|
65
|
+
cachedConfig = loadConfig();
|
|
66
|
+
return cachedConfig;
|
|
63
67
|
}
|
|
64
68
|
//# sourceMappingURL=config.js.map
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B;;GAEG;AACH,MAAM,cAAc,GAAiB;IACnC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACL,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,EAAE,EAAE,CAAC;QACnH,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS;KAChE;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB;IAChC,uBAAuB;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC;IAC5C,mBAAmB;IACnB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC;CAC1C,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,+BAA+B;IAC/B,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAE3C,sBAAsB;gBACtB,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,GAAG,cAAc,CAAC,KAAM;wBACxB,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;qBAC5B;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClE,+BAA+B;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B;;GAEG;AACH,MAAM,cAAc,GAAiB;IACnC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACL,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,EAAE,EAAE,CAAC;QACnH,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS;KAChE;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB;IAChC,uBAAuB;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC;IAC5C,mBAAmB;IACnB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC;CAC1C,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,+BAA+B;IAC/B,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAE3C,sBAAsB;gBACtB,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,GAAG,cAAc,CAAC,KAAM;wBACxB,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;qBAC5B;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClE,+BAA+B;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,YAAY,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC"}
|