captchaforge 0.2.40

Captcha detection and solving for Firefox and BiDi-driven browsers. Detection, vendor solver scaffolding, trusted cross-origin click delivery into nested OOPIFs, and stealth personas are implemented and tested; broad live-vendor solve rates are not yet benchmarked.
Documentation
# tests/vendors/arkose.toml: Arkose Labs / FunCaptcha

[vendor]
name = "arkose"
display_name = "Arkose Labs / FunCaptcha"
captcha_type = "custom:arkose"
api_url = "https://client-api.arkoselabs.com/v2/api.js"
public_test_sitekeys = []  # Arkose does not publish auto-pass test keys.

[positives]
sample_tokens = [
  "abc1234567890.abcdefghij.abcdefghijabcdefghijabcdefghijabcdefghij.fingerprintvaluehere|r=us-west-1|metabgclr=transparent",
]

[negatives]
decoy_tokens = ["", "DUMMY", "fail", "ok"]

[evasions]
inputs = [
  { token = "abc", classify = "decoy" },
  { token = "|r=us-west-1|", classify = "decoy" },
]

[cross_file]
scenario = "token_capture_and_replay"

[cve_replay]
cases = [
  { id = "ARKOSE-EMPTY-2024", description = "Empty token", token = "", expect = "decoy" },
]

[property]
min_length_for_plausible = 30
runs = 10000

[differential]
agreement_target = 0.90
[[differential.consensus]]
token = "abc1234567890.real_shape_arkose_token_for_consensus.padding|r=us-west-1"
verdict = "plausible"
[[differential.consensus]]
token = "fail"
verdict = "decoy"

[perf]
budget_us_per_classify = 10.0
budget_us_per_solve_path = 500000.0

[scale]
batch_size = 100000
budget_seconds = 5.0

[e2e_cli]
detector_class = "Custom"
expected_solve_methods = ["BehavioralBypass", "VisionLLM"]
forbidden_methods = []