Langkau ke kandungan

crawlforge-mcp-server

Jejaki setiap kemas kini CrawlForge

Terkiniv6.22.3

01v6.x

Versi 6

v6.22.3

TerkiniPembetulan

Panggilan Gagal Kini Percuma, dan Pembaikan Daripada Semakan Kesemua 31 Alat

6.22.0 membaiki apa yang ditemui oleh semakan langsung kesemua 31 alat pada 6.21.1: kira-kira 470 panggilan, dengan setiap kecacatan dihasilkan semula oleh penguji kedua sebelum dibaiki. Setiap panggilan yang gagal kini percuma, termasuk kegagalan extract_structured, extract_with_llm dan summarize_content yang sebelum ini dicaj sebagai berjaya. crawl_deep mengikut ubah hala dengan betul dan tidak lagi menyekat pelayan pada halaman yang sangat besar, alat agent kekal dalam had 120 saatnya dan menjawab soalan tentang keadaan semasa daripada sumber rasmi, dan mesej ralat menamakan punca sebenar (kegagalan DNS, sambungan ditolak, pemilih yang tidak sepadan dengan apa-apa) bersama langkah seterusnya yang membantu. Dalam API REST, analyze_content dan format question bagi scrape menerima pembaikan sentimen dan asas bukti yang sama: analyze_content menambah medan confidence, dan answer.grounded boleh bernilai false. 6.22.1 menjadikan alat agent menandakan URL yang dipetik tetapi tiada dalam mana-mana sumbernya, dan menghalang deep_research daripada melaporkan baris jadual dan tajuk yang tercantum sebagai dapatan. 6.22.2 mengekalkan pautan yang ditulis bersebelahan pada baris berasingan dalam teks halaman, jadi jadual kandungan tidak lagi dibaca sebagai satu ayat yang tercantum. 6.22.3 membolehkan alat agent memetik pautan tepat bagi sesuatu item pada halaman yang dibacanya, dan menghalang deep_research daripada melaporkan soalan, pemberat rubrik, ayat pembuka yang ditujukan kepada pembaca dan ayat yang terpotong di tengah perkataan sebagai dapatan.

  • Setiap panggilan yang gagal adalah percuma: hasil ralat, ralat yang dilontar atau badan success: false dicaj 0 credits dan dilog sebagai ralat, dan _cost serta next_step kini turut muncul dalam structuredContent
  • crawl_deep menyelesaikan pautan berdasarkan halaman yang dicapainya selepas ubah hala, dan analisis pautannya tidak lagi menyekat pelayan: halaman 7.3 MB dengan 16,766 pautan turun daripada 50 s kepada 0.5 s. map_site menyertakan URL permulaan, dan search_web tidak lagi menggabungkan halaman berbeza sebagai pendua
  • analyze_content menilai sentimen dengan leksikon AFINN-165 dan bukan senarai perkataan yang menganggap teks yang jelas positif sebagai neutral, format question bagi scrape menjawab daripada artikel dan bukan senarai rujukannya, dan templat github-repo membaca nama, topik dan isu terbuka daripada halaman semasa GitHub

v6.21.1

Ciri

search_web Menamakan Bahagian Belakangnya, dan serp_rank Menandakan Hasil Umpan

6.21.0 menyusuli perpindahan CrawlForge daripada Google Custom Search, yang dihentikan Google pada 2027-01-01, kepada Brave Search API. search_web kini melaporkan bahagian belakang yang melayaninya, dan serp_rank menandakan halaman hasil yang kelihatan seperti umpan: Google mula memberikan sesetengah semakan kedudukan automatik hasil yang kelihatan sebenar tetapi tidak berkaitan dengan pertanyaan. Nota naik taraf: hasil search_web datang daripada indeks bebas Brave, total_results tidak lagi dilaporkan dan related_searches kosong. 6.21.1 membetulkan penomboran halaman search_web pada Brave: offset yang bukan gandaan limit memulangkan hasil yang salah, dan offset 90 dengan limit kecil kembali kosong.

  • serp_rank memulangkan suspect: true dan satu amaran apabila kurang daripada 1 dalam 5 hasil teratas menyebut kata kunci. Pada 2026-10-19 satu semakan untuk "crawlforge" kembali tanpa satu pun daripada 10 teratas menamakannya, sedangkan Search Console meletakkan tapak itu di #1. Tetap 5 credits
  • search_web melaporkan provider.backend sebagai Brave Search API dan bukan Google Search yang ditetapkan tegar, dan Creator Mode boleh memanggil Brave Search API secara terus
  • Berkas .mcpb membaca PDF pada macOS dan Windows: setiap berkas sejak 6.0.0 hanya membawa binari asli Linux, jadi process_document gagal dengan "DOMMatrix is not defined". Manifest kini menyenaraikan kesemua 31 alat

v6.20.0

Pembetulan

Tindakan Pelayar Menunggu Crawl-delay, dan Laluan Fail Tempatan Kekal Tempatan

6.20.0 menjadikan alat pelayar sesopan alat pengambilan dan menutup dua jurang yang senyap. Klik, tekan kekunci, select atau kotak semak dalam scrape_with_actions dan browser_session kini menunggu Crawl-delay robots.txt halaman yang sedang dibuka sebelum dijalankan, seperti navigate sebelum ini, dan permintaan yang sampai ke satu hos pada masa yang sama beratur dengan jarak satu kelewatan penuh. Nota naik taraf: scrape kini menerima paling banyak satu format highlights dan satu format question bagi setiap panggilan. Format kedua ditolak tanpa caj, sedangkan dahulu ia menggantikan yang pertama.

  • scrape_with_actions dan browser_session: click, press, select atau check menunggu Crawl-delay hos halaman sebelum dijalankan, kerana pelayar menghantar sebarang permintaan yang dicetuskannya sebelum apa-apa sempat bertanya. navigate dan muatan pertama sudah pun dijarakkan
  • Permintaan yang tiba serentak untuk hos yang mempunyai Crawl-delay kini beratur dengan jarak satu kelewatan penuh pada MCP server dan API REST. Dahulu, setiap permintaan yang masuk semasa satu penantian keluar pada saat yang sama, dan map_site serta generate_llms_txt kini turut menjarakkan pengambilan peta laman
  • process_document membaca fail tempatan, dan laporan penggunaannya menghantar laluan penuh ke crawlforge.dev. Kini ia hanya melaporkan jenis fail, sebagai [local file].pdf, laman web menyamarkan laluan daripada pelayan lama apabila ia tiba, dan baris yang disimpan telah dibersihkan
  • scrape: format highlights atau question kedua dalam satu panggilan ialah ralat pengesahan tanpa caj, bukannya menindih yang pertama secara senyap sementara caj tambahan +1 kredit masih dikenakan

v6.19.2

Pembetulan

Setiap Kecacatan daripada Ujian Langsung Oktober Dibaiki atau Diputuskan

6.19.0 melengkapkan ujian langsung ke atas kesemua 31 alat yang dijalankan pada 2026-10-03. Parameter yang tidak berbuat apa-apa kini berfungsi atau telah dibuang, alat teks tidak lagi mencantumkan perenggan, ralat menamakan langkah seterusnya mengikut apa yang sebenarnya gagal, dan lapan lagi alat menerima max_inline_chars. Nota naik taraf: enable dan disable stealth_mode serta captureScreenshots scrape_with_actions dibuang, read browser_session memulangkan seluruh halaman, dan beberapa medan yang terlalu besar dipangkas daripada extract_content, search_web, map_site dan scrape_with_actions.

  • stealth_mode pada Chromium telah menghalang cabaran Cloudflare sendiri daripada dimuatkan: tiga pengepala paksa menyebabkan setiap permintaan rentas asal menghantar pra-semakan CORS yang ditolak oleh challenges.cloudflare.com. Kini cabaran itu dimuatkan, dan halaman dilaporkan sebagai disekat oleh cloudflare. 6.19.1 membuang pengepala paksa yang sama jenis daripada konteks pelayar yang disetempatkan
  • Jadual extract_text ialah grid seragam dengan URL imej dan pautan mutlak pada MCP server dan REST API, dikongsi melalui crawlforge-extractors 1.17.0, dan markdown scrape REST mengekalkan jadualnya
  • comment_count reddit_search mengira setiap ulasan yang dipulangkan dan comments_collapsed yang ditinggalkan; serp_rank menyatakan bahawa sasaran dipadankan mengikut hos dan satu semakan ialah satu sampel, dan REST API memulangkan se_results_count dan check_url. 6.19.2 menetapkan depth lalainya kepada 30 pada kedua-duanya
  • Ralat membawa langkah seterusnya mengikut kegagalan sebenar (robots, SSRF, 404, tamat masa atau parameter yang salah), dan analyze_content mempunyai kata henti untuk sebelas lagi bahasa

v6.18.1

Ciri

extract_text dan extract_links Mencapai Halaman Berdinding dan Sepadan dengan REST API

Dua pembaca halaman paling murah mendapat tangga pengambilan scrape. Dengan escalate: true, halaman berdinding (vendor bernama, 403, 429 atau 444) dibaca semula melalui peringkat stealth yang sama yang digunakan oleh scrape, diunjurkan pada 6 credits dan dicaj 1 apabila pengambilan biasa mendapat halaman itu; 404 atau 5xx tidak pernah dieskalasi. Tanpanya, kegagalan kini menyatakan apa jawapan sasaran dan vendor mana yang menyekatnya. PDF atau binari lain gagal dengan petunjuk ke process_document dan bukannya memulangkan sampah, badan JSON kembali dengan nota, had masa pengambilan ialah 15 s dengan satu cubaan semula selepas Retry-After yang singkat, dan cangkerang kosong yang dipaparkan pada klien ditandakan dengan rendered: false. Kedua-dua alat kini memulangkan apa yang dipulangkan oleh REST API: extract_text membaca satu baris bagi setiap elemen blok dan menerima selector serta max_length, dan extract_links memulangkan satu bentuk rekod pada kedua-dua permukaan. Nota naik taraf: rekod extract_links tidak lagi membawa is_external; baca type sebagai gantinya. 6.18.1 membetulkan apa yang ditemui oleh ujian langsung ke atas kesemua 31 alat: crawl_deep tidak lagi ranap pada URL permulaan yang ditolak dan berhenti apabila max_pages dicapai, map_site melaporkan URL permulaan yang tidak dapat dibacanya sebagai ralat, batch_scrape menolak PDF dan bukannya memulangkan baitnya sebagai teks, dan scrape menamakan halaman cabaran klien Fastly sebagai dinding. Nota naik taraf: pages_crawled crawl_deep kini mengira halaman yang berjaya diambil sahaja, dan monitoringOptions.enabled: false track_changes tidak lagi memulakan pemantau.

  • URL yang sama melalui MCP server dan REST API memulangkan pautan yang sama: 327, 196 dan 123 pautan, dengan 20 yang pertama serupa, pada tangkapan Wikipedia, Hacker News dan BBC News
  • Rekod pautan ialah { href, text, type, domain, rel, original_href }: pautan mailto:, tel: dan javascript: mempunyai type "other", <base href> dipatuhi, dan pendua dipadankan tanpa fragmen atau garis miring di hujung
  • browserOptions.timeout scrape_with_actions kini mengehadkan pemuatan halaman, dan hasil scrape_with_actions atau browser_session yang melebihi had mengekalkan laporan dindingnya secara inline
  • 6.18.1: crawl_deep dengan max_pages: 3 pada laman yang sarat pautan mengambil 232 s dan memproses 2,290 pautan dalam baris gilir; kini ia berhenti apabila had dicapai. formAutoFill menanda butang radio dan kotak semak serta memilih pilihan, act browser_session memulangkan tangkapan skrin sebagai URI sumber dan bukannya base64 sebaris, dan agent tidak menjalankan carian web bagi soalan yang terhad kepada URL permulaannya

