crawlberg 1.10.2 → 1.11.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6bdc85cadb6e27d6ef2c9a49ffe2bd5d74192ea18f29b05cfade4f1c5735e99e
4
- data.tar.gz: 83f3203821514f3e5f31996659d1148e2b1db4e6dd268e1ed577e8fa9668f1fa
3
+ metadata.gz: 67ea86fd053651445f70e913780834e4c2a660960ce4cf31316e9a87a05669e6
4
+ data.tar.gz: a6494f969d6cb25801ee2b63d1a64f415d24722ce7611c8569b3da2c34097532
5
5
  SHA512:
6
- metadata.gz: 2e801d6b9d609afee9735bce861b20b141bff229b68ca9b72705eaa0432f808765a92412684dd3c7e5e03e6edfc688c03bf147cbdf2f729e6b3af27965feffd5
7
- data.tar.gz: 5d65c8cf1d73c7cf395cab0f9d0a73be2305e7c50c2c58b8615ffb950e85d9e2018603c0a94723a6046113eea8ee888dd9c9a4cdb9e8831365174f0da37fe35f
6
+ metadata.gz: 5da6db4d33dbe01952a45649bba8d820f0222305aaa6902603ebcc54a74acbc59d946a4211fc63a53af14c4174415bcaf68ee3d43a133d125851633f8ff32213
7
+ data.tar.gz: 89b023052617d86df08df9416318babb35240ef2a6e79cb9c40a3488894b89ab8bf551c3df2b437e1021d1d37567e174807f5e72ea9082791bc653d41aa63700
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <!-- This file is auto-generated by alef — DO NOT EDIT. -->
2
- <!-- alef:hash:442342be79ebc6986eda548e4fe12a6ce7adfbf0ae84fde27ddcc064f25ff0be -->
2
+ <!-- alef:hash:fcb23a304253e2719260285609af11e93960b21fb56072d6816533f452223e9c -->
3
3
  <!-- To regenerate: alef readme -->
4
4
  <!-- To verify freshness: alef verify -->
5
5
 
@@ -100,14 +100,14 @@ gem install crawlberg
100
100
 
101
101
  ## Agent plugin
102
102
 
103
- The `crawlberg` plugin is available via the `xberg-io/plugins` marketplace.
103
+ The `crawlberg` plugin is available via the `xberg-io/crawlberg` marketplace.
104
104
 
105
105
  ```text
106
- /plugin marketplace add xberg-io/plugins
107
- /plugin install crawlberg@xberg
106
+ /plugin marketplace add xberg-io/crawlberg
107
+ /plugin install crawlberg@crawlberg
108
108
  ```
109
109
 
