@kahinmcp/kahin 0.3.7 → 0.3.8

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 CHANGED
@@ -1,5 +1,110 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## [0.3.8] — 2026-08-08
6
+
7
+ ### Eklenen
8
+ - `kahin_mirage_expect` / `kahin_mirage_check` / `kahin_mirage_uncheck` /
9
+ `kahin_mirage_select_option` / `kahin_mirage_dblclick` / `kahin_mirage_drag` /
10
+ `kahin_mirage_wait_for_text` / `kahin_mirage_wait_for_timeout` /
11
+ `kahin_mirage_route` eklendi: retry'li web-first assertion, doğrulamalı
12
+ checkbox/radio/select eylemleri, gerçek çift tıklama, sınırlı drag-and-drop,
13
+ metin/süre bekleme ve tek sonraki istek için abort/continue/fulfill route.
14
+ - `kahin_mirage_wait_selector` artık `state=attached|visible|enabled`
15
+ (varsayılan `visible`) destekler; timeout yanıtı `code:"timeout"` ve son
16
+ `reason` ile döner.
17
+ - `kahin_mirage_query` / `kahin_mirage_query_all` / `kahin_mirage_type` /
18
+ `kahin_mirage_wait_selector` locator motorunu kabul eder (`css=` / `text=` /
19
+ `role=` / `xpath=` / `nth=` ve `>>` zincirleme).
20
+ - `kahin_mirage_click` / `kahin_mirage_hover` / `kahin_mirage_focus` aksiyon
21
+ öncesi Playwright tarzı actionability bekler (görünür, enabled, stabil,
22
+ engelsiz; retry + `timeout` parametresi).
23
+ - `kahin_navigate` artık `wait_until=commit|domcontentloaded|load|networkidle`,
24
+ bounded `timeout` ve `referer` kabul eder; lifecycle beklemesi aşılırsa
25
+ `code:"navigation_timeout"` döner.
26
+ - Faz 2 agent-native yüzey: `kahin_mirage_snapshot` (ref'li, token bütçeli
27
+ satırlar; truncation asla sessiz değildir), `kahin_mirage_fill_form`
28
+ (ref'lerle çok alanlı doldurma; stale ref `requiresSnapshot` döner) ve
29
+ click/type/check/uncheck/select_option/dblclick/drag'e opsiyonel
30
+ `return_snapshot` kancası.
31
+ - Oturum kalıcılığı: `kahin_mirage_state_save` / `kahin_mirage_state_load`
32
+ (url + cookie + local/sessionStorage; mutlak yol zorunlu, load önce
33
+ kaydedilen url'e döner).
34
+ - Kimlik kalıcılığı: `kahin_identity_new` / `kahin_identity_save` /
35
+ `kahin_identity_list` / `kahin_identity_delete` / `kahin_identity_report` +
36
+ `kahin_browser_start(identity=...)` ile gerçek Camoufox fingerprint
37
+ pinleme; rapor canlı `navigator.userAgent`'ı sayfa-içi doğrular.
38
+ - `kahin_agent_status`: agent döngüsü özeti — engine liveness, sayfa durumu,
39
+ sekme sayısı, gerçek DOM-stream bookkeeping'inden `refsLive`/`domCursor`,
40
+ dialog/network/console sayaçları ve identity; engine yoksa yapılandırılmış
41
+ idle yanıt, asla hata fırlatmaz.
42
+ - Faz 3 stealth/anti-detect yüzeyi: `kahin_stealth_audit` (14 salt-okunur
43
+ leak probe'u, skor `{passed, total, ratio}`; hiçbir check atlanmaz),
44
+ `kahin_mirage_mouse_trajectory` / `kahin_mirage_click_humanized` ve
45
+ cadence'li `kahin_mirage_key_text` (jitter'lı Bézier yörünge, gerçek DOM
46
+ tıklaması, jitter'lı tuş hızı; hepsi seed'li deterministik).
47
+ - Domain başına kimlik rotasyonu: `kahin_identity_pin` / `kahin_identity_unpin`
48
+ / `kahin_identity_pins` / `kahin_identity_for_domain` — kanonik domain
49
+ anahtarlı, bounded ve doğrulanmış `~/.config/kahin/pins.json` deposu.
50
+ - `kahin_fingerprint_report` (canlı sayfadan sitenin göreceği fingerprint;
51
+ emülasyon onayından kanıt üretmez) ve `kahin_proxy_resolve` + `kahin_browser_start(proxy=...)`
52
+ (proxy exit-IP geo + timezone/locale/geolocation önerileri; URL kimlik
53
+ bilgileri asla loglanmaz; aktif engine config'iyle çakışma
54
+ `engine_config_conflict`).
55
+ - Stealth CI kapısı: `KAHIN_REQUIRE_STEALTH=1` altında audit ratio ≥ 0.8 ve
56
+ identity rotasyonu tam fingerprint özetini değiştirmek zorunludur;
57
+ `scripts/stealth-regression.py` drift-watcher'ı sabitlenmiş
58
+ `camoufox-harness/tests/perf/stealth-baseline.json` ile karşılaştırır
59
+ (0 = temiz, 1 = yeni leak, 2 = ortam; baseline yalnızca
60
+ `KAHIN_UPDATE_BASELINE=1` ile yeniden yazılır) ve GitLab `stealth-regression`
61
+ job'ı (`stage: verify`, real-e2e ile aynı unprivileged/GTK kurulumu)
62
+ schedule/main'da suite + regression'ı çalıştırır.
63
+ - Faz 4 performans yüzeyi: Zig sidecar non-blocking'e geçti — tek-in-flight
64
+ darboğazı kalktı, stdin işleme browser yanıtını asla bloklamaz ve birden
65
+ fazla istek aynı anda in-flight olabilir (IPC sözleşmesi değişmedi). N=20
66
+ `Runtime.evaluate` concurrency probe'u
67
+ (`camoufox-harness/tests/perf/concurrency.md`): seri 74.78 → 28.56 ms,
68
+ paralel duvar süresi 56.89 → 8.71 ms (6.5× düşüş), ratio 1.314 → 3.281.
69
+ - `kahin_engine_stats` eklendi: monotonic clock ile uptime + healer
70
+ tracker'dan bounded per-tool rollup (`tool_calls`/`tool_errors`,
71
+ `top_slow` ≤ 10, `last_error`); tüm `safe()` süre ölçümleri
72
+ `time.monotonic()`'a taşındı; engine yoksa yapılandırılmış
73
+ `engine_unavailable` yanıtı döner.
74
+ - Identity başına bounded profile prewarm: stabil sha256 identity hash +
75
+ ölçülen hazırlık süreleri in-process cache (max 8, FIFO) ve
76
+ `~/.cache/kahin/profiles/<hash>.json` içinde tutulur; gerçek launch işi
77
+ asla atlanmaz (dürüst metadata/reuse kaydı; kimlik payload'ı metadata'da
78
+ saklanmaz).
79
+
80
+ ### Düzeltilen
81
+ - Obscura/Shadow doğrudan screenshot çağrısını artık fail-closed reddeder;
82
+ görsel capture sözleşmesi Mirage’a ait kalır ve generic CDP yolu Mirage’a
83
+ doğru şekilde yükseltilir.
84
+ - Stealth CI gate’i Xvfb ile sabit bir grafik yüzeyinde ve `TZ=Etc/UTC` ile
85
+ çalışır; timezone probe’u geçerli `UTC` çıktısını da kabul eder. Böylece
86
+ runner’ın DISPLAY/TZ farkları gerçek stealth drift’i gibi raporlanmaz.
87
+ - Release tag’leri stealth regression kapısından geçmeden npm publish’e
88
+ ulaşamaz; npm publish sonrası registry’den sürüm tekrar okunarak local
89
+ package sürümüyle birebir eşleşme kanıtlanır.
90
+ - Identity rotation e2e gate’i Linux/Windows kimlik çiftiyle en az iki canlı
91
+ fingerprint boyutunu deterministik doğrular; yalnızca runner WebGL’ine
92
+ bağlı rastgele identity çakışması artık release’i düşürmez.
93
+ - CI browser image’larına Mesa/llvmpipe runtime’ı eklenerek WebGL stealth
94
+ probe’u gerçek software-rendered context üzerinde doğrulanır; baseline
95
+ gevşetilmez.
96
+ - Runner’da Mesa’nın gerçek software renderer’ı açıkça `llvmpipe` olarak
97
+ seçilir; WebGL gate’i yalnızca kütüphanelerin kurulu olmasına güvenmez.
98
+ - Stealth audit’in webgl check’i artık runner grafik yığınından bağımsız:
99
+ WebGL API varlığını (context entry point) doğrular; GL’siz CI runner’ında
100
+ context oluşturma başarısızlığı artık sahte “leak” olarak raporlanmaz.
101
+ CI browser gate’leri ayrıca Mesa GL kütüphanelerini kurar, böylece GL
102
+ sunan runner’larda `fingerprint_report` gerçek WebGL değerlerini okur.
103
+ - `lib/` içindeki gömülü wheel HEAD kaynağından yeniden üretildi: Obscura
104
+ screenshot guard’ı, stealth/agent/reliability modülleri ve güncel Zig
105
+ sidecar dahil — npm paketinin taşıdığı wheel ile kaynak ağacı senkron
106
+ kalır.
107
+
3
108
  ## [0.3.7] — 2026-08-06
4
109
 
5
110
  ### Eklenen
@@ -199,3 +304,4 @@ Tüm önemli değişiklikler bu dosyada tutulur. Format: [Keep a Changelog](http
199
304
  [0.1.7]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.1.6...v0.1.7
200
305
  [0.3.6]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.5...v0.3.6
201
306
  [0.3.7]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.6...v0.3.7
307
+ [0.3.8]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.7...v0.3.8
package/README.md CHANGED
@@ -16,7 +16,7 @@ AI modeller Chrome'un içine girip sayfa gezip kod çalıştırabilir ama CDP'yi
16
16
 
17
17
  56 domain, 667 komut, 237 event, 609 type — Chrome 148 protokolü gömülü.
18
18
 
19
- ## 110 Tool · 4 Kategori Ailesi · 2 Engine
19
+ ## 139 Tool · 4 Kategori Ailesi · 2 Engine
20
20
 
21
21
  Tool'lar engine-ayrımlı kategori dosyalarında (`kahin/tools/`): paylaşılan çekirdek + Obscura + Camoufox aileleri.
22
22
 
@@ -29,10 +29,10 @@ Tool'lar engine-ayrımlı kategori dosyalarında (`kahin/tools/`): paylaşılan
29
29
  | DEJA_VU — Debug | CDP event geçmişi, network istekleri, console mesajları | 4 |
30
30
  | PROPHECY — Pattern DB | Kullanım desenlerini öğren, sorgula, öner | 5 |
31
31
  | HEALER | Hata istatistikleri | 1 |
32
- | MIRAGE — Camoufox Native (77) | Juggler protokolü üstünde gerçek-zamanlı DOM stream, DOM, Input, PageEx, Tab, Network, Storage, Emulation, Dialog/Download/Worker/WS, Upload, Screencast, Accessibility, Engine sağlığı | 77 |
32
+ | MIRAGE — Camoufox Native (107) | Juggler protokolü üstünde gerçek-zamanlı DOM stream, DOM, Reliability, Input, PageEx, Tab, Network, Storage, Emulation, Dialog/Download/Worker/WS, Upload, Screencast, Accessibility, Engine sağlığı/istatistik, Agent-native snapshot/form/state/identity/status, Stealth audit/insansı girdi/identity rotasyonu/proxy-geo | 107 |
33
33
  | OBSCURA — Ayrı kategori | Obscura'ya özel tool'lar (hazırlanıyor) | 0 |
34
34
 
35
- **Toplam: 110 tool.**
35
+ **Toplam: 139 tool.**
36
36
 
37
37
  ## Bir satırda özet
38
38
 
@@ -106,9 +106,12 @@ Camoufox (Juggler native) ile:
106
106
  → kahin_mirage_set_user_agent / set_viewport / set_geolocation
107
107
  → kahin_mirage_set_file_chooser_intercept(true) → kahin_mirage_upload_files(["/abs/path"])
108
108
  → kahin_mirage_screencast_start → kahin_mirage_screencast_frame (base64 JPEG)
109
- → kahin_mirage_accessibility_tree → kahin_engine_health
109
+ → kahin_mirage_accessibility_tree → kahin_engine_health → kahin_engine_stats
110
110
  → kahin_mirage_dom_start → kahin_mirage_dom_snapshot → kahin_mirage_dom_events
111
111
  → kahin_mirage_dom_action (snapshot'tan alınan canlı nodeId ile)
112
+ → kahin_mirage_snapshot (ref'li ajan görünümü) → kahin_mirage_fill_form
113
+ → kahin_mirage_state_save/load → kahin_identity_new/save/list/delete/report
114
+ → kahin_agent_status (agent döngüsü özeti)
112
115
  ```
113
116
 
114
117
  `kahin_browser_start` tek bir Camoufox/sidecar süreci açar. İlk sayfa işlemi
@@ -158,7 +161,7 @@ Kahin'de hata loglama ve kendini onarma sistemi gömülüdür:
158
161
 
159
162
  ```
160
163
  oracle.py → MCP server (bootstrap: mcp instance + engine lifecycle + main)
161
- tools/ → 110 tool, engine-ayrımlı kategori dosyaları
164
+ tools/ → 139 tool, engine-ayrımlı kategori dosyaları
162
165
  _common.py → capability routing, _safe_cdp, _require_engine, _auto_learn
163
166
  the_twins/capabilities → motor-yetenek sözleşmesi ve Mirage yükseltme matrisi
164
167
  grimoire/seraph/prophecy/healer → CDP bilgi + doğrulama + pattern (paylaşılan)
@@ -166,7 +169,7 @@ oracle.py → MCP server (bootstrap: mcp instance + engine lifecyc
166
169
  pilot_mirage/trainman_mirage/dejavu_mirage → Camoufox DOM+Input+PageEx / Tab / Network+Console
167
170
  storage_mirage/emulation_mirage/dialog_mirage → Storage / Emulation / Dialog+Download+Worker+WS
168
171
  pilot_obscura/trainman_obscura/dejavu_obscura → Shadow için ayrılmış paket sınırları; sahte tool kaydetmez
169
- engine.py → engine_health
172
+ engine.py → engine_health + engine_stats
170
173
  _healer.py → Hata yönetimi, loglama, kendini onarma
171
174
  the_source/architect → CDP şema motoru (56 domain, 667 komut)
172
175
  the_twins/shadow → Obscura engine (gerçek Obscura binary, WebSocket CDP)
@@ -187,7 +190,8 @@ camoufox-harness/ → Zig sidecar (Juggler protocol, vendor binary gömül
187
190
  - [x] **Tek tık kurulum** — `pnpm add -g @kahinmcp/kahin`, sonra `kahin` (ilk çalıştırmada Python ortamını otomatik kurar)
188
191
  - [ ] **Zero-dependency** hedefi (Go/Rust portu)
189
192
  - [ ] **LSP modu** — kod içinde hata yakalama, AI'a yanlışını yüzüne vurma
190
- - [x] **Tool sayısı 110** — Camoufox Juggler-native 78 tool (gerçek-zamanlı DOM stream, DOM, Input, Network, Storage, Emulation, Dialog, Tab, Worker/WS, Upload, Screencast, Accessibility) + paylaşılan 32 çekirdek
193
+ - [x] **Tool sayısı 139** — Camoufox Juggler-native 107 tool (gerçek-zamanlı DOM stream, DOM, Reliability, Input, Network, Storage, Emulation, Dialog, Tab, Worker/WS, Upload, Screencast, Accessibility, Engine sağlığı/istatistik, Agent-native snapshot/form/state/identity/status, Stealth audit/humanized input/identity pins/proxy geo) + paylaşılan 32 çekirdek
194
+ - [x] **Faz 4 performans yüzeyi** — non-blocking Zig sidecar (N=20 probe: paralel duvar 56.89 → 8.71 ms, ratio 1.314 → 3.281), `kahin_engine_stats` (monotonic uptime + per-tool rollup, top_slow ≤ 10) ve identity başına bounded prewarm metadata (launch asla atlanmaz; dürüst reuse kaydı)
191
195
  - [ ] **Obscura ayrı tool'ları** — CDP-yeteneklerine özel pilot_obscura/trainman_obscura/dejavu_obscura kategorilerini doldur
192
196
 
193
197
  - [ ] **Gerçek zamanlı izleme** — AI'ın Kahin'i nasıl kullandığını canlı gör
package/bin/setup.mjs CHANGED
@@ -324,7 +324,7 @@ export function setup() {
324
324
  const KAHIN_HOME = process.env.KAHIN_HOME || join(homedir(), ".local", "share", "kahin");
325
325
  const KAHIN_VENV = join(KAHIN_HOME, "venv");
326
326
  const KAHIN_PY = process.platform === "win32" ? join(KAHIN_VENV, "Scripts", "python.exe") : join(KAHIN_VENV, "bin", "python");
327
- const KAHIN_WHEEL = join(dirname(fileURLToPath(import.meta.url)), "..", "lib", "kahin-0.3.7-py3-none-any.whl");
327
+ const KAHIN_WHEEL = join(dirname(fileURLToPath(import.meta.url)), "..", "lib", "kahin-0.3.8-py3-none-any.whl");
328
328
 
329
329
  // Gömülü wheel'i venv'e kurar ve varsayılan Camoufox binary'sini hazırlar.
330
330
  // PyPI'a bağımlı DEĞİL — wheel paketle birlikte gelir; wheel'in bağımlılıkları
@@ -212,9 +212,14 @@ Navigation document'ı yeniler ve nodeId'leri geçersiz kılar. Her frame'in
212
212
  document'ı kendi `streamId`'sine sahiptir; `frame_id` verilirse snapshot,
213
213
  event ve action aynı frame context'inde çalışır.
214
214
 
215
+ Not: `reset`/`dropped` tespiti, çağrıya geçtiğiniz `stream_id` ile sayfadaki
216
+ mevcut `streamId`'yi karşılaştırır. `dom_start`'ten aldığınız `streamId`'yi
217
+ her `dom_events` çağrısında geçirin; `stream_id` verilmezse navigation sessiz
218
+ kalır ve eski cursor yeni document'ın event'leriyle karışabilir.
219
+
215
220
  ### 3.4 Live action sözleşmesi
216
221
 
217
- İzin verilen action'lar: `click`, `hover`, `focus`, `type`, `scroll`.
222
+ İzin verilen action'lar: `click`, `hover`, `focus`, `type`, `scroll`, `select`.
218
223
 
219
224
  - `click` ve `hover`, node'un gerçek viewport koordinatını ölçer ve
220
225
  `Page.dispatchMouseEvent` gönderir.
@@ -222,6 +227,8 @@ event ve action aynı frame context'inde çalışır.
222
227
  `text` zorunludur.
223
228
  - `focus`, canlı node'u focus eder.
224
229
  - `scroll`, node'u görünür alana `scrollIntoView` ile getirir.
230
+ - `select`, `<select>` üzerinde option value veya görünen metinle eşleşir ve
231
+ gerçek `input`/`change` event'leri gönderir. `text` zorunludur.
225
232
  - Node bağlı değilse hiçbir replacement node'a fallback yapılmaz; yapılandırılmış
226
233
  `stale_node`/`requiresSnapshot` döner.
227
234
 
@@ -276,7 +283,7 @@ script'i ayrıca evaluate eder. Observer sayfa tarafında bounded olduğu için
276
283
 
277
284
  ## 6. Juggler tool kataloğu (A-Z)
278
285
 
279
- Aşağıdaki liste Mirage'ın 78 Juggler-native tool'unun tamamıdır. `MIRAGE`
286
+ Aşağıdaki liste Mirage'ın 107 Juggler-native tool'unun tamamıdır. `MIRAGE`
280
287
  tool'ları `engine="mirage"` aktifken kullanılır.
281
288
 
282
289
  ### DOM gözlem ve adaptif action (5)
@@ -296,6 +303,15 @@ tool'ları `engine="mirage"` aktifken kullanılır.
296
303
  - `kahin_mirage_hover`, `kahin_mirage_get_html`
297
304
  - `kahin_mirage_wait_selector`, `kahin_mirage_get_value`
298
305
 
306
+ ### Reliability (9)
307
+
308
+ - `kahin_mirage_expect`
309
+ - `kahin_mirage_check`, `kahin_mirage_uncheck`
310
+ - `kahin_mirage_select_option`, `kahin_mirage_dblclick`
311
+ - `kahin_mirage_drag`
312
+ - `kahin_mirage_wait_for_text`, `kahin_mirage_wait_for_timeout`
313
+ - `kahin_mirage_route`
314
+
299
315
  ### Input (7)
300
316
 
301
317
  - `kahin_mirage_mouse_click`, `kahin_mirage_mouse_move`
@@ -359,10 +375,68 @@ frame'i bekler. Sayfa mutation'ı veya viewport değişiminden sonra görsel
359
375
  doğrulama için bu yol kullanılmalıdır; varsayılan `fresh=false` ise kuyruktaki
360
376
  en eski frame FIFO olarak döner.
361
377
 
362
- ### Accessibility ve health (2)
378
+ ### Accessibility ve engine (3)
363
379
 
364
380
  - `kahin_mirage_accessibility_tree`
365
381
  - `kahin_engine_health`
382
+ - `kahin_engine_stats` — monotonic clock ile uptime + healer tracker'dan
383
+ bounded per-tool rollup (`tool_calls`, `tool_errors`, `top_slow` ≤ 10,
384
+ `last_error`); Mirage aktifse `prewarm` metadata'sı; engine yoksa
385
+ yapılandırılmış `engine_unavailable` yanıtı (asla hata fırlatmaz)
386
+
387
+ ### Agent-native (10)
388
+
389
+ - `kahin_mirage_snapshot` — canlı DOM ağacını token bütçeli, ref'li satırlara
390
+ çevirir; her ref canlı `nodeId`'dir ve `dom_action` üzerinde doğrudan
391
+ çalışır (`truncated` asla sessiz değildir)
392
+ - `kahin_mirage_fill_form` — `{ref, text}` listesiyle birden fazla alanı
393
+ doldurur; stale ref `requiresSnapshot: true` ile döner
394
+ - `kahin_mirage_state_save` / `kahin_mirage_state_load` — url + cookie +
395
+ local/sessionStorage'ı mutlak yola kaydeder/geri yükler (load önce
396
+ kaydedilen url'e gider; storage origin'e bağlıdır)
397
+ - `kahin_identity_new` / `kahin_identity_save` / `kahin_identity_list` /
398
+ `kahin_identity_delete` — Camoufox fingerprint kimlikleri (yeni/manuel/
399
+ listele/sil); `kahin_browser_start(identity=...)` ile başlatmada uygulanır
400
+ - `kahin_identity_report` — aktif engine'in kimlik özeti + sayfa-içi canlı
401
+ `navigator.userAgent` (set_user_agent onayından uydurulmaz)
402
+ - `kahin_agent_status` — agent döngüsü özeti: engine/alive, url/title/
403
+ readyState, tabCount/currentTab, `refsLive` + `domCursor` (gerçek DOM-stream
404
+ bookkeeping; snapshot sonrası live, reset/dropped/stale/stop sonrası geçersiz),
405
+ pendingDialogs, networkEvents, consoleMessages, identity; engine yoksa
406
+ yapılandırılmış idle yanıt döner ve asla hata fırlatmaz
407
+
408
+ ### Stealth ve anti-detect (9)
409
+
410
+ - `kahin_stealth_audit` — salt-okunur leak probe paketi (14 check: webdriver,
411
+ cdp-markers, binding-hidden, plugins, languages, platform, oscpu,
412
+ timezone-sane, screen-sane, prototype-integrity, permissions-api, webgl,
413
+ audio, hardware-concurrency); skor `{passed, total, ratio}` ile döner,
414
+ hiçbir check atlanmaz (bilinmeyen → fail + `detail:"unsupported"`)
415
+ - `kahin_mirage_mouse_trajectory` — jitter'lı Bézier fare yörüngesi
416
+ (steps ≤ 200, jitter ≤ 20px, seed'li deterministik); bitiş noktası birebir
417
+ pinlenir
418
+ - `kahin_mirage_click_humanized` — yörüngeli + insansı gecikmeli gerçek DOM
419
+ tıklaması (mousedown+mouseup)
420
+ - `kahin_mirage_key_text` (çapraz liste) — jitter'lı tuş cadence'i ile metin yazma
421
+ (`delay_ms=0` → hızlı yol; gerçek keydown/keyup çiftleri); Input (7) altında
422
+ sayılır — tek kayıt, Stealth sayımına dahil değil
423
+ - `kahin_identity_pin` / `kahin_identity_unpin` / `kahin_identity_pins` /
424
+ `kahin_identity_for_domain` — domain başına identity rotasyon politikası;
425
+ kanonik domain anahtarlı, bounded ve doğrulanmış `~/.config/kahin/pins.json`
426
+ - `kahin_fingerprint_report` — canlı sayfa evaluate'sinden sitenin göreceği
427
+ fingerprint (userAgent/platform/oscpu/languages/timezone/locale/screen/
428
+ viewport/WebGL); kanıt her zaman sayfadan, asla emülasyon onayından gelmez
429
+ - `kahin_proxy_resolve` — proxy üzerinden exit-IP geo çözümü +
430
+ timezone/locale/geolocation önerisi; URL'deki kimlik bilgileri asla
431
+ yankılanmaz; `browser_start(proxy=...)` ile gerçek proxy env uygulanır,
432
+ aktif engine config'iyle çakışma `engine_config_conflict` döner
433
+
434
+ Stealth CI kapısı: `KAHIN_REQUIRE_STEALTH=1` altında audit ratio ≥ 0.8 ve
435
+ identity rotasyonu tam fingerprint özetini değiştirmek zorundadır;
436
+ `scripts/stealth-regression.py` drift-watcher'ı sabitlenmiş
437
+ `camoufox-harness/tests/perf/stealth-baseline.json` ile karşılaştırır
438
+ (0 = temiz, 1 = yeni leak, 2 = ortam; baseline yalnızca
439
+ `KAHIN_UPDATE_BASELINE=1` ile yeniden yazılır).
366
440
 
367
441
  ## 7. Hazır akışlar
368
442
 
@@ -404,14 +478,16 @@ dom_events(after_seq=C, stream_id=S, frame_id=F, wait_ms=5000)
404
478
 
405
479
  | Hata/sinyal | Sebep | Kurtarma |
406
480
  |---|---|---|
407
- | `Browser engine is not running` | Start yok | `kahin_browser_start()` |
408
- | `Browser engine is dead` | Sidecar/Camoufox öldü | `kahin_browser_stop`, sonra yeni `start` |
481
+ | `No browser engine running. Use kahin_browser_start first.` | Start yok | `kahin_browser_start()` |
482
+ | `Browser engine is dead (crashed). Use kahin_browser_stop, then kahin_browser_start to restart.` | Sidecar/Camoufox öldü | `kahin_browser_stop`, sonra yeni `start` |
409
483
  | `stale_node` | Node silindi veya document değişti | Snapshot + yeni nodeId |
410
484
  | `reset`/`dropped` | Stream değişti veya ring overflow | Snapshot; eski cursor'u bırak |
411
485
  | `not_found` | Selector artık yok | Event/snapshot ile yeni hedef bul |
412
486
  | `truncated` | Snapshot cap'i küçük | Selector veya cap daralt/genişlet |
413
487
  | `unsupported_action` | Action allow-list dışında | Yalnızca desteklenen action kullan |
414
488
  | `not_text_input` | Hedef textbox değil | Role/name/action ipuçlarını tekrar değerlendir |
489
+ | `not_select` | `action=select` hedefi `<select>` değil | Snapshot'taki action ipuçlarını tekrar değerlendir |
490
+ | `option_not_found` | Option value/görünen metin eşleşmedi | Snapshot/events ile option value'larını doğrula, `text`'i düzelt |
415
491
  | `Method not found` | Juggler'da CDP methodu yok/yanlış | Validate + get command/dependency; native Mirage tool seç |
416
492
 
417
493
  Hata alınca aynı hatayı körlemesine tekrarlama. Önce state'i yeniden oku,
@@ -421,6 +497,22 @@ gerekirse `kahin_error_decode` ve `kahin_get_dependencies` kullan.
421
497
 
422
498
  - DOM snapshot ve event payload'ları cap'lidir; bounded sonuçlar ajana açıkça
423
499
  `truncated`, `pending`, `reset` ve `dropped` durumlarını verir.
500
+ - Sidecar istek işleme non-blocking'dir: birden fazla istek aynı anda
501
+ in-flight olabilir, stdin işleme browser yanıtını asla bloklamaz; IPC
502
+ sözleşmesi (id-matching, event forwarding, timeouts, death detection)
503
+ değişmez. N=20 `Runtime.evaluate` concurrency probe'u
504
+ `camoufox-harness/tests/perf/concurrency.md`'dedir (paralel duvar
505
+ 56.89 → 8.71 ms, ratio 1.314 → 3.281).
506
+ - `kahin_engine_stats` `top_slow` değeri ortalama süreye göre en yavaş 10
507
+ araçla sınırlıdır; tracker process-genelidir, bu yüzden tek bir hızlı
508
+ aracın listede olması garanti edilmez (rollup şekli ve `tool_calls`
509
+ sayaçları güvenilir sinyallerdir).
510
+ - Identity profile prewarm bir **metadata/reuse kaydıdır**, cache değildir:
511
+ stabil identity hash + ölçülen hazırlık süreleri (`options_ms`,
512
+ `profile_ms`, `hits`, `starts`) in-process (max 8, FIFO) ve
513
+ `~/.cache/kahin/profiles/<hash>.json` içinde (≤ 4 KiB, tmp+rename) tutulur;
514
+ gerçek launch işi asla atlanmaz (per-launch rastgelelik korunur) ve
515
+ metadata kimlik payload'ı içermez.
424
516
  - Password input değerleri snapshot/event descriptor'larında redacted olur.
425
517
  - `attributes` tam HTML değildir; güvenli kimlik ve erişilebilirlik alanlarıyla
426
518
  sınırlıdır. Tam HTML gerekiyorsa bunun maliyetini bilerek
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kahinmcp/kahin",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "Kahin \u2014 CDP ansiklopedisi + anti-detect browser otomasyon MCP sunucusu. Kurulumda 22 AI CLI arac\u0131n\u0131 otomatik tespit edip kendini kaydeder. Camoufox g\u00f6rsel varsay\u0131land\u0131r; Obscura h\u0131zl\u0131 CDP i\u015fleri i\u00e7in opt-in'dir.",
5
5
  "bin": {
6
6
  "kahin": "bin/kahin.mjs"
Binary file