v6.17.1

Ciri

Setiap Dinding yang Ditemui Rantaian Dinamakan, dan Proksi Anda Sendiri pada Rantaian Tindakan

scrape_with_actions kini menyemak setiap navigasi yang dibuatnya, bukan hanya halaman akhir: pemuatan awal dan setiap tindakan navigate disenaraikan di bawah navigations dengan status HTTP masing-masing dan, apabila bertemu dinding, vendornya. Halaman perantaraan cabaran AWS WAF, iaitu halaman 202 yang digunakan Amazon untuk menjawab pelayar headless, kini dinamakan aws-waf pada setiap permukaan. Rantaian stealth boleh keluar melalui proksi kediaman pemanggil sendiri dengan browserOptions.proxyRotation (Chromium sahaja; CrawlForge tidak membekalkan proksi), dengan kelayakan dibuang daripada hasil dan laporan penggunaan. Proksi bagi setiap panggilan ditolak pada Camoufox, yang berkongsi satu pelayar merentas panggilan dan oleh itu akan membawa trafik pemanggil lain. 6.17.1 juga membolehkan penantian Cloudflare stealth mengenali halaman "Performing security verification" semasa Cloudflare, dan mengehadkan penantian itu pada 10 s seperti yang dimaksudkan: rantaian doordash.com yang berdinding turun daripada 39.5 s kepada 19.5 s. Tiada apa-apa di sini yang melepasi cabaran.

  • navigations: [{ url, finalUrl, httpStatus, blocked? }] pada setiap rantaian, serta httpStatus dan blocked pada setiap hasil navigate; success dan blocked peringkat atas masih ditentukan oleh halaman akhir
  • Proksi pemanggil yang hosnya ialah loopback, link-local atau alamat metadata awan ditolak sebelum pelayar dilancarkan
  • Peraturan aws-waf terletak dalam crawlforge-extractors 1.12.0, jadi MCP server dan REST API menamakannya dengan cara yang sama

v6.16.0

Ciri

extract_embedded_state Menyahkod Nuxt 3, SvelteKit, YouTube dan Shopify, dan Ubah Hala Kini Disaring

extract_embedded_state kini menyahkod apa yang sudah dibawa pulang oleh pengambilan biasa, tanpa pelayar: __NUXT_DATA__ Nuxt 3 sebagai objek dan bukannya tatasusunan indeks, data halaman SvelteKit, ytInitialData dan ytInitialPlayerResponse (halaman tontonan YouTube memulangkan videoDetails-nya), Remix, data-page Inertia, ShopifyAnalytics.meta dan JSON produk Shopify, serta atribut data-* JSON yang besar. Pemboleh ubah global yang diberikan literal JavaScript dan bukannya JSON dibaca oleh penilai statik, jadi tiada kod halaman dijalankan. Rujukan baris Next.js Flight kepada baris lain diselesaikan, indeks data_rows menunjuk kepada baris yang membawa data dan bukannya markup, dan find memulangkan setiap laluan yang kuncinya sepadan, sedia untuk dihantar semula sebagai path. Keluaran yang sama menyaring setiap ubah hala: setiap lompatan disemak terhadap senarai sekatan dan robots.txt sebelum diikuti, menunggu Crawl-delay hos, dan ditandatangani semula untuk Web Bot Auth. Harga kekal 2.

  • find memulangkan sehingga 50 padanan sebagai { path, preview } dengan 200 aksara pertama nilai itu; raw: true turut mengekalkan tatasusunan Nuxt yang belum dinyahkod. Kedua-duanya berfungsi pada REST API juga
  • Ubah hala ke laluan yang tidak dibenarkan oleh robots.txt, atau ke hos yang disekat, ditolak sebelum diminta, dan panggilan yang gagal kerananya tidak dicaj. Alat pelayar menyemak setiap lompatan dan URL tempat halaman mendarat, dan halaman yang disimpan oleh scrape_with_actions atau browser_session disemak semula selepas setiap tindakan
  • Baris log audit tidak lagi menyimpan kelayakan daripada URL: userinfo dibuang dan parameter pertanyaan yang dinamakan seperti key atau token disunting

v6.15.0

Ciri

extract_embedded_state: Pratonton untuk Muatan Besar, dan Bacaan Semula Stealth

Hasil yang melebihi max_inline_chars kini kembali sebagai pratonton dan result_handle dan bukannya keseluruhan muatan: producthunt.com dan zappos.com sebelum ini memulangkan 1-2 MB secara inline. Bahagian inline mengekalkan senarai found, saiz bait, kunci peringkat atas data dan pratonton berformat yang dipotong pada sempadan baris, tidak sekali-kali di tengah nilai, dan read_result membaca mana-mana bahagian muatan penuh mengikut json_path. keys_only: true memulangkan dua peringkat kunci dengan setiap nilai digantikan oleh jenisnya, untuk penerokaan yang murah. Dengan escalate: true, halaman berdinding (403, 429, halaman cabaran atau cangkerang kosong) dibaca semula melalui peringkat stealth yang sama yang digunakan oleh scrape dan dihuraikan sekali lagi, dan dalam pelayar, pemboleh ubah global rangka kerja dibaca daripada window selepas JavaScript berjalan, di bawah window_state. Tanpa escalate, dinding kini menjadi ralat yang menamakan vendornya dan bukannya kejayaan tanpa apa-apa ditemui. Harga kekal 2; escalate diunjurkan 7 dan mengenakan 2 apabila pengambilan biasa mendapat halaman itu.

  • Disahkan pada max_inline_chars: 3000: producthunt.com 2,979 dan zappos.com 2,970 aksara secara inline, selebihnya hanya satu panggilan read_result
  • doordash.com (Cloudflare) memulangkan 103-106 baris Next.js Flight melalui escalate pada impit, Camoufox dan Chromium
  • window_state membaca __NEXT_DATA__, __NUXT__, __remixContext, ytInitialData, ytInitialPlayerResponse, stor Redux dan Apollo, __TGT_DATA__ dan __PWS_DATA__; pada Camoufox, bacaan melalui dunia terpencil (isolated world) Firefox, jadi tiada skrip berjalan dalam dunia halaman itu sendiri

v6.14.0

Ciri

Snapshot di Dalam Shadow DOM dan Iframe, dan Sepanduk Kuki Dijawab

Snapshot kini menggunakan snapshot kebolehcapaian asli Playwright, jadi elemen di dalam shadow root terbuka dan iframe, termasuk yang merentas asal, muncul dalam pepohon dengan ref @e biasa yang boleh diklik oleh act. Format pepohon tidak berubah, penjelajahan halaman lama kekal sebagai sandaran, dan setiap snapshot menyatakan yang mana satu dijalankan. scrape_with_actions juga menerima browserOptions.consent: "reject" menjalankan opt-out DuckDuckGo autoconsent sekali selepas navigasi pertama dan selepas setiap tindakan navigate, "accept" menjalankan opt-in-nya, dan lalai "off" membiarkan sepanduk, jadi rantaian yang mengkliknya sendiri terus berfungsi. Harga tidak berubah.

  • source: "aria" | "walk" pada setiap snapshot; snapshot browser_session mendapat pepohon yang sama, dan kawalan aria-hidden yang kelihatan pada skrin kini disenaraikan
  • consent: { cmp, action, ms } pada hasil, dihadkan pada 2 s setiap navigasi; halaman tanpa sepanduk yang sepadan melaporkan action: "none" dan tidak sekali-kali menggagalkan rantaian. Disahkan pada dialog Sourcepoint The Guardian dan pada Ecosia di bawah Camoufox
  • Pembantu stealth untuk tatal dan masa membaca menerima pemilih Playwright, jadi ref di dalam shadow root dan bingkai turut berfungsi pada laluan stealth

v6.13.0

Penambahbaikan

Snapshot yang Menunggu Halaman, dan Baris Gilir Menggantikan Penolakan

Pusingan kedua pembetulan scrape_with_actions. Snapshot kini menunggu halaman dipaparkan sebelum membacanya: peristiwa load, kemudian tetingkap senyap tanpa perubahan DOM selama 300 ms dan tanpa permintaan yang sedang berjalan selama 500 ms, berhad dan tidak sekali-kali melebihi had masa tindakan itu. Snapshot halaman utama Amazon meningkat daripada 0 nod kepada 236, termasuk kotak carian. Klik, tekanan kekunci dan pilihan menunggu dengan cara yang sama selepasnya, jadi perubahan laluan aplikasi satu halaman dapat dilihat. Lonjakan panggilan yang melebihi had pelayar kini beratur sehingga 60 s dan bukannya gagal dengan "Maximum concurrent sessions", dan browser_session berkongsi slot yang sama hanya semasa ia membuka halaman. Klik stealth pada Camoufox tidak lagi tersekat: dua lapisan pemanusiaan kursor telah ditindan, dan klik persetujuan Ecosia turun daripada 12-20 s kepada 1.4 s. Harga tidak berubah.

  • Hasil snapshot melaporkan waited_ms dan settled_by (quiet, cap atau closed); snapshot browser_session mendapat penantian yang sama
  • CRAWLFORGE_MAX_ACTION_SESSIONS menetapkan slot pelayar (lalai 3) dan CRAWLFORGE_ACTION_QUEUE_TIMEOUT_MS tempoh beratur (lalai 60 s); hasil membawa queued_ms, dan executionTime tidak lagi mengira masa menunggu
  • Pada Camoufox, simulator klik membuat satu gerakan dan membiarkan Camoufox melukis laluannya, dengan had 0.5 s bagi setiap gerakan; simulateClick kini mematuhi had masa tindakan dan bukannya lalai 30 s Playwright

v6.12.1

Pembetulan

Halaman Ralat Aplikasi Dikesan, dan Kegagalan scrape_with_actions yang Lebih Murah

