@kahinmcp/kahin 0.3.7 → 0.3.9
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 +112 -0
- package/README.md +11 -7
- package/bin/setup.mjs +1 -1
- package/docs/juggler-ai-native.md +97 -5
- package/lib/kahin-0.3.8-py3-none-any.whl +0 -0
- package/lib/kahin-0.3.9-py3-none-any.whl +0 -0
- package/package.json +5 -2
- package/lib/kahin-0.3.7-py3-none-any.whl +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,115 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## [0.3.9] — 2026-08-08
|
|
6
|
+
|
|
7
|
+
- update
|
|
8
|
+
- ci(release): tolerate npm registry propagation
|
|
9
|
+
|
|
10
|
+
## [0.3.8] — 2026-08-08
|
|
11
|
+
|
|
12
|
+
### Eklenen
|
|
13
|
+
- `kahin_mirage_expect` / `kahin_mirage_check` / `kahin_mirage_uncheck` /
|
|
14
|
+
`kahin_mirage_select_option` / `kahin_mirage_dblclick` / `kahin_mirage_drag` /
|
|
15
|
+
`kahin_mirage_wait_for_text` / `kahin_mirage_wait_for_timeout` /
|
|
16
|
+
`kahin_mirage_route` eklendi: retry'li web-first assertion, doğrulamalı
|
|
17
|
+
checkbox/radio/select eylemleri, gerçek çift tıklama, sınırlı drag-and-drop,
|
|
18
|
+
metin/süre bekleme ve tek sonraki istek için abort/continue/fulfill route.
|
|
19
|
+
- `kahin_mirage_wait_selector` artık `state=attached|visible|enabled`
|
|
20
|
+
(varsayılan `visible`) destekler; timeout yanıtı `code:"timeout"` ve son
|
|
21
|
+
`reason` ile döner.
|
|
22
|
+
- `kahin_mirage_query` / `kahin_mirage_query_all` / `kahin_mirage_type` /
|
|
23
|
+
`kahin_mirage_wait_selector` locator motorunu kabul eder (`css=` / `text=` /
|
|
24
|
+
`role=` / `xpath=` / `nth=` ve `>>` zincirleme).
|
|
25
|
+
- `kahin_mirage_click` / `kahin_mirage_hover` / `kahin_mirage_focus` aksiyon
|
|
26
|
+
öncesi Playwright tarzı actionability bekler (görünür, enabled, stabil,
|
|
27
|
+
engelsiz; retry + `timeout` parametresi).
|
|
28
|
+
- `kahin_navigate` artık `wait_until=commit|domcontentloaded|load|networkidle`,
|
|
29
|
+
bounded `timeout` ve `referer` kabul eder; lifecycle beklemesi aşılırsa
|
|
30
|
+
`code:"navigation_timeout"` döner.
|
|
31
|
+
- Faz 2 agent-native yüzey: `kahin_mirage_snapshot` (ref'li, token bütçeli
|
|
32
|
+
satırlar; truncation asla sessiz değildir), `kahin_mirage_fill_form`
|
|
33
|
+
(ref'lerle çok alanlı doldurma; stale ref `requiresSnapshot` döner) ve
|
|
34
|
+
click/type/check/uncheck/select_option/dblclick/drag'e opsiyonel
|
|
35
|
+
`return_snapshot` kancası.
|
|
36
|
+
- Oturum kalıcılığı: `kahin_mirage_state_save` / `kahin_mirage_state_load`
|
|
37
|
+
(url + cookie + local/sessionStorage; mutlak yol zorunlu, load önce
|
|
38
|
+
kaydedilen url'e döner).
|
|
39
|
+
- Kimlik kalıcılığı: `kahin_identity_new` / `kahin_identity_save` /
|
|
40
|
+
`kahin_identity_list` / `kahin_identity_delete` / `kahin_identity_report` +
|
|
41
|
+
`kahin_browser_start(identity=...)` ile gerçek Camoufox fingerprint
|
|
42
|
+
pinleme; rapor canlı `navigator.userAgent`'ı sayfa-içi doğrular.
|
|
43
|
+
- `kahin_agent_status`: agent döngüsü özeti — engine liveness, sayfa durumu,
|
|
44
|
+
sekme sayısı, gerçek DOM-stream bookkeeping'inden `refsLive`/`domCursor`,
|
|
45
|
+
dialog/network/console sayaçları ve identity; engine yoksa yapılandırılmış
|
|
46
|
+
idle yanıt, asla hata fırlatmaz.
|
|
47
|
+
- Faz 3 stealth/anti-detect yüzeyi: `kahin_stealth_audit` (14 salt-okunur
|
|
48
|
+
leak probe'u, skor `{passed, total, ratio}`; hiçbir check atlanmaz),
|
|
49
|
+
`kahin_mirage_mouse_trajectory` / `kahin_mirage_click_humanized` ve
|
|
50
|
+
cadence'li `kahin_mirage_key_text` (jitter'lı Bézier yörünge, gerçek DOM
|
|
51
|
+
tıklaması, jitter'lı tuş hızı; hepsi seed'li deterministik).
|
|
52
|
+
- Domain başına kimlik rotasyonu: `kahin_identity_pin` / `kahin_identity_unpin`
|
|
53
|
+
/ `kahin_identity_pins` / `kahin_identity_for_domain` — kanonik domain
|
|
54
|
+
anahtarlı, bounded ve doğrulanmış `~/.config/kahin/pins.json` deposu.
|
|
55
|
+
- `kahin_fingerprint_report` (canlı sayfadan sitenin göreceği fingerprint;
|
|
56
|
+
emülasyon onayından kanıt üretmez) ve `kahin_proxy_resolve` + `kahin_browser_start(proxy=...)`
|
|
57
|
+
(proxy exit-IP geo + timezone/locale/geolocation önerileri; URL kimlik
|
|
58
|
+
bilgileri asla loglanmaz; aktif engine config'iyle çakışma
|
|
59
|
+
`engine_config_conflict`).
|
|
60
|
+
- Stealth CI kapısı: `KAHIN_REQUIRE_STEALTH=1` altında audit ratio ≥ 0.8 ve
|
|
61
|
+
identity rotasyonu tam fingerprint özetini değiştirmek zorunludur;
|
|
62
|
+
`scripts/stealth-regression.py` drift-watcher'ı sabitlenmiş
|
|
63
|
+
`camoufox-harness/tests/perf/stealth-baseline.json` ile karşılaştırır
|
|
64
|
+
(0 = temiz, 1 = yeni leak, 2 = ortam; baseline yalnızca
|
|
65
|
+
`KAHIN_UPDATE_BASELINE=1` ile yeniden yazılır) ve GitLab `stealth-regression`
|
|
66
|
+
job'ı (`stage: verify`, real-e2e ile aynı unprivileged/GTK kurulumu)
|
|
67
|
+
schedule/main'da suite + regression'ı çalıştırır.
|
|
68
|
+
- Faz 4 performans yüzeyi: Zig sidecar non-blocking'e geçti — tek-in-flight
|
|
69
|
+
darboğazı kalktı, stdin işleme browser yanıtını asla bloklamaz ve birden
|
|
70
|
+
fazla istek aynı anda in-flight olabilir (IPC sözleşmesi değişmedi). N=20
|
|
71
|
+
`Runtime.evaluate` concurrency probe'u
|
|
72
|
+
(`camoufox-harness/tests/perf/concurrency.md`): seri 74.78 → 28.56 ms,
|
|
73
|
+
paralel duvar süresi 56.89 → 8.71 ms (6.5× düşüş), ratio 1.314 → 3.281.
|
|
74
|
+
- `kahin_engine_stats` eklendi: monotonic clock ile uptime + healer
|
|
75
|
+
tracker'dan bounded per-tool rollup (`tool_calls`/`tool_errors`,
|
|
76
|
+
`top_slow` ≤ 10, `last_error`); tüm `safe()` süre ölçümleri
|
|
77
|
+
`time.monotonic()`'a taşındı; engine yoksa yapılandırılmış
|
|
78
|
+
`engine_unavailable` yanıtı döner.
|
|
79
|
+
- Identity başına bounded profile prewarm: stabil sha256 identity hash +
|
|
80
|
+
ölçülen hazırlık süreleri in-process cache (max 8, FIFO) ve
|
|
81
|
+
`~/.cache/kahin/profiles/<hash>.json` içinde tutulur; gerçek launch işi
|
|
82
|
+
asla atlanmaz (dürüst metadata/reuse kaydı; kimlik payload'ı metadata'da
|
|
83
|
+
saklanmaz).
|
|
84
|
+
|
|
85
|
+
### Düzeltilen
|
|
86
|
+
- Obscura/Shadow doğrudan screenshot çağrısını artık fail-closed reddeder;
|
|
87
|
+
görsel capture sözleşmesi Mirage’a ait kalır ve generic CDP yolu Mirage’a
|
|
88
|
+
doğru şekilde yükseltilir.
|
|
89
|
+
- Stealth CI gate’i Xvfb ile sabit bir grafik yüzeyinde ve `TZ=Etc/UTC` ile
|
|
90
|
+
çalışır; timezone probe’u geçerli `UTC` çıktısını da kabul eder. Böylece
|
|
91
|
+
runner’ın DISPLAY/TZ farkları gerçek stealth drift’i gibi raporlanmaz.
|
|
92
|
+
- Release tag’leri stealth regression kapısından geçmeden npm publish’e
|
|
93
|
+
ulaşamaz; npm publish sonrası registry’den sürüm tekrar okunarak local
|
|
94
|
+
package sürümüyle birebir eşleşme kanıtlanır.
|
|
95
|
+
- Identity rotation e2e gate’i Linux/Windows kimlik çiftiyle en az iki canlı
|
|
96
|
+
fingerprint boyutunu deterministik doğrular; yalnızca runner WebGL’ine
|
|
97
|
+
bağlı rastgele identity çakışması artık release’i düşürmez.
|
|
98
|
+
- CI browser image’larına Mesa/llvmpipe runtime’ı eklenerek WebGL stealth
|
|
99
|
+
probe’u gerçek software-rendered context üzerinde doğrulanır; baseline
|
|
100
|
+
gevşetilmez.
|
|
101
|
+
- Runner’da Mesa’nın gerçek software renderer’ı açıkça `llvmpipe` olarak
|
|
102
|
+
seçilir; WebGL gate’i yalnızca kütüphanelerin kurulu olmasına güvenmez.
|
|
103
|
+
- Stealth audit’in webgl check’i artık runner grafik yığınından bağımsız:
|
|
104
|
+
WebGL API varlığını (context entry point) doğrular; GL’siz CI runner’ında
|
|
105
|
+
context oluşturma başarısızlığı artık sahte “leak” olarak raporlanmaz.
|
|
106
|
+
CI browser gate’leri ayrıca Mesa GL kütüphanelerini kurar, böylece GL
|
|
107
|
+
sunan runner’larda `fingerprint_report` gerçek WebGL değerlerini okur.
|
|
108
|
+
- `lib/` içindeki gömülü wheel HEAD kaynağından yeniden üretildi: Obscura
|
|
109
|
+
screenshot guard’ı, stealth/agent/reliability modülleri ve güncel Zig
|
|
110
|
+
sidecar dahil — npm paketinin taşıdığı wheel ile kaynak ağacı senkron
|
|
111
|
+
kalır.
|
|
112
|
+
|
|
3
113
|
## [0.3.7] — 2026-08-06
|
|
4
114
|
|
|
5
115
|
### Eklenen
|
|
@@ -199,3 +309,5 @@ Tüm önemli değişiklikler bu dosyada tutulur. Format: [Keep a Changelog](http
|
|
|
199
309
|
[0.1.7]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.1.6...v0.1.7
|
|
200
310
|
[0.3.6]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.5...v0.3.6
|
|
201
311
|
[0.3.7]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.6...v0.3.7
|
|
312
|
+
[0.3.8]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.7...v0.3.8
|
|
313
|
+
[0.3.9]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.8...v0.3.9
|
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
|
-
##
|
|
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 (
|
|
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:
|
|
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/ →
|
|
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ı
|
|
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.
|
|
327
|
+
const KAHIN_WHEEL = join(dirname(fileURLToPath(import.meta.url)), "..", "lib", "kahin-0.3.9-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
|
|
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
|
|
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
|
-
| `
|
|
408
|
-
| `Browser engine is dead
|
|
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
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kahinmcp/kahin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
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"
|
|
@@ -49,5 +49,8 @@
|
|
|
49
49
|
"opencode",
|
|
50
50
|
"codex",
|
|
51
51
|
"python"
|
|
52
|
-
]
|
|
52
|
+
],
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@kahinmcp/kahin": "^0.3.8"
|
|
55
|
+
}
|
|
53
56
|
}
|
|
Binary file
|