@kahinmcp/kahin 0.3.0 → 0.3.2

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
@@ -2,6 +2,19 @@
2
2
 
3
3
  Tüm önemli değişiklikler bu dosyada tutulur. Format: [Keep a Changelog](https://keepachangelog.com/tr/1.1.0/) — [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [0.3.2] — 2026-08-05
6
+
7
+ ### Düzeltilen
8
+ - Camoufox/Mirage artık aynı browser sürecini ve sekmeleri yeniden kullanıyor; tekrar eden `browser_start` çağrıları ikinci browser açmıyor.
9
+ - Başlangıç, sağlık kontrolü ve stop timeout'larında sidecar/Camoufox orphan süreçleri temizleniyor.
10
+ - Mirage araçlarının ilk sekme yokken timeout olması düzeltildi; eşzamanlı ilk çağrılar tek sekmeye birleşiyor.
11
+ - CDP çağrıları Target/Input/Emulation/Network eşdeğerlerine otomatik yönlendiriliyor ve CDP biçimli sonuç döndürüyor.
12
+ - Eşzamanlı Juggler çağrılarında yanlış pending request silinmesi düzeltildi.
13
+
14
+ ### Testler
15
+ - Python uygulama testleri: 106 passed
16
+ - Zig sidecar testleri: passed
17
+
5
18
  ## [0.3.0] — 2026-08-03
6
19
 
7
20
  ### Eklenen
@@ -80,6 +93,7 @@ Tüm önemli değişiklikler bu dosyada tutulur. Format: [Keep a Changelog](http
80
93
  - Zig Juggler harness: pipe transport, Browser/Page/Runtime/Network/Input/Emulation adapters, interception, process manager, perf + crash-recovery
81
94
  - CDP ansiklopedisi: 56 domain, 667 komut, 237 event, 609 type (Chrome 148)
82
95
 
96
+ [0.3.2]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.3.1...v0.3.2
83
97
  [0.2.0]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.1.8...v0.2.0
84
98
  [0.1.8]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.1.7...v0.1.8
85
99
  [0.1.7]: https://gitlab.com/void0x14/kahin-mcp/-/compare/v0.1.6...v0.1.7
package/README.md CHANGED
@@ -101,6 +101,13 @@ Camoufox (Juggler native) ile, engine `mirage` seçilince:
101
101
  → kahin_mirage_accessibility_tree → kahin_engine_health
102
102
  ```
103
103
 
104
+ `kahin_browser_start` tek bir Camoufox/sidecar süreci açar. İlk sayfa işlemi
105
+ aynı süreç içinde varsayılan bir sekmeyi tembel olarak oluşturur; sonraki işler
106
+ bu sekmeyi yeniden kullanır. Ayrı bir sayfa gerektiğinde yeni tarayıcı başlatmak
107
+ yerine `kahin_mirage_tab_new` ve `kahin_mirage_tab_switch` kullanın. Camoufox
108
+ aktifken `kahin_execute_cdp` ve diğer CDP araçları, eşdeğer Juggler/Mirage
109
+ çağrısına otomatik yönlendirilir ve CDP biçimli sonuç döndürür.
110
+
104
111
  Tam liste için: [AGENTS.md](AGENTS.md)
105
112
 
106
113
  ## Proje Felsefesi
package/bin/kahin.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- // kahin global launcher — kod tabanındaki kahin MCP server'ı çalıştırır.
3
- // Kurulum: pnpm add -g @kahinmcp/kahin
2
+ // kahin global launcher — gömülü wheel'den kahin MCP server'ı çalıştırır.
3
+ // Kurulum: pnpm add -g @kahinmcp/kahin (postinstall venv + wheel kurar)
4
4
 
5
5
  import { spawn } from "node:child_process";
6
6
  import { existsSync } from "node:fs";
@@ -20,6 +20,13 @@ function sh(cmd, args, opts = {}) {
20
20
  }
21
21
 
22
22
  async function setup() {
23
+ // venv yoksa gömülü wheel'den kur (postinstall atlanmışsa / bozuksa)
24
+ const { installPython } = await import("./setup.mjs");
25
+ const res = await installPython();
26
+ if (res && res.error) {
27
+ process.stderr.write(`[kahin] python kurulumu başarısız (çıkış ${res.error})\n`);
28
+ process.exit(1);
29
+ }
23
30
  const python = existsSync(PY) ? PY : (process.env.KAHIN_PY || "python3");
24
31
  const check = await sh(python, ["-c", "import kahin"], { stdio: ["ignore", "pipe", "pipe"] });
25
32
  if (check !== 0) {
@@ -32,8 +39,8 @@ async function setup() {
32
39
  const args = process.argv.slice(2);
33
40
 
34
41
  if (args[0] === "setup") {
35
- const { setup } = await import("./setup.mjs");
36
- setup();
42
+ const { setup: registerClients } = await import("./setup.mjs");
43
+ registerClients();
37
44
  process.exit(0);
38
45
  }
39
46
 
package/bin/setup.mjs CHANGED
@@ -10,6 +10,8 @@
10
10
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
11
11
  import { homedir } from "node:os";
12
12
  import { join, dirname } from "node:path";
13
+ import { spawn } from "node:child_process";
14
+ import { fileURLToPath } from "node:url";
13
15
 
14
16
  const HOME = homedir();
15
17
  const isWin = process.platform === "win32";
@@ -319,6 +321,56 @@ export function setup() {
319
321
  return { installed };
320
322
  }
321
323
 
324
+ const KAHIN_HOME = process.env.KAHIN_HOME || join(homedir(), ".local", "share", "kahin");
325
+ const KAHIN_VENV = join(KAHIN_HOME, "venv");
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.2-py3-none-any.whl");
328
+
329
+ // Gömülü wheel'i venv'e kurar. Postinstall'da ve `kahin setup`'ta çalışır.
330
+ // PyPI'a bağımlı DEĞİL — wheel paketle birlikte gelir.
331
+ export async function installPython() {
332
+ if (process.env.KAHIN_SKIP_PYTHON) {
333
+ log("python kurulumu atlandı (KAHIN_SKIP_PYTHON)");
334
+ return { skipped: true };
335
+ }
336
+ if (!existsSync(KAHIN_WHEEL)) {
337
+ log(`wheel bulunamadı: ${KAHIN_WHEEL} — kurulum atlandı (geliştirme ortamı?)`);
338
+ return { skipped: true };
339
+ }
340
+ const python3 = process.env.KAHIN_PYTHON || "python3";
341
+ const args = ["-m", "venv", KAHIN_VENV];
342
+ if (!existsSync(join(KAHIN_VENV, "pyvenv.cfg"))) {
343
+ log(`venv oluşturuluyor: ${KAHIN_VENV}`);
344
+ const code = await run(python3, args);
345
+ if (code !== 0) {
346
+ log(`venv oluşturulamadı (${python3} ${args.join(" ")} — çıkış ${code})`);
347
+ return { error: code };
348
+ }
349
+ }
350
+ const check = await run(KAHIN_PY, ["-c", "import kahin; print(kahin.__version__)"]);
351
+ if (check === 0) {
352
+ log("kahin zaten kurulu, atlandı");
353
+ return { installed: true };
354
+ }
355
+ log(`wheel kuruluyor: ${KAHIN_WHEEL}`);
356
+ const code = await run(KAHIN_PY, ["-m", "pip", "install", "--upgrade", KAHIN_WHEEL]);
357
+ if (code !== 0) {
358
+ log(`wheel kurulamadı (çıkış ${code})`);
359
+ return { error: code };
360
+ }
361
+ log("kahin python paketi kuruldu");
362
+ return { installed: true };
363
+ }
364
+
365
+ function run(cmd, args) {
366
+ return new Promise((resolve) => {
367
+ const c = spawn(cmd, args, { stdio: ["ignore", "ignore", "pipe"] });
368
+ c.stderr.on("data", (d) => process.stderr.write(`[kahin] ${d}`));
369
+ c.on("close", (code) => resolve(code));
370
+ });
371
+ }
372
+
322
373
  if (process.argv[1] && process.argv[1].endsWith("setup.mjs")) {
323
374
  setup();
375
+ installPython();
324
376
  }
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kahinmcp/kahin",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Kahin — CDP ansiklopedisi + anti-detect browser otomasyon MCP sunucusu. Kurulumda 22 AI CLI aracını otomatik tespit edip kendini kaydeder. Obscura ve Camoufox motorlarını kullanır, motor seçimini ajana bırakır.",
5
5
  "bin": {
6
6
  "kahin": "bin/kahin.mjs"
@@ -11,8 +11,10 @@
11
11
  },
12
12
  "files": [
13
13
  "bin",
14
+ "lib",
14
15
  "LICENSE",
15
- "CHANGELOG.md"
16
+ "CHANGELOG.md",
17
+ "README.md"
16
18
  ],
17
19
  "engines": {
18
20
  "node": ">=18"