Susulan kepada langkah impit dalam 6.11.0. Halaman pendek yang teksnya bermula dengan ralat aplikasi — "Something went wrong", "Oops!", "An error occurred" atau pengecualian sisi klien Next.js — kini dianggap sekatan lembut walaupun tajuknya biasa, jadi ia diteruskan ke pelayar stealth dan bukannya dikembalikan sebagai halaman. "Something went wrong. Wait a moment and try again." daripada quora.com sebelum ini lepas pada setiap laluan, bukan hanya melalui impit. Peraturan ini datang daripada crawlforge-extractors 1.10.0, yang kini diperlukan oleh pelayan. Tetapan baharu CRAWLFORGE_IMPIT=off mematikan langkah impit untuk keseluruhan pelaksanaan: diukur dari IP pusat data instans yang dihoskan, ia tidak melepasi satu pun dinding penanda aras, jadi perkhidmatan yang dihoskan menjalankannya dalam keadaan mati manakala pemasangan npm mengekalkannya hidup. Harga tidak berubah. 6.12.1 ialah pusingan pertama pembetulan scrape_with_actions daripada semakan langsung: maxRetries kini lalai kepada 0, jadi rantaian yang gagal tidak lagi berjalan dua kali (klik pada pemilih yang tiada turun daripada 20.8 s kepada kira-kira 4 s), dan setiap larian yang memang diminta oleh pemanggil dilaporkan di bawah attempts[]. browserOptions.timeout kini sampai kepada setiap tindakan, screenshotOnError: false dipatuhi, dan bait tangkapan skrin tidak lagi bocor secara inline di sebelah URI sumbernya.

  • Dokumen di bawah 200 aksara yang teksnya bermula dengan frasa ralat aplikasi ialah sekatan lembut tanpa mengira tajuknya, jadi halaman ralat sandaran dicuba semula dalam pelayar dan bukannya dikembalikan sebagai kandungan
  • CRAWLFORGE_IMPIT=off melangkau langkah impit peringkat eskalasi bagi pelaksanaan yang IP keluarnya tidak dapat dibantu olehnya, dan dibaca pada setiap panggilan. Perkhidmatan yang dihoskan mematikannya; pemasangan npm mengekalkannya, dan dari IP kediaman ia melepasi indeed.com
  • Eskalasi scrape pada API REST kekal menggunakan pelayar sahaja atas keputusan, dan cadangan memainkan semula kuki kelulusan Cloudflare melalui impit ditolak: kuki itu terikat pada User-Agent yang digunakan untuk memperolehnya, jadi memainkannya semula bermakna menghantar User-Agent pelayar dan bukannya User-Agent CrawlForge sendiri
  • scrape_with_actions: maxRetries lalai kepada 0 dengan setiap larian dilaporkan dalam attempts[], browserOptions.timeout ialah had masa bagi setiap tindakan, pemulihan ralat dihadkan pada 3 s setiap tindakan dan dilangkau bagi tindakan menunggu atau pemilih yang tidak sepadan dengan apa-apa, dan rantaian dengan satu tangkapan skrin kembali di bawah 5 KB dan bukannya kira-kira 118 KB

v6.11.0

Ciri

Cubaan TLS Chrome Sebelum Pelayar

Apabila scrape dijalankan dengan escalate: true, atau agent mencuba semula halaman yang disekat, dan enjinnya "auto" (lalai), jabat tangan TLS Chrome kini dicuba sebelum sebarang pelayar dilancarkan. Ia membawa User-Agent CrawlForge yang jujur. Jika ia mendapat halaman, tiada pelayar dimulakan: indeed.com kembali dalam kira-kira sesaat dari IP kediaman di mana pengambilan biasa disekat oleh Cloudflare. Jika tidak, pelayar berjalan seperti sebelum ini, dan harganya 2 + 5 dalam kedua-dua keadaan. Langkah ini menggunakan impit, kebergantungan pilihan baharu dengan binari prabina; tanpanya, eskalasi berkelakuan sama seperti dalam 6.10.0. Pada Chromium, pemaparan stealth yang masih tertahan oleh dinding Cloudflare dengan bingkai Turnstile kini mengklik kotak semak sekali, halaman 200 yang hanya membenamkan widget Turnstile tidak lagi dianggap sekatan, dan setiap eskalasi menulis satu baris ke log audit pematuhan.

  • impit hanya berjalan dalam peringkat eskalasi: tidak pernah pada pengambilan biasa, dan tidak pernah apabila pemanggil menamakan playwright atau camoufox. Halaman yang diperolehnya melaporkan stealth.engine: "impit" dengan amaran yang menamakannya, setiap lompatan ubah hala disemak SSRF dengan resolusi DNS, dan halaman dengan kurang daripada 200 aksara teks yang kelihatan diteruskan ke pelayar
  • Klik kotak semak Turnstile pada Chromium melalui input tetikus Playwright biasa, hanya apabila dinding masih ada selepas tempoh menunggu biasa dan halaman mempunyai bingkai challenges.cloudflare.com. Disahkan terhadap sitekey ujian interaktif paksa Cloudflare, yang hanya membuktikan mekanismenya: sama ada laman sebenar menerima klik itu masih bergantung pada IP dan cap jari yang dinilainya
  • nowsecure.nl menjawab 200 dengan widget Turnstile pada sitekey ujian Cloudflare, dan setiap "Blocked" yang direkodkan untuknya datang daripada lapisan keputusan kami sendiri. Dokumen 200 dengan tajuk, teks dan hanya penanda widget kini lulus; dinding sebenar (403) dan halaman kosong kekal disekat
  • Satu baris stealth_escalation ditulis ke logs/compliance-audit.log untuk scrape dengan escalate, cubaan semula stealth agent dan stealth_mode, selepas pintu pematuhan dan sebelum pelayar menavigasi, dengan ID kunci dan pemilik yang dicincang dan bukannya nilai mentah. Baris robots_override tidak lagi menunjukkan apiKeyId: "anonymous" pada pelayan langsung

v6.10.0

Ciri

Clearance Jar: Cabaran yang Diselesaikan Kekal Selesai

Apabila pemaparan stealth berjaya melepasi dinding Cloudflare atau DataDome, kuki kelulusan vendor itu — tepatnya cf_clearance, __cf_bm dan datadome — disimpan dan dimainkan semula ke konteks stealth seterusnya yang mempunyai enjin, User-Agent dan proksi yang sama. Ini merangkumi peringkat eskalasi scrape, stealth_mode, cubaan semula stealth agent, browser_session dan scrape_with_actions. Pada stackoverflow.com dari IP kediaman, panggilan stealth pertama melalui halaman perantaraan Cloudflare dalam 4.1 saat; panggilan kedua terus mendapat 200 tanpa cabaran dalam 1.6 saat. Tiada kuki lain yang pernah disimpan, jadi log masuk seorang pemanggil tidak boleh sampai ke konteks pemanggil lain.

  • Hanya tiga kuki bernama disimpan, dikunci mengikut enjin, User-Agent dan proksi. Pemaparan yang bertemu dinding sekali lagi membuang kelulusan hos itu, tempoh luputnya mengikut kuki itu sendiri dengan had 24 jam, dan jar menyimpan paling banyak 32 identiti dengan 200 kuki setiap satu
  • Disimpan di ~/.crawlforge/stealth-clearance.json dengan mod 0600 dan kunci dicincang, jadi proses kedua menggunakan semula kelulusan dari cakera: indeed.com dimuatkan tanpa sebarang permintaan platform cabaran. CRAWLFORGE_CLEARANCE_JAR=off mematikannya
  • Kumpulan profil Chromium kekal sengaja tidak dibina: profil yang dikongsi menyimpan log masuk dan storan laman, dan pada instans yang dihoskan ia akan bocor antara pelanggan

v6.9.0

Ciri

agent Mencuba Semula Halaman yang Disekat dalam Pelayar Stealth

Sebelum 6.9.0, peringkat tindakan alat agent hanya menjalankan pengambilan biasa. Halaman benih yang dicabar digugurkan dan jawapan dibina daripada petikan carian, yang dalam ujian Indeed semakan itu menghasilkan "3.3 stars, based on 3.3 reviews". Kini halaman yang bertemu cabaran, 403 atau 429, halaman kosong atau tamat masa dicuba semula melalui peringkat stealth yang sama digunakan oleh escalate: true pada scrape, dengan pintu pematuhan, pemilih enjin dan proksi yang sama. Dengan enjin Chromium, ujian yang sama membaca halaman benih itu sendiri dan menjawab 3.3 bintang daripada 58,942 ulasan. Harga mengikut apa yang berjaya: 8 credits, ditambah 5 bagi setiap cubaan semula stealth yang mendapat halaman.

  • URL yang dinamakan pemanggil dicuba semula dahulu, dan URL yang ditemui hanya apabila ia tiada petikan carian yang relevan. Penolakan, 404 dan ralat 5xx tidak pernah dicuba semula, satu larian membuat paling banyak 2 cubaan semula, dan tiada yang bermula dengan kurang daripada 20 saat masa berbaki
  • Cubaan semula yang bertemu dinding sekali lagi, atau gagal, adalah percuma. Keputusan melaporkan stealth_retries (cubaan) dan stealth_retries_charged (dicaj), bukti daripada cubaan semula ditanda via: "stealth", dan had yang diterbitkan ialah 18 credits, 8 apabila tiada cubaan semula. Laluan REST mengecaj sama: 8 + 5 bagi setiap cubaan semula yang dicaj
  • Seperti yang diukur: dengan enjin Camoufox dari IP yang sama, Cloudflare menyekat cubaan semula itu, dan eskalasi scrape yang tidak diubah gagal dengan cara yang sama di situ

v6.8.0

Ciri

Penanda Aras Stealth, dan Kebocoran yang Diukurnya Ditutup

Penanda aras semakan stealth 2026-09 sebelum ini dijalankan secara manual; 6.8.0 menjadikannya satu arahan, npm run bench:stealth, yang menguji pelayar stealth dan pengambilan biasa terhadap dua belas dinding bot dan lima halaman pengesan, dan mengepalai matriksnya dengan OS hos, kelas IP keluar, enjin dan versi pelayar. Diukur dengannya, kebocoran ditutup: navigator.webdriver membaca false dan bukannya dipadam dan tiada apa yang menjadi sifat sendiri navigator, userAgentData tidak lagi membawa jenama HeadlessChrome, versi utama Chrome diambil daripada binari yang dipasang, dan Web Worker kini menjawab sama seperti dokumen. Ujian kendiri pengesan mencapai 19 lulus, 0 gagal, 1 dilangkau pada kedua-dua enjin. Camoufox, enjin yang melepasi paling banyak dinding, kini lalai melalui enjin "auto", dengan peralihan ke Chromium yang dilaporkan dan bukannya senyap.

  • npm run bench:stealth:ci menjalankan sepuluh ujian kendiri dalam halaman yang tidak memerlukan laman pihak ketiga dan hanya gagal pada regresi yang tidak disenaraikan dalam fail garis dasar, dengan kawalan negatif --self-check yang memaksa navigator.webdriver kepada true dan mesti dikesan
  • Halaman yang hanya membenamkan widget Turnstile tidak lagi dianggap sekatan Cloudflare (quora.com kini lulus pada kedua-dua enjin), dan halaman perantaraan bertajuk tersuai mendapat masa menunggunya. Halaman stealth tidak lagi memintas permintaan atau membuang imej, fon dan helaian gaya secara rawak, dan --disable-web-security dibuang daripada pelayar stealth
  • escalate_engine pada scrape dan engine pada stealth_mode kini lalai kepada "auto": Camoufox dahulu, Chromium dengan amaran apabila binarinya tiada. browser_session dan scrape_with_actions mendapat parameter engine, CRAWLFORGE_STEALTH_PROXIES memberi setiap laluan stealth senarai proksi peringkat pelayan, dan User-Agent Camoufox yang dua nombor versinya tidak sepadan pada kira-kira separuh pelancaran telah dibaiki

