Skip to content

v0.5.0-alpha — MCP client, skill scanner, context compaction

Pre-release
Pre-release

Choose a tag to compare

Added — skill scanner (terinspirasi nvidia/skillspector)

Skill packs sudah membuka jalur "terima skill dari URL/file eksternal", tapi scanner-nya
hanya 4 regex Shield kosmetik — tak sepadan dengan ancaman skill yang membawa kode.

  • security/skill_scanner.py — pemindai dua lapis MURNI stdlib (ast + re):
    AST mendeteksi exec/eval/subprocess/os.system/__import__/open(write) pada
    blok kode; pola leksikal menangkap eksfiltrasi (curl|sh), path kredensial (~/.ssh,
    id_rsa), URL ber-kredensial, endpoint metadata cloud. Skor 0–100 → verdict
    clean/flag/reject.
  • Wiring impor (§1 keamanan-dulu): risiko tinggi → DITOLAK total (tak masuk DB,
    keputusan owner); risiko sedang → tetap draft tapi dicatat flagged; bersih → draft.
    SELALU aktif (keamanan, bukan optimasi — tak bisa dimatikan dari UI). Berlaku impor
    file & URL. Shield.DANGER_PATTERNS juga diperluas (eksfiltrasi instruksi/jailbreak).
  • Tak pernah crash (input eksternal) & tak false-positive pada prosa biasa. +12 test.

Added — context compaction "headroom" (opt-in, terinspirasi chopratejas/headroom)

Saat context window penuh, compactor default MEMOTONG turn terlama (truncation — jujur
tapi yang hilang benar-benar hilang). Compaction MERINGKAS turn lama jadi satu blok
alih-alih membuang — hemat token tanpa kehilangan konteks total (§1.4).

  • OPT-IN, default OFF (§8): diatur di /settings (off|local|cloud). off =
    truncation aman; local = ringkas via model lokal kecil (gratis/privat); cloud =
    via model cloud (kualitas untuk history kompleks). Peringkasan via LLM bisa membuang
    nuansa & menambah latensi — karenanya tak dipaksakan.
  • ContextCompactor.compact() (async, pre-pass sebelum build()): ringkas turn lama
    jadi [compacted] …, sisakan N turn terbaru UTUH. Fail-safe (§1.3): muat budget /
    summarizer error / ringkasan kosong / sudah ringkasan → history asli (truncation lama).
    Summarizer di-inject (seam bersih) → testable tanpa LLM. +9 test.

Added — single-user production polish

Setelah review pihak ketiga (yang sebagian keliru menilai OpenCLAWN sebagai produk
multi-user), dua gap yang BENAR-BENAR valid untuk self-hosted single-user ditutup:

  • /health endpoint — JSON status + cek konektivitas DB, untuk monitoring self-hosted.
  • Stale-draft cleanup — draft yang tua (draft_stale_days, default 14) & tak pernah
    terbukti (draft_success_count=0) diarsipkan saat decay pass — cegah menumpuk. ARSIP,
    bukan hapus (konsisten "tak ada kehilangan data senyap"). draft_stale_days=0 → nonaktif.
  • README: section Scope & Production Posture — menegaskan auth/Postgres/scaling DI LUAR
    scope secara SADAR (§7 single-user), bukan utang teknis. +5 test.

Added — MCP (Model Context Protocol) client

OpenCLAWN kini dapat memakai tool dari server MCP eksternal (GitHub, filesystem,
dll) — sebelumnya hanya 26 tool bawaan. Via SDK resmi mcp (CLAUDE.md §7: MCP bukan
SDK vendor-LLM, jadi tak melanggar transparansi jalur LLM).

  • Transport: stdio (subprocess lokal) + HTTP streamable (remote).
  • Keamanan (§1): tool MCP SELALU butuh approval (HITL; di autopilot jadi
    proposal) — server eksternal tak terkendali. Remote di-guard SSRF sebelum konek.
    Role harus opt-in via soul.toml wildcard mcp__* / mcp__<server>__*.
  • Tool MCP tak dapat jalur istimewa: dibungkus MCPTool (subclass Tool), lewat
    pagar yang sama (izin/validasi/telemetri/timeout). Discover fail-safe (server error
    di-skip, tak jatuhkan startup). Kelola via halaman /mcp (tabel mcp_servers).
  • core/mcp_client.py · core/mcp_registry.py · tools/mcp_tool.py. +19 test (420→439).