110
- Works with Claude Code, Codex, Cursor, Gemini CLI, Factory Droid, GitHub Copilot CLI, and opencode. See [the marketplace README](https://github.com/xberg-io/plugins) for harness-specific install instructions.
110
+ See [the plugin guide](https://github.com/xberg-io/crawlberg/blob/main/plugin/README.md) for all supported runtimes, CLI prerequisites and standalone public skills.
111
111
 
112
112
  ## Quick Start
113
113
 
@@ -105,14 +105,14 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
105
105
  dependencies = [
106
106
  "proc-macro2",
107
107
  "quote",
108
- "syn 3.0.6",
108
+ "syn 3.0.9",
109
109
  ]
110
110
 
111
111
  [[package]]
112
112
  name = "async-tungstenite"
113
- version = "0.32.1"
113
+ version = "0.35.0"
114
114
  source = "registry+https://github.com/rust-lang/crates.io-index"
115
- checksum = "8acc405d38be14342132609f06f02acaf825ddccfe76c4824a69281e0458ebd4"
115
+ checksum = "d6ab5b7664abf9ccae07576888c72bc93750c7090c1ff4ffee9317cc05d11618"
116
116
  dependencies = [
117
117
  "atomic-waker",
118
118
  "futures-core",
@@ -139,9 +139,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
139
139
 
140
140
  [[package]]
141
141
  name = "aws-lc-rs"
142
- version = "1.18.1"
142
+ version = "1.18.2"
143
143
  source = "registry+https://github.com/rust-lang/crates.io-index"
144
- checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e"
144
+ checksum = "faac5829c2b74c28f830747e7818ccfb684261b5f48a1118b1e2a13d36dfab13"
145
145
  dependencies = [
146
146
  "aws-lc-sys",
147
147
  "zeroize",
@@ -149,9 +149,9 @@ dependencies = [
149
149
 
150
150
  [[package]]
151
151
  name = "aws-lc-sys"
152
- version = "0.45.0"
152
+ version = "0.46.0"
153
153
  source = "registry+https://github.com/rust-lang/crates.io-index"
154
- checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27"
154
+ checksum = "f1622d8446a2d4b2ce0c7eefc73dd43a99779028d5ee5c2dd8073a658ba8a2bc"
155
155
  dependencies = [
156
156
  "cc",
157
157
  "cmake",
@@ -221,16 +221,7 @@ dependencies = [
221
221
  "cc",
222
222
  "cfg-if",
223
223
  "constant_time_eq",
224
- "cpufeatures 0.3.1",
225
- ]
226
-
227
- [[package]]
228
- name = "block-buffer"
229
- version = "0.10.4"
230
- source = "registry+https://github.com/rust-lang/crates.io-index"
231
- checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
232
- dependencies = [
233
- "generic-array",
224
+ "cpufeatures",
234
225
  ]
235
226
 
236
227
  [[package]]
@@ -289,9 +280,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
289
280
 
290
281
  [[package]]
291
282
  name = "cc"
292
- version = "1.6.0"
283
+ version = "1.8.0"
293
284
  source = "registry+https://github.com/rust-lang/crates.io-index"
294
- checksum = "f74872d07caf508b30a21f6836e7d7016a2eaf7d9ff4f48deaa58cd8a0407630"
285
+ checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838"
295
286
  dependencies = [
296
287
  "find-msvc-tools",
297
288
  "jobserver",
@@ -327,34 +318,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
327
318
  checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
328
319
  dependencies = [
329
320
  "cfg-if",
330
- "cpufeatures 0.3.1",
331
- "rand_core 0.10.1",
321
+ "cpufeatures",
322
+ "rand_core",
332
323
  ]
333
324
 
334
325
  [[package]]
335
- name = "chromiumoxide"
336
- version = "0.9.1"
326
+ name = "chardetng"
327
+ version = "1.0.0"
337
328
  source = "registry+https://github.com/rust-lang/crates.io-index"
338
- checksum = "26ed067eb6c1f660bdb87c05efb964421d2ca262bae0296cdfe38cf0cd949a3e"
329
+ checksum = "13de944a44b5064ee5d3a5ceccc49a41bfec50f2580e66f82e87703acdb88b53"
339
330
  dependencies = [
340
- "async-tungstenite",
341
- "base64 0.22.1",
342
- "chromiumoxide_cdp",
343
- "chromiumoxide_types",
344
- "dunce",
345
- "fnv",
346
- "futures",
347
- "futures-timer",
348
- "pin-project-lite",
349
- "reqwest",
350
- "serde",
351
- "serde_json",
352
- "thiserror 2.0.21",
353
- "tokio",
354
- "tracing",
355
- "url",
356
- "which",
357
- "windows-registry",
331
+ "cfg-if",
332
+ "encoding_rs",
333
+ "memchr",
358
334
  ]
359
335
 
360
336
  [[package]]
@@ -556,15 +532,6 @@ version = "1.0.0"
556
532
  source = "registry+https://github.com/rust-lang/crates.io-index"
557
533
  checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48"
558
534
 
559
- [[package]]
560
- name = "cpufeatures"
561
- version = "0.2.17"
562
- source = "registry+https://github.com/rust-lang/crates.io-index"
563
- checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
564
- dependencies = [
565
- "libc",
566
- ]
567
-
568
535
  [[package]]
569
536
  name = "cpufeatures"
570
537
  version = "0.3.1"
@@ -576,20 +543,23 @@ dependencies = [
576
543
 
577
544
  [[package]]
578
545
  name = "crawlberg"
579
- version = "1.10.2"
546
+ version = "1.11.0"
580
547
  source = "registry+https://github.com/rust-lang/crates.io-index"
581
- checksum = "de7772187c51e531fcf40756a70e9d2d64912cb3adcea2fc5ed82ef9f4bda142"
548
+ checksum = "56da73bf80601b5f5b163f981d8002c611146533bccb890763f93d1dc91bbc12"
582
549
  dependencies = [
583
550
  "ahash",
584
551
  "aho-corasick",
585
552
  "arc-swap",
586
553
  "astral-tl",
587
554
  "async-trait",
555
+ "async-tungstenite",
588
556
  "base64 0.23.1",
589
557
  "blake3",
590
558
  "bytes",
591
- "chromiumoxide",
559
+ "chardetng",
592
560
  "chrono",
561
+ "cookie_store",
562
+ "crawlberg-chromiumoxide",
593
563
  "crawlberg-robots",
594
564
  "dashmap",
595
565
  "dirs",
@@ -616,6 +586,7 @@ dependencies = [
616
586
  "opentelemetry",
617
587
  "opentelemetry-semantic-conventions",
618
588
  "percent-encoding",
589
+ "psl",
619
590
  "quick-xml",
620
591
  "regex",
621
592
  "regex-syntax",
@@ -640,9 +611,37 @@ dependencies = [
640
611
  "web-time",
641
612
  ]
642
613
 
614
+ [[package]]
615
+ name = "crawlberg-chromiumoxide"
616
+ version = "0.9.3"
617
+ source = "registry+https://github.com/rust-lang/crates.io-index"
618
+ checksum = "8add9abf085c5f95d7dfbde84b67e6b6f2fb95a0ca288c98a4e8ceae169d2d3f"
619
+ dependencies = [
620
+ "async-tungstenite",
621
+ "base64 0.22.1",
622
+ "chromiumoxide_cdp",
623
+ "chromiumoxide_types",
624
+ "dunce",
625
+ "fnv",
626
+ "futures",
627
+ "futures-timer",
628
+ "libc",
629
+ "pin-project-lite",
630
+ "reqwest",
631
+ "serde",
632
+ "serde_json",
633
+ "thiserror 2.0.21",
634
+ "tokio",
635
+ "tracing",
636
+ "url",
637
+ "which",
638
+ "windows-registry",
639
+ "windows-sys 0.61.2",
640
+ ]
641
+
643
642
  [[package]]
644
643
  name = "crawlberg-rb"
645
- version = "1.10.2"
644
+ version = "1.11.0"
646
645
  dependencies = [
647
646
  "crawlberg",
648
647
  "futures",
@@ -655,9 +654,9 @@ dependencies = [
655
654
 
656
655
  [[package]]
657
656
  name = "crawlberg-robots"
658
- version = "1.10.2"
657
+ version = "1.11.0"
659
658
  source = "registry+https://github.com/rust-lang/crates.io-index"
660
- checksum = "9d03618f7c8347091546ee5f4c497ea8b4f83e4dd2e66b5e4746ebf0a2cc1da9"
659
+ checksum = "403b147a1d91d3f3d5d20e1f4f8a6c92c34db944e322ed0f986e79162133eb3d"
661
660
 
662
661
  [[package]]
663
662
  name = "crc32fast"
@@ -680,16 +679,6 @@ version = "0.2.4"
680
679
  source = "registry+https://github.com/rust-lang/crates.io-index"
681
680
  checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
682
681
 
683
- [[package]]
684
- name = "crypto-common"
685
- version = "0.1.7"
686
- source = "registry+https://github.com/rust-lang/crates.io-index"
687
- checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
688
- dependencies = [
689
- "generic-array",
690
- "typenum",
691
- ]
692
-
693
682
  [[package]]
694
683
  name = "crypto-common"
695
684
  version = "0.2.2"
@@ -721,19 +710,9 @@ checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06"
721
710
 
722
711
  [[package]]
723
712
  name = "deranged"
724
- version = "0.5.8"
713
+ version = "0.5.9"
725
714
  source = "registry+https://github.com/rust-lang/crates.io-index"
726
- checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
727
-
728
- [[package]]
729
- name = "digest"
730
- version = "0.10.7"
731
- source = "registry+https://github.com/rust-lang/crates.io-index"
732
- checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
733
- dependencies = [
734
- "block-buffer 0.10.4",
735
- "crypto-common 0.1.7",
736
- ]
715
+ checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
737
716
 
738
717
  [[package]]
739
718
  name = "digest"
@@ -741,9 +720,9 @@ version = "0.11.3"
741
720
  source = "registry+https://github.com/rust-lang/crates.io-index"
742
721
  checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
743
722
  dependencies = [
744
- "block-buffer 0.12.1",
723
+ "block-buffer",
745
724
  "const-oid",
746
- "crypto-common 0.2.2",
725
+ "crypto-common",
747
726
  ]
748
727
 
749
728
  [[package]]
@@ -775,7 +754,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
775
754
  dependencies = [
776
755
  "proc-macro2",
777
756
  "quote",
778
- "syn 3.0.6",
757
+ "syn 3.0.9",
779
758
  ]
780
759
 
781
760
  [[package]]
@@ -795,9 +774,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
795
774
 
796
775
  [[package]]
797
776
  name = "either"
798
- version = "1.18.0"
777
+ version = "1.19.0"
799
778
  source = "registry+https://github.com/rust-lang/crates.io-index"
800
- checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34"
779
+ checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be"
801
780
 
802
781
  [[package]]
803
782
  name = "encoding_rs"
@@ -815,9 +794,9 @@ dependencies = [
815
794
 
816
795
  [[package]]
817
796
  name = "equivalent"
818
- version = "1.0.2"
797
+ version = "1.0.3"
819
798
  source = "registry+https://github.com/rust-lang/crates.io-index"
820
- checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
799
+ checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
821
800
 
822
801
  [[package]]
823
802
  name = "errno"
@@ -973,7 +952,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
973
952
  dependencies = [
974
953
  "proc-macro2",
975
954
  "quote",
976
- "syn 3.0.6",
955
+ "syn 3.0.9",
977
956
  ]
978
957
 
979
958
  [[package]]
@@ -1011,16 +990,6 @@ dependencies = [
1011
990
  "slab",
1012
991
  ]
1013
992
 
1014
- [[package]]
1015
- name = "generic-array"
1016
- version = "0.14.7"
1017
- source = "registry+https://github.com/rust-lang/crates.io-index"
1018
- checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1019
- dependencies = [
1020
- "typenum",
1021
- "version_check",
1022
- ]
1023
-
1024
993
  [[package]]
1025
994
  name = "getrandom"
1026
995
  version = "0.2.17"
@@ -1058,7 +1027,7 @@ dependencies = [
1058
1027
  "js-sys",
1059
1028
  "libc",
1060
1029
  "r-efi 6.0.0",
1061
- "rand_core 0.10.1",
1030
+ "rand_core",
1062
1031
  "wasm-bindgen",
1063
1032
  ]
1064
1033
 
@@ -1080,9 +1049,9 @@ checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b"
1080
1049
 
1081
1050
  [[package]]
1082
1051
  name = "h2"
1083
- version = "0.4.19"
1052
+ version = "0.4.20"
1084
1053
  source = "registry+https://github.com/rust-lang/crates.io-index"
1085
- checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16"
1054
+ checksum = "7d29020232d6aa3fb1daca64c1127cf662cf97f254ae16c18c05b8ab635fc118"
1086
1055
  dependencies = [
1087
1056
  "atomic-waker",
1088
1057
  "bytes",
@@ -1117,15 +1086,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1117
1086
 
1118
1087
  [[package]]
1119
1088
  name = "html-escape"
1120
- version = "0.2.15"
1089
+ version = "0.3.0"
1121
1090
  source = "registry+https://github.com/rust-lang/crates.io-index"
1122
- checksum = "c9356095b4b41197bba32173600e1582792cda618f65d12f68e2e77d273413c5"
1091
+ checksum = "491194d601b4fa9fac3c9571e014070a0ad1bc3392d1bc10419695196a8b3cc3"
1123
1092
 
1124
1093
  [[package]]
1125
1094
  name = "html-to-markdown-rs"
1126
- version = "3.17.2"
1095
+ version = "3.18.1"
1127
1096
  source = "registry+https://github.com/rust-lang/crates.io-index"
1128
- checksum = "ee5ad2da135929dd837dbbe626ce6ba3360b9e5bd11ab197048f9896a5c6846f"
1097
+ checksum = "36135ae2471a090d086837db2f4794dca3bf8ca0ba288b799a0bb85dd3f0acf0"
1129
1098
  dependencies = [
1130
1099
  "ahash",
1131
1100
  "astral-tl",
@@ -1212,9 +1181,9 @@ dependencies = [
1212
1181
 
1213
1182
  [[package]]
1214
1183
  name = "hyper"
1215
- version = "1.11.1"
1184
+ version = "1.12.0"
1216
1185
  source = "registry+https://github.com/rust-lang/crates.io-index"
1217
- checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43"
1186
+ checksum = "2c3e324da4c95177d6291d4c8730197c0d1822f8a9766814a4a44fa5ab797c9c"
1218
1187
  dependencies = [
1219
1188
  "atomic-waker",
1220
1189
  "bytes",
@@ -1641,9 +1610,9 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae"
1641
1610
 
1642
1611
  [[package]]
1643
1612
  name = "litrs"
1644
- version = "1.0.0"
1613
+ version = "1.0.1"
1645
1614
  source = "registry+https://github.com/rust-lang/crates.io-index"
1646
- checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
1615
+ checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70"
1647
1616
 
1648
1617
  [[package]]
1649
1618
  name = "lock_api"
@@ -1866,9 +1835,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
1866
1835
 
1867
1836
  [[package]]
1868
1837
  name = "opentelemetry"
1869
- version = "0.33.0"
1838
+ version = "0.33.1"
1870
1839
  source = "registry+https://github.com/rust-lang/crates.io-index"
1871
- checksum = "6cdb0b1b267eb9db3331b434ed9ddab10d50e280a9adf9d13e5233e2002b61b5"
1840
+ checksum = "8c1f1a6ac9c875a4941e4c7c085b61e8f4daa326de03b4701768c3491a6ad9ee"
1872
1841
  dependencies = [
1873
1842
  "futures-core",
1874
1843
  "futures-sink",
@@ -1880,9 +1849,9 @@ dependencies = [
1880
1849
 
1881
1850
  [[package]]
1882
1851
  name = "opentelemetry-semantic-conventions"
1883
- version = "0.33.0"
1852
+ version = "0.33.1"
1884
1853
  source = "registry+https://github.com/rust-lang/crates.io-index"
1885
- checksum = "d288b1e1bc3590052fbb8f0f635ef248dd9022cf1fbaeb6582b7ad6081a17b87"
1854
+ checksum = "7a3cf639fefd3e852869114f9925b578da6dd8e99281a2089bb0e773ead46962"
1886
1855
 
1887
1856
  [[package]]
1888
1857
  name = "option-ext"
@@ -2010,18 +1979,9 @@ dependencies = [
2010
1979
 
2011
1980
  [[package]]
2012
1981
  name = "powerfmt"
2013
- version = "0.2.0"
2014
- source = "registry+https://github.com/rust-lang/crates.io-index"
2015
- checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
2016
-
2017
- [[package]]
2018
- name = "ppv-lite86"
2019
- version = "0.2.21"
1982
+ version = "0.2.1"
2020
1983
  source = "registry+https://github.com/rust-lang/crates.io-index"
2021
- checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
2022
- dependencies = [
2023
- "zerocopy",
2024
- ]
1984
+ checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958"
2025
1985
 
2026
1986
  [[package]]
2027
1987
  name = "precomputed-hash"
@@ -2038,6 +1998,15 @@ dependencies = [
2038
1998
  "unicode-ident",
2039
1999
  ]
2040
2000
 
2001
+ [[package]]
2002
+ name = "psl"
2003
+ version = "2.1.241"
2004
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2005
+ checksum = "c7319b480e204d67e759cad7886178335d26324c7c8573c126cc9dfa7350d064"
2006
+ dependencies = [
2007
+ "psl-types",
2008
+ ]
2009
+
2041
2010
  [[package]]
2042
2011
  name = "psl-types"
2043
2012
  version = "2.0.11"
@@ -2105,7 +2074,7 @@ dependencies = [
2105
2074
  "bytes",
2106
2075
  "getrandom 0.4.3",
2107
2076
  "lru-slab",
2108
- "rand 0.10.3",
2077
+ "rand",
2109
2078
  "rand_pcg",
2110
2079
  "ring",
2111
2080
  "rustc-hash",
@@ -2153,16 +2122,6 @@ version = "6.0.0"
2153
2122
  source = "registry+https://github.com/rust-lang/crates.io-index"
2154
2123
  checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
2155
2124
 
2156
- [[package]]
2157
- name = "rand"
2158
- version = "0.9.5"
2159
- source = "registry+https://github.com/rust-lang/crates.io-index"
2160
- checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41"
2161
- dependencies = [
2162
- "rand_chacha",
2163
- "rand_core 0.9.5",
2164
- ]
2165
-
2166
2125
  [[package]]
2167
2126
  name = "rand"
2168
2127
  version = "0.10.3"
@@ -2171,26 +2130,7 @@ checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af"
2171
2130
  dependencies = [
2172
2131
  "chacha20",
2173
2132
  "getrandom 0.4.3",
2174
- "rand_core 0.10.1",
2175
- ]
2176
-
2177
- [[package]]
2178
- name = "rand_chacha"
2179
- version = "0.9.0"
2180
- source = "registry+https://github.com/rust-lang/crates.io-index"
2181
- checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
2182
- dependencies = [
2183
- "ppv-lite86",
2184
- "rand_core 0.9.5",
2185
- ]
2186
-
2187
- [[package]]
2188
- name = "rand_core"
2189
- version = "0.9.5"
2190
- source = "registry+https://github.com/rust-lang/crates.io-index"
2191
- checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
2192
- dependencies = [
2193
- "getrandom 0.3.4",
2133
+ "rand_core",
2194
2134
  ]
2195
2135
 
2196
2136
  [[package]]
@@ -2205,7 +2145,7 @@ version = "0.10.2"
2205
2145
  source = "registry+https://github.com/rust-lang/crates.io-index"
2206
2146
  checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
2207
2147
  dependencies = [
2208
- "rand_core 0.10.1",
2148
+ "rand_core",
2209
2149
  ]
2210
2150
 
2211
2151
  [[package]]
@@ -2370,9 +2310,9 @@ dependencies = [
2370
2310
 
2371
2311
  [[package]]
2372
2312
  name = "rustls"
2373
- version = "0.23.45"
2313
+ version = "0.23.46"
2374
2314
  source = "registry+https://github.com/rust-lang/crates.io-index"
2375
- checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634"
2315
+ checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
2376
2316
  dependencies = [
2377
2317
  "aws-lc-rs",
2378
2318
  "once_cell",
@@ -2384,9 +2324,9 @@ dependencies = [
2384
2324
 
2385
2325
  [[package]]
2386
2326
  name = "rustls-native-certs"
2387
- version = "0.8.4"
2327
+ version = "0.8.5"
2388
2328
  source = "registry+https://github.com/rust-lang/crates.io-index"
2389
- checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"
2329
+ checksum = "4a073f5dc7469f984c52ad2752b63b0807745133b6de880b7b64c1ac4c48aec4"
2390
2330
  dependencies = [
2391
2331
  "openssl-probe",
2392
2332
  "rustls-pki-types",
@@ -2535,14 +2475,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
2535
2475
  dependencies = [
2536
2476
  "proc-macro2",
2537
2477
  "quote",
2538
- "syn 3.0.6",
2478
+ "syn 3.0.9",
2539
2479
  ]
2540
2480
 
2541
2481
  [[package]]
2542
2482
  name = "serde_json"
2543
- version = "1.0.151"
2483
+ version = "1.0.154"
2544
2484
  source = "registry+https://github.com/rust-lang/crates.io-index"
2545
- checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
2485
+ checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6"
2546
2486
  dependencies = [
2547
2487
  "itoa",
2548
2488
  "memchr",
@@ -2553,33 +2493,33 @@ dependencies = [
2553
2493
 
2554
2494
  [[package]]
2555
2495
  name = "serde_spanned"
2556
- version = "1.1.1"
2496
+ version = "1.1.2"
2557
2497
  source = "registry+https://github.com/rust-lang/crates.io-index"
2558
- checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
2498
+ checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c"
2559
2499
  dependencies = [
2560
2500
  "serde_core",
2561
2501
  ]
2562
2502
 
2563
2503
  [[package]]
2564
2504
  name = "sha1"
2565
- version = "0.10.7"
2505
+ version = "0.11.0"
2566
2506
  source = "registry+https://github.com/rust-lang/crates.io-index"
2567
- checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8"
2507
+ checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214"
2568
2508
  dependencies = [
2569
2509
  "cfg-if",
2570
- "cpufeatures 0.2.17",
2571
- "digest 0.10.7",
2510
+ "cpufeatures",
2511
+ "digest",
2572
2512
  ]
2573
2513
 
2574
2514
  [[package]]
2575
2515
  name = "sha2"
2576
- version = "0.11.0"
2516
+ version = "0.11.1"
2577
2517
  source = "registry+https://github.com/rust-lang/crates.io-index"
2578
- checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
2518
+ checksum = "47d7069beb7d6ac7b9acd1039986e73443f24234f41074da099d6f994ac9ad19"
2579
2519
  dependencies = [
2580
2520
  "cfg-if",
2581
- "cpufeatures 0.3.1",
2582
- "digest 0.11.3",
2521
+ "cpufeatures",
2522
+ "digest",
2583
2523
  ]
2584
2524
 
2585
2525
  [[package]]
@@ -2646,9 +2586,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
2646
2586
 
2647
2587
  [[package]]
2648
2588
  name = "smallvec"
2649
- version = "1.16.2"
2589
+ version = "1.16.3"
2650
2590
  source = "registry+https://github.com/rust-lang/crates.io-index"
2651
- checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e"
2591
+ checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b"
2652
2592
 
2653
2593
  [[package]]
2654
2594
  name = "socket2"
@@ -2719,9 +2659,9 @@ dependencies = [
2719
2659
 
2720
2660
  [[package]]
2721
2661
  name = "syn"
2722
- version = "3.0.6"
2662
+ version = "3.0.9"
2723
2663
  source = "registry+https://github.com/rust-lang/crates.io-index"
2724
- checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
2664
+ checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
2725
2665
  dependencies = [
2726
2666
  "proc-macro2",
2727
2667
  "quote",
@@ -2745,7 +2685,7 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
2745
2685
  dependencies = [
2746
2686
  "proc-macro2",
2747
2687
  "quote",
2748
- "syn 3.0.6",
2688
+ "syn 3.0.9",
2749
2689
  ]
2750
2690
 
2751
2691
  [[package]]
@@ -2842,7 +2782,7 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
2842
2782
  dependencies = [
2843
2783
  "proc-macro2",
2844
2784
  "quote",
2845
- "syn 3.0.6",
2785
+ "syn 3.0.9",
2846
2786
  ]
2847
2787
 
2848
2788
  [[package]]
@@ -2903,9 +2843,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee"
2903
2843
 
2904
2844
  [[package]]
2905
2845
  name = "tokio"
2906
- version = "1.53.2"
2846
+ version = "1.53.3"
2907
2847
  source = "registry+https://github.com/rust-lang/crates.io-index"
2908
- checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044"
2848
+ checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e"
2909
2849
  dependencies = [
2910
2850
  "bytes",
2911
2851
  "libc",
@@ -2925,7 +2865,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
2925
2865
  dependencies = [
2926
2866
  "proc-macro2",
2927
2867
  "quote",
2928
- "syn 3.0.6",
2868
+ "syn 3.0.9",
2929
2869
  ]
2930
2870
 
2931
2871
  [[package]]
@@ -2963,9 +2903,9 @@ dependencies = [
2963
2903
 
2964
2904
  [[package]]
2965
2905
  name = "tokio-util"
2966
- version = "0.7.19"
2906
+ version = "0.7.20"
2967
2907
  source = "registry+https://github.com/rust-lang/crates.io-index"
2968
- checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52"
2908
+ checksum = "e464cf451ba96ebfc6f9b6542f17ee8b8956e33f1e40d9690624e59d7a7f8a4b"
2969
2909
  dependencies = [
2970
2910
  "bytes",
2971
2911
  "futures-core",
@@ -2977,9 +2917,9 @@ dependencies = [
2977
2917
 
2978
2918
  [[package]]
2979
2919
  name = "toml"
2980
- version = "1.1.6+spec-1.1.0"
2920
+ version = "1.1.8+spec-1.1.0"
2981
2921
  source = "registry+https://github.com/rust-lang/crates.io-index"
2982
- checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a"
2922
+ checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d"
2983
2923
  dependencies = [
2984
2924
  "indexmap",
2985
2925
  "serde_core",
@@ -2992,27 +2932,27 @@ dependencies = [
2992
2932
 
2993
2933
  [[package]]
2994
2934
  name = "toml_datetime"
2995
- version = "1.1.1+spec-1.1.0"
2935
+ version = "1.1.2+spec-1.1.0"
2996
2936
  source = "registry+https://github.com/rust-lang/crates.io-index"
2997
- checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
2937
+ checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053"
2998
2938
  dependencies = [
2999
2939
  "serde_core",
3000
2940
  ]
3001
2941
 
3002
2942
  [[package]]
3003
2943
  name = "toml_parser"
3004
- version = "1.1.3+spec-1.1.0"
2944
+ version = "1.1.5+spec-1.1.0"
3005
2945
  source = "registry+https://github.com/rust-lang/crates.io-index"
3006
- checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56"
2946
+ checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c"
3007
2947
  dependencies = [
3008
2948
  "winnow",
3009
2949
  ]
3010
2950
 
3011
2951
  [[package]]
3012
2952
  name = "toml_writer"
3013
- version = "1.1.2+spec-1.1.0"
2953
+ version = "1.1.3+spec-1.1.0"
3014
2954
  source = "registry+https://github.com/rust-lang/crates.io-index"
3015
- checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2"
2955
+ checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770"
3016
2956
 
3017
2957
  [[package]]
3018
2958
  name = "tower"
@@ -3105,19 +3045,18 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
3105
3045
 
3106
3046
  [[package]]
3107
3047
  name = "tungstenite"
3108
- version = "0.28.0"
3048
+ version = "0.30.0"
3109
3049
  source = "registry+https://github.com/rust-lang/crates.io-index"
3110
- checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442"
3050
+ checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22"
3111
3051
  dependencies = [
3112
3052
  "bytes",
3113
3053
  "data-encoding",
3114
3054
  "http",
3115
3055
  "httparse",
3116
3056
  "log",
3117
- "rand 0.9.5",
3057
+ "rand",
3118
3058
  "sha1",
3119
3059
  "thiserror 2.0.21",
3120
- "utf-8",
3121
3060
  ]
3122
3061
 
3123
3062
  [[package]]
@@ -3128,9 +3067,9 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
3128
3067
 
3129
3068
  [[package]]
3130
3069
  name = "unicode-ident"
3131
- version = "1.0.26"
3070
+ version = "1.0.27"
3132
3071
  source = "registry+https://github.com/rust-lang/crates.io-index"
3133
- checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
3072
+ checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
3134
3073
 
3135
3074
  [[package]]
3136
3075
  name = "untrusted"
@@ -3150,12 +3089,6 @@ dependencies = [
3150
3089
  "serde",
3151
3090
  ]
3152
3091
 
3153
- [[package]]
3154
- name = "utf-8"
3155
- version = "0.7.6"
3156
- source = "registry+https://github.com/rust-lang/crates.io-index"
3157
- checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3158
-
3159
3092
  [[package]]
3160
3093
  name = "utf8_iter"
3161
3094
  version = "1.0.4"
@@ -3180,9 +3113,9 @@ dependencies = [
3180
3113
 
3181
3114
  [[package]]
3182
3115
  name = "want"
3183
- version = "0.3.1"
3116
+ version = "0.3.2"
3184
3117
  source = "registry+https://github.com/rust-lang/crates.io-index"
3185
- checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
3118
+ checksum = "ec4cdd0dd910afe868b7ef477227d8d538b46b3075031afee8a9f2acb0a2ed0b"
3186
3119
  dependencies = [
3187
3120
  "try-lock",
3188
3121
  ]
@@ -3245,7 +3178,7 @@ dependencies = [
3245
3178
  "bumpalo",
3246
3179
  "proc-macro2",
3247
3180
  "quote",
3248
- "syn 3.0.6",
3181
+ "syn 3.0.9",
3249
3182
  "wasm-bindgen-shared",
3250
3183
  ]
3251
3184
 
@@ -3659,24 +3592,24 @@ checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71"
3659
3592
  dependencies = [
3660
3593
  "proc-macro2",
3661
3594
  "quote",
3662
- "syn 3.0.6",
3595
+ "syn 3.0.9",
3663
3596
  "synstructure",
3664
3597
  ]
3665
3598
 
3666
3599
  [[package]]
3667
3600
  name = "zerocopy"
3668
- version = "0.8.59"
3601
+ version = "0.8.63"
3669
3602
  source = "registry+https://github.com/rust-lang/crates.io-index"
3670
- checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb"
3603
+ checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8"
3671
3604
  dependencies = [
3672
3605
  "zerocopy-derive",
3673
3606
  ]
3674
3607
 
3675
3608
  [[package]]
3676
3609
  name = "zerocopy-derive"
3677
- version = "0.8.59"
3610
+ version = "0.8.63"
3678
3611
  source = "registry+https://github.com/rust-lang/crates.io-index"
3679
- checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82"
3612
+ checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f"
3680
3613
  dependencies = [
3681
3614
  "proc-macro2",
3682
3615
  "quote",
@@ -3700,15 +3633,15 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"
3700
3633
  dependencies = [
3701
3634
  "proc-macro2",
3702
3635
  "quote",
3703
- "syn 3.0.6",
3636
+ "syn 3.0.9",
3704
3637
  "synstructure",
3705
3638
  ]
3706
3639
 
3707
3640
  [[package]]
3708
3641
  name = "zeroize"
3709
- version = "1.9.0"
3642
+ version = "1.9.1"
3710
3643
  source = "registry+https://github.com/rust-lang/crates.io-index"
3711
- checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
3644
+ checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879"
3712
3645
 
3713
3646
  [[package]]
3714
3647
  name = "zerotrie"
@@ -3742,7 +3675,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da"
3742
3675
  dependencies = [
3743
3676
  "proc-macro2",
3744
3677
  "quote",
3745
- "syn 3.0.6",
3678
+ "syn 3.0.9",
3746
3679
  ]
3747
3680
 
3748
3681
  [[package]]
@@ -1,12 +1,13 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:13703ba46a2f05bef7de8bf9188d189e2f33e2098951b69db9046b02f2a46a37
2
+ # alef:hash:250b27ae33dca5fc53a5d4ba444b1759ca0977e9dbf24546d07b20cc13b55aee
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify
5
5
 
6
6
  [package]
7
7
  name = "crawlberg-rb"
8
- version = "1.10.2"
8
+ version = "1.11.0"
9
9
  edition = "2024"
10
+ authors = ["Na'aman Hirschfeld <naaman@xberg.io>", "Tobias Perlstein <tobias@xberg.io>"]
10
11
  license = "MIT"
11
12
  description = "High-performance web crawling engine"
12
13
  readme = false
@@ -22,7 +23,7 @@ path = "../src/lib.rs"
22
23
  crate-type = ["cdylib"]
23
24
 
24
25
  [dependencies]
25
- crawlberg = { version = "1.10.2", features = ["interact", "browser-chromiumoxide"] }
26
+ crawlberg = { version = "1.11.0", features = ["interact", "browser-chromiumoxide"] }
26
27
  futures = "0.3"
27
28
  magnus = "0.9"
28
29
  rb-sys = ">=0.9.130, <0.10"
@@ -31,11 +32,9 @@ serde_json = "1"
31
32
  tokio = { version = "1", features = ["rt-multi-thread"] }
32
33
 
33
34
  # This crate deliberately does not use `[lints]` / `workspace = true`: its C-ABI /
34
- # PyO3 / napi / ext-php-rs / NIF boundary requires `unsafe` code, and the workspace's
35
- # `[workspace.lints.rust]` sets `unsafe_code = "deny"` -- an all-or-nothing table that
36
- # would turn every such boundary into a compile error. The `[lints.clippy]` block below
37
- # instead carries the subset of the workspace's deny-by-default lint policy this crate
38
- # can actually satisfy. ~keep
35
+ # PyO3 / napi / ext-php-rs / NIF boundary requires `unsafe` code. Local lint tables
36
+ # avoid inheriting workspace policies that could reject these boundaries, and select
37
+ # the lints this binding can actually satisfy. ~keep
39
38
  [lints.clippy]
40
39
  all = { level = "warn", priority = -1 }
41
40
  dbg_macro = "deny"
@@ -1,5 +1,5 @@
1
1
  // This file is auto-generated by alef. DO NOT EDIT.
2
- // alef:hash:51d55e2247bdc2514829f3eaafb5c8524624f269469856210cf0950e6c206e7f
2
+ // alef:hash:2ec1fdc93f72b06b0d045fd1f6b6288fad256babb9754b0e89759ebc3fd4b1f8
3
3
  // Re-generate with: alef generate
4
4
  #![allow(dead_code, unused_imports, unused_variables)]
5
5
  #![allow(
@@ -1437,6 +1437,13 @@ pub struct ContentConfig {
1437
1437
  wrap_width: usize,
1438
1438
  include_document_structure: bool,
1439
1439
  extract_metadata: bool,
1440
+ strip_newlines: bool,
1441
+ bullets: String,
1442
+ list_indent_width: usize,
1443
+ strong_em_symbol: String,
1444
+ compact_tables: bool,
1445
+ keep_inline_images_in: Vec<String>,
1446
+ keep_hidden: bool,
1440
1447
  }
1441
1448
 
1442
1449
  unsafe impl IntoValueFromNative for ContentConfig {}
@@ -1605,6 +1612,69 @@ impl ContentConfig {
1605
1612
  })?,
1606
1613
  None => true,
1607
1614
  },
1615
+ strip_newlines: match kwargs.get(ruby.to_symbol("strip_newlines")) {
1616
+ Some(v) => bool::try_convert(v).map_err(|e| {
1617
+ magnus::Error::new(
1618
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1619
+ format!("invalid value for `strip_newlines`: {}", e),
1620
+ )
1621
+ })?,
1622
+ None => false,
1623
+ },
1624
+ bullets: match kwargs.get(ruby.to_symbol("bullets")) {
1625
+ Some(v) => String::try_convert(v).map_err(|e| {
1626
+ magnus::Error::new(
1627
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1628
+ format!("invalid value for `bullets`: {}", e),
1629
+ )
1630
+ })?,
1631
+ None => "-*+".to_string(),
1632
+ },
1633
+ list_indent_width: match kwargs.get(ruby.to_symbol("list_indent_width")) {
1634
+ Some(v) => usize::try_convert(v).map_err(|e| {
1635
+ magnus::Error::new(
1636
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1637
+ format!("invalid value for `list_indent_width`: {}", e),
1638
+ )
1639
+ })?,
1640
+ None => 2,
1641
+ },
1642
+ strong_em_symbol: match kwargs.get(ruby.to_symbol("strong_em_symbol")) {
1643
+ Some(v) => String::try_convert(v).map_err(|e| {
1644
+ magnus::Error::new(
1645
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1646
+ format!("invalid value for `strong_em_symbol`: {}", e),
1647
+ )
1648
+ })?,
1649
+ None => "*".to_string(),
1650
+ },
1651
+ compact_tables: match kwargs.get(ruby.to_symbol("compact_tables")) {
1652
+ Some(v) => bool::try_convert(v).map_err(|e| {
1653
+ magnus::Error::new(
1654
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1655
+ format!("invalid value for `compact_tables`: {}", e),
1656
+ )
1657
+ })?,
1658
+ None => false,
1659
+ },
1660
+ keep_inline_images_in: match kwargs.get(ruby.to_symbol("keep_inline_images_in")) {
1661
+ Some(v) => <Vec<String>>::try_convert(v).map_err(|e| {
1662
+ magnus::Error::new(
1663
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1664
+ format!("invalid value for `keep_inline_images_in`: {}", e),
1665
+ )
1666
+ })?,
1667
+ None => Default::default(),
1668
+ },
1669
+ keep_hidden: match kwargs.get(ruby.to_symbol("keep_hidden")) {
1670
+ Some(v) => bool::try_convert(v).map_err(|e| {
1671
+ magnus::Error::new(
1672
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
1673
+ format!("invalid value for `keep_hidden`: {}", e),
1674
+ )
1675
+ })?,
1676
+ None => false,
1677
+ },
1608
1678
  })
1609
1679
  }
1610
1680
 
@@ -1659,6 +1729,34 @@ impl ContentConfig {
1659
1729
  fn extract_metadata(&self) -> bool {
1660
1730
  self.extract_metadata
1661
1731
  }
1732
+
1733
+ fn strip_newlines(&self) -> bool {
1734
+ self.strip_newlines
1735
+ }
1736
+
1737
+ fn bullets(&self) -> String {
1738
+ self.bullets.clone()
1739
+ }
1740
+
1741
+ fn list_indent_width(&self) -> usize {
1742
+ self.list_indent_width
1743
+ }
1744
+
1745
+ fn strong_em_symbol(&self) -> String {
1746
+ self.strong_em_symbol.clone()
1747
+ }
1748
+
1749
+ fn compact_tables(&self) -> bool {
1750
+ self.compact_tables
1751
+ }
1752
+
1753
+ fn keep_inline_images_in(&self) -> Vec<String> {
1754
+ self.keep_inline_images_in.clone()
1755
+ }
1756
+
1757
+ fn keep_hidden(&self) -> bool {
1758
+ self.keep_hidden
1759
+ }
1662
1760
  }
1663
1761
 
1664
1762
  #[derive(Clone, serde::Serialize, serde::Deserialize)]
@@ -2102,7 +2200,7 @@ impl CrawlConfig {
2102
2200
  format!("invalid value for `dedup_include_query`: {}", e),
2103
2201
  )
2104
2202
  })?,
2105
- None => false,
2203
+ None => true,
2106
2204
  },
2107
2205
  strip_tracking_params: match kwargs.get(ruby.to_symbol("strip_tracking_params")) {
2108
2206
  Some(v) => bool::try_convert(v).map_err(|e| {
@@ -2946,6 +3044,7 @@ pub struct CrawlPageResult {
2946
3044
  noindex_detected: bool,
2947
3045
  nofollow_detected: bool,
2948
3046
  ssrf_refused_urls: Vec<String>,
3047
+ original_url: String,
2949
3048
  }
2950
3049
 
2951
3050
  unsafe impl IntoValueFromNative for CrawlPageResult {}
@@ -3234,6 +3333,15 @@ impl CrawlPageResult {
3234
3333
  })?,
3235
3334
  None => Default::default(),
3236
3335
  },
3336
+ original_url: match kwargs.get(ruby.to_symbol("original_url")) {
3337
+ Some(v) => String::try_convert(v).map_err(|e| {
3338
+ magnus::Error::new(
3339
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
3340
+ format!("invalid value for `original_url`: {}", e),
3341
+ )
3342
+ })?,
3343
+ None => Default::default(),
3344
+ },
3237
3345
  })
3238
3346
  }
3239
3347
 
@@ -3340,6 +3448,10 @@ impl CrawlPageResult {
3340
3448
  fn ssrf_refused_urls(&self) -> Vec<String> {
3341
3449
  self.ssrf_refused_urls.clone()
3342
3450
  }
3451
+
3452
+ fn original_url(&self) -> String {
3453
+ self.original_url.clone()
3454
+ }
3343
3455
  }
3344
3456
 
3345
3457
  #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
@@ -4757,7 +4869,7 @@ impl JsonLdEntry {
4757
4869
  }
4758
4870
  }
4759
4871
 
4760
- #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
4872
+ #[derive(Clone, Debug, serde::Serialize)]
4761
4873
  #[serde(default)]
4762
4874
  #[magnus::wrap(class = "Crawlberg::LinkInfo")]
4763
4875
  pub struct LinkInfo {
@@ -4766,6 +4878,7 @@ pub struct LinkInfo {
4766
4878
  link_type: LinkType,
4767
4879
  rel: Option<String>,
4768
4880
  nofollow: bool,
4881
+ original_url: String,
4769
4882
  }
4770
4883
 
4771
4884
  unsafe impl IntoValueFromNative for LinkInfo {}
@@ -4795,6 +4908,14 @@ impl magnus::TryConvert for LinkInfo {
4795
4908
  }
4796
4909
 
4797
4910
  unsafe impl TryConvertOwned for LinkInfo {}
4911
+ impl<'de> serde::Deserialize<'de> for LinkInfo {
4912
+ fn deserialize<D>(deserializer: D) -> ::core::result::Result<Self, D::Error>
4913
+ where
4914
+ D: serde::Deserializer<'de>,
4915
+ {
4916
+ <crawlberg::LinkInfo as serde::Deserialize>::deserialize(deserializer).map(Into::into)
4917
+ }
4918
+ }
4798
4919
 
4799
4920
  impl Default for LinkInfo {
4800
4921
  fn default() -> Self {
@@ -4854,6 +4975,15 @@ impl LinkInfo {
4854
4975
  })?,
4855
4976
  None => Default::default(),
4856
4977
  },
4978
+ original_url: match kwargs.get(ruby.to_symbol("original_url")) {
4979
+ Some(v) => String::try_convert(v).map_err(|e| {
4980
+ magnus::Error::new(
4981
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
4982
+ format!("invalid value for `original_url`: {}", e),
4983
+ )
4984
+ })?,
4985
+ None => Default::default(),
4986
+ },
4857
4987
  })
4858
4988
  }
4859
4989
 
@@ -4876,6 +5006,10 @@ impl LinkInfo {
4876
5006
  fn nofollow(&self) -> bool {
4877
5007
  self.nofollow
4878
5008
  }
5009
+
5010
+ fn original_url(&self) -> String {
5011
+ self.original_url.clone()
5012
+ }
4879
5013
  }
4880
5014
 
4881
5015
  #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
@@ -8117,6 +8251,13 @@ impl From<ContentConfig> for crawlberg::ContentConfig {
8117
8251
  wrap_width: val.wrap_width,
8118
8252
  include_document_structure: val.include_document_structure,
8119
8253
  extract_metadata: val.extract_metadata,
8254
+ strip_newlines: val.strip_newlines,
8255
+ bullets: val.bullets,
8256
+ list_indent_width: val.list_indent_width,
8257
+ strong_em_symbol: val.strong_em_symbol,
8258
+ compact_tables: val.compact_tables,
8259
+ keep_inline_images_in: val.keep_inline_images_in.into_iter().collect(),
8260
+ keep_hidden: val.keep_hidden,
8120
8261
  ..Default::default()
8121
8262
  }
8122
8263
  }
@@ -8138,6 +8279,13 @@ impl From<crawlberg::ContentConfig> for ContentConfig {
8138
8279
  wrap_width: val.wrap_width,
8139
8280
  include_document_structure: val.include_document_structure,
8140
8281
  extract_metadata: val.extract_metadata,
8282
+ strip_newlines: val.strip_newlines,
8283
+ bullets: val.bullets.to_string(),
8284
+ list_indent_width: val.list_indent_width,
8285
+ strong_em_symbol: val.strong_em_symbol.to_string(),
8286
+ compact_tables: val.compact_tables,
8287
+ keep_inline_images_in: val.keep_inline_images_in.into_iter().collect(),
8288
+ keep_hidden: val.keep_hidden,
8141
8289
  }
8142
8290
  }
8143
8291
  }
@@ -8334,6 +8482,7 @@ impl From<CrawlPageResult> for crawlberg::CrawlPageResult {
8334
8482
  noindex_detected: val.noindex_detected,
8335
8483
  nofollow_detected: val.nofollow_detected,
8336
8484
  ssrf_refused_urls: val.ssrf_refused_urls.into_iter().collect(),
8485
+ original_url: val.original_url,
8337
8486
  ..Default::default()
8338
8487
  }
8339
8488
  }
@@ -8369,6 +8518,7 @@ impl From<crawlberg::CrawlPageResult> for CrawlPageResult {
8369
8518
  noindex_detected: val.noindex_detected,
8370
8519
  nofollow_detected: val.nofollow_detected,
8371
8520
  ssrf_refused_urls: val.ssrf_refused_urls.into_iter().collect(),
8521
+ original_url: val.original_url.to_string(),
8372
8522
  }
8373
8523
  }
8374
8524
  }
@@ -8698,6 +8848,7 @@ impl From<LinkInfo> for crawlberg::LinkInfo {
8698
8848
  link_type: val.link_type.into(),
8699
8849
  rel: val.rel,
8700
8850
  nofollow: val.nofollow,
8851
+ original_url: val.original_url,
8701
8852
  ..Default::default()
8702
8853
  }
8703
8854
  }
@@ -8712,6 +8863,7 @@ impl From<crawlberg::LinkInfo> for LinkInfo {
8712
8863
  link_type: val.link_type.into(),
8713
8864
  rel: val.rel.map(|v| v.to_string()),
8714
8865
  nofollow: val.nofollow,
8866
+ original_url: val.original_url.to_string(),
8715
8867
  }
8716
8868
  }
8717
8869
  }
@@ -9787,6 +9939,23 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
9787
9939
 
9788
9940
  class.define_method("extract_metadata", method!(ContentConfig::extract_metadata, 0))?;
9789
9941
 
9942
+ class.define_method("strip_newlines", method!(ContentConfig::strip_newlines, 0))?;
9943
+
9944
+ class.define_method("bullets", method!(ContentConfig::bullets, 0))?;
9945
+
9946
+ class.define_method("list_indent_width", method!(ContentConfig::list_indent_width, 0))?;
9947
+
9948
+ class.define_method("strong_em_symbol", method!(ContentConfig::strong_em_symbol, 0))?;
9949
+
9950
+ class.define_method("compact_tables", method!(ContentConfig::compact_tables, 0))?;
9951
+
9952
+ class.define_method(
9953
+ "keep_inline_images_in",
9954
+ method!(ContentConfig::keep_inline_images_in, 0),
9955
+ )?;
9956
+
9957
+ class.define_method("keep_hidden", method!(ContentConfig::keep_hidden, 0))?;
9958
+
9790
9959
  let class = module.define_class("CookieInfo", ruby.class_object())?;
9791
9960
 
9792
9961
  class.define_singleton_method("new", function!(CookieInfo::new, -1))?;
@@ -9994,6 +10163,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
9994
10163
 
9995
10164
  class.define_method("ssrf_refused_urls", method!(CrawlPageResult::ssrf_refused_urls, 0))?;
9996
10165
 
10166
+ class.define_method("original_url", method!(CrawlPageResult::original_url, 0))?;
10167
+
9997
10168
  let class = module.define_class("CrawlResult", ruby.class_object())?;
9998
10169
 
9999
10170
  class.define_singleton_method("new", function!(CrawlResult::new, -1))?;
@@ -10169,6 +10340,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
10169
10340
 
10170
10341
  class.define_method("nofollow", method!(LinkInfo::nofollow, 0))?;
10171
10342
 
10343
+ class.define_method("original_url", method!(LinkInfo::original_url, 0))?;
10344
+
10172
10345
  let class = module.define_class("MapResult", ruby.class_object())?;
10173
10346
 
10174
10347
  class.define_singleton_method("new", function!(MapResult::new, -1))?;
@@ -1,10 +1,10 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:700d0a4f554a82a4d199e9c3c841556663485b9338869650cdd2738506c08763
2
+ # alef:hash:93297a4dfefbe27a3aa25aae988b939f292098b0ce5ca75dcbafac1118e3cdd6
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify
5
5
  # frozen_string_literal: true
6
6
 
7
7
  module Crawlberg
8
8
  ## The version string for this package.
9
- VERSION = "1.10.2"
9
+ VERSION = "1.11.0"
10
10
  end
data/sig/types.rbs CHANGED
@@ -1,5 +1,5 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:3beedc8e4020e7af03194ac67ead1f260c8777df76ad65e2d9682e60fc03dd3b
2
+ # alef:hash:ad470f62b746634fbd629f163e7bae4a88fb011bbde28d998e38ade4877adf3f
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify
5
5
 
@@ -128,8 +128,15 @@ def initialize: (?content: String, ?references: Array[CitationReference]) -> voi
128
128
  attr_reader wrap_width: Integer
129
129
  attr_reader include_document_structure: bool
130
130
  attr_reader extract_metadata: bool
131
+ attr_reader strip_newlines: bool
132
+ attr_reader bullets: String
133
+ attr_reader list_indent_width: Integer
134
+ attr_reader strong_em_symbol: String
135
+ attr_reader compact_tables: bool
136
+ attr_reader keep_inline_images_in: Array[String]
137
+ attr_reader keep_hidden: bool
131
138
 
132
- def initialize: (?output_format: String, ?preprocessing_preset: String, ?remove_navigation: bool, ?remove_forms: bool, ?strip_tags: Array[String], ?preserve_tags: Array[String], ?exclude_selectors: Array[String], ?skip_images: bool, ?max_depth: Integer, ?wrap: bool, ?wrap_width: Integer, ?include_document_structure: bool, ?extract_metadata: bool) -> void
139
+ def initialize: (?output_format: String, ?preprocessing_preset: String, ?remove_navigation: bool, ?remove_forms: bool, ?strip_tags: Array[String], ?preserve_tags: Array[String], ?exclude_selectors: Array[String], ?skip_images: bool, ?max_depth: Integer, ?wrap: bool, ?wrap_width: Integer, ?include_document_structure: bool, ?extract_metadata: bool, ?strip_newlines: bool, ?bullets: String, ?list_indent_width: Integer, ?strong_em_symbol: String, ?compact_tables: bool, ?keep_inline_images_in: Array[String], ?keep_hidden: bool) -> void
133
140
  end
134
141
 
135
142
  class CookieInfo
@@ -234,8 +241,9 @@ def batch_crawl_stream: (BatchCrawlStreamRequest req) -> Enumerator[CrawlEvent]
234
241
  attr_reader noindex_detected: bool
235
242
  attr_reader nofollow_detected: bool
236
243
  attr_reader ssrf_refused_urls: Array[String]
244
+ attr_reader original_url: String
237
245
 
238
- def initialize: (?url: String, ?normalized_url: String, ?status_code: Integer, ?content_type: String, ?html: String, ?body_size: Integer, ?metadata: PageMetadata, ?links: Array[LinkInfo], ?images: Array[ImageInfo], ?feeds: Array[FeedInfo], ?json_ld: Array[JsonLdEntry], ?depth: Integer, ?stayed_on_domain: bool, ?was_skipped: bool, ?is_pdf: bool, ?detected_charset: String, ?markdown: MarkdownResult, ?extracted_data: String, ?extraction_meta: ExtractionMeta, ?downloaded_document: DownloadedDocument, ?browser_used: bool, ?final_url: String, ?redirect_count: Integer, ?noindex_detected: bool, ?nofollow_detected: bool, ?ssrf_refused_urls: Array[String]) -> void
246
+ def initialize: (?url: String, ?normalized_url: String, ?status_code: Integer, ?content_type: String, ?html: String, ?body_size: Integer, ?metadata: PageMetadata, ?links: Array[LinkInfo], ?images: Array[ImageInfo], ?feeds: Array[FeedInfo], ?json_ld: Array[JsonLdEntry], ?depth: Integer, ?stayed_on_domain: bool, ?was_skipped: bool, ?is_pdf: bool, ?detected_charset: String, ?markdown: MarkdownResult, ?extracted_data: String, ?extraction_meta: ExtractionMeta, ?downloaded_document: DownloadedDocument, ?browser_used: bool, ?final_url: String, ?redirect_count: Integer, ?noindex_detected: bool, ?nofollow_detected: bool, ?ssrf_refused_urls: Array[String], ?original_url: String) -> void
239
247
  end
240
248
 
241
249
  class CrawlResult
@@ -358,8 +366,9 @@ def initialize: (?action_results: Array[ActionResult], ?final_html: String, ?fin
358
366
  attr_reader link_type: enum_LinkType
359
367
  attr_reader rel: String?
360
368
  attr_reader nofollow: bool
369
+ attr_reader original_url: String
361
370
 
362
- def initialize: (?url: String, ?text: String, ?link_type: enum_LinkType, ?rel: String, ?nofollow: bool) -> void
371
+ def initialize: (?url: String, ?text: String, ?link_type: enum_LinkType, ?rel: String, ?nofollow: bool, ?original_url: String) -> void
363
372
  end
364
373
 
365
374
  class MapResult
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crawlberg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.2
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
- - Xberg Team
7
+ - Na'aman Hirschfeld
8
+ - Tobias Perlstein
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2026-10-06 00:00:00.000000000 Z
12
+ date: 2026-10-15 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rb_sys
@@ -36,16 +37,18 @@ dependencies:
36
37
  requirements:
37
38
  - - "~>"
38
39
  - !ruby/object:Gem::Version
39
- version: '0.5'
40
+ version: '0.6'
40
41
  type: :runtime
41
42
  prerelease: false
42
43
  version_requirements: !ruby/object:Gem::Requirement
43
44
  requirements:
44
45
  - - "~>"
45
46
  - !ruby/object:Gem::Version
46
- version: '0.5'
47
+ version: '0.6'
47
48
  description: High-performance web crawling engine
48
49
  email:
50
+ - naaman@xberg.io
51
+ - tobias@xberg.io
49
52
  executables: []
50
53
  extensions:
51
54
  - ext/crawlberg_rb/native/extconf.rb