v6.7.0

Pembetulan

Putaran Proksi yang Benar-benar Menghala, dan Camoufox yang Kekal Firefox

Satu ujian pengesanan bot terhadap 6.6.2 mengesyorkan penghalaan melalui proksi kediaman untuk melepasi semakan reputasi IP Cloudflare. Konfigurasi itu tidak berbuat apa-apa, dalam tiga cara berbeza: proksi diletakkan pada bendera Chromium yang tidak boleh membawa user:pass yang disertakan dengan setiap proksi kediaman, laluan pelancaran Camoufox berjalan tanpa proksi walau apa pun yang diminta, dan proksi dibaca sekali sahaja semasa pelancaran, jadi putaran tidak pernah berlaku. Ketiga-tiganya telah dibaiki, dan stealthConfig.proxyRotation kini menerima URL proksi biasa dengan kelayakan dikenakan bagi setiap konteks pelayar. Siasatan itu turut menemui lebih banyak bahagian laluan stealth yang bertentangan dengan dirinya sendiri: Camoufox, yang dipilih kerana tiada apa untuk dikesan, telah diberi User-Agent Chrome dan client hints Chromium.

  • proxyRotation menerima URL http, https, socks4 dan socks5, membuat pengesahan pada kedua-dua enjin, menganggap entri yang cacat sebagai ralat dan bukannya permintaan tanpa proksi, bermula pada entri pertama, dan tidak lagi memulangkan kata laluan proksi daripada get_stats. CrawlForge tidak menyediakan proksi; ini menghala melalui proksi anda
  • Camoufox menampilkan identiti Firefoxnya sendiri, tanpa pengepala sec-ch-ua dan tanpa skrip berbentuk Chromium disuntik, dan berjalan dengan ciri geoip, block_webrtc dan humanize sendiri dihidupkan. Di sebalik proksi ia mengambil bahasa, zon waktu dan lokasi daripada IP keluar
  • scrape pada stealth_mode menunggu peristiwa load halaman dan sehingga DOM berhenti berubah sebelum membaca, melaporkan waited_for_render_ms, dan ralat JavaScript tidak ditangkap milik halaman Firefox tidak lagi menamatkan proses

v6.6.2

Ciri

browser_session — alat ke-31

Satu halaman pelayar yang terus hidup selepas panggilan yang membukanya berakhir. browser_session ialah satu alat dengan parameter operation: open membuka sesi pada satu URL dan mengembalikan session id, snapshot mengembalikan pepohon kebolehcapaian halaman dengan ref stabil pada setiap elemen interaktif (@e1 [textbox] "Email", @e3 [button] "Sign in"), act menjalankan 1-20 tindakan pelayar yang selector-nya boleh jadi salah satu ref itu, read mengekstrak markdown, HTML, teks atau metadata daripada DOM langsung seperti keadaannya selepas segala yang diklik sesi itu, screenshot menangkap halaman atau satu elemen, close menamatkan sesi dan list menyatakan sesi yang sedang dipegang oleh sesuatu API key. Kitarannya ialah lihat dahulu, kemudian bertindak: agent membaca ref yang diberikan snapshot dan bukan meneka pemilih CSS, dan log masuk dibayar sekali sahaja dan bukan sekali bagi setiap panggilan — scrape_with_actions tidak mampu berbuat demikian kerana pelayarnya ditutup sebaik panggilan itu selesai. Setiap operation dikenakan harga secara berasingan bermula 1 credit: open 3, read 2, manakala snapshot, act, screenshot, close dan list 1 setiap satu, dengan 3 milik open sebagai kadar yang diterbitkan. Sesi memang direka pendek: ttl (lalai 600s, julat 30-3600) ialah jam mutlak dan activity_ttl (lalai 300s, julat 10-3600) jam melahu, dan mana-mana yang tamat dahulu menutup halaman itu. Gerak "lihat dahulu" yang sama turut sampai kepada rantaian sekali jalan: scrape_with_actions menerima tindakan snapshot, jadi satu rantaian boleh menyenaraikan apa yang ditawarkan halaman sebelum menamakan pemilih. 6.6.1 menyusul dengan pusingan ujian langsung pertama terhadap alat ini sendiri: halaman yang disekat kini dinamakan sedemikian dan bukan dikembalikan sebagai kandungan, executeJavaScript memulangkan nilainya, dan read dihadkan seperti setiap alat kandungan yang lain. 6.6.2 menutup pusingan langsung kedua: tangkapan skrin halaman penuh yang melebihi had mesej stdio sebelum ini menutup keseluruhan sambungan MCP, dan kini ditolak dengan saiznya dan apa yang patut diambil sebagai ganti.

  • browser_session baharu (1-3 credits setiap operation) mengekalkan satu halaman pelayar hidup merentas panggilan API: open, snapshot, act, read, screenshot, close dan list, dengan session id daripada open dibawa pada setiap panggilan berikutnya. Setiap operation dibilkan pada harganya sendiri — open 3, read 2, selebihnya 1 setiap satu — jadi satu lihatan murah tidak sekali-kali membayar harga open yang mahal, dan aliran log masuk lalu baca (open, snapshot, act, act, read, close) berjumlah 9 credits
  • snapshot mengembalikan halaman sebagai pepohon kebolehcapaian dengan ref stabil pada setiap elemen interaktif, dan act menghalakan selector ke @e1 dan bukan pemilih CSS yang diteka. Satu ref hanya milik dokumen tempat snapshot-nya diambil: sebarang navigasi membatalkan semua ref, dan bertindak pada ref basi gagal dengan ralat yang menyuruh anda snapshot semula, bukan senyap-senyap mengklik benda yang salah. scrape_with_actions turut mendapat tindakan snapshot yang sama, jadi rantaian sekali jalan pun boleh melihat sebelum bertindak
  • Sudah langsung pada REST API di POST /api/v1/tools/browser_session dengan sampul yang sama seperti setiap alat lain. Satu REST API key hanya boleh memegang satu sesi pada satu masa, dan open kedua semasa satu sesi masih hidup ditolak dengan ralat bernama dan bukan dibaris gilir, jadi close sesi itu apabila selesai dan jangan biarkan TTL tamat sendiri
  • 6.6.1 membaiki kegagalan yang paling penting: dinding bot atau halaman ralat HTTP tidak lagi dibaca sebagai sesi yang berjaya. open dan read melaporkan httpStatus dan menamakan vendor yang menyekatnya — sebelum ini 403 daripada DataDome kembali sebagai success dengan satu perkataan "g2.com" sebagai halaman — executeJavaScript memulangkan nilainya tanpa perlu diminta, dan read dihadkan pada max_inline_chars dengan result_handle dan bukannya memulangkan setengah juta aksara secara inline
  • 6.6.2 mengehadkan sumber tangkapan skrin di bawah had mesej stdio — PNG halaman penuh 18.5 MB sebelum ini menutup keseluruhan sesi MCP, bersama setiap alat pada sambungan itu — dan respect_robots: false kini memulangkan amarannya daripada open dan act, diaudit sebagai browser_session dan bukannya scrape_with_actions

v6.5.0

Pembetulan

Pusingan Merentas Sektor: Sokongan DOCX dan Tujuh Pembetulan

Enam kecacatan dan empat jurang daripada pusingan langsung kesemua 30 alat merentasi kira-kira 600 URL dalam tiga belas sektor: hartanah, penjagaan kesihatan, kewangan, pendidikan, sukan, makanan, hiburan, undang-undang dan kerajaan, bekalan industri, telekomunikasi dan harga SaaS, badan bukan untung, aktiviti luar dan sains. process_document kini membaca dokumen Word: fail .docx yang diambil sebagai URL sebelum ini kembali sebagai satu megabait bait ZIP yang dilaporkan sebagai teks halaman; kini kandungan yang diambil menentukan cara ia dibaca, PDF yang dihidangkan di bawah URL biasa sampai ke penghurai PDF, dan arkib atau imej ditolak dengan nama. scrape mengembalikan halaman tahap cukai irs.gov sebagai pengepalanya sahaja kerana laluan kandungan tersembunyi membaca helaian gaya cetakan sebagai CSS skrin, melipat gaya sebaris menjadi peraturan universal, dan memisahkan senarai pemilih :has() pada setiap koma; ketiga-tiganya dibetulkan dan halaman itu mengembalikan empat jadual kadarnya. track_changes menilai suapan yang bertambah satu rekod penuh sebagai tiada perubahan, extract_structured gagal sepenuhnya mengekstrak jadual apabila model melebihi bajet keluarannya, map_site mengabaikan laluan URL benih dan carian, dan scrape yang dipangkas kehilangan jawapan highlights dan question. Seperti yang diterbitkan, 6.5.0 juga menolak sebarang URL reddit.com sebelum pengambilan, kerana reddit.com menyekat setiap klien bukan pelayar, dan menamakan panggilan reddit_search yang membaca post yang sama; reddit_search kini mencuba Arctic Shift dahulu kemudian PullPush.

  • process_document membaca DOCX dengan mammoth dan menghalakan PDF yang dihidangkan di bawah sourceType url ke penghurai PDF; kandungan yang tidak dapat dibacanya ditolak dengan nama dan bukannya dikembalikan sebagai bait
  • Laluan kandungan tersembunyi scrape melangkau helaian gaya cetakan, tidak lagi membaca gaya sebaris sebagai peraturan universal, dan memisahkan senarai pemilih pada koma peringkat atas sahaja, jadi jadual cukai irs.gov kembali; hasil yang dipangkas mengekalkan jawapan highlights, question dan json secara sebaris
  • track_changes mendaftarkan dokumen teks sahaja yang bertambah satu rekod; extract_structured mengekalkan baris lengkap daripada respons yang terpotong sebagai partial: true dan menamakan sebab sandaran yang sebenar; map_site mengehadkan skop kepada laluan URL benih dan menyusun mengikut istilah carian dalam setiap URL; Crawl-delay robots.txt yang panjang dinamakan dalam respons
  • URL reddit.com ditolak sebelum sebarang pengambilan dengan USE_REDDIT_SEARCH dan dihalakan ke panggilan reddit_search yang tepat untuk URL itu, dan reddit_search mencuba Arctic Shift dahulu kemudian PullPush

v6.4.0

Pembetulan

Pembetulan Pusingan Runcit, Pelancongan dan Penerbangan

