@analitikisler/ai-tag-debugger 0.9.0 → 0.10.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/CHANGELOG.md +20 -0
- package/README.md +158 -46
- package/README.tr.md +297 -185
- package/package.json +5 -2
- package/src/agent.js +1 -1
- package/src/audit.js +27 -13
- package/src/checks.js +56 -1
- package/src/cli.js +104 -73
- package/src/discover.js +148 -0
- package/src/help.js +104 -0
- package/src/i18n.js +12 -0
- package/src/journeys.js +87 -8
- package/src/mcp.js +52 -11
- package/src/plan-html.js +76 -0
- package/src/plan.js +14 -0
- package/src/providers.js +1 -1
- package/src/report.js +34 -10
- package/src/sheet.js +321 -0
- package/src/workspace.js +77 -0
package/README.tr.md
CHANGED
|
@@ -2,71 +2,72 @@
|
|
|
2
2
|
|
|
3
3
|
# AI Tag Debugger
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**Web sitenizin analitik ve reklam takibini test eden, açık kaynaklı bir yapay zekâ ajanı.**
|
|
6
6
|
|
|
7
|
-
Bir yapay zekâ modeli
|
|
7
|
+
Bir yapay zekâ modeli gerçek bir tarayıcıyı, sitenizdeki temel yolculukları (ürün → sepet → ödeme, form gönderimleri) gerçek bir ziyaretçi gibi gezdirir. Gezerken `ai-tag-debugger` her GA4, Google Ads, Meta Pixel ve TikTok isteğini ve her dataLayer gönderimini kaydeder. Ardından bunları ölçümleme planınız ve Consent Mode kurulumunuzla karşılaştırır ve neyin bozulduğunu ve nasıl düzeltileceğini sade bir dille, Türkçe ya da İngilizce olarak yazılmış bir raporla anlatır.
|
|
8
8
|
|
|
9
9
|
İki şekilde kullanabilirsiniz:
|
|
10
10
|
|
|
11
|
-
- **
|
|
12
|
-
- **Yapay zekâ
|
|
11
|
+
- **Terminalinizden ya da CI'nizden**, kendi API anahtarınızla: Anthropic (Claude), OpenAI, Google Gemini veya OpenAI uyumlu herhangi bir API (Kimi, GLM, DeepSeek, OpenRouter, yerel bir Ollama ve daha fazlası).
|
|
12
|
+
- **Yapay zekâ sohbet uygulamanızdan** (Claude, ChatGPT, Gemini ve MCP destekleyen diğer uygulamalar). Denetimi uygulamanın kendi modeli yürütür, bu yüzden ayrı bir API anahtarına ihtiyacınız yoktur.
|
|
13
13
|
|
|
14
|
-
[Analitik İşler](https://analitikisler.com
|
|
14
|
+
[Analitik İşler](https://analitikisler.com) tarafından geliştirilmiştir. MIT lisanslıdır.
|
|
15
15
|
|
|
16
16
|
```
|
|
17
|
-
▶
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
▶ ödeme (mobil)
|
|
18
|
+
Çerezleri kabul et
|
|
19
|
+
İlk ürünü aç
|
|
20
|
+
Sepete ekle
|
|
21
|
+
Sepeti aç
|
|
22
|
+
Ödemeye geç
|
|
23
23
|
…
|
|
24
|
-
|
|
25
|
-
✓
|
|
24
|
+
Siparişi ver
|
|
25
|
+
✓ Tüm adımlar tamamlandı. · 20 takip isteği yakalandı
|
|
26
26
|
|
|
27
|
-
2
|
|
28
|
-
|
|
27
|
+
2 hatalı · 1 risk · 1 uyarı · 4 uygun
|
|
28
|
+
Rapor: reports/demo/localhost/runs/2026-10-16_0800/report.html
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
## Neden
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Takip kodları sessizce bozulur. Bir yeniden tasarımda bir düğmenin adı değişir, yeni bir şablon bir alanı unutur, bir çerez onayı güncellemesi piksellerin çok erken çalışmasına yol açar. Kimse uyarı almaz. Bunu haftalar sonra öğrenirsiniz, reklam platformları da o zamana kadar hatalı dönüşümlere göre optimizasyon yapmış olur.
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Manuel etiket kontrolü bunu yakalar, ama zahmetlidir; bu yüzden her sürümden sonra nadiren yapılır. `ai-tag-debugger` bunu CI'nizde çalıştırabileceğiniz bir komuta dönüştürür.
|
|
36
36
|
|
|
37
37
|
## Neleri kontrol eder
|
|
38
38
|
|
|
39
39
|
| Kontrol | Örnek bulgu |
|
|
40
40
|
|---|---|
|
|
41
|
-
| Eksik event'ler |
|
|
42
|
-
| Eksik parametreler |
|
|
43
|
-
| Geçersiz satın alma değeri | `
|
|
44
|
-
| Geçersiz satın alma para birimi |
|
|
45
|
-
| Boş satın alma ürünleri | `
|
|
46
|
-
| Satın alma uyuşmazlığı | Aynı sipariş numarası için GA4
|
|
47
|
-
|
|
|
48
|
-
| Çerez onayı |
|
|
49
|
-
| Kişisel veri | Bir
|
|
50
|
-
| Planda olmayan event'ler | Ölçümleme planınızda bulunmayan event'ler
|
|
51
|
-
|
|
52
|
-
|
|
41
|
+
| Eksik event'ler | Ödeme yolculuğunda hiç `purchase` gönderilmemiş |
|
|
42
|
+
| Eksik parametreler | Mobilde `value` ve `currency` olmadan gönderilen `purchase` |
|
|
43
|
+
| Geçersiz satın alma değeri | `value` değeri `0`, negatif bir sayı ya da `"ücretsiz"` gibi bir metin olan `purchase` |
|
|
44
|
+
| Geçersiz satın alma para birimi | Para birimi `TRY` yerine `TL` ya da `USD` yerine `usd` olan `purchase` (3 harfli ISO kodu olmalı) |
|
|
45
|
+
| Boş satın alma ürünleri | `items` listesi boş gönderilen `purchase` |
|
|
46
|
+
| Satın alma uyuşmazlığı | Aynı sipariş numarası için GA4'ün 120, Meta'nın 115 gönderdiği durum |
|
|
47
|
+
| Tekrarlar | Tek bir tıklamayla iki kez gönderilen `add_to_cart` |
|
|
48
|
+
| Çerez onayı | Ziyaretçi çerezleri kabul etmeden fire olan Meta `PageView`, eksik ya da çok geç ayarlanmış Consent Mode varsayılanı, eksik Consent Mode v2 sinyalleri (`ad_user_data`, `ad_personalization`), onaydan önce ayarlanan takip çerezleri, `decline_cookies` yolculuğu reddettikten sonra hâlâ aktif olan etiket ya da çerezler, hiçbir şey yapmayan bir reddetme düğmesi |
|
|
49
|
+
| Kişisel veri | Bir reklam platformuna düz metin olarak gönderilen e-posta adresi |
|
|
50
|
+
| Planda olmayan event'ler | Ölçümleme planınızda bulunmayan, yine de fire olan event'ler |
|
|
51
|
+
| Plan kapsamı | Planlanan her event'in uygulandı, eksik, parametresi eksik, değeri hatalı ya da kontrol edilmedi olarak sınıflandırılması (bkz. [Plan ve site](#plan-ve-site)) |
|
|
52
|
+
|
|
53
|
+
Platformlar: GA4 (sitenin kendi alan adındaki sunucu tarafı GTM uç noktaları ve Google etiket geçidi yolları dahil; bir sunucu konteynerine giden istekler sunucu tarafı olarak işaretlenir, Stape ve Elevar istekleri tanınır), Google Ads dönüşümleri, Meta Pixel, TikTok Pixel ve temel X Pixel event'leri.
|
|
53
54
|
|
|
54
55
|
### Kontrol edilecek platformları seçin
|
|
55
56
|
|
|
56
|
-
Varsayılan olarak bir
|
|
57
|
+
Varsayılan olarak bir denetim GA4, Google Ads, Meta ve TikTok'u kontrol eder. Başka platformları `--platforms ga4,meta,x` ile, ayar dosyasındaki `"providers"` ile ya da MCP `start_audit` ve `run_audit` araçlarındaki `providers` ile seçebilirsiniz. Seçenekler: `ga4`, `google_ads`, `meta`, `tiktok`, `x`, `linkedin`, `microsoft_ads`, `pinterest`, `snapchat`, `clarity`, `hotjar`, `doubleclick` ve `adsense`. GA4, Google Ads, Meta, TikTok ve X için event'ler ayrıştırılır; diğerlerinin ağ istekleri gösterilir. `--providers` eski adı olarak bir minör sürüm daha çalışır ve bir not yazdırır.
|
|
57
58
|
|
|
58
|
-
Seçmediğiniz platformlara giden istekler de yerelde yanıtlanır, yani o hesaplara da ulaşmaz. Bu istekler zaman akışına, CSV'ye ve kontrollere alınmaz, sadece sayılır: rapor bunları istek sayılarıyla listeler (örneğin "Kapsam dışı 61 istek atlandı: Microsoft Clarity, DoubleClick") ve her adım kaç istek atladığını gösterir. `--
|
|
59
|
+
Seçmediğiniz platformlara giden istekler de yerelde yanıtlanır, yani o hesaplara da ulaşmaz. Bu istekler zaman akışına, CSV'ye ve kontrollere alınmaz, sadece sayılır: rapor bunları istek sayılarıyla listeler (örneğin "Kapsam dışı 61 istek atlandı: Microsoft Clarity, DoubleClick") ve her adım kaç istek atladığını gösterir. `--platforms` vermezseniz, ölçümleme planınızda geçen her platform varsayılan listeye eklenir. Dışarıda bıraktığınız platformlar için planlanmış event'ler eksik olarak raporlanmaz, tek bir bilgi bulgusunda listelenir. Etiket yöneticisi ve çerez onayı platformu istekleri her zaman gösterilir.
|
|
59
60
|
|
|
60
61
|
## Nasıl çalışır
|
|
61
62
|
|
|
62
|
-
1. **Gezinme:**
|
|
63
|
-
2. **
|
|
64
|
-
3. **Kontrol:** kurallar, yakalanan istekleri ölçümleme planınızla karşılaştırır. Bu
|
|
65
|
-
4. **Açıklama:**
|
|
63
|
+
1. **Gezinme:** Yapay zekâ modeli, sade bir dille yazılmış bir hedef ("sepete herhangi bir ürün ekle ve test ödeme yöntemiyle siparişi tamamla") ve sayfanın metin görünümünü alır. İki araçla çalışır: `browser_action` (goto, click, fill, select, scroll, wait) ve `finish`. Playwright ile her seferinde bir adım atar.
|
|
64
|
+
2. **Yakalama:** Bir takip uç noktasına giden her istek normalleştirilmiş isteklere ayrıştırılır ve isteği tetikleyen adımla etiketlenir. Her dataLayer gönderimi, bir başlatma betiği aracılığıyla kaydedilir; `gtag('consent', ...)` komutları da buna dahildir. Varsayılan olarak GA4, Google Ads, Meta, TikTok, Microsoft Ads, LinkedIn, Pinterest, Snapchat ve X'in toplama istekleri yerelde yanıtlanır, bu yüzden **test trafiği bu gerçek hesaplara ulaşmaz**. Diğer satıcıların etiketleri isteklerini göndermeye devam eder; zaman akışının ağ bölümü her çağrıyı ve yerelde yanıtlanıp yanıtlanmadığını gösterir.
|
|
65
|
+
3. **Kontrol:** Deterministik kurallar, yakalanan istekleri ölçümleme planınızla karşılaştırır. Bu bölüm yapay zekâ çağrısı gerektirmez, bu yüzden sonuçlar tekrarlanabilirdir.
|
|
66
|
+
4. **Açıklama:** Model bulguları, adım başına istekleri ve (isteğe bağlı olarak) GTM konteyner dışa aktarımınızı okur. Her sorun için olası nedeni ve düzeltmeyi yazar, ilgili etiket ve tetikleyicileri adlandırarak.
|
|
66
67
|
|
|
67
68
|
## Yapay zekâ sağlayıcıları
|
|
68
69
|
|
|
69
|
-
Kendi API anahtarınızı
|
|
70
|
+
Kendi API anahtarınızı getirirsiniz. `ai-tag-debugger` her sağlayıcının resmî SDK'sını kullanır:
|
|
70
71
|
|
|
71
72
|
| Sağlayıcı | API anahtarı değişkeni | Varsayılan model |
|
|
72
73
|
|---|---|---|
|
|
@@ -74,16 +75,16 @@ Kendi API anahtarınızı kullanırsınız. `ai-tag-debugger` her sağlayıcın
|
|
|
74
75
|
| OpenAI | `OPENAI_API_KEY` | `gpt-5.5` |
|
|
75
76
|
| Google Gemini | `GEMINI_API_KEY` | `gemini-pro-latest` |
|
|
76
77
|
|
|
77
|
-
Sağlayıcı,
|
|
78
|
+
Sağlayıcı, ayarlı olan anahtardan seçilir (birden fazla varsa önce Anthropic). `--provider anthropic|openai|gemini` ya da ayar dosyasındaki `"provider"` ile açıkça seçebilirsiniz; başka bir model için `--model` kullanın. Gezinme, çalışmaları ucuz tutmak için düşük akıl yürütme çabası ister; açıklamalar yüksek çaba ve yapılandırılmış JSON çıktısı ister.
|
|
78
79
|
|
|
79
|
-
### OpenAI uyumlu
|
|
80
|
+
### OpenAI uyumlu herhangi bir API: Kimi, GLM, DeepSeek, OpenRouter, Ollama ve daha fazlası
|
|
80
81
|
|
|
81
|
-
Birçok
|
|
82
|
+
Birçok sağlayıcı OpenAI'ınkine benzer çalışan bir API sunar. `ai-tag-debugger`'ı adresi ve bir model kimliğiyle ona yönlendirin:
|
|
82
83
|
|
|
83
84
|
```bash
|
|
84
|
-
export OPENAI_COMPATIBLE_API_KEY=... #
|
|
85
|
+
export OPENAI_COMPATIBLE_API_KEY=... # yerel bir Ollama için boş bırakın
|
|
85
86
|
ai-tag-debugger run --site https://yourshop.com --journey add_to_cart \
|
|
86
|
-
--provider openai-compatible --base-url <API
|
|
87
|
+
--provider openai-compatible --base-url <API adresi> --model <model kimliği>
|
|
87
88
|
```
|
|
88
89
|
|
|
89
90
|
| Sağlayıcı | `--base-url` |
|
|
@@ -96,114 +97,200 @@ ai-tag-debugger run --site https://yourshop.com --journey add_to_cart \
|
|
|
96
97
|
| OpenRouter (yüzlerce model) | `https://openrouter.ai/api/v1` |
|
|
97
98
|
| Bilgisayarınızdaki Ollama | `http://localhost:11434/v1` |
|
|
98
99
|
|
|
99
|
-
Model kimliğini sağlayıcınızın dokümantasyonundan alın. Bayrakların yerine `OPENAI_COMPATIBLE_BASE_URL` ve `OPENAI_COMPATIBLE_MODEL` değişkenlerini ya da ayar dosyasında `"provider"`, `"base_url"` ve `"model"` alanlarını da kullanabilirsiniz. API katı JSON
|
|
100
|
+
Model kimliğini sağlayıcınızın dokümantasyonundan alın. Bayrakların yerine `OPENAI_COMPATIBLE_BASE_URL` ve `OPENAI_COMPATIBLE_MODEL` değişkenlerini ya da ayar dosyasında `"provider"`, `"base_url"` ve `"model"` alanlarını da kullanabilirsiniz. API katı JSON şemalarını döndüremezse açıklamalar düz JSON moduna geçer.
|
|
100
101
|
|
|
101
|
-
**Model seçimi hakkında.** Yapay zekâ, 5
|
|
102
|
+
**Model seçimi hakkında bir not.** Yapay zekâ, 5 ila 30 adım boyunca araç çağırarak, her seferinde bir adım gezinir. Modeller bunu ne kadar güvenilir yaptıklarında büyük farklılık gösterir: daha küçük ve yerel modeller yanlış yere tıklayabilir, döngüye girebilir ya da erken durabilir. Kontroller model ne yaparsa yapsın doğrudur, çünkü yakalanan isteklerden gelirler; ama bitmeyen bir yolculuk, sonraki event'lerini gösteremez. Bir model zorlanıyorsa daha büyük bir model, kısa hedefli hazır bir yolculuk ya da `--max-steps` deneyin. Anthropic, OpenAI ve Gemini varsayılanları test edilmiş olanlardır.
|
|
102
103
|
|
|
103
|
-
|
|
104
|
+
Yerel bir sağlayıcı eklemek için [`src/providers.js`](src/providers.js) içinde iki fonksiyon yazmanız gerekir: araç çağıran bir konuşma ve yapılandırılmış bir JSON çağrısı.
|
|
104
105
|
|
|
105
106
|
## Hızlı başlangıç
|
|
106
107
|
|
|
107
|
-
Node 20
|
|
108
|
+
Node 20+ gerekir.
|
|
108
109
|
|
|
109
110
|
```bash
|
|
110
111
|
npm install -g @analitikisler/ai-tag-debugger
|
|
111
|
-
npx -y playwright@1.56.1 install chromium #
|
|
112
|
-
export ANTHROPIC_API_KEY=... #
|
|
112
|
+
npx -y playwright@1.56.1 install chromium # bu sürümün kullandığı tarayıcı sürümü
|
|
113
|
+
export ANTHROPIC_API_KEY=... # ya da OPENAI_API_KEY, ya da GEMINI_API_KEY
|
|
113
114
|
|
|
114
115
|
ai-tag-debugger run --site https://staging.yourshop.com --journey add_to_cart --headed
|
|
115
116
|
```
|
|
116
117
|
|
|
117
|
-
|
|
118
|
+
Genel kurulum, kısa bir takma ad olan `aitd`'yi de ekler: `aitd run --site … --journey add_to_cart` aynı işi yapar.
|
|
118
119
|
|
|
119
120
|
Ya da kurmadan çalıştırın: `npx -y @analitikisler/ai-tag-debugger run --site … --journey add_to_cart`.
|
|
120
121
|
|
|
121
|
-
|
|
122
|
+
Komutları görmek için `aitd --help`, her komutun seçenekleri için `aitd run --help` (ya da `plan`, `replay`, `mcp`) çalıştırın.
|
|
122
123
|
|
|
123
124
|
### Demo mağazayı deneyin (kaynak koddan)
|
|
124
125
|
|
|
125
|
-
|
|
126
|
+
Depo, üç bilerek yapılmış takip hatası içeren bir demo mağaza içerir:
|
|
126
127
|
|
|
127
128
|
```bash
|
|
128
129
|
git clone https://github.com/analitikisler/ai-tag-debugger.git
|
|
129
130
|
cd ai-tag-debugger
|
|
130
131
|
npm install
|
|
131
|
-
npx playwright install chromium #
|
|
132
|
-
npm run demo:serve #
|
|
133
|
-
node src/cli.js run --config examples/demo.config.json --
|
|
134
|
-
open reports/demo/report.html
|
|
132
|
+
npx playwright install chromium # sürümü yükselttikten sonra yeniden çalıştırın, tarayıcı Playwright ile eşleşsin
|
|
133
|
+
npm run demo:serve # bir terminalde: http://localhost:4321
|
|
134
|
+
node src/cli.js run --config examples/demo.config.json --data-dir reports/demo
|
|
135
|
+
open reports/demo/localhost/runs/*/report.html
|
|
135
136
|
```
|
|
136
137
|
|
|
137
|
-
Henüz API anahtarınız yok mu?
|
|
138
|
+
Henüz bir API anahtarınız yok mu? Sabit adımları hiçbir yapay zekâ modeli olmadan yeniden oynatın:
|
|
138
139
|
|
|
139
140
|
```bash
|
|
140
|
-
node src/cli.js run --config examples/demo.config.json --scripted --no-ai --
|
|
141
|
+
node src/cli.js run --config examples/demo.config.json --scripted --no-ai --data-dir reports/demo
|
|
141
142
|
```
|
|
142
143
|
|
|
143
|
-
##
|
|
144
|
+
## Planla, sonra denetle
|
|
144
145
|
|
|
145
|
-
|
|
146
|
+
Bir çalıştırma, sitenin gönderdiklerini bir **plan** ile karşılaştırır: beklediğiniz event'ler, parametreler ve kullanıcı özellikleri. Üç adım:
|
|
146
147
|
|
|
147
148
|
```bash
|
|
148
|
-
#
|
|
149
|
+
# 1. Bir plan taslağı çıkarın. Yapay zekâ siteyi gezer ve neyin takip edilmesi gerektiğini önerir.
|
|
150
|
+
aitd plan --site https://yoursite.com
|
|
151
|
+
|
|
152
|
+
# 2. İsteğe bağlı: bir elektronik tabloda düzenleyin, sonra düzenlenmiş kopyayı yeni bir plan olarak kaydedin.
|
|
153
|
+
aitd plan export latest --site https://yoursite.com # planın yanına plan.xlsx yazar
|
|
154
|
+
aitd plan import plan.xlsx --site https://yoursite.com # yeni bir plan kaydeder; eskisi değişmez
|
|
155
|
+
|
|
156
|
+
# 3. Siteyi plana göre denetleyin.
|
|
157
|
+
aitd run --site https://yoursite.com --against latest
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Plan taslağı çıkarmak** takip kodu gerektirmez. Yapay zekâ her sayfa türünden birer sayfayı inceler: ana sayfa, bir kategori, bir ürün, sepet, ilk ödeme adımı, arama ve varsa üyelik ya da iletişim formları. Asla ödeme yapmaz ve kişisel bilgilerle bir formu göndermez. `--provider`, `--model` ve `--max-steps` (varsayılan 25, yapay zekâ için en fazla adım) `run` için olduğu gibi çalışır. Çıktı "Bulunan sayfa türleri" ve "Bu sitede yok" satırlarını yazdırır, böylece yapay zekânın hangi sayfa türlerine ulaştığını görürsünüz. Yalnızca 2 sayfası olan küçük bir site de sorun değildir.
|
|
161
|
+
|
|
162
|
+
Plan, yeni bir klasöre, `aitd/<alan adı>/plans/<id>/` içine `measurement-plan.json` ve okunabilir bir `plan.html` olarak kaydedilir. Her event için şunları listeler:
|
|
163
|
+
|
|
164
|
+
- `name` ve `platform`. Sitenize özgü event'ler, örneğin bir beden rehberi ya da mağaza bulucu, `custom: true` ile işaretlenir.
|
|
165
|
+
- `description` ve `trigger`: event'i tetikleyen sayfa türü ve öğenin görünen etiketi.
|
|
166
|
+
- `parameters`: her biri bir açıklama ve örnek değerle. Özel parametreler işaretlenir. `required_params` mutlaka bulunması gerekenleri listeler.
|
|
167
|
+
- `user_properties`: `customer_type` gibi önerilen özellikler, her biri bir açıklama ve örnekle.
|
|
168
|
+
|
|
169
|
+
Siteniz zaten gönderdiği event'ler `"seen": true` ile işaretlenir.
|
|
170
|
+
|
|
171
|
+
Kullanmadan önce planı gözden geçirin. Örnekler ve öneriler yapay zekânın gördüğü sayfalardan gelir, bu yüzden her event'in işinize uyduğunu kontrol edin. Ek alanları kontroller yok sayar.
|
|
172
|
+
|
|
173
|
+
**Elektronik tablo ile içe ve dışa aktarma.** `aitd plan export <plan> --site <url>`, planın yanına `plan.xlsx` yazar: `events` sekmesinde her event parametresi için bir satır (`event, platform, parameter, required, example, trigger, description`) ve `user_properties` sekmesinde her kullanıcı özelliği için bir satır. Bunun yerine `events.csv` ve `user_properties.csv` almak için `--format csv` ekleyin; CSV ek bir paket gerektirmez. `.xlsx`, araçla birlikte isteğe bağlı bir bağımlılık olarak gelen küçük bir kütüphane, `fflate` kullanır. `aitd plan import <dosya> --site <url>` elektronik tabloyu okuyup yeni bir plan klasörü olarak kaydeder. İçe aktarma mevcut bir planı asla düzenlemez. Tanınmayan sütunlar bir uyarıyla yok sayılır; bir hata, sekmeyi, satırı ve düzeltmeyi belirtir, örneğin `events, row 7: "required" must be yes or no (found "maybe").`
|
|
174
|
+
|
|
175
|
+
`measurement-plan.json` şöyle görünür:
|
|
176
|
+
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"consent_mode": true,
|
|
180
|
+
"events": [
|
|
181
|
+
{ "platform": "ga4", "name": "add_to_cart", "required_params": ["currency", "value", "items"] },
|
|
182
|
+
{ "platform": "ga4", "name": "purchase", "journeys": ["checkout"], "required_params": ["transaction_id", "currency", "value", "items"] },
|
|
183
|
+
{ "platform": "meta", "name": "Purchase", "journeys": ["checkout"], "required_params": ["value", "currency"] }
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
`platform` değeri `ga4`, `google_ads`, `meta` veya `tiktok` olur. `journeys`, bir event'in nerede beklendiğini sınırlar (varsayılan: her yolculuk). Bir eylem başına birden fazla kez fire olabilen event'ler için `allow_multiple: true` ayarlayın.
|
|
189
|
+
|
|
190
|
+
Event adları gevşek eşleştirilir: `dl_add_to_cart` (Elevar), `addToCart` ve `Add To Cart`, `add_to_cart` sayılır; `transaction` ya da `order_completed` ise `purchase` sayılır. Kendi adlarınızı planlanmış bir event'e `"aliases": ["my_event"]` ile ekleyebilirsiniz. Gerekli parametreler de olağan diğer adlarıyla bulunur: `items` için `products`, `value` için `revenue`, `transaction_id` için `order_id`.
|
|
191
|
+
|
|
192
|
+
**Bir plana karşı denetim.** `run --against <plan>`, `latest` (ya da `last`), `first`, bir plan kimliği ya da bir plan dosyasının ya da klasörünün yolunu alır. `--site` verilmezse site plandan alınır. Çalıştırmaya bir yolculuk da verirseniz, yalnızca o akışı gezer ve orada beklenen plan event'lerini kontrol eder; planın geri kalanı eksik değil, kontrol edilmedi olarak raporlanır. Tek başına kullanıldığında `--against`, plandan en fazla altı yolculuk türetir: planlanmış event'leri tetiklendikleri sayfaya göre gruplar ve sayfa başına bir yolculuk oluşturur, en fazla altı tane (en küçük gruplar son yolculuğu paylaşır); ek bir yapay zekâ çağrısı yapılmaz. Seçilen yolculuklar, tarayıcı açılmadan önce yazdırılır. Her rapor başlığı ardından `Checked against plan <id>` (Plana karşı kontrol edildi: <id>) yazar.
|
|
193
|
+
|
|
194
|
+
`run` bir şey test etmek ister: `--against`, `--journey`, `--goal` ya da ayar dosyanızdaki yolculuklar. Biri yoksa tarayıcıyı açmadan `Nothing to test. Add --against latest, --journey <id> or --goal "<text>".` mesajıyla durur; böylece dolaşıp API kullanımını harcamaz. Sitenin henüz planı yoksa `run --against` şunu söyler: `No plan yet for example.com. Draft one with: aitd plan --site https://example.com`.
|
|
195
|
+
|
|
196
|
+
`aitd plan list --site <url>`, sitenin plan kimliklerini en eskiden en yeniye listeler.
|
|
197
|
+
|
|
198
|
+
### Plan ve site
|
|
199
|
+
|
|
200
|
+
Bir çalıştırma `--against` kullandığında rapor, `report.html` ve `report.md` dosyalarında **Plan ve site** bölümüyle başlar. Planlanan her event bir kovaya düşer:
|
|
201
|
+
|
|
202
|
+
| Kova | Anlamı |
|
|
203
|
+
|---|---|
|
|
204
|
+
| Uygulanmış | Planlandı, fire oldu, gerekli parametrelerin tümü var, değer sorunu yok |
|
|
205
|
+
| Eksik | Çalıştırmanın gezdiği bir yolculuk için planlandı, ama hiç fire olmadı |
|
|
206
|
+
| Parametre eksik | Fire oldu, ama gerekli bir parametre yok |
|
|
207
|
+
| Hatalı değer | Fire oldu, değer sorunu var; satın alma değeri, para birimi ve ürün kontrollerinin aynısından |
|
|
208
|
+
| Planda yok | Fire oldu, ama planda değil |
|
|
209
|
+
| Kontrol edilmedi | Planlandı, ama yolculuğu ya da platformu bu çalıştırmanın parçası değildi |
|
|
210
|
+
|
|
211
|
+
Kapsam puanı, uygulanmış olanların kontrol edilebilir planlanmış event'lere (kontrol edilmedi hariç hepsi) bölünmesiyle bulunur; genel ve platform başına gösterilir, örneğin `Kapsam 11 olaydan 7 (%64), 2 olay kontrol edilmedi`. Aynı kayıtlar `plan-check.json` dosyasında da bulunur: planlanan her event için kovasıyla birlikte bir kayıt. Çıkış kodları değişmez: `--fail-on` yine bulgu önemine bakar. `--against` olmadan rapor tam olarak eskisi gibidir.
|
|
212
|
+
|
|
213
|
+
### Klasör yapısı ve plan kimlikleri
|
|
214
|
+
|
|
215
|
+
Planlar ve çalıştırmalar, aracı çalıştırdığınız klasördeki `aitd/` içinde tutulur:
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
aitd/
|
|
219
|
+
example.com/ sitenin ana makinesi, www. olmadan
|
|
220
|
+
plans/2026-10-16_0900/ measurement-plan.json, plan.html, plan.xlsx (dışa aktarımdan sonra)
|
|
221
|
+
runs/2026-10-16_0912/ report.html, report.md, timeline.csv, capture.json
|
|
222
|
+
ve plan-check.json (--against ile)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Bir kimlik, yerel saat `YYYY-MM-DD_HHMM` biçimindedir. O dakika zaten alınmışsa saniye eklenir (`_HHMMSS`). Hiçbir şey değiştirilmez: her taslak, içe aktarma ve çalıştırma yeni bir klasör alır. `aitd/` klasörünü başka bir yerde tutmak için `--data-dir <dir>` kullanın. `replay` ve `--save-site` klasörleri etkilenmez.
|
|
226
|
+
|
|
227
|
+
## Ne test edileceğini seçin
|
|
228
|
+
|
|
229
|
+
Başlamak için bir ayar dosyasına ihtiyacınız yok. Hazır yolculukları seçin, kendi yolculuğunuzu sade bir dille tarif edin, bir plana karşı kontrol edin ve kontrolü yalnızca ilgilendiğiniz event'lerle sınırlayın:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Siteyi en son kaydedilmiş planına karşı kontrol edin.
|
|
233
|
+
aitd run --site https://staging.yourshop.com --against latest
|
|
234
|
+
|
|
235
|
+
# Hazır yolculuklar, hedefleri ve beklenen GA4 ve Meta event'leriyle gelir.
|
|
149
236
|
ai-tag-debugger run --site https://staging.yourshop.com --journey purchase --journey sign_up
|
|
150
237
|
|
|
151
|
-
#
|
|
152
|
-
ai-tag-debugger run --site https://yoursite.com --goal "
|
|
238
|
+
# Bir yolculuğu kendi sözlerinizle tarif edin. Adını verdiğiniz event'ler bu yolculukta beklenir.
|
|
239
|
+
ai-tag-debugger run --site https://yoursite.com --goal "Alt bilgideki bültene abone ol" --events newsletter_signup
|
|
153
240
|
|
|
154
|
-
#
|
|
241
|
+
# Yalnızca bazı event'leri kontrol edin.
|
|
155
242
|
ai-tag-debugger run --config ai-tag-debugger.config.json --events purchase,add_to_cart
|
|
156
243
|
```
|
|
157
244
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
| Hazır senaryo | Yapay zekânın yaptığı | Beklenen event'ler |
|
|
245
|
+
| Hazır yolculuk | Yapay zekânın yaptığı | Beklediği event'ler |
|
|
161
246
|
|---|---|---|
|
|
162
|
-
| `purchase` (ya da `checkout`) | Ürün → sepet → ödeme → test ödeme
|
|
247
|
+
| `purchase` (ya da `checkout`) | Ürün → sepet → ödeme → test ödeme yöntemiyle sipariş | GA4 `view_item`, `add_to_cart`, `begin_checkout`, `purchase`; Meta `AddToCart`, `InitiateCheckout`, `Purchase` |
|
|
163
248
|
| `add_to_cart` (ya da `cart`) | Bir ürün açar ve sepete ekler | GA4 `view_item`, `add_to_cart`; Meta `AddToCart` |
|
|
164
|
-
| `sign_up` (ya da `signup`, `register`) | Test verileriyle hesap oluşturur | GA4 `sign_up`; Meta `CompleteRegistration` |
|
|
165
|
-
| `lead` (ya da `contact`, `form`) |
|
|
166
|
-
| `search` | Sitede arama yapar ve bir sonucu açar | `search_term` ile
|
|
249
|
+
| `sign_up` (ya da `signup`, `register`) | Test verileriyle bir hesap oluşturur | GA4 `sign_up`; Meta `CompleteRegistration` |
|
|
250
|
+
| `lead` (ya da `contact`, `form`) | Bir iletişim, teklif ya da demo formunu doldurup gönderir | GA4 `generate_lead`; Meta `Lead` |
|
|
251
|
+
| `search` | Sitede arama yapar ve bir sonucu açar | GA4 `search` (`search_term` ile); Meta `Search` |
|
|
167
252
|
|
|
168
|
-
`--journey`, ayar dosyanızdaki
|
|
253
|
+
`--journey`, ayar dosyanızdaki yolculukları id'leriyle de seçer. Bir ayar dosyasıyla, hazır yolculuklar kendi event'lerini planınıza ekler.
|
|
254
|
+
|
|
255
|
+
Ne test edeceğinizden emin değil misiniz? `aitd plan --site https://yoursite.com` bir ölçümleme planı taslağı çıkarır, `--against latest` de siteyi buna göre kontrol eder.
|
|
169
256
|
|
|
170
257
|
### API kullanımını düşük tutmak
|
|
171
258
|
|
|
172
|
-
|
|
259
|
+
Gezinmenin her adımı bir model çağrısıdır; bu yüzden kullanım **yolculuk × görünüm × adım** ile artar, üstüne bulguları açıklamak için sonda bir çağrı eklenir. Kontroller modeli asla çağırmaz.
|
|
173
260
|
|
|
174
|
-
- **
|
|
175
|
-
- **Tek
|
|
176
|
-
- **Adım sayısını sınırlayın.** `--max-steps 15`,
|
|
177
|
-
- **Büyük sayfaların daha pahalı
|
|
178
|
-
- **Raporu odaklı tutmak için `--events` kullanın.** Gezinmeyi
|
|
179
|
-
- **Yapay
|
|
180
|
-
- **Bir
|
|
261
|
+
- **Yalnızca ihtiyacınız olan yolculukları çalıştırın.** En büyük tasarruf budur: tam `purchase` yolculuğu yerine `--journey add_to_cart`, on adım ya da daha fazla yerine birkaç adım alır.
|
|
262
|
+
- **Tek bir görünüm çalıştırın.** `--viewport mobile`, masaüstü ve mobil birlikte çalıştırmaya göre çağrı sayısını yarıya indirir.
|
|
263
|
+
- **Adım sayısını sınırlayın.** `--max-steps 15`, dolaşan bir yolculuğu durdurur.
|
|
264
|
+
- **Büyük sayfaların daha pahalı olmasını bekleyin.** Her adım, sayfa görünümünü (en fazla 250 öğe ve 3.000 karakter metin) modele gönderir; bu yüzden yoğun sayfalar basit sayfalardan adım başına daha fazla token kullanır.
|
|
265
|
+
- **Raporu odaklı tutmak için `--events` kullanın.** Gezinmeyi kısaltmaz, bu yüzden kullanımı pek değiştirmez.
|
|
266
|
+
- **Yapay zekâsız tekrar oynatın.** Bir yapay zekâlı çalıştırmadan sonra adımları kaydetmek için `--save-steps <dosya>` ekleyin; sonra o ayar dosyasını her dağıtımda `--scripted --no-ai` ile çalıştırın. Bkz. [Adımları kaydedin ve yapay zekâ olmadan tekrar oynatın](#adımları-kaydedin-ve-yapay-zekâ-olmadan-tekrar-oynatın).
|
|
267
|
+
- **Bir sohbet uygulaması kullanın.** MCP üzerinden gezinmeyi sohbet uygulamasının kendi modeli yapar, bu yüzden hiç API anahtarı kullanılmaz.
|
|
181
268
|
|
|
182
|
-
### Yeni bir sürümü
|
|
269
|
+
### Yeni bir sürümü kayıtlı sitelere karşı kontrol edin
|
|
183
270
|
|
|
184
|
-
`--save-site <
|
|
271
|
+
`--save-site <dir>`, sitenin gönderdiği her yanıtı ve atılan adımları da kaydeder. `replay` daha sonra aynı sayfaları çevrimdışı, ağ bağlantısı ve yapay zekâ modeli olmadan yeniden denetler; bu yüzden maliyeti sıfırdır. Kayıtlı çalıştırmaya göre yeni ya da kalkmış bulguları listeler:
|
|
185
272
|
|
|
186
273
|
```bash
|
|
187
|
-
npx @analitikisler/ai-tag-debugger run --site https://www.
|
|
274
|
+
npx @analitikisler/ai-tag-debugger run --site https://www.yourshop.com --journey purchase --save-site saved/yourshop
|
|
188
275
|
npx @analitikisler/ai-tag-debugger replay saved/*
|
|
189
|
-
✗ https://www.
|
|
276
|
+
✗ https://www.yourshop.com (saved/yourshop): 0 yeni, 1 kalktı
|
|
190
277
|
- warning duplicate purchase desktop ga4 page_view
|
|
191
278
|
```
|
|
192
279
|
|
|
193
|
-
İlk çalıştırmanın bulguları beklenen bulgular olur. Bir değişiklik doğruysa
|
|
280
|
+
İlk çalıştırmanın bulguları beklenen bulgular olur. Bir değişiklik doğruysa, örneğin düzeltilmiş bir yanlış alarm ise, `replay --update` yeni bulguları beklenen bulgular yapar. Aracın yeni bir sürümünü bildiğiniz sitelere karşı ya da bir site değişikliğini son iyi çalıştırmasına karşı kontrol etmek için kullanın. Kaydedilmiş bir site genellikle birkaç MB'tır. Takip isteklerini, görselleri ve videoları, HttpOnly ve oturum çerezlerini, tarayıcının gönderdiği çerezleri, yetkilendirme başlıklarını, form verilerini ve adresinde e-posta ya da başka kullanıcı verisi bulunan istekleri dışarıda bırakır. Yine de sitenin sayfalarını ve betiklerini tutar; bu yüzden sahibi olmadığınız siteleri herkese açık depolarda tutmayın.
|
|
194
281
|
|
|
195
282
|
### Adımları kaydedin ve yapay zekâ olmadan tekrar oynatın
|
|
196
283
|
|
|
197
|
-
`--save-steps <dosya>`, her
|
|
284
|
+
`--save-steps <dosya>`, her yolculuğun attığı adımları bir ayar dosyasının `journeys[].steps` alanına yazar. Dosya yoksa oluşturur; ayar dosyasında plan yoksa çalıştırmanın planını da kaydeder. Aynı ayar dosyası yolculuğu, yapay zekâ modeli ve API anahtarı olmadan tekrarlar:
|
|
198
285
|
|
|
199
286
|
```bash
|
|
200
|
-
ai-tag-debugger run --site https://www.
|
|
287
|
+
ai-tag-debugger run --site https://www.yourshop.com --journey purchase --save-steps ai-tag-debugger.config.json
|
|
201
288
|
ai-tag-debugger run --config ai-tag-debugger.config.json --scripted --no-ai
|
|
202
289
|
```
|
|
203
290
|
|
|
204
|
-
Bir
|
|
291
|
+
Bir yolculuk her iki görünümde de çalıştıysa yalnızca ilk görünümün adımları tutulur. Ayar dosyasını depoda tutun ve ikinci komutu her dağıtımda çalıştırarak aynı yolculuğu hiçbir model çağrısı yapmadan kontrol edin.
|
|
205
292
|
|
|
206
|
-
## Sitenizi
|
|
293
|
+
## Sitenizi yapılandırın
|
|
207
294
|
|
|
208
295
|
`ai-tag-debugger.config.json`:
|
|
209
296
|
|
|
@@ -216,7 +303,7 @@ Bir senaryo iki ekran boyutunda çalıştıysa yalnızca ilk ekran boyutunun ad
|
|
|
216
303
|
"journeys": [
|
|
217
304
|
{
|
|
218
305
|
"id": "checkout",
|
|
219
|
-
"goal": "
|
|
306
|
+
"goal": "Çerezleri kabul et, sepete herhangi bir ürün ekle ve test ödeme yöntemiyle ödemeyi tamamla."
|
|
220
307
|
}
|
|
221
308
|
]
|
|
222
309
|
}
|
|
@@ -224,94 +311,119 @@ Bir senaryo iki ekran boyutunda çalıştıysa yalnızca ilk ekran boyutunun ad
|
|
|
224
311
|
|
|
225
312
|
| Alan | Anlamı |
|
|
226
313
|
|---|---|
|
|
227
|
-
| `site` |
|
|
228
|
-
| `plan` | Ölçümleme planı: bir dosya yolu ya da satır içi bir nesne (
|
|
229
|
-
| `gtm_container` | İsteğe bağlı GTM
|
|
314
|
+
| `site` | Temel URL. Mümkünse staging kullanın. |
|
|
315
|
+
| `plan` | Ölçümleme planı: bir dosya yolu ya da satır içi bir nesne (aşağıya bakın). Hazır yolculuklarla isteğe bağlıdır. `--against` ile çalışan bir çalıştırma bunun yerine o planı kullanır. |
|
|
316
|
+
| `gtm_container` | İsteğe bağlı GTM konteyner dışa aktarımı (Yönetici → Konteyneri dışa aktar); açıklamalar etiket ve tetikleyicileri adlandırabilsin diye. |
|
|
230
317
|
| `viewports` | `desktop` ve/veya `mobile`. |
|
|
231
|
-
| `journeys` | `--journey` ile hazır
|
|
232
|
-
| `journeys[].goal` | Yapay zekânın
|
|
318
|
+
| `journeys` | `--journey` ile hazır yolculuk seçtiğinizde, `--goal` ile bir yolculuk tarif ettiğinizde ya da `--against` ile bir plana karşı kontrol ettiğinizde isteğe bağlıdır. |
|
|
319
|
+
| `journeys[].goal` | Yapay zekânın sade bir dille ne yapacağı. |
|
|
233
320
|
| `journeys[].start` | İsteğe bağlı başlangıç yolu (varsayılan `/`). |
|
|
234
321
|
| `journeys[].steps` | `--scripted` çalıştırmaları için isteğe bağlı sabit adımlar: `{ "action": "click", "selector": "#add-to-cart" }`. |
|
|
235
|
-
| `allowed_hosts` |
|
|
236
|
-
| `providers` | Kontrol edilecek
|
|
237
|
-
| `block_hits` | Varsayılan `true`.
|
|
322
|
+
| `allowed_hosts` | Yolculukların ziyaret edebileceği başka ana makineler, örneğin barındırılan bir ödeme için `["checkout.payments-provider.com"]`. Tarayıcı aksi halde `site` ana makinesinde ve alt alan adlarında kalır. `--allow-host` ile aynıdır. |
|
|
323
|
+
| `providers` | Kontrol edilecek takip platformları, örneğin `["ga4", "meta"]`. Varsayılan `["ga4", "google_ads", "meta", "tiktok"]`. `--platforms` ile aynıdır. |
|
|
324
|
+
| `block_hits` | Varsayılan `true`. Takip isteklerinin gerçek uç noktalarınıza ulaşmasına izin vermek için `false` yapın. |
|
|
238
325
|
| `language` | Rapor dili, `en` (varsayılan) ya da `tr`. `--lang` ile aynıdır. |
|
|
239
|
-
| `keep_bodies` | Varsayılan `false`.
|
|
240
|
-
| `branding` | Varsayılan `true`. Analitik İşler logosunu ve "AI Tag Debugger
|
|
326
|
+
| `keep_bodies` | Varsayılan `false`. Takip isteklerini gönderildiği gibi, kullanıcı verisi gizlenmeden saklamak için `true` yapın. `--keep-bodies` ile aynıdır. |
|
|
327
|
+
| `branding` | Varsayılan `true`. Analitik İşler logosunu ve "Generated by AI Tag Debugger · analitikisler.com" satırını raporlardan çıkarmak için `false` yapın. `--no-branding` ile aynıdır, ya da MCP `finish_audit` ve `run_audit` araçlarında `branding: false`. |
|
|
241
328
|
| `provider` | İsteğe bağlı: `anthropic`, `openai`, `gemini` ya da `openai-compatible`. `--provider` ile aynıdır. |
|
|
242
329
|
| `base_url`, `model` | İsteğe bağlı: API adresi ve model kimliği, örneğin `openai-compatible` için. `--base-url` ve `--model` ile aynıdır. |
|
|
243
330
|
|
|
244
|
-
`measurement-plan.json`:
|
|
245
|
-
|
|
246
|
-
```json
|
|
247
|
-
{
|
|
248
|
-
"consent_mode": true,
|
|
249
|
-
"events": [
|
|
250
|
-
{ "platform": "ga4", "name": "add_to_cart", "required_params": ["currency", "value", "items"] },
|
|
251
|
-
{ "platform": "ga4", "name": "purchase", "journeys": ["checkout"], "required_params": ["transaction_id", "currency", "value", "items"] },
|
|
252
|
-
{ "platform": "meta", "name": "Purchase", "journeys": ["checkout"], "required_params": ["value", "currency"] }
|
|
253
|
-
]
|
|
254
|
-
}
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
`platform` değeri `ga4`, `google_ads`, `meta` ya da `tiktok` olabilir. `journeys`, bir event'in hangi senaryolarda beklendiğini sınırlar (varsayılan: her senaryo). Tek bir işlemde birden fazla kez gönderilmesi normal olan event'ler için `allow_multiple: true` kullanın.
|
|
258
|
-
|
|
259
331
|
## CLI
|
|
260
332
|
|
|
261
333
|
```
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
334
|
+
aitd plan --site <url> [--headed] [--provider <ad>] [--model <id>] [--max-steps <n>] [--data-dir <dir>]
|
|
335
|
+
aitd plan list --site <url> [--data-dir <dir>]
|
|
336
|
+
aitd plan import <dosya> --site <url> [--data-dir <dir>]
|
|
337
|
+
aitd plan export <plan> --site <url> [--format xlsx|csv] [--data-dir <dir>]
|
|
338
|
+
aitd run --site <url> (--against <plan> | --journey <id> | --goal "<metin>") [--config <dosya>] [--events <adlar>]
|
|
339
|
+
[--max-steps <n>] [--viewport desktop|mobile] [--platforms <liste>] [--data-dir <dir>]
|
|
340
|
+
[--provider anthropic|openai|gemini|openai-compatible] [--model <id>] [--lang en|tr] [--headed]
|
|
341
|
+
[--fail-on broken|risk|warning|never] [--scripted] [--no-ai] [--save-site <dir>] [--save-steps <dosya>]
|
|
342
|
+
aitd replay <dir>... [--update] [--out <dir>]
|
|
343
|
+
aitd mcp [--http] [--port <n>] [--host <adres>] [--token <gizli>] [--public-url <https url>] [--reports <dir>]
|
|
344
|
+
[--allow-private-network]
|
|
270
345
|
```
|
|
271
346
|
|
|
272
|
-
`aitd`, `ai-tag-debugger`
|
|
347
|
+
`aitd`, `ai-tag-debugger`'ın kısa bir takma adıdır ve aynı komutları ve seçenekleri kabul eder. Her komutun temel seçenekleri için `aitd <komut> --help` çalıştırın.
|
|
273
348
|
|
|
274
|
-
|
|
349
|
+
### Tüm seçenekler
|
|
275
350
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
351
|
+
| Seçenek | Komutlar | Anlamı |
|
|
352
|
+
|---|---|---|
|
|
353
|
+
| `--site <url>` | plan, run | Site. `plan` için zorunludur; `run` için `--against` ya da ayar dosyası siteyi vermiyorsa gereklidir. |
|
|
354
|
+
| `--against <plan>` | run | Bir plana karşı kontrol: `latest` (ya da `last`), `first`, bir plan kimliği ya da bir plan dosyasının ya da klasörünün yolu. |
|
|
355
|
+
| `--journey <id>` | run | Hazır bir yolculuk (tekrarlanabilir). |
|
|
356
|
+
| `--goal "<metin>"` | run | Sade bir dille bir yolculuk (tekrarlanabilir). |
|
|
357
|
+
| `--config <dosya>` | run | Siteyi, yolculukları ve planı bir ayar dosyasından al. |
|
|
358
|
+
| `--events <adlar>` | run | Yalnızca bu event'leri kontrol et, örneğin `purchase,add_to_cart`. |
|
|
359
|
+
| `--viewport <ad>` | run | `desktop` ya da `mobile` (tekrarlanabilir). |
|
|
360
|
+
| `--platforms <liste>` | run | Kontrol edilecek platformlar, örneğin `ga4,meta`. Eski adı `--providers`'ın yerine geçer; o da bir minör sürüm daha çalışır. |
|
|
361
|
+
| `--max-steps <n>` | plan, run | Yolculuk başına en fazla yapay zekâ adımı (`plan` için varsayılan 25). |
|
|
362
|
+
| `--lang <kod>` | run | Rapor dili: `en` ya da `tr`. |
|
|
363
|
+
| `--fail-on <düzey>` | run | Bu düzeyde çıkış kodu 1 olur: `broken` (varsayılan), `risk`, `warning` ya da `never`. |
|
|
364
|
+
| `--headed` | plan, run | Tarayıcı penceresini göster. |
|
|
365
|
+
| `--provider <ad>`, `--model <id>` | plan, run | Yapay zekâ sağlayıcısı ve modeli. Varsayılan: ayarlı olan API anahtarı. |
|
|
366
|
+
| `--scripted` | run | Her yolculuğun sabit adımlarını, yapay zekâ gezintisi olmadan tekrar oynat. |
|
|
367
|
+
| `--no-ai` | run | Hiç yapay zekâ modeli yok. `--scripted` anlamına gelir. |
|
|
368
|
+
| `--save-site <dir>` | run | Sitenin yanıtlarını `replay` için kaydet. |
|
|
369
|
+
| `--save-steps <dosya>` | run | Her yolculuğun attığı adımları bir ayar dosyasına yaz. |
|
|
370
|
+
| `--data-dir <dir>` | plan, run | `aitd/` klasörünün (planlar ve çalıştırmalar) tutulduğu yer. Varsayılan: `./aitd`. `run --out` yerine geçer. |
|
|
371
|
+
| `--format xlsx\|csv` | plan export | Elektronik tablo biçimi. Varsayılan: `xlsx`. |
|
|
372
|
+
| `--update` | replay | Bu tekrarın bulgularını beklenen bulgular yap. |
|
|
373
|
+
| `--out <dir>` | replay | Tekrar raporlarının yazılacağı yer. `run` için `--out` gizli bir takma ad olarak bir minör sürüm daha çalışır ve bir not yazdırır; `--data-dir` kullanın. |
|
|
374
|
+
| `--base-url <url>` | run | OpenAI uyumlu bir sağlayıcının API adresi. |
|
|
375
|
+
| `--allow-host <ana makine>` | run | Yolculukların ziyaret edebileceği başka bir ana makine (tekrarlanabilir). `allowed_hosts` ile aynıdır. |
|
|
376
|
+
| `--keep-bodies` | run | Takip isteklerini gönderildiği gibi, kullanıcı verisi gizlenmeden sakla. |
|
|
377
|
+
| `--no-branding` | plan, run | Logo ve kredi satırını raporlardan ve `plan.html` dosyasından çıkar. |
|
|
378
|
+
| `--http`, `--port`, `--host`, `--token`, `--public-url`, `--reports`, `--allow-private-network` | mcp | Aşağıdaki MCP bölümüne bakın. |
|
|
379
|
+
|
|
380
|
+
0.10.0 sürümünde kaldırıldı: `plan --from`, `plan --out` ve `plan --force`. Plan taslağı her zaman yeni bir klasör kaydeder; kaldırılmış bir bayrak ne çalıştırılacağını yazdırır.
|
|
381
|
+
|
|
382
|
+
Çıkış kodu, bulgular `--fail-on` düzeyine (varsayılan `broken`) ulaştığında `1` olur; böylece bir dağıtımı durdurabilir. Her dağıtımdan sonra çalıştırmak için [`examples/github-actions/ai-tag-debugger.yml`](examples/github-actions/ai-tag-debugger.yml) dosyasına bakın.
|
|
383
|
+
|
|
384
|
+
Çıktı:
|
|
385
|
+
|
|
386
|
+
- `report.html`: dört sekmeli tek bir dosya. Bağlantılar sekmeler arasında çalışır (bir bulgunun "Nerede" çipi o adımı açar) ve her görünümün paylaşılabilir ya da yer imine eklenebilir kendi URL'si vardır.
|
|
387
|
+
- **Genel bakış**: sorun sayıları, yapay zekâ özeti (en önemli sorun önce, ve bulguların kapsamadığı kontrol edilmeye değer şeyler), yolculuklar ve sorun sayıları, kontrol edilen platformlar ve `--against` ile [Plan ve site](#plan-ve-site) kapsamı.
|
|
388
|
+
- **Bulgular**: önem düzeyine göre gruplu ve filtrelenebilir. Her birinde etkisi, olası nedeni, kanıtı, numaralı düzeltme adımları ve olayın yaşandığı adımlar bulunur.
|
|
389
|
+
- **Yolculuklar**: her seferinde bir yolculuk; solda adımları, sağda seçili adım. Sorunlu ilk adımda açılır. Her adımın üç sekmesi vardır:
|
|
390
|
+
- **Event'ler**: her takip isteği, parametreleri, çerez onayı durumu, arkasındaki dataLayer gönderimi ve isteği ve bir bulgu buraya işaret ediyorsa bir not.
|
|
391
|
+
- **dataLayer**: adımdaki her gönderim.
|
|
392
|
+
- **Ağ istekleri**: seçilen platformlara giden her istek; her parametrede bir `?` ipucuyla bir parametre tablosuna çözülmüş. Toplu bir GA4 isteği, içindeki her event'i gösterir.
|
|
393
|
+
- **Kapsam ve plan**: planlanan her event'in her yolculukta gönderilip gönderilmediği ve kontrol edilen ya da dışarıda bırakılan platformlar, istek sayılarıyla.
|
|
394
|
+
|
|
395
|
+
Event'ler ve istekler kaynağa göre filtrelenebilir. GA4 ürün dizgileri (`pr1`…) ve dataLayer `ecommerce.items` ürün kartları olarak gösterilir; özel ürün parametreleri kendi grubunda yer alır. Raporda betik yoktur: sekmeler ve filtreler düz HTML ve CSS'tir (Chrome 105, Safari 15.4 ya da Firefox 121 ve sonrası gerekir) ve yazdırırken her sekme görünür. Logolar gömülüdür, bu yüzden internetten hiçbir şey yüklenmez. `--no-branding`, Analitik İşler logosunu ve kredi satırını çıkarır.
|
|
396
|
+
- `timeline.csv`: aynı zaman akışı, her isteğe, dataLayer gönderimine ve ağ çağrısına bir satır olarak; Excel ya da Google Sheets için hazır.
|
|
397
|
+
- `report.md`: raporun Markdown hali, örneğin bir çekme isteği yorumu için.
|
|
398
|
+
- `capture.json`: yakalanan her şey, kendi analiziniz için.
|
|
399
|
+
- `plan-check.json`: `--against` ile, planlanan her event için kovasıyla birlikte bir kayıt.
|
|
400
|
+
- `plan.html` (planın klasöründe): planın event'lerini, parametrelerini ve kullanıcı özelliklerini gösteren okunabilir bir sayfa.
|
|
401
|
+
|
|
402
|
+
Raporlar bir kredi satırıyla biter: "Generated by AI Tag Debugger · analitikisler.com"; alan adı düz bir bağlantıdır (görsel yok, takip yok ve yönlendiren bilgisi yok; böylece rapor adresleri sızdırılmaz). `--no-branding`, bunu logosuyla birlikte kaldırır.
|
|
403
|
+
|
|
404
|
+
Türkçe rapor için `--lang tr` kullanın. Bulgu metinleri, başlıklar, modelin açıklamaları ve düzeltmeleri Türkçe yazılır; ajan adımlarını da Türkçe anlatır.
|
|
405
|
+
|
|
406
|
+
## Yapay zekâ sohbet uygulamanızdan kullanın (MCP)
|
|
407
|
+
|
|
408
|
+
`aitd mcp`, bir [Model Context Protocol](https://modelcontextprotocol.io) sunucusu başlatır. Sohbet uygulamanızın modeli denetimi kendisi yürütür: "staging.myshop.com sitesinin ödeme takibini kontrol et" dersiniz, o da tarayıcıyı açar, tıklar ve bulguları sohbette açıklar. Yapay zekâ düşünmeyi uygulamanın kendi modeli yaptığı için API anahtarı gerekmez.
|
|
299
409
|
|
|
300
410
|
Sunucunun sunduğu araçlar:
|
|
301
411
|
|
|
302
412
|
| Araç | Ne yapar |
|
|
303
413
|
|---|---|
|
|
304
|
-
| `start_audit` | Bir
|
|
305
|
-
| `browser_action` | Tek bir
|
|
306
|
-
| `get_page` |
|
|
307
|
-
| `finish_audit` | Her şeyi ölçümleme planınıza (JSON) ya da hazır
|
|
308
|
-
| `run_audit` | Bir ayar dosyasını baştan sona çalıştırır
|
|
414
|
+
| `start_audit` | Bir URL'de yeni bir tarayıcı açar ve tüm takibi kaydetmeye başlar. Hedefini ve beklenen event'lerini almak için hazır bir yolculuk (`purchase`, `sign_up`, …) verin; kontrol edilecek platformları seçmek için `providers` verin. Asistan önce hangi platformların kontrol edileceğini size sorar. |
|
|
415
|
+
| `browser_action` | Tek bir tıklama, doldurma, seçme, gitme, kaydırma ya da bekleme. Sayfayı ve o adımın gönderdiği takip isteklerini döndürür. |
|
|
416
|
+
| `get_page` | Geçerli sayfayı gösterir. |
|
|
417
|
+
| `finish_audit` | Her şeyi ölçümleme planınıza (JSON) ya da `against` olarak verilen kayıtlı bir plana (`latest`, `first`, bir plan kimliği ya da yerel bir sunucuda bir yol) ya da hazır yolculuğun event'lerine karşı kontrol eder; isterseniz yalnızca adını verdiğiniz `events` için, ve zaman akışıyla birlikte tam HTML raporunu yazar. Site denetimden alınır. |
|
|
418
|
+
| `run_audit` | Bir ayar dosyasını baştan sona çalıştırır. `against` ile çalıştırmayı kayıtlı bir plana karşı kontrol eder; ayar dosyasında yolculuk yoksa, plandan türetilen yolculukları gezer. Dosya yolları yalnızca yerelde çalışır. |
|
|
419
|
+
|
|
420
|
+
`against`, CLI'deki `--against` ile aynı değerleri alır. HTTP üzerinden yalnızca `latest`, `first` ya da bir plan kimliği kabul edilir, asla bir yol değil. Planlar, `aitd plan --site <url>` ile kaydedilmiş olanlardır.
|
|
309
421
|
|
|
310
|
-
Tarayıcı, sunucunun çalıştığı bilgisayarda çalışır
|
|
422
|
+
Tarayıcı, sunucunun çalıştığı bilgisayarda çalışır; bu yüzden staging ve `localhost` sitelerinize erişebilir. Takip istekleri her zamanki gibi yerelde yanıtlanır.
|
|
311
423
|
|
|
312
424
|
### Yerel sunucu başlatan uygulamalar: Claude Desktop, Gemini CLI, Cursor, VS Code, Claude Code
|
|
313
425
|
|
|
314
|
-
Sunucuyu uygulamanın MCP
|
|
426
|
+
Sunucuyu uygulamanın MCP yapılandırmasına ekleyin. Claude Desktop için bu, Settings → Developer → Edit Config (`claude_desktop_config.json`) yoludur:
|
|
315
427
|
|
|
316
428
|
```json
|
|
317
429
|
{
|
|
@@ -324,70 +436,70 @@ Sunucuyu uygulamanın MCP ayarlarına ekleyin. Claude Desktop'ta bu Settings →
|
|
|
324
436
|
}
|
|
325
437
|
```
|
|
326
438
|
|
|
327
|
-
Tarayıcı (Chromium),
|
|
439
|
+
Tarayıcı (Chromium), bir denetimi ilk kez çalıştırdığınızda kendini indirir; bu yaklaşık bir dakika sürer ve yalnızca bir kez olur. Önceden indirmek için: `npx -y playwright@1.56.1 install chromium`.
|
|
328
440
|
|
|
329
|
-
Tek tıkla
|
|
441
|
+
Tek tıkla ya da tek satırla kurulum:
|
|
330
442
|
|
|
331
443
|
- **Claude Code:** `claude mcp add ai-tag-debugger -- npx -y @analitikisler/ai-tag-debugger mcp`
|
|
332
444
|
- **Cursor:** [Cursor'a ekle](https://cursor.com/en/install-mcp?name=ai-tag-debugger&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhbmFsaXRpa2lzbGVyL2FpLXRhZy1kZWJ1Z2dlciIsIm1jcCJdfQ==)
|
|
333
|
-
- **VS Code:** [VS Code'a
|
|
334
|
-
- **Claude Desktop, Gemini CLI ve diğerleri:** yukarıdaki JSON bloğu. Gemini CLI
|
|
445
|
+
- **VS Code:** [VS Code'a yükle](https://insiders.vscode.dev/redirect/mcp/install?name=ai-tag-debugger&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40analitikisler%2Fai-tag-debugger%22%2C%22mcp%22%5D%7D), ya da `code --add-mcp '{"name":"ai-tag-debugger","command":"npx","args":["-y","@analitikisler/ai-tag-debugger","mcp"]}'`
|
|
446
|
+
- **Claude Desktop, Gemini CLI ve diğerleri:** yukarıdaki JSON bloğu. Gemini CLI aynı `mcpServers` bloğunu `~/.gemini/settings.json` dosyasında kullanır.
|
|
335
447
|
|
|
336
|
-
Uygulamayı yeniden başlatın
|
|
448
|
+
Uygulamayı yeniden başlatın; ai-tag-debugger araçları görünür. Uygulama `npx`'i bulamıyorsa tam yolunu kullanın (`which npx`; örneğin Homebrew'lu bir Mac'te `/opt/homebrew/bin/npx`). Raporlar `~/ai-tag-debugger-reports` klasörüne yazılır.
|
|
337
449
|
|
|
338
|
-
|
|
450
|
+
Bunun yerine bir klondan mı çalıştırıyorsunuz? `"command": "node"` ve `"args": ["/path/to/ai-tag-debugger/src/cli.js", "mcp"]` kullanın.
|
|
339
451
|
|
|
340
452
|
### Bir adrese bağlanan uygulamalar: ChatGPT, Gemini
|
|
341
453
|
|
|
342
|
-
Bu uygulamalar MCP sunucularına HTTPS üzerinden bağlanır (ChatGPT'de, planınıza bağlı olarak
|
|
454
|
+
Bu uygulamalar MCP sunucularına HTTPS üzerinden bağlanır (ChatGPT'de geliştirici modu bağlayıcıları üzerinden, planınıza bağlı olarak). Sunucuyu HTTP modunda başlatın ve bir tünelle dışarı açın:
|
|
343
455
|
|
|
344
456
|
```bash
|
|
345
|
-
cloudflared tunnel --url http://localhost:8787 #
|
|
346
|
-
npx -y @analitikisler/ai-tag-debugger mcp --http --port 8787 --public-url https://<
|
|
457
|
+
cloudflared tunnel --url http://localhost:8787 # ya da: ngrok http 8787; yazdığı https adresini not edin
|
|
458
|
+
npx -y @analitikisler/ai-tag-debugger mcp --http --port 8787 --public-url https://<tünel-adresiniz>
|
|
347
459
|
```
|
|
348
460
|
|
|
349
|
-
Sunucu, rastgele gizli bir yol içeren bir
|
|
461
|
+
Sunucu, `https://<tünel-adresiniz>/mcp/<gizli>` gibi rastgele gizli bir yol içeren bir URL yazdırır. Bu URL'yi uygulamada bir bağlayıcı olarak ekleyin. URL'yi bilen herkes bilgisayarınızdaki tarayıcıyı kullanabilir; bu yüzden gizli tutun ve işiniz bitince sunucuyu durdurun. Kendi gizli değeriniz (`--token`) en az 16 karakter olmalıdır.
|
|
350
462
|
|
|
351
|
-
HTTP modunda sunucu
|
|
463
|
+
HTTP modunda sunucu yerelde olduğundan daha kısıtlıdır:
|
|
352
464
|
|
|
353
|
-
-
|
|
354
|
-
- Tarayıcı
|
|
355
|
-
- 15 dakika açık kalan
|
|
465
|
+
- Ölçümleme planlarını ya da ayar dosyalarını diskinizden okumaz (planı sohbette JSON metni olarak verin ya da `against: latest`, `first` ya da kimliğiyle kayıtlı bir planı adlandırın) ve `run_audit` sunulmaz. Yalnızca kendi yazdığı raporları sunar.
|
|
466
|
+
- Tarayıcı yalnızca `http` ve `https` sayfalarını açar ve `localhost` ile özel ağ adreslerini (`192.168.x.x` ya da `169.254.169.254` gibi) reddeder; böylece URL, ağınızı incelemek için kullanılamaz. WebSocket'ler dahil tüm tarayıcı trafiği, her ana makineyi bir kez çözüp yalnızca kontrol ettiği adrese bağlanan küçük bir yerleşik proxy üzerinden geçer; denetim sırasında değişen bir DNS yanıtı kontrolü atlatamaz. Yerel bir staging sitesini bu şekilde yine de denetlemek için sunucuyu `--allow-private-network` ile başlatın.
|
|
467
|
+
- 15 dakika açık kalan denetimler kapatılır ve istek gövdeleri 1 MB ile sınırlıdır.
|
|
356
468
|
|
|
357
|
-
|
|
469
|
+
Tünel gerektirmeyen barındırılmış bir sunucu, [Analitik İşler](https://analitikisler.com) Cloud sürümünün bir parçasıdır.
|
|
358
470
|
|
|
359
471
|
## Güvenlik
|
|
360
472
|
|
|
361
|
-
- Ajana
|
|
362
|
-
- [Nasıl çalışır](#nasıl-çalışır) bölümünde listelenen platformlara giden
|
|
363
|
-
-
|
|
364
|
-
- Modele, sayfa içeriğinin
|
|
365
|
-
- Tarayıcı, ortamında API anahtarlarınız ve diğer gizli
|
|
366
|
-
- **Reklam eşleştirmesi için gönderilen kullanıcı
|
|
367
|
-
- Saklanan istek gövdeleri istek başına 32 KB
|
|
368
|
-
-
|
|
369
|
-
- HTTP sunucusunu başkaları için
|
|
473
|
+
- Ajana kolay test verisi kullanması ve **asla gerçek ödeme bilgisi girmemesi** söylenir. Bir yolculuk gerçek bir ödeme ya da hesap gerektiriyorsa durur ve bunu bildirir.
|
|
474
|
+
- [Nasıl çalışır](#nasıl-çalışır) bölümünde listelenen platformlara giden takip istekleri varsayılan olarak yerelde yanıtlanır; bu yüzden o analitik ve reklam hesaplarına test dönüşümleri ulaşmaz.
|
|
475
|
+
- Tarayıcı, denetlenen sitede ve alt alan adlarında kalır; ayrıca varsa `allowed_hosts` içinde. Yalnızca `http` ve `https` sayfalarını açar.
|
|
476
|
+
- Modele, sayfa içeriğinin veri olduğu ve talimat olmadığı söylenir. Bir istem kuralı, bir modelin asla yanıltılmayacağını garanti edemez; bu yüzden yukarıdaki gezinme sınırları, yanıltılmış bir modelin yapabileceklerini sınırlar.
|
|
477
|
+
- Tarayıcı, ortamında API anahtarlarınız ve diğer gizli bilgileriniz olmadan çalışır.
|
|
478
|
+
- **Reklam eşleştirmesi için gönderilen kullanıcı verisi, `capture.json` dosyasına kaydedilmeden ya da raporda gösterilmeden önce gizlenir**: GA4 ve Google Ads geliştirilmiş dönüşümlerindeki e-postalar, telefonlar, adlar, adresler ve kullanıcı kimlikleri (`em`, `ph`, `uid`, …), Meta gelişmiş eşleştirme (`ud[*]`, `udff[*]`), TikTok `context.user` ve geliştirilmiş dönüşümler için sitenin dataLayer'a gönderdiği `user_data`. E-posta adresine benzeyen her değer, alanı ne olursa olsun gizlenir; yalnızca denetlenen sitenin `mailto:` bağlantısındaki ya da bir bağlantı alanındaki (`link_url`, `link_text`, `gtm.elementUrl`, …) kendi adresi istisnadır; örneğin bir GTM tıklama event'indeki iletişim bağlantısı, ziyaretçi verisi değildir. Her değer `[redacted: 64 chars, looks hashed]` gibi bir işaretçiye dönüşür; karma hâle getirilmemiş bir değer ise kişisel veri riski olarak raporlanır. `--keep-bodies` (`"keep_bodies": true`), istekleri gönderildiği gibi, hata ayıklama için saklar.
|
|
479
|
+
- Saklanan istek gövdeleri istek başına 32 KB, yolculuk başına 2 MB ile sınırlıdır. Bu sınırın üzerinde rapor, gövdenin saklanmadığını söyler.
|
|
480
|
+
- Yalnızca sahibi olduğunuz ya da test etme yetkiniz olan sitelere karşı çalıştırın.
|
|
481
|
+
- HTTP sunucusunu başkaları için barındırıyor musunuz? Ek bir savunma katmanı olarak özel ve bulut meta veri adres aralıklarını ağ düzeyinde de engelleyin (bir çıkış güvenlik duvarı ya da yalıtılmış bir ağ).
|
|
370
482
|
|
|
371
483
|
## Yol haritası
|
|
372
484
|
|
|
373
|
-
- Consent Check: çerez
|
|
374
|
-
-
|
|
375
|
-
- [analitikisler.com](https://analitikisler.com
|
|
485
|
+
- Consent Check: çerez onay pencerelerinin ve Consent Mode v2'nin KVKK/GDPR'a karşı daha derin denetimleri.
|
|
486
|
+
- Measurement Plan: bir URL'den ölçümleme planı ve dataLayer şartnamesi taslağı çıkarma.
|
|
487
|
+
- [analitikisler.com](https://analitikisler.com) üzerinde; zamanlanmış çalıştırmalar, dağıtım webhook'ları, barındırılan bir MCP sunucusu ve ajanslar için çok siteli panolar içeren barındırılan sürüm.
|
|
376
488
|
|
|
377
489
|
## Geliştirme
|
|
378
490
|
|
|
379
491
|
```bash
|
|
380
|
-
npm run setup #
|
|
381
|
-
npm test #
|
|
492
|
+
npm run setup # Node'u denetler, bağımlılıkları ve Chromium'u kurar, bir AI sağlayıcı anahtarının ayarlı olup olmadığını söyler
|
|
493
|
+
npm test # ayrıştırıcılar, kontroller, her AI sağlayıcısı ve MCP sunucusu; demo mağazaya karşı uçtan uca
|
|
382
494
|
```
|
|
383
495
|
|
|
384
|
-
Depoda bir
|
|
496
|
+
Depoda ayrıca bir geliştirme konteyneri (`.devcontainer/devcontainer.json`) vardır. VS Code'da Dev Containers eklentisiyle ya da GitHub Codespaces'te açın; Chromium'un sistem kütüphaneleri dahil `npm run setup`'ı sizin yerinize çalıştırır. Oradaki bir AI modelini kullanmak için anahtarınızı bir Codespaces sırrı olarak ekleyin ya da konteynerin terminalinde dışa aktarın.
|
|
385
497
|
|
|
386
|
-
Uçtan uca testler sahte model istemcileri kullanır, bu yüzden API anahtarı olmadan çalışır.
|
|
498
|
+
Uçtan uca testler sahte model istemcileri kullanır, bu yüzden bir API anahtarı olmadan çalışır.
|
|
387
499
|
|
|
388
500
|
## Barındırılan sürüm
|
|
389
501
|
|
|
390
|
-
Barındırılan
|
|
502
|
+
Barındırılan çalıştırmalar, zamanlama ve ajans panoları için [analitikisler.com](https://analitikisler.com) adresine bakın.
|
|
391
503
|
|
|
392
504
|
## Lisans
|
|
393
505
|
|