Lima kecacatan dan lima jurang daripada pusingan langsung kesemua 30 alat merentas 415 URL runcit, pelancongan dan penerbangan. Seperti pusingan sebelumnya, setiap kecacatan telah mengembalikan kejayaan dengan sesuatu yang hilang, bukan ralat. map_site membaca 75 daripada 1,878 URL peta laman boeing.com kerana peta laman itu menggunakan laluan loc relatif yang menyebabkan penghurai gagal; kini loc diselesaikan terhadap URL peta laman itu sendiri, entri yang rosak dilangkau secara sendirian, dan penghuraian kosong tidak disimpan ke cache mahupun dihidangkan daripadanya. scrape pada onlyMainContent lalainya menggugurkan jadual yuran bagasi berdaftar WestJet yang 6 baris, terlalu kecil untuk ujian saiz jadual data dan berada dalam komponen yang Readability skor rendah; kini jadual yang digugurkan dengan sel pengepala th dipulihkan tanpa mengira saiznya, dan jadual yang bermula dengan sel sudut kosong dipaparkan sebagai jadual paip dan bukan teks rata. scrape_with_actions pada pusat bantuan JavaScript mengembalikan pemegang tempat Content not available in markdown format sebagai kejayaan; markdown dan html kini datang daripada DOM selepas tindakan apabila pengekstrak tiada apa-apa. agent, apabila ditanya apa yang Southwest caj untuk beg berdaftar pertama, hanya merancang pertanyaan entiti kosong dan menjawab bahawa yuran itu tidak dinyatakan; pelan yang berhenti pada satu pertanyaan kini menerima perkataan tugas itu sendiri sebagai pertanyaan kedua, hanya pertanyaan entiti mengundi untuk akar langsung, dan jawapannya ialah $45 dengan petikan southwest.com. Pratonton crawl_deep ialah menu mega laman pada setiap halaman; halaman kini melalui laluan kandungan utama yang sama seperti scrape. Tiada alat yang berubah harga.

  • map_site membaca peta laman yang ditulis dengan laluan loc relatif. Peta laman 1,878 URL boeing.com telah dihuraikan sebagai kosong kerana normalizeUrl gagal pada /, jadi alat itu berundur kepada merangkak pautan halaman utama dan mengembalikan 75. loc diselesaikan terhadap URL peta laman, satu entri rosak tidak lagi membuang yang lain, dan penghuraian kosong tidak pernah ditulis ke atau dihidangkan daripada cache peta laman, yang terus menjawab 75 selama sejam selepas penghurai dibetulkan
  • Jadual dan halaman JavaScript: scrape memulihkan jadual yang digugurkan yang penulisnya menandakan sel pengepala th tanpa mengira saiznya, jadi jadual yuran WestJet kekal pada onlyMainContent lalai, dan sel sudut kosong dalam baris pertama yang selebihnya th dinaikkan supaya jadual dipaparkan dengan lajurnya. scrape_with_actions menghidangkan markdown dan html daripada DOM selepas tindakan, dengan markdownSource: body, dan bukan pemegang tempat apabila Readability tidak menemui artikel. Kandungan crawl_deep ialah kandungan utama halaman dan bukan menunya
  • agent menambah perkataan tugas itu sendiri sebagai pertanyaan carian kedua apabila pelan keadaan semasa berhenti pada nama entiti kosong, mengekalkan pertanyaan entiti sebagai satu-satunya undian untuk akar langsung, dan boleh melangkaui halaman langsung apabila ia tidak menyatakan jawapan. get_batch_results menerima max_inline_chars dan mengembalikan pratonton serta result_handle melebihi had; extract_links tidak lagi mengira pseudo-pautan javascript:; reddit_search menamakan tetingkap pemanggil dan cara menyempitkannya apabila Arctic Shift tamat masa di dalamnya

v6.3.1

Pembetulan

Pengesahan Bersarang, Autoriti Versi dan Log Masuk Linux

Empat kecacatan daripada pusingan langsung R19, setiap satu jawapan salah yang yakin dan bukan ralat, ditambah satu ranap khusus Linux. extract_structured hanya mengesahkan satu peringkat, jadi tatasusunan teks halaman yang sesat lulus skema yang meminta tatasusunan objek; pengesah kini berada dalam satu modul, setiap pengguna menggunakannya termasuk sandaran pemilih CSS, dan success ialah false apabila medan wajib hadir tetapi bentuknya salah. Alat yang sama berundur kepada pemilih CSS pada jadual besar tanpa penjelasan kerana belanjawan keluaran mengira tatasusunan sebagai satu medan; belanjawan kini berskala dengan tatasusunan dalam skema, respons yang terpotong dicuba semula sekali pada dua kali belanjawan, dan kegagalan menamakan had token — julat yang boleh digunakan meningkat daripada kira-kira 43 baris kepada kira-kira 156. agent menjawab soalan versi daripada siaran forum yang lulus provenans kerana rentetan itu ada pada halaman yang diambil; untuk soalan versi, versi itu kini mesti muncul dalam sumber yang bukan halaman perbincangan, dan yang gagal ditandakan dalam provenance.unsupported_versions. analyze_content mereka entiti dan skor kebolehbacaan untuk teks bukan Latin; kedua-duanya melaporkan notApplicable untuk Cyrillic, Yunani, Arab dan Devanagari, dan kata henti Rusia menyertai senarai. 6.3.1: crawlforge login ranap pada Linux dengan ERR_MODULE_NOT_FOUND kerana satu import menggunakan huruf besar kecil yang salah, yang disembunyikan oleh sistem fail tidak peka huruf; ujian baharu membandingkan setiap import relatif dengan git ls-files.

  • extract_structured mengesahkan bentuk bersarang: countries sebagai tatasusunan rentetan terhadap skema objek tidak lagi dilaporkan sah. Satu pengesah dalam src/utils/schemaValidate.js melayani setiap pengguna, ralat menamakan laluan (Field countries.0.capital: expected string, got number) dan dihadkan kepada sepuluh serta satu kiraan, dan success ialah false apabila medan wajib hadir tetapi bentuknya salah — perubahan yang ketara bagi pemanggil yang bercabang padanya
  • Belanjawan token keluaran extract_structured berskala dengan tatasusunan dalam skema dan bukan mengira tatasusunan sebagai satu medan, respons yang terputus di tengah objek dicuba semula sekali pada dua kali belanjawan, dan kegagalan menyatakan model response was cut off at the N-token output limit dan bukan melaporkan ofset JSON; julat jadual yang boleh digunakan meningkat daripada kira-kira 43 baris kepada kira-kira 156. agent tidak lagi menjawab soalan versi daripada halaman perbincangan: versi mesti muncul dalam sumber bukan forum, satu penulisan semula pembetulan dijalankan, dan apa yang kekal ditandakan dalam provenance.unsupported_versions; provenance.checked kini melaporkan sama ada semakan itu dijalankan
  • analyze_content melaporkan notApplicable untuk entiti dan kebolehbacaan pada teks bukan Latin dan bukan merekanya (rain and gusty telah kembali sebagai organisasi, dan laporan cuaca Rusia mendapat skor Very Easy), melanjutkan pengawal CJK kepada Cyrillic, Yunani, Arab dan Devanagari. 6.3.1 membetulkan crawlforge login pada Linux: satu import AuthManager.js menggunakan huruf besar kecil yang salah, yang diselesaikan oleh macOS dan Windows tetapi bukan Linux, jadi perintah itu mati semasa import bagi setiap pengguna Linux sejak 6.1.0; tests/unit/importCaseExactness.test.js kini menyemak setiap import relatif terhadap git ls-files

v6.2.0

Ciri

Monitor Terhos daripada MCP server

Monitor berjadual pada MCP server kini ada dua jenis. Monitor tempatan, operasi create_scheduled_monitor seperti sebelum ini, disimpan di bawah ~/.crawlforge/monitors, menyala dalam proses hanya selagi proses MCP server itu hidup, mengejar semula larian yang terlepas semasa mula semula, dan memberitahu melalui webhook atau Slack dari mesin anda; crawlforge monitor:run-due daripada cron sistem kekal sebagai laluan tempatan yang terjamin, dan monitor tempatan tidak pernah menghantar e-mel. Hantar scheduledMonitorOptions dengan hosted: true dan pelayan sebaliknya mendaftarkan monitor itu dengan perkhidmatan terhos di /api/v1/monitors menggunakan kunci API yang dikonfigurasikan, lalu mengembalikan id terhos dan URL papan pemuka. Sejak itu ia ialah monitor terhos yang sama yang diuruskan oleh API REST dan papan pemuka: penjadual CrawlForge sendiri mengambil, membandingkan, merekodkan setiap pemeriksaan dan memberitahu melalui e-mel dan webhook bertandatangan tanpa apa-apa yang berjalan di pihak anda, selang masa ditukar kepada cron dengan lantai 5 minit, dan zon waktunya UTC. Tiada alat yang berubah harga: mencipta atau menghentikan monitor terhos tidak berkos, mencipta monitor tempatan masih berkos 3 credits, dan setiap pemeriksaan terhos mengecaj harga track_changes bagi setiap sasaran yang dibandingkan.

  • hosted: true pada monitor berjadual. create_scheduled_monitor mendaftarkan monitor itu dengan perkhidmatan terhos melalui /api/v1/monitors menggunakan kunci API yang dikonfigurasikan dan mengembalikan id terhos dan URL papan pemuka; e-mel dihantar ke notificationOptions.email.recipients dan webhook bertandatangan ke notificationOptions.webhook. list_scheduled_monitors menyenaraikan monitor tempatan dan terhos bersama-sama, setiap satu membawa bendera hosted, dan stop_scheduled_monitor memadam mana-mana satu. Mencipta atau menghentikan monitor terhos daripada MCP server tidak berkos, sama seperti API REST monitor; mencipta monitor tempatan masih berkos 3 credits
  • Monitor tempatan berhenti berpura-pura menghantar e-mel. Monitor tempatan dengan tetapan pemberitahuan e-mel kini melaporkan ralat yang menunjuk kepada hosted: true dan bukannya kejayaan palsu; laluan e-mel tempatan itu sentiasa hanya pemegang tempat. Monitor tempatan memberitahu melalui webhook atau Slack dari mesin anda, menyala hanya selagi proses MCP server berjalan, mengejar semula larian yang terlepas semasa mula semula, dan crawlforge monitor:run-due daripada cron sistem ialah laluan tempatan yang terjamin
  • Skema input track_changes diisytiharkan sekali sahaja dan dikongsi oleh pendaftaran pelayan dan alat itu, tanpa perubahan tingkah laku. AlertNotificationSystem.js, 601 baris yang tidak diimport oleh apa-apa pun, dipadamkan: padanannya yang hidup ialah modul notifier, dan perkhidmatan terhos yang menghantar e-mel dan webhook bertandatangan

v6.1.0

Pembetulan

Gesaan Pengesahan pada Kedua-dua Era Protokol

Lima alat yang bertanya sebelum larian yang mahal — crawl_deep melebihi 500 halaman, batch_scrape dalam mod segerak melebihi 25 URL, deep_research melebihi 50 URL, agent pada model pro, dan extract_structured tanpa LLM yang dikonfigurasikan serta lebih daripada tiga medan wajib — berserta amaran baki credits rendah, dibina atas permintaan sebaris elicitation/create era 2025, sedangkan revisi 2026-07-28 langsung tiada saluran permintaan dari pelayan ke klien: pada era itu gesaan tersebut senyap-senyap tidak menyala dan operasi diteruskan tanpa ditanya. Kini semuanya ialah pemulangan input_required berbilang pusingan, yang disajikan oleh SDK pada kedua-dua era, jadi gesaan itu sampai kepada anda pada era mana sekalipun. Panggilan yang kembali meminta pengesahan belum melakukan apa-apa kerja, jadi ia tidak memakan credits dan tidak menghasilkan rekod penggunaan; caj diambil sekali sahaja, apabila panggilan itu benar-benar selesai, dan menolaknya tidak menelan apa-apa kos. Keluaran yang sama membaiki elicitation atas HTTP, yang sebenarnya tidak pernah berfungsi: kedua-dua kaki HTTP disajikan daripada klon instans pelayan dan hanya klon yang pernah disambungkan, jadi pembantu itu membaca keupayaan klien yang tidak tertakrif pada setiap permintaan HTTP dan setiap sesi diteruskan tanpa ditanya — rosak sejak v3.2.0 dan gagal ke arah selamat sepanjang masa itu. Pengangkutan kini mencap klon yang menyajikan permintaan itu pada konteks permintaan, dan stdio tidak pernah terjejas.

  • Gesaan pengesahan kini sampai kepada klien era 2026-07-28: crawl_deep melebihi 500 halaman, batch_scrape dalam mod segerak melebihi 25 URL, deep_research melebihi 50 URL, agent pada model pro, dan extract_structured tanpa LLM yang dikonfigurasikan serta lebih daripada tiga medan wajib, berserta amaran baki credits rendah, semuanya bertanya sebelum berjalan. Kesemuanya dibina atas permintaan sebaris elicitation/create era 2025, dan revisi 2026-07-28 tiada saluran permintaan dari pelayan ke klien, jadi pada era itu gesaan tersebut senyap-senyap tidak menyala dan operasi diteruskan tanpa ditanya. Setiap satu kini ialah pemulangan input_required berbilang pusingan, yang disajikan oleh SDK pada kedua-dua era — gesaan itu sampai kepada pengguna sama ada pada klien era 2025 mahupun era 2026
  • Satu pusingan pengesahan tidak pernah dicaj. Panggilan yang kembali meminta pengesahan belum melakukan apa-apa kerja, jadi ia berharga 0 credits dan tidak menghasilkan rekod penggunaan; caj diambil sekali sahaja, apabila panggilan itu benar-benar selesai. Menolak pengesahan tidak menelan apa-apa kos, dan tiada alat yang berubah harga dalam keluaran ini
  • Elicitation atas HTTP sudah dibaiki, dan ia sebenarnya tidak pernah berfungsi: kedua-dua kaki HTTP disajikan daripada klon instans pelayan dan hanya klon yang pernah disambungkan, jadi pembantu itu membaca keupayaan klien yang tidak tertakrif pada setiap permintaan HTTP dan setiap sesi diteruskan tanpa ditanya — rosak sejak v3.2.0 dan gagal ke arah selamat sepanjang masa itu, tidak pernah bertanya dan bukan bertanya secara salah. Pengangkutan kini mencap klon yang menyajikan permintaan itu pada konteks permintaan. Ini endpoint HTTP terhos sahaja: sambungan stdio, iaitu cara npx crawlforge-mcp-server dan setiap klien desktop bersambung, tidak pernah terjejas. Turut dibaiki: ujian asap bundel .mcpb dalam CI tidak lagi menetapkan kunci API pengganti
  • Perintah baharu `crawlforge login`: serahan kunci API melalui pelayar. CLI mencetak URL kelulusan, pengguna yang telah log masuk meluluskannya di laman web, dan kunci dihantar kepada CLI sekali sahaja lalu disimpan ke ~/.crawlforge/config.json. Ia tidak pernah mengedit konfigurasi klien; ejen pengekodan boleh menjalankannya dan menyampaikan URL supaya kunci tidak pernah ditampal ke dalam terminal

v6.0.0

Ciri

Migrasi Protokol 2026-07-28

Keluaran besar, kerana tiga perkara yang boleh dilihat oleh pemanggil dibuang atau berubah. MCP server kini bertutur revisi protokol 2026-07-28 tanpa keadaan pada endpoint /mcp yang sama yang sudah pun menyajikan era 2025, tanpa jabat tangan, tanpa id sesi dan dengan server/discover menggantikan initialize. Era mana yang menaungi sesuatu permintaan ditentukan oleh pengelas milik MCP SDK sendiri dan bukan oleh peraturan kami, jadi endpoint itu tidak mungkin bercanggah dengan SDK tentang permintaan yang terletak di sempadan, dan kedua-dua era disajikan daripada satu definisi alat yang sama supaya keduanya tidak boleh menyimpang. Ini endpoint HTTP sahaja: sambungan stdio, iaitu cara npx crawlforge-mcp-server dan setiap klien desktop bersambung, masih merundingkan era 2025 dan tiada apa-apa padanya berubah. Dibuang: parameter task dan mod tugasan tak segerak pada crawl_deep, batch_scrape, deep_research dan agent, kerana spesifikasi itu memadam permukaan SDK yang mendasarinya dan bukan memindahkannya; dan bendera --legacy-http, empat versi kecil selepas amarannya sendiri berkata ia akan pergi. Turut dibaiki: endpoint HTTP terhos tidak pernah menjalani pusingan kebersihan protokol yang sentiasa ada pada stdio, jadi ia mengembalikan alat mengikut susunan pendaftaran, tanpa ikon dan tanpa dialek skema.

  • Revisi 2026-07-28 pada endpoint HTTP /mcp, disajikan tanpa keadaan bersebelahan era 2025 bersesi pada laluan yang sama. Permintaan moden membawa sampul _meta bagi setiap permintaan (versi protokol, clientInfo, clientCapabilities) berserta pengepala Mcp-Method, dan Mcp-Name pada panggilan alat; ia mendapat instans pelayannya sendiri dan tiada id sesi. Penghalaan, semakan ketidakpadanan antara pengepala dan badan, serta 415 bagi content type yang bukan JSON semuanya ialah kod milik SDK sendiri dan bukan pelaksanaan semula, dan setiap satu daripadanya menolak permintaan itu sebelum alat berjalan, jadi panggilan yang ditolak tidak pernah dicaj. Pengesahan tidak berubah dan serupa pada kedua-dua era — Bearer atau X-API-Key pada setiap permintaan — dan ia berjalan sebelum penghalaan era, jadi tiada lompang berbentuk era. GET /health kini menyenaraikan setiap revisi yang disajikan oleh endpoint itu
  • Perubahan yang memutuskan keserasian: params.task dan mod tugasan tak segerak sudah tiada pada crawl_deep, batch_scrape, deep_research dan agent. Kedua-duanya dibina atas API tasks eksperimen milik MCP SDK, dan SEP-2663 membuang API itu terus dan bukan memindahkannya menjadi sambungan — pada sambungan era 2026, tasks/get yang masuk menjawab -32601 walaupun pengendalinya didaftarkan, jadi tiada apa-apa lagi yang tinggal untuk dimigrasikan. Keempat-empat alat itu tidak lagi mengiklankan execution.taskSupport dan kini berjalan secara segerak, iaitu tepat apa yang sudah pun diterima oleh setiap pemanggil yang tidak pernah menghantar task. Bagi kerja panjang yang tidak sepatutnya menahan sambungan terbuka, gunakan mod webhook tak segerak batch_scrape atau corak result_handle dan read_result. Turut memutuskan keserasian: CRAWLFORGE_LEGACY_HTTP dan --legacy-http dibuang bersama mod tanpa keadaan v3.1 yang dikawalnya; klien era 2025 tidak terjejas, kerana mereka disajikan oleh pengangkutan bersesi yang menjadi lalai sejak v3.2.0
  • Dibaiki: endpoint HTTP terhos kini mengembalikan tools/list yang sama seperti yang sentiasa diterima oleh klien stdio. Pembalut kebersihan protokol — susunan abjad, ikon, dialek JSON Schema 2020-12, dan penanda boleh cache pada sepuluh alat baca sahaja — berada pada instans protokol milik pelayan templat itu sendiri, bukan dalam jadual pendaftaran yang disalin oleh klon setiap sesi HTTP, jadi sesi HTTP selama ini disajikan alat mengikut susunan pendaftaran tanpa satu pun daripada empat perkara itu sedangkan stdio memilikinya semua. Ini mengubah apa yang dikembalikan oleh endpoint terhos pada era 2025: outputnya disusun semula serta memperoleh ikon dan dialek skema pada setiap alat. Ia metadata tambahan berserta satu susunan semula — tiada apa-apa dibuang — tetapi klien yang mematok susunan lama akan melihatnya beralih. Dibaiki secara berasingan: gesaan elicitation sampai kepada klien yang secara senyap berhenti menerimanya sejak SDK dinaik taraf, kerana kaedah mudah SDK itu menolak satu bentuk keupayaan yang menurut peraturannya sendiri sah

02v5.x

Versi 5

v5.10.0

Ciri

Carian Berkelompok dan Penyuntingan Data Peribadi

Dua parameter, pada MCP server dan API REST terhos sama sahaja. search_web kini menerima queries: antara satu hingga sepuluh carian dalam satu panggilan, setiap satu menjalani saluran penuh yang sama seperti carian tunggal, dan muatannya dikembalikan sebagai results_by_query — satu senarai mengikut susunan ia dihantar, satu entri bagi setiap pertanyaan, jadi pertanyaan yang diulang muncul dua kali dan pertanyaan yang gagal membawa error menggantikan hasilnya. Panggilan itu berharga 5 credits bagi setiap pertanyaan yang mengembalikan hasil: unjuran kelompok, 5 x pertanyaan yang dihantar, ialah satu siling, dan kelompok yang tiada satu pun berjaya tetap mengembalikan 200 dan tidak berharga apa-apa. Panggilan dengan satu query sahaja adalah serupa bait demi bait dengan keadaannya sebelum keluaran ini: queries, count dan results_by_query tidak muncul padanya. redact_pii membuang data peribadi daripada teks yang dikembalikan oleh sembilan alat, sebelum hasil itu disimpan dan bukan selepasnya, jadi hasil besar yang dibaca kemudian dengan read_result sudah pun disunting. Mod fast lalainya ialah regex ke atas teks yang sudah pun diambil oleh panggilan itu dan tidak menambah apa-apa pada harganya.

  • queries (1 hingga 10 rentetan) pada search_web sebagai ganti query: tepat satu daripada kedua-duanya diperlukan, dan menghantar kedua-duanya atau tiada satu pun ialah ralat pengesahan. Setiap pertanyaan menjalani saluran sedia ada yang penuh — pengembangan, cache, penyahduaan, pemeringkatan — dan respons membawa queries, count serta results_by_query, yang entrinya mengikut susunan input dan setiap satu membawa query miliknya sendiri berserta medan carian itu, atau query dan error apabila carian itu gagal. Satu panggilan search_web berharga 5 credits bagi setiap pertanyaan yang mengembalikan hasil — satu query tunggal berharga 5, dan kelompok queries diunjurkan pada 5 x bilangan pertanyaan yang dihantar, iaitu satu siling: setiap pertanyaan yang gagal tidak dicaj, jadi kelompok yang tiada satu pun berjaya tidak berharga apa-apa. Kedua-dua permukaan mencaj ini secara serupa, dan kelompok yang tiada satu pun berjaya ialah 200 yang membawa sampul biasa — count sebagaimana dihantar, satu entri { query, error } bagi setiap pertanyaan, dan credits_used: 0 — bukan ralat. Laluan query tunggal tidak berubah: satu carian yang gagal tetap memberi ralat seperti biasa
  • redact_pii (boolean, atau { entities, replace_style, mode }) pada scrape, extract_content, extract_text, batch_scrape, crawl_deep, stealth_mode (operation "scrape"), scrape_with_actions, process_document dan search_web. Empat kelas regex: EMAIL, PHONE, FINANCIAL (nombor kad disahkan dengan Luhn, IBAN dengan mod-97) dan SECRET (kunci API, token bearer, kata laluan berlabel), manakala PERSON dan LOCATION hanya wujud dengan model. replace_style ialah tag (<EMAIL>), mask ([REDACTED]) atau remove, dan SECRET mengekalkan labelnya serta menggantikan nilainya sahaja dalam setiap gaya, termasuk remove. Nama entiti tidak sensitif huruf besar-kecil, dan nama yang tidak boleh disunting oleh permukaan itu ditolak dengan 400 yang menamakan kelas yang diterima dan bukan digugurkan secara senyap — guguran senyap akan mengembalikan halaman yang masih penuh dengan apa yang diminta dibuang
  • Hasil itu membawa redaction: { entities, count, mode } pada result.redaction di MCP server dan di dalam data pada API REST, iaitu laluan capaian yang sama secara sengaja. Ia hadir setiap kali penyuntingan diminta, termasuk entities: {} dengan count: 0 apabila halaman itu tidak mengandungi apa-apa, jadi "tiada apa-apa ditemui" boleh dibezakan daripada "parameter itu diabaikan"; kelas tanpa padanan ditinggalkan dan bukan dilaporkan sebagai 0. Mod "fast" menambah 0 credits. Pada MCP server, mod "model" menambah 3 credits sekali bagi setiap panggilan dan menjalankan satu pusingan NER Ollama untuk PERSON dan LOCATION sahaja, melaporkan model_ran dan menggugurkan caj itu apabila tiada model menjawab; pada API REST ia ialah 400 yang tidak dicaj dan menamakan MCP server — layanan yang sama seperti yang sudah diterima oleh mod model bagi format highlights dan question. Dua batas yang diketahui, dinyatakan dan bukan disembunyikan: kiraan yang diperoleh daripada teks (content_length, word_count, character_count) menggambarkannya sebelum penyuntingan, dan medan berbentuk alamat (url, link, href, canonical_url) sengaja tidak pernah disunting

v5.9.0

Ciri

Peningkatan pilihan pada scrape

Halaman yang menjawab dengan dinding bot dan bukan halaman tidak lagi memaksa pemanggil membayar perjalanan kedua. Hantar escalate: true dan ambilan biasa tetap berjalan dahulu; hanya apabila dokumen itu kembali sebagai cabaran Cloudflare, Amazon, DataDome, PerimeterX, Akamai atau Vercel, cengkerang kosong atau ruang letak pendek bertajuk ralat barulah panggilan yang sama memaparkannya sekali dalam pelayar stealth dan memperoleh setiap format yang diminta daripada paparan itu. Unjuran ialah siling pada 7 credits, dan panggilan yang disajikan oleh ambilan biasa membayar 2 credits asas. robots.txt dihormati pada laluan yang ditingkatkan juga, dipadankan dengan token produk CrawlForge yang sama, dan tiada pertahanan bot dikendalikan secara berbeza daripada yang sudah dilakukan stealth_mode. Peningkatan ini menjimatkan satu perjalanan; ia tidak menjanjikan halaman itu: dinding yang turut menolak paparan stealth kembali sebagai sekatan jujur yang membawa escalated: true, tidak dicaj, dan kes yang paling boleh diharap ialah halaman yang sekadar memerlukan JavaScript untuk dipaparkan.

  • escalate (boolean, lalai false) dan escalate_engine (playwright atau camoufox, lalai playwright) pada scrape, pada MCP server dan API REST terhos sama sahaja: ambilan biasa sentiasa berjalan dahulu dan hanya keputusan disekat yang meningkat — halaman cabaran bernama, cengkerang kosong atau ruang letak pendek bertajuk ralat. markdown, html, rawHtml, text, links, metadata dan format highlights serta question berskop pertanyaan semuanya diperoleh daripada halaman yang dipaparkan, jadi respons yang ditingkatkan mempunyai bentuk yang sama seperti respons biasa dan tidak memerlukan panggilan stealth_mode yang berasingan
  • Kosnya: 2 credits asas, +1 apabila format highlights atau question berskop pertanyaan hadir, dan +5 hanya apabila peringkat stealth benar-benar berjalan. Panggilan dengan escalate: true diunjurkan 7 dan dicaj 2 apabila ambilan biasa menyajikan halaman itu, jadi unjuran ialah siling dan bukan lantai; laluan yang dilarang robots.txt ditolak sebelum apa-apa diambil dan tidak dicaj, dan pada API REST terhos peringkat itu mengembalikan 503 dan tidak mencaj apa-apa apabila backend pelaksanaan CrawlForge tidak dikonfigurasikan; dinding yang turut menolak paparan stealth dikembalikan sebagai sekatan dengan escalated: true dan tidak dicaj
  • data membawa escalated setiap kali escalate: true dihantar, berserta stealth: { engine, vendor_detected } apabila paparan itu berjalan — vendor_detected menamakan vendor pertahanan bot yang ditemui oleh ambilan biasa (cloudflare, amazon, datadome, perimeterx, akamai, vercel) atau null bagi cengkerang kosong atau ruang letak ralat. Pada MCP server sahaja, hos yang menyekat sesuatu permintaan diingati selama 24 jam, jadi panggilan escalate: true berikutnya ke hos itu melangkau ambilan biasa yang pasti gagal dan menyatakannya dalam amaran; peningkatan ini menggunakan semula laluan stealth sedia ada, pintu pematuhan yang sama dan identiti CrawlForge yang sama, tanpa menambah sebarang pengelakan baharu

v5.8.0

Ciri

Handle hasil dan read_result

Hasil yang akan membanjiri konteks kini kembali sebagai pratonton dan handle. Sepuluh alat beroutput besar menerima max_inline_chars (lalai 40,000 aksara JSON); melebihinya, respons membawa preview, result_handle, total_chars, truncated: true dan expires_at, dan alat baharu read_result — yang ke-30, 1 credit — menghiris, mencari, menelusuri mengikut baris atau membaca laluan JSON daripada hasil tersimpan. Tiada apa-apa diambil semula dan, pada MCP server, tiada apa-apa meninggalkan mesin anda: storan adalah setempat, dengan TTL 1 jam.

  • max_inline_chars pada scrape, fetch_url, extract_content, crawl_deep, batch_scrape, stealth_mode scrape, scrape_with_actions, process_document, deep_research dan extract_embedded_state (1,000–10,000,000, lalai 40,000): melebihinya, data mengekalkan medan skalar peringkat atasnya berserta preview (max_inline_chars aksara pertama paparan teks — markdown bagi scrape, badan bagi fetch_url, JSON yang diformat bagi crawl_deep, batch_scrape dan deep_research), result_handle (res_ + UUID), total_chars, view, view_path, truncated: true, expires_at dan amaran yang menamakan read_result; extract_embedded_state tidak pernah dipotong tetapi tetap mengembalikan handle dengan truncated: false; respons ralat tidak pernah disimpan
  • read_result (1 credit, asas): { handle, operation: slice | search | lines | json_path } — slice mengembalikan offset, length, text dan has_more (lalai 10,000 aksara); search ialah padanan subrentetan literal tanpa mengira huruf besar kecil, bukan regex, mengembalikan sehingga max_matches (1–100, lalai 20) padanan dengan offset, length dan 200 aksara konteks di kedua-dua belah, berserta total_matches dan truncated; lines mengembalikan first_line, line_count, total_lines, char_offset, lines dan has_more (lalai 200 baris, had 5,000); json_path mengembalikan path, value dan value_chars, atau value: null dengan preview dan amaran untuk menyempitkan laluan apabila nilai melebihi max_inline_chars; handle yang tidak dikenali atau luput ialah 404 RESULT_NOT_FOUND dan tidak dibilkan
  • Di mana hasil berada: pada MCP server, storan setempat di bawah ~/.crawlforge/results/ dengan TTL 1 jam dan LRU 200 MB, tiada apa-apa dimuat naik; pada API REST, nilai setiap akaun dengan TTL 1 jam, hanya boleh dibaca oleh akaun yang menciptanya; hasil tersimpan batch_scrape berkongsi storan yang sama dan get_batch_results tidak berubah; kiraan alat ialah 30 pada kedua-dua permukaan

v5.7.0

Ciri

Scrape berskop pertanyaan: highlights dan question

scrape mendapat dua format yang membawa pertanyaan: highlights mengembalikan ayat, baris jadual dan blok kod yang sepadan dengannya, dan question mengembalikan jawapan yang dibina daripadanya. Kedua-duanya ekstraktif secara lalai — teks halaman kata demi kata dengan ofset ke dalam markdown panggilan yang sama, tanpa model dalam laluan — dengan 1 credit di atas scrape, tidak seperti alat ambilan yang meringkaskan, memparafrasakan halaman dan mereka apa yang tidak dijumpainya. Mod model adalah pilihan, dilabel dan dicaj berasingan, dengan semakan pengasasan pada setiap nombor dan kata nama khas.

  • highlights: tambah { "type": "highlights", "query": "…" } ke dalam formats dan dapatkan sehingga max_highlights (1–50, lalai 10) unit yang disusun mengikut BM25 dengan tambahan pemberat frasa dan tajuk, setiap satu dengan text, kind (sentence, table_row atau code_block), offset, length dan score — offset dan length merujuk kepada format markdown panggilan yang sama, jadi markdown.slice(offset, offset + length) === text
  • question: tambah { "type": "question", "question": "…" } dan dapatkan answer.text yang disusun daripada bukti terbaik dengan grounded: true dan sehingga 5 unit evidence; mode: "model" adalah pilihan dan membenarkan model mensintesis jawapan (Ollama dahulu, kemudian kunci OpenAI atau Anthropic di sisi pelayan, kemudian sampling MCP) atau memilih antara calon highlights, dan semakan pengasasan menandakan jawapan sebagai grounded: false dengan amaran jika mana-mana nombor atau kata nama khas di dalamnya tiada dalam bukti
  • Harga dan pariti: scrape kekal 2 credits; format highlights atau question menambah 1 credit sekali setiap panggilan, mode: "model" menambah 3 lagi, dan apabila tiada laluan model wujud pelayan berundur kepada ekstraktif, memberi amaran dan mengecaj harga ekstraktif sahaja; API REST menyokong kedua-dua format dalam mod ekstraktif dan menolak mode: "model" dengan 400 UNSUPPORTED_FORMAT tanpa sebarang caj; scrape yang markdownnya melebihi 40,000 aksara kini mencadangkan highlights

v5.6.11

Penambahbaikan

Enam pusingan regresi langsung, pemilihan alat yang lebih bijak, keputusan senyap yang jujur

Baris 5.6: semua yang ditemui enam pusingan penuh merentas 29 alat dan 18 templat terhadap tapak sebenar, pelayan yang memandu model ke alat yang betul pada kali pertama, pelayar senyap yang melaporkan halaman ralat sebagai ralat, dan dalam 5.6.11 scrape biasa yang melaporkan halaman cabaran, cangkerang kosong atau halaman ralat pengganti sebagai kegagalan sambil menamakan vendornya — keputusan yang sama dikembalikan API REST — berserta laporan penggunaan yang membawa versi klien sebenar dan teks yang ditaip ke dalam borang disamarkan sebelum meninggalkan mesin anda.

  • Jadual data kekal dan kegagalan senyap hilang: extract_content, process_document dan scrape_with_actions melampirkan semula jadual yang digugurkan Readability; scrape mengekalkan pautan sebaris pada CSS bersarang asli; pengekstrakan LLM menjawab null dan bukannya mereka nilai; pengambilan halaman tidak menghantar Accept-Language; setiap laluan pengambilan menyahkod halaman mengikut set aksara yang diisytiharkan, jadi kakaku.com tidak lagi tiba sebagai mojibake; ejen menyemak setiap versi, tarikh dan angka dalam jawapannya terhadap sumber dan menamakan yang tidak dapat disokongnya; analyze_content memecah bahasa Hindi, Finland dan Jepun kepada perkataan
  • Keputusan jujur pada setiap laluan: stealth_mode melaporkan cabaran Cloudflare, DataDome, PerimeterX dan Vercel sebagai sekatan, dan halaman ralat HTTP atau sekatan lembut bertajuk sebagai kegagalan berserta kod statusnya, menunggu sehingga 8 saat untuk dokumen kosong dipaparkan, mengekalkan konteks Chromium sepanjang pengambilan camoufox dan menyamar perkakasan di dalam Web Worker juga; scrape_with_actions menilai dokumen tempat rantaiannya berakhir; dan sejak 5.6.11 scrape biasa turut sama: dinding Cloudflare, Amazon, DataDome, PerimeterX, Akamai atau Vercel, apa pun kod HTTPnya, cangkerang JavaScript kosong atau halaman ralat pendek ialah success: false dengan blocked.vendor dan langkah seterusnya yang menamakan stealth_mode, pada pelayan MCP dan API REST sekali gus
  • crawl_deep mengambil URL dengan garis miring hujungnya (globalpetrolprices.com menjawab 404 kepada bentuk yang dipotong); deep_research mencari bentuk 12 perkataan bagi topik yang panjang (12 sumber di mana perenggan itu menemui satu); localization menetapkan Accept-Language mengikut negara yang dikonfigurasi; templat shopify-product membaca JSON-LD halaman produk apabila kedai menolak titik akhir JSONnya; reddit_search menerangkan keputusan kosong Arctic Shift; laporan penggunaan membawa versi klien sebenar, dan teks yang ditaip scrape_with_actions ke dalam borang disamarkan sebelum laporan penggunaan meninggalkan mesin anda
  • Pemilihan alat: arahan pelayan ialah tangga keputusan dengan kos kredit dan peraturan jangan ambil semula, setiap penerangan alat menyatakan bila tidak perlu menggunakannya dan kosnya, scrape, search_web dan deep_research dimuatkan pada permulaan sesi, dan setiap keputusan ralat berakhir dengan langkah seterusnya yang menamakan alat untuk dicuba dan bukannya cubaan semula

v5.5.9

Penambahbaikan

Ketepatan pengekstrakan dan pengukuhan keselamatan

Barisan 5.5: carian komen merentas seluruh Reddit, localization yang kini benar-benar menjalankan carian, dan satu siri panjang pembetulan ketepatan — termasuk contoh kod yang selama ini hilang secara senyap daripada halaman dokumentasi.

  • reddit_search mencari komen merentas seluruh Reddit, dan localize_search kini menjalankan carian itu
  • Setiap nombor daripada LLM disemak terhadap sumber halaman, atau dikembalikan sebagai null berserta sebabnya
  • Perlindungan SSRF pada setiap laluan pelayar dan webhook, dan teks halaman dipagari sebelum sampai kepada model

v5.4.3

Ciri

extract_embedded_state — alat ke-29

Pengekstrakan Tahap 2: membaca keadaan JavaScript yang sedia ada pada halaman, bukan HTML yang dipaparkan. Satu permintaan, nilai tepat, tanpa LLM. Keluaran yang sama membetulkan sembilan kecacatan yang ditemui semasa menguji kesemua 29 alat pada tapak sebenar.

  • extract_embedded_state baharu (2 credits) membaca __NEXT_DATA__, muatan React Server Component, Nuxt dan Apollo
  • extract_metadata mendapat penapis json_ld_types yang turut memadankan subjenis
  • Lima operasi track_changes yang dahulunya hanya mengembalikan ralat kini berfungsi

v5.3.1

Penambahbaikan

Satu identiti perangkak, robots.txt pada setiap laluan

Kerja pematuhan dan identiti: setiap alat yang membuat permintaan menyemak robots.txt, permintaan yang ditolak tidak dikenakan bayaran, dan permintaan keluar ditandatangani supaya sesuatu tapak boleh mengesahkan perangkakan itu benar-benar daripada CrawlForge.

  • Setiap alat yang membuat permintaan menyemak robots.txt, termasuk dua laluan stealth yang dahulunya terlepas
  • Permintaan keluar ditandatangani mengikut RFC 9421 (Web Bot Auth), dengan direktori kunci yang diterbitkan
  • Penolakan atas sebab pematuhan adalah percuma — ia tidak lagi menggunakan credits

v5.2.9

Ciri

Templat Shopify dan pakej pengekstrak berkongsi

Templat shopify-product yang membaca JSON kedai itu sendiri dan bukan menghurai halaman yang dipaparkan, sokongan Ollama jarak jauh, dan pengekstrak templat dipisahkan ke pakej npm sendiri supaya kedua-dua permukaan CrawlForge menggunakan satu pelaksanaan.

  • Templat shopify-product: harga tepat, harga perbandingan dan stok setiap varian, tanpa menghurai HTML
  • track_changes menilai perubahan harga yang sebenar, bukan berapa banyak ruang halaman yang berubah
  • Ollama didaftarkan sebagai penyedia sebenar, memilih model terbaik yang dipasang

v5.1.0

Ciri

reddit_search — alat ke-28

Carian Reddit yang sebenar, walaupun reddit.com menyekat setiap laluan langsung yang boleh diambil CrawlForge. Alat ini tidak pernah menyentuh reddit.com; ia menanyakan arkib komuniti sebaliknya. Ia percuma digunakan dan tidak memerlukan kelayakan.

  • reddit_search (2 credits): carian kata kunci pada kiriman dan komen, serta keseluruhan pokok perbualan
  • Disokong oleh arkib Arctic Shift dan PullPush, dengan satu cubaan semula terbatas apabila salah satunya sibuk
  • Keputusan dinormalkan kepada permalink sebenar dan tarikh ISO, berserta nota kesegaran arkib

v5.0.5

Ciri

v5.0 — penerimaan spesifikasi MCP dan rombakan keselamatan

Keluaran utama: pengukuhan SSRF, OAuth, rahsia dan pengebilan, 52 pembetulan ketepatan termasuk crawl_deep yang ditulis semula, pengangkutan streamable-HTTP yang dibina semula, dan ciri spesifikasi MCP yang mula dijangka oleh klien.

  • Output berstruktur (outputSchema) dan tugas tak segerak pada alat yang berjalan lama
  • CRAWLFORGE_TOOLS dan CRAWLFORGE_TOOL_GROUPS mendedahkan sebahagian alat sahaja untuk mengurangkan konteks
  • Sifar kerentanan npm audit, dan aras minimum Node dinaikkan kepada 20.16

03v4.x

Versi 4

v4.10.0

Penambahbaikan

Klien dipandu ke CrawlForge untuk kerja web

Pelayan kini menghantar instructions MCP yang memberitahu mana-mana klien supaya mengutamakan alat CrawlForge berbanding carian web terbina dalamnya. Ia panduan, bukan penguatkuasaan — sebuah MCP server tidak boleh mematikan alat terbina klien.

  • instructions MCP peringkat pelayan sampai kepada setiap klien pada pelancaran berikutnya, tanpa pemasangan semula
  • Empat perihalan alat diperkukuh di tempat model membacanya, dalam tools/list
  • serp_rank memulangkan senarai sepuluh teratas organik penuh bersama kedudukan domain sasaran

v4.9.0

Ciri

serp_rank — kedudukan organik Google yang sebenar

Alat ke-27. Ia melaporkan kedudukan sebenar sesuatu domain dalam keputusan organik Google bagi sesuatu kata kunci — kedudukan yang tidak dapat diberikan oleh API carian — disokong DataForSEO dan dibilkan kepada akaun anda sendiri.

  • serp_rank (5 credits) memulangkan kedudukan terbaik, URL yang menduduki kedudukan itu, dan setiap kedudukan yang dipegang
  • Tidak pernah mereka-reka kedudukan: ia melaporkan configured:false apabila DataForSEO tidak disediakan
  • Pengebilan diperkukuh — panggilan tanpa kos tidak menghasilkan acara penggunaan, dan ralat dibil separuh

v4.8.1

Ciri

Agent Skills, SSRF yang dikuatkuasakan, pemantauan berjadual

Claude Agent Skills yang mengaktifkan sendiri, dua kawalan keselamatan yang diiklankan tetapi sebenarnya tidak berfungsi kini dijadikan nyata, dan pemantauan perubahan yang benar-benar berjadual.

  • Tujuh Claude Agent Skills dengan perihalan yang cukup untuk mengaktifkannya secara automatik
  • SSRF dikuatkuasakan pada laluan scraping sebenar, disahkan pada permintaan awal dan setiap lompatan ubah hala
  • Pemantau berjadual track_changes kekal dan memulihkan garis dasarnya selepas dimulakan semula