@wenathlan/saddle 1.8.17 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1005) hide show
  1. package/Dockerfile +1339 -0
  2. package/README.md +68 -22
  3. package/alternatives.ts +1218 -0
  4. package/biome.json +153 -0
  5. package/boards.json +1517 -0
  6. package/compute.ts +3144 -0
  7. package/cores.json +1801 -0
  8. package/dist/acquisition.d.ts +359 -0
  9. package/dist/acquisition.d.ts.map +1 -0
  10. package/dist/acquisition.js +629 -0
  11. package/dist/acquisition.js.map +1 -0
  12. package/dist/alternatives.d.ts +509 -0
  13. package/dist/alternatives.d.ts.map +1 -0
  14. package/dist/alternatives.js +951 -0
  15. package/dist/alternatives.js.map +1 -0
  16. package/dist/automation.d.ts +426 -0
  17. package/dist/automation.d.ts.map +1 -0
  18. package/dist/automation.js +561 -0
  19. package/dist/automation.js.map +1 -0
  20. package/dist/browser.d.ts +562 -0
  21. package/dist/browser.d.ts.map +1 -0
  22. package/dist/browser.js +1057 -0
  23. package/dist/browser.js.map +1 -0
  24. package/dist/capacitor.config.d.ts +13 -0
  25. package/dist/capacitor.config.d.ts.map +1 -0
  26. package/dist/capacitor.config.js +26 -0
  27. package/dist/capacitor.config.js.map +1 -0
  28. package/dist/cli.d.ts +17 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +111 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/communication.d.ts +192 -0
  33. package/dist/communication.d.ts.map +1 -0
  34. package/dist/communication.js +418 -0
  35. package/dist/communication.js.map +1 -0
  36. package/dist/compute.d.ts +1161 -0
  37. package/dist/compute.d.ts.map +1 -0
  38. package/dist/compute.js +2273 -0
  39. package/dist/compute.js.map +1 -0
  40. package/dist/distribution.d.ts +529 -0
  41. package/dist/distribution.d.ts.map +1 -0
  42. package/dist/distribution.js +811 -0
  43. package/dist/distribution.js.map +1 -0
  44. package/dist/execution.d.ts +530 -0
  45. package/dist/execution.d.ts.map +1 -0
  46. package/dist/execution.js +761 -0
  47. package/dist/execution.js.map +1 -0
  48. package/dist/format.d.ts +19 -0
  49. package/dist/format.d.ts.map +1 -0
  50. package/dist/format.js +60 -0
  51. package/dist/format.js.map +1 -0
  52. package/dist/foundation.d.ts +176 -0
  53. package/dist/foundation.d.ts.map +1 -0
  54. package/dist/foundation.js +309 -0
  55. package/dist/foundation.js.map +1 -0
  56. package/dist/index.d.ts +733 -122
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +1018 -122
  59. package/dist/index.js.map +1 -1
  60. package/dist/integration.d.ts +236 -0
  61. package/dist/integration.d.ts.map +1 -0
  62. package/dist/integration.js +236 -0
  63. package/dist/integration.js.map +1 -0
  64. package/dist/intelligence.d.ts +94 -0
  65. package/dist/intelligence.d.ts.map +1 -0
  66. package/dist/intelligence.js +145 -0
  67. package/dist/intelligence.js.map +1 -0
  68. package/dist/isolation.d.ts +129 -0
  69. package/dist/isolation.d.ts.map +1 -0
  70. package/dist/isolation.js +96 -0
  71. package/dist/isolation.js.map +1 -0
  72. package/dist/media.d.ts +344 -0
  73. package/dist/media.d.ts.map +1 -0
  74. package/dist/media.js +986 -0
  75. package/dist/media.js.map +1 -0
  76. package/dist/modes.d.ts +359 -0
  77. package/dist/modes.d.ts.map +1 -0
  78. package/dist/modes.js +134 -0
  79. package/dist/modes.js.map +1 -0
  80. package/dist/{library/public.d.ts → operations.d.ts} +15 -1
  81. package/dist/operations.d.ts.map +1 -0
  82. package/dist/{library/public.js → operations.js} +18 -7
  83. package/dist/operations.js.map +1 -0
  84. package/dist/orchestrator.d.ts +1339 -0
  85. package/dist/orchestrator.d.ts.map +1 -0
  86. package/dist/orchestrator.js +4308 -0
  87. package/dist/orchestrator.js.map +1 -0
  88. package/dist/performance.d.ts +416 -0
  89. package/dist/performance.d.ts.map +1 -0
  90. package/dist/performance.js +827 -0
  91. package/dist/performance.js.map +1 -0
  92. package/dist/quantum.d.ts +810 -0
  93. package/dist/quantum.d.ts.map +1 -0
  94. package/dist/quantum.js +2073 -0
  95. package/dist/quantum.js.map +1 -0
  96. package/dist/render.d.ts +381 -0
  97. package/dist/render.d.ts.map +1 -0
  98. package/dist/render.js +1073 -0
  99. package/dist/render.js.map +1 -0
  100. package/dist/scheduler.d.ts +596 -0
  101. package/dist/scheduler.d.ts.map +1 -0
  102. package/dist/scheduler.js +1259 -0
  103. package/dist/scheduler.js.map +1 -0
  104. package/dist/security.d.ts +501 -0
  105. package/dist/security.d.ts.map +1 -0
  106. package/dist/security.js +1170 -0
  107. package/dist/security.js.map +1 -0
  108. package/dist/server.d.ts +21 -0
  109. package/dist/server.d.ts.map +1 -0
  110. package/dist/{server/node.js → server.js} +16 -2
  111. package/dist/server.js.map +1 -0
  112. package/dist/tiers.d.ts +1002 -0
  113. package/dist/tiers.d.ts.map +1 -0
  114. package/dist/tiers.js +2165 -0
  115. package/dist/tiers.js.map +1 -0
  116. package/dist/virtual.d.ts +641 -0
  117. package/dist/virtual.d.ts.map +1 -0
  118. package/dist/virtual.js +1285 -0
  119. package/dist/virtual.js.map +1 -0
  120. package/dist/virtualcpu.d.ts +316 -0
  121. package/dist/virtualcpu.d.ts.map +1 -0
  122. package/dist/virtualcpu.js +1180 -0
  123. package/dist/virtualcpu.js.map +1 -0
  124. package/dist/virtualgpu.d.ts +345 -0
  125. package/dist/virtualgpu.d.ts.map +1 -0
  126. package/dist/virtualgpu.js +1000 -0
  127. package/dist/virtualgpu.js.map +1 -0
  128. package/dist/virtualization.d.ts +607 -0
  129. package/dist/virtualization.d.ts.map +1 -0
  130. package/dist/virtualization.js +1187 -0
  131. package/dist/virtualization.js.map +1 -0
  132. package/dist/virtualmemory.d.ts +818 -0
  133. package/dist/virtualmemory.d.ts.map +1 -0
  134. package/dist/virtualmemory.js +1796 -0
  135. package/dist/virtualmemory.js.map +1 -0
  136. package/dist/webscrape.d.ts +720 -0
  137. package/dist/webscrape.d.ts.map +1 -0
  138. package/dist/webscrape.js +2697 -0
  139. package/dist/webscrape.js.map +1 -0
  140. package/docker.config +769 -0
  141. package/docs/CONVERSA.txt +1523 -0
  142. package/docs/alternatives.md +499 -0
  143. package/docs/architecture-1.8.19.md +76 -0
  144. package/docs/architecture-1.8.19.mmd +33 -0
  145. package/docs/architecture-1.8.19.png +0 -0
  146. package/docs/architecture.md +355 -0
  147. package/docs/artifactavailability.md +6 -0
  148. package/docs/brancharchive-2026-08-18.md +18 -0
  149. package/docs/browser.md +7 -0
  150. package/docs/consolidation.md +70 -0
  151. package/docs/e2ugh-engine.md +528 -0
  152. package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
  153. package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
  154. package/docs/hardware.md +342 -0
  155. package/docs/optimization.md +126 -0
  156. package/docs/performance.md +499 -0
  157. package/docs/planning.1.8.18.md +94 -0
  158. package/docs/planning.1.8.19.md +49 -0
  159. package/docs/releasenotes-1.8.17.md +6 -0
  160. package/docs/releasenotes-1.8.18.md +32 -0
  161. package/docs/releasenotes-1.8.19.md +35 -0
  162. package/docs/research-1.8.18-isolation.md +43 -0
  163. package/docs/research-1.8.19-virtual-browser.md +27 -0
  164. package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
  165. package/docs/security.md +454 -0
  166. package/docs/todo-1.8.16.md +56 -1
  167. package/docs/todo-1.8.18.md +164 -0
  168. package/docs/todo-1.8.19.md +241 -0
  169. package/docs/viability.md +777 -0
  170. package/docs/virtualization.md +335 -0
  171. package/docs/web-duplicatecleanup.md +9 -0
  172. package/docs/web-ideas.md +106 -0
  173. package/docs/workflowimprovements-2026-08-19.md +70 -0
  174. package/gpumonitor.cpp +1543 -0
  175. package/gpus.json +2408 -0
  176. package/index.ts +1478 -0
  177. package/media.ts +1337 -0
  178. package/mttg.config +1549 -0
  179. package/orchestrator.ts +5462 -0
  180. package/package.json +304 -55
  181. package/passage.config +1331 -0
  182. package/performance.ts +1049 -0
  183. package/processors.json +2217 -0
  184. package/qemu.config +1062 -0
  185. package/qemubridge.py +1340 -0
  186. package/quantum.ts +2393 -0
  187. package/render.ts +1325 -0
  188. package/scheduler.ts +1600 -0
  189. package/security.ts +1449 -0
  190. package/tiers.ts +2871 -0
  191. package/tsconfig.json +29 -0
  192. package/virtualcpu.ts +1273 -0
  193. package/virtualgpu.ts +1181 -0
  194. package/virtualhardware.c +1011 -0
  195. package/virtualhardware.json +739 -0
  196. package/virtualization.ts +1628 -0
  197. package/virtualizationcore.cpp +4635 -0
  198. package/virtualmemory.ts +2303 -0
  199. package/vm.config.json +1910 -0
  200. package/{extension → web/extension}/manifest.json +1 -1
  201. package/web/readme.md +382 -0
  202. package/web/tsconfig.json +25 -0
  203. package/dist/adapters/forge.d.ts +0 -17
  204. package/dist/adapters/forge.d.ts.map +0 -1
  205. package/dist/adapters/forge.js +0 -19
  206. package/dist/adapters/forge.js.map +0 -1
  207. package/dist/adapters/forgejo.d.ts +0 -49
  208. package/dist/adapters/forgejo.d.ts.map +0 -1
  209. package/dist/adapters/forgejo.js +0 -8
  210. package/dist/adapters/forgejo.js.map +0 -1
  211. package/dist/adapters/github.d.ts +0 -12
  212. package/dist/adapters/github.d.ts.map +0 -1
  213. package/dist/adapters/github.js +0 -20
  214. package/dist/adapters/github.js.map +0 -1
  215. package/dist/adapters/gitlab.d.ts +0 -17
  216. package/dist/adapters/gitlab.d.ts.map +0 -1
  217. package/dist/adapters/gitlab.js +0 -10
  218. package/dist/adapters/gitlab.js.map +0 -1
  219. package/dist/adapters/huggingface.d.ts +0 -17
  220. package/dist/adapters/huggingface.d.ts.map +0 -1
  221. package/dist/adapters/huggingface.js +0 -6
  222. package/dist/adapters/huggingface.js.map +0 -1
  223. package/dist/adapters/socket.d.ts +0 -11
  224. package/dist/adapters/socket.d.ts.map +0 -1
  225. package/dist/adapters/socket.js +0 -17
  226. package/dist/adapters/socket.js.map +0 -1
  227. package/dist/adapters/transport.d.ts +0 -7
  228. package/dist/adapters/transport.d.ts.map +0 -1
  229. package/dist/adapters/transport.js +0 -36
  230. package/dist/adapters/transport.js.map +0 -1
  231. package/dist/ai/chunk.d.ts +0 -2
  232. package/dist/ai/chunk.d.ts.map +0 -1
  233. package/dist/ai/chunk.js +0 -36
  234. package/dist/ai/chunk.js.map +0 -1
  235. package/dist/ai/llmstxt.d.ts +0 -6
  236. package/dist/ai/llmstxt.d.ts.map +0 -1
  237. package/dist/ai/llmstxt.js +0 -12
  238. package/dist/ai/llmstxt.js.map +0 -1
  239. package/dist/ai/provenance.d.ts +0 -22
  240. package/dist/ai/provenance.d.ts.map +0 -1
  241. package/dist/ai/provenance.js +0 -25
  242. package/dist/ai/provenance.js.map +0 -1
  243. package/dist/ai/rag.d.ts +0 -26
  244. package/dist/ai/rag.d.ts.map +0 -1
  245. package/dist/ai/rag.js +0 -22
  246. package/dist/ai/rag.js.map +0 -1
  247. package/dist/ai/tokens.d.ts +0 -15
  248. package/dist/ai/tokens.d.ts.map +0 -1
  249. package/dist/ai/tokens.js +0 -9
  250. package/dist/ai/tokens.js.map +0 -1
  251. package/dist/api/auth.d.ts +0 -16
  252. package/dist/api/auth.d.ts.map +0 -1
  253. package/dist/api/auth.js +0 -19
  254. package/dist/api/auth.js.map +0 -1
  255. package/dist/api/contracts.d.ts +0 -28
  256. package/dist/api/contracts.d.ts.map +0 -1
  257. package/dist/api/contracts.js +0 -14
  258. package/dist/api/contracts.js.map +0 -1
  259. package/dist/api/control.d.ts +0 -10
  260. package/dist/api/control.d.ts.map +0 -1
  261. package/dist/api/control.js +0 -35
  262. package/dist/api/control.js.map +0 -1
  263. package/dist/api/http.d.ts +0 -7
  264. package/dist/api/http.d.ts.map +0 -1
  265. package/dist/api/http.js +0 -12
  266. package/dist/api/http.js.map +0 -1
  267. package/dist/api/rate.d.ts +0 -28
  268. package/dist/api/rate.d.ts.map +0 -1
  269. package/dist/api/rate.js +0 -36
  270. package/dist/api/rate.js.map +0 -1
  271. package/dist/api/security.d.ts +0 -12
  272. package/dist/api/security.d.ts.map +0 -1
  273. package/dist/api/security.js +0 -56
  274. package/dist/api/security.js.map +0 -1
  275. package/dist/api/service.d.ts +0 -5
  276. package/dist/api/service.d.ts.map +0 -1
  277. package/dist/api/service.js +0 -70
  278. package/dist/api/service.js.map +0 -1
  279. package/dist/apps/registry.d.ts +0 -33
  280. package/dist/apps/registry.d.ts.map +0 -1
  281. package/dist/apps/registry.js +0 -24
  282. package/dist/apps/registry.js.map +0 -1
  283. package/dist/binary/archive.d.ts +0 -27
  284. package/dist/binary/archive.d.ts.map +0 -1
  285. package/dist/binary/archive.js +0 -46
  286. package/dist/binary/archive.js.map +0 -1
  287. package/dist/binary/build.d.ts +0 -29
  288. package/dist/binary/build.d.ts.map +0 -1
  289. package/dist/binary/build.js +0 -17
  290. package/dist/binary/build.js.map +0 -1
  291. package/dist/binary/transform.d.ts +0 -70
  292. package/dist/binary/transform.d.ts.map +0 -1
  293. package/dist/binary/transform.js +0 -105
  294. package/dist/binary/transform.js.map +0 -1
  295. package/dist/bot/adapter.d.ts +0 -5
  296. package/dist/bot/adapter.d.ts.map +0 -1
  297. package/dist/bot/adapter.js +0 -11
  298. package/dist/bot/adapter.js.map +0 -1
  299. package/dist/bot/bot.d.ts +0 -28
  300. package/dist/bot/bot.d.ts.map +0 -1
  301. package/dist/bot/bot.js +0 -52
  302. package/dist/bot/bot.js.map +0 -1
  303. package/dist/bot/commands.d.ts +0 -8
  304. package/dist/bot/commands.d.ts.map +0 -1
  305. package/dist/bot/commands.js +0 -19
  306. package/dist/bot/commands.js.map +0 -1
  307. package/dist/bot/permissions.d.ts +0 -13
  308. package/dist/bot/permissions.d.ts.map +0 -1
  309. package/dist/bot/permissions.js +0 -16
  310. package/dist/bot/permissions.js.map +0 -1
  311. package/dist/browser/actions.d.ts +0 -33
  312. package/dist/browser/actions.d.ts.map +0 -1
  313. package/dist/browser/actions.js +0 -44
  314. package/dist/browser/actions.js.map +0 -1
  315. package/dist/browser/agent.d.ts +0 -21
  316. package/dist/browser/agent.d.ts.map +0 -1
  317. package/dist/browser/agent.js +0 -13
  318. package/dist/browser/agent.js.map +0 -1
  319. package/dist/browser/context.d.ts +0 -43
  320. package/dist/browser/context.d.ts.map +0 -1
  321. package/dist/browser/context.js +0 -54
  322. package/dist/browser/context.js.map +0 -1
  323. package/dist/browser/fingerprint.d.ts +0 -4
  324. package/dist/browser/fingerprint.d.ts.map +0 -1
  325. package/dist/browser/fingerprint.js +0 -12
  326. package/dist/browser/fingerprint.js.map +0 -1
  327. package/dist/browser/index.d.ts +0 -11
  328. package/dist/browser/index.d.ts.map +0 -1
  329. package/dist/browser/index.js +0 -11
  330. package/dist/browser/index.js.map +0 -1
  331. package/dist/browser/playwright.d.ts +0 -11
  332. package/dist/browser/playwright.d.ts.map +0 -1
  333. package/dist/browser/playwright.js +0 -24
  334. package/dist/browser/playwright.js.map +0 -1
  335. package/dist/browser/recorder.d.ts +0 -21
  336. package/dist/browser/recorder.d.ts.map +0 -1
  337. package/dist/browser/recorder.js +0 -58
  338. package/dist/browser/recorder.js.map +0 -1
  339. package/dist/browser/session.d.ts +0 -14
  340. package/dist/browser/session.d.ts.map +0 -1
  341. package/dist/browser/session.js +0 -21
  342. package/dist/browser/session.js.map +0 -1
  343. package/dist/browser/snapshot.d.ts +0 -69
  344. package/dist/browser/snapshot.d.ts.map +0 -1
  345. package/dist/browser/snapshot.js +0 -133
  346. package/dist/browser/snapshot.js.map +0 -1
  347. package/dist/captcha/contract.d.ts +0 -35
  348. package/dist/captcha/contract.d.ts.map +0 -1
  349. package/dist/captcha/contract.js +0 -17
  350. package/dist/captcha/contract.js.map +0 -1
  351. package/dist/captcha/evidence.d.ts +0 -10
  352. package/dist/captcha/evidence.d.ts.map +0 -1
  353. package/dist/captcha/evidence.js +0 -9
  354. package/dist/captcha/evidence.js.map +0 -1
  355. package/dist/captcha/guard.d.ts +0 -23
  356. package/dist/captcha/guard.d.ts.map +0 -1
  357. package/dist/captcha/guard.js +0 -12
  358. package/dist/captcha/guard.js.map +0 -1
  359. package/dist/cli/main.d.ts +0 -4
  360. package/dist/cli/main.d.ts.map +0 -1
  361. package/dist/cli/main.js +0 -46
  362. package/dist/cli/main.js.map +0 -1
  363. package/dist/core/errors.d.ts +0 -84
  364. package/dist/core/errors.d.ts.map +0 -1
  365. package/dist/core/errors.js +0 -54
  366. package/dist/core/errors.js.map +0 -1
  367. package/dist/core/events.d.ts +0 -9
  368. package/dist/core/events.d.ts.map +0 -1
  369. package/dist/core/events.js +0 -21
  370. package/dist/core/events.js.map +0 -1
  371. package/dist/core/hash.d.ts +0 -10
  372. package/dist/core/hash.d.ts.map +0 -1
  373. package/dist/core/hash.js +0 -82
  374. package/dist/core/hash.js.map +0 -1
  375. package/dist/core/ids.d.ts +0 -10
  376. package/dist/core/ids.d.ts.map +0 -1
  377. package/dist/core/ids.js +0 -15
  378. package/dist/core/ids.js.map +0 -1
  379. package/dist/delivery/manifest.d.ts +0 -35
  380. package/dist/delivery/manifest.d.ts.map +0 -1
  381. package/dist/delivery/manifest.js +0 -68
  382. package/dist/delivery/manifest.js.map +0 -1
  383. package/dist/deploy/index.d.ts +0 -6
  384. package/dist/deploy/index.d.ts.map +0 -1
  385. package/dist/deploy/index.js +0 -6
  386. package/dist/deploy/index.js.map +0 -1
  387. package/dist/dispatch/resumable.d.ts +0 -102
  388. package/dist/dispatch/resumable.d.ts.map +0 -1
  389. package/dist/dispatch/resumable.js +0 -64
  390. package/dist/dispatch/resumable.js.map +0 -1
  391. package/dist/dispatch/workflow.d.ts +0 -6
  392. package/dist/dispatch/workflow.d.ts.map +0 -1
  393. package/dist/dispatch/workflow.js +0 -37
  394. package/dist/dispatch/workflow.js.map +0 -1
  395. package/dist/domain/artifacts.d.ts +0 -12
  396. package/dist/domain/artifacts.d.ts.map +0 -1
  397. package/dist/domain/artifacts.js +0 -14
  398. package/dist/domain/artifacts.js.map +0 -1
  399. package/dist/domain/jobs.d.ts +0 -12
  400. package/dist/domain/jobs.d.ts.map +0 -1
  401. package/dist/domain/jobs.js +0 -20
  402. package/dist/domain/jobs.js.map +0 -1
  403. package/dist/domain/providers.d.ts +0 -10
  404. package/dist/domain/providers.d.ts.map +0 -1
  405. package/dist/domain/providers.js +0 -8
  406. package/dist/domain/providers.js.map +0 -1
  407. package/dist/domain/runtime.d.ts +0 -14
  408. package/dist/domain/runtime.d.ts.map +0 -1
  409. package/dist/domain/runtime.js +0 -10
  410. package/dist/domain/runtime.js.map +0 -1
  411. package/dist/domain/sessions.d.ts +0 -12
  412. package/dist/domain/sessions.d.ts.map +0 -1
  413. package/dist/domain/sessions.js +0 -57
  414. package/dist/domain/sessions.js.map +0 -1
  415. package/dist/examples/localjob.d.ts +0 -2
  416. package/dist/examples/localjob.d.ts.map +0 -1
  417. package/dist/examples/localjob.js.map +0 -1
  418. package/dist/examples/publicapi.d.ts +0 -2
  419. package/dist/examples/publicapi.d.ts.map +0 -1
  420. package/dist/examples/publicapi.js.map +0 -1
  421. package/dist/extension/build.d.ts +0 -9
  422. package/dist/extension/build.d.ts.map +0 -1
  423. package/dist/extension/build.js +0 -85
  424. package/dist/extension/build.js.map +0 -1
  425. package/dist/extension/content.d.ts +0 -6
  426. package/dist/extension/content.d.ts.map +0 -1
  427. package/dist/extension/content.js +0 -135
  428. package/dist/extension/content.js.map +0 -1
  429. package/dist/extension/index.d.ts +0 -7
  430. package/dist/extension/index.d.ts.map +0 -1
  431. package/dist/extension/index.js +0 -7
  432. package/dist/extension/index.js.map +0 -1
  433. package/dist/extension/pagebridge.d.ts +0 -6
  434. package/dist/extension/pagebridge.d.ts.map +0 -1
  435. package/dist/extension/pagebridge.js +0 -42
  436. package/dist/extension/pagebridge.js.map +0 -1
  437. package/dist/extension/permissions.d.ts +0 -26
  438. package/dist/extension/permissions.d.ts.map +0 -1
  439. package/dist/extension/permissions.js +0 -28
  440. package/dist/extension/permissions.js.map +0 -1
  441. package/dist/extension/popup.d.ts +0 -5
  442. package/dist/extension/popup.d.ts.map +0 -1
  443. package/dist/extension/popup.js +0 -26
  444. package/dist/extension/popup.js.map +0 -1
  445. package/dist/extension/protocol.d.ts +0 -58
  446. package/dist/extension/protocol.d.ts.map +0 -1
  447. package/dist/extension/protocol.js +0 -101
  448. package/dist/extension/protocol.js.map +0 -1
  449. package/dist/extension/serviceworker.d.ts +0 -25
  450. package/dist/extension/serviceworker.d.ts.map +0 -1
  451. package/dist/extension/serviceworker.js +0 -102
  452. package/dist/extension/serviceworker.js.map +0 -1
  453. package/dist/extension/worker.d.ts +0 -28
  454. package/dist/extension/worker.d.ts.map +0 -1
  455. package/dist/extension/worker.js +0 -22
  456. package/dist/extension/worker.js.map +0 -1
  457. package/dist/format/check.d.ts +0 -8
  458. package/dist/format/check.d.ts.map +0 -1
  459. package/dist/format/check.js +0 -38
  460. package/dist/format/check.js.map +0 -1
  461. package/dist/library/public.d.ts.map +0 -1
  462. package/dist/library/public.js.map +0 -1
  463. package/dist/mcp/browser.d.ts +0 -9
  464. package/dist/mcp/browser.d.ts.map +0 -1
  465. package/dist/mcp/browser.js +0 -13
  466. package/dist/mcp/browser.js.map +0 -1
  467. package/dist/mcp/server.d.ts +0 -35
  468. package/dist/mcp/server.d.ts.map +0 -1
  469. package/dist/mcp/server.js +0 -40
  470. package/dist/mcp/server.js.map +0 -1
  471. package/dist/mcp/transport.d.ts +0 -7
  472. package/dist/mcp/transport.d.ts.map +0 -1
  473. package/dist/mcp/transport.js +0 -17
  474. package/dist/mcp/transport.js.map +0 -1
  475. package/dist/memory/bridge.d.ts +0 -14
  476. package/dist/memory/bridge.d.ts.map +0 -1
  477. package/dist/memory/bridge.js +0 -16
  478. package/dist/memory/bridge.js.map +0 -1
  479. package/dist/memory/engine.d.ts +0 -38
  480. package/dist/memory/engine.d.ts.map +0 -1
  481. package/dist/memory/engine.js +0 -109
  482. package/dist/memory/engine.js.map +0 -1
  483. package/dist/memory/modes.d.ts +0 -43
  484. package/dist/memory/modes.d.ts.map +0 -1
  485. package/dist/memory/modes.js +0 -66
  486. package/dist/memory/modes.js.map +0 -1
  487. package/dist/memory/objects.d.ts +0 -21
  488. package/dist/memory/objects.d.ts.map +0 -1
  489. package/dist/memory/objects.js +0 -20
  490. package/dist/memory/objects.js.map +0 -1
  491. package/dist/memory/planner.d.ts +0 -66
  492. package/dist/memory/planner.d.ts.map +0 -1
  493. package/dist/memory/planner.js +0 -108
  494. package/dist/memory/planner.js.map +0 -1
  495. package/dist/memory/targets.d.ts +0 -78
  496. package/dist/memory/targets.d.ts.map +0 -1
  497. package/dist/memory/targets.js +0 -29
  498. package/dist/memory/targets.js.map +0 -1
  499. package/dist/memory/transforms.d.ts +0 -19
  500. package/dist/memory/transforms.d.ts.map +0 -1
  501. package/dist/memory/transforms.js +0 -14
  502. package/dist/memory/transforms.js.map +0 -1
  503. package/dist/modes/matrix.d.ts +0 -23
  504. package/dist/modes/matrix.d.ts.map +0 -1
  505. package/dist/modes/matrix.js +0 -18
  506. package/dist/modes/matrix.js.map +0 -1
  507. package/dist/modes/modes.d.ts +0 -33
  508. package/dist/modes/modes.d.ts.map +0 -1
  509. package/dist/modes/modes.js +0 -15
  510. package/dist/modes/modes.js.map +0 -1
  511. package/dist/modes/resolve.d.ts +0 -96
  512. package/dist/modes/resolve.d.ts.map +0 -1
  513. package/dist/modes/resolve.js +0 -48
  514. package/dist/modes/resolve.js.map +0 -1
  515. package/dist/observability/metrics.d.ts +0 -14
  516. package/dist/observability/metrics.d.ts.map +0 -1
  517. package/dist/observability/metrics.js +0 -18
  518. package/dist/observability/metrics.js.map +0 -1
  519. package/dist/packager/manifest.d.ts +0 -66
  520. package/dist/packager/manifest.d.ts.map +0 -1
  521. package/dist/packager/manifest.js +0 -94
  522. package/dist/packager/manifest.js.map +0 -1
  523. package/dist/packager/publish.d.ts +0 -51
  524. package/dist/packager/publish.d.ts.map +0 -1
  525. package/dist/packager/publish.js +0 -18
  526. package/dist/packager/publish.js.map +0 -1
  527. package/dist/packager/targetcli.d.ts +0 -7
  528. package/dist/packager/targetcli.d.ts.map +0 -1
  529. package/dist/packager/targetcli.js +0 -22
  530. package/dist/packager/targetcli.js.map +0 -1
  531. package/dist/persistence/adapter.d.ts +0 -5
  532. package/dist/persistence/adapter.d.ts.map +0 -1
  533. package/dist/persistence/adapter.js +0 -11
  534. package/dist/persistence/adapter.js.map +0 -1
  535. package/dist/persistence/drizzle.d.ts +0 -2
  536. package/dist/persistence/drizzle.d.ts.map +0 -1
  537. package/dist/persistence/drizzle.js +0 -12
  538. package/dist/persistence/drizzle.js.map +0 -1
  539. package/dist/persistence/memory.d.ts +0 -2
  540. package/dist/persistence/memory.d.ts.map +0 -1
  541. package/dist/persistence/memory.js +0 -27
  542. package/dist/persistence/memory.js.map +0 -1
  543. package/dist/persistence/migrations.d.ts +0 -19
  544. package/dist/persistence/migrations.d.ts.map +0 -1
  545. package/dist/persistence/migrations.js +0 -13
  546. package/dist/persistence/migrations.js.map +0 -1
  547. package/dist/persistence/prisma.d.ts +0 -2
  548. package/dist/persistence/prisma.d.ts.map +0 -1
  549. package/dist/persistence/prisma.js +0 -25
  550. package/dist/persistence/prisma.js.map +0 -1
  551. package/dist/persistence/schema.d.ts +0 -63
  552. package/dist/persistence/schema.d.ts.map +0 -1
  553. package/dist/persistence/schema.js +0 -28
  554. package/dist/persistence/schema.js.map +0 -1
  555. package/dist/persistence/sql.d.ts +0 -3
  556. package/dist/persistence/sql.d.ts.map +0 -1
  557. package/dist/persistence/sql.js +0 -37
  558. package/dist/persistence/sql.js.map +0 -1
  559. package/dist/protocol/blocks.d.ts +0 -10
  560. package/dist/protocol/blocks.d.ts.map +0 -1
  561. package/dist/protocol/blocks.js +0 -26
  562. package/dist/protocol/blocks.js.map +0 -1
  563. package/dist/protocol/json.d.ts +0 -6
  564. package/dist/protocol/json.d.ts.map +0 -1
  565. package/dist/protocol/json.js +0 -6
  566. package/dist/protocol/json.js.map +0 -1
  567. package/dist/protocol/ndjson.d.ts +0 -3
  568. package/dist/protocol/ndjson.d.ts.map +0 -1
  569. package/dist/protocol/ndjson.js +0 -20
  570. package/dist/protocol/ndjson.js.map +0 -1
  571. package/dist/protocol/sse.d.ts +0 -7
  572. package/dist/protocol/sse.d.ts.map +0 -1
  573. package/dist/protocol/sse.js +0 -25
  574. package/dist/protocol/sse.js.map +0 -1
  575. package/dist/proxy/pool.d.ts +0 -9
  576. package/dist/proxy/pool.d.ts.map +0 -1
  577. package/dist/proxy/pool.js +0 -27
  578. package/dist/proxy/pool.js.map +0 -1
  579. package/dist/queue/idempotency.d.ts +0 -10
  580. package/dist/queue/idempotency.d.ts.map +0 -1
  581. package/dist/queue/idempotency.js +0 -13
  582. package/dist/queue/idempotency.js.map +0 -1
  583. package/dist/queue/persistent.d.ts +0 -14
  584. package/dist/queue/persistent.d.ts.map +0 -1
  585. package/dist/queue/persistent.js +0 -66
  586. package/dist/queue/persistent.js.map +0 -1
  587. package/dist/queue/queue.d.ts +0 -7
  588. package/dist/queue/queue.d.ts.map +0 -1
  589. package/dist/queue/queue.js +0 -55
  590. package/dist/queue/queue.js.map +0 -1
  591. package/dist/queue/saga.d.ts +0 -5
  592. package/dist/queue/saga.d.ts.map +0 -1
  593. package/dist/queue/saga.js +0 -20
  594. package/dist/queue/saga.js.map +0 -1
  595. package/dist/release/assets.d.ts +0 -144
  596. package/dist/release/assets.d.ts.map +0 -1
  597. package/dist/release/assets.js +0 -157
  598. package/dist/release/assets.js.map +0 -1
  599. package/dist/release/evidence.d.ts +0 -92
  600. package/dist/release/evidence.d.ts.map +0 -1
  601. package/dist/release/evidence.js +0 -148
  602. package/dist/release/evidence.js.map +0 -1
  603. package/dist/release/verify.d.ts +0 -12
  604. package/dist/release/verify.d.ts.map +0 -1
  605. package/dist/release/verify.js +0 -112
  606. package/dist/release/verify.js.map +0 -1
  607. package/dist/runners/chain.d.ts +0 -125
  608. package/dist/runners/chain.d.ts.map +0 -1
  609. package/dist/runners/chain.js +0 -95
  610. package/dist/runners/chain.js.map +0 -1
  611. package/dist/runners/health.d.ts +0 -36
  612. package/dist/runners/health.d.ts.map +0 -1
  613. package/dist/runners/health.js +0 -26
  614. package/dist/runners/health.js.map +0 -1
  615. package/dist/runners/heartbeat.d.ts +0 -23
  616. package/dist/runners/heartbeat.d.ts.map +0 -1
  617. package/dist/runners/heartbeat.js +0 -29
  618. package/dist/runners/heartbeat.js.map +0 -1
  619. package/dist/runners/inprocess.d.ts +0 -17
  620. package/dist/runners/inprocess.d.ts.map +0 -1
  621. package/dist/runners/inprocess.js +0 -20
  622. package/dist/runners/inprocess.js.map +0 -1
  623. package/dist/runners/scheduler.d.ts +0 -5
  624. package/dist/runners/scheduler.d.ts.map +0 -1
  625. package/dist/runners/scheduler.js +0 -19
  626. package/dist/runners/scheduler.js.map +0 -1
  627. package/dist/runtime/abort.d.ts +0 -8
  628. package/dist/runtime/abort.d.ts.map +0 -1
  629. package/dist/runtime/abort.js +0 -13
  630. package/dist/runtime/abort.js.map +0 -1
  631. package/dist/runtime/compatibility.d.ts +0 -37
  632. package/dist/runtime/compatibility.d.ts.map +0 -1
  633. package/dist/runtime/compatibility.js +0 -10
  634. package/dist/runtime/compatibility.js.map +0 -1
  635. package/dist/runtime/detect.d.ts +0 -13
  636. package/dist/runtime/detect.d.ts.map +0 -1
  637. package/dist/runtime/detect.js +0 -18
  638. package/dist/runtime/detect.js.map +0 -1
  639. package/dist/runtime/engine.d.ts +0 -20
  640. package/dist/runtime/engine.d.ts.map +0 -1
  641. package/dist/runtime/engine.js +0 -61
  642. package/dist/runtime/engine.js.map +0 -1
  643. package/dist/runtime/retry.d.ts +0 -19
  644. package/dist/runtime/retry.d.ts.map +0 -1
  645. package/dist/runtime/retry.js +0 -54
  646. package/dist/runtime/retry.js.map +0 -1
  647. package/dist/runtime/worker.d.ts +0 -10
  648. package/dist/runtime/worker.d.ts.map +0 -1
  649. package/dist/runtime/worker.js +0 -25
  650. package/dist/runtime/worker.js.map +0 -1
  651. package/dist/scrape/cache.d.ts +0 -45
  652. package/dist/scrape/cache.d.ts.map +0 -1
  653. package/dist/scrape/cache.js +0 -45
  654. package/dist/scrape/cache.js.map +0 -1
  655. package/dist/scrape/crawl.d.ts +0 -47
  656. package/dist/scrape/crawl.d.ts.map +0 -1
  657. package/dist/scrape/crawl.js +0 -114
  658. package/dist/scrape/crawl.js.map +0 -1
  659. package/dist/scrape/extract.d.ts +0 -63
  660. package/dist/scrape/extract.d.ts.map +0 -1
  661. package/dist/scrape/extract.js +0 -47
  662. package/dist/scrape/extract.js.map +0 -1
  663. package/dist/scrape/normalize.d.ts +0 -52
  664. package/dist/scrape/normalize.d.ts.map +0 -1
  665. package/dist/scrape/normalize.js +0 -102
  666. package/dist/scrape/normalize.js.map +0 -1
  667. package/dist/scrape/robots.d.ts +0 -37
  668. package/dist/scrape/robots.d.ts.map +0 -1
  669. package/dist/scrape/robots.js +0 -71
  670. package/dist/scrape/robots.js.map +0 -1
  671. package/dist/scrape/schema.d.ts +0 -23
  672. package/dist/scrape/schema.d.ts.map +0 -1
  673. package/dist/scrape/schema.js +0 -92
  674. package/dist/scrape/schema.js.map +0 -1
  675. package/dist/scrape/scraper.d.ts +0 -6
  676. package/dist/scrape/scraper.d.ts.map +0 -1
  677. package/dist/scrape/scraper.js +0 -46
  678. package/dist/scrape/scraper.js.map +0 -1
  679. package/dist/scrape/semantic.d.ts +0 -25
  680. package/dist/scrape/semantic.d.ts.map +0 -1
  681. package/dist/scrape/semantic.js +0 -27
  682. package/dist/scrape/semantic.js.map +0 -1
  683. package/dist/server/node.d.ts +0 -7
  684. package/dist/server/node.d.ts.map +0 -1
  685. package/dist/server/node.js.map +0 -1
  686. package/dist/sessions/file.d.ts +0 -25
  687. package/dist/sessions/file.d.ts.map +0 -1
  688. package/dist/sessions/file.js +0 -13
  689. package/dist/sessions/file.js.map +0 -1
  690. package/dist/sessions/replay.d.ts +0 -9
  691. package/dist/sessions/replay.d.ts.map +0 -1
  692. package/dist/sessions/replay.js +0 -70
  693. package/dist/sessions/replay.js.map +0 -1
  694. package/dist/sessions/store.d.ts +0 -25
  695. package/dist/sessions/store.d.ts.map +0 -1
  696. package/dist/sessions/store.js +0 -13
  697. package/dist/sessions/store.js.map +0 -1
  698. package/dist/storage/adapter.d.ts +0 -5
  699. package/dist/storage/adapter.d.ts.map +0 -1
  700. package/dist/storage/adapter.js +0 -11
  701. package/dist/storage/adapter.js.map +0 -1
  702. package/dist/storage/cache.d.ts +0 -23
  703. package/dist/storage/cache.d.ts.map +0 -1
  704. package/dist/storage/cache.js +0 -79
  705. package/dist/storage/cache.js.map +0 -1
  706. package/dist/storage/checksum.d.ts +0 -3
  707. package/dist/storage/checksum.d.ts.map +0 -1
  708. package/dist/storage/checksum.js +0 -19
  709. package/dist/storage/checksum.js.map +0 -1
  710. package/dist/storage/chunked.d.ts +0 -21
  711. package/dist/storage/chunked.d.ts.map +0 -1
  712. package/dist/storage/chunked.js +0 -67
  713. package/dist/storage/chunked.js.map +0 -1
  714. package/dist/storage/content.d.ts +0 -24
  715. package/dist/storage/content.d.ts.map +0 -1
  716. package/dist/storage/content.js +0 -44
  717. package/dist/storage/content.js.map +0 -1
  718. package/dist/storage/filehosting.d.ts +0 -2
  719. package/dist/storage/filehosting.d.ts.map +0 -1
  720. package/dist/storage/filehosting.js +0 -24
  721. package/dist/storage/filehosting.js.map +0 -1
  722. package/dist/storage/githubcontents.d.ts +0 -2
  723. package/dist/storage/githubcontents.d.ts.map +0 -1
  724. package/dist/storage/githubcontents.js +0 -29
  725. package/dist/storage/githubcontents.js.map +0 -1
  726. package/dist/storage/index.d.ts +0 -12
  727. package/dist/storage/index.d.ts.map +0 -1
  728. package/dist/storage/index.js +0 -12
  729. package/dist/storage/index.js.map +0 -1
  730. package/dist/storage/local.d.ts +0 -2
  731. package/dist/storage/local.d.ts.map +0 -1
  732. package/dist/storage/local.js +0 -72
  733. package/dist/storage/local.js.map +0 -1
  734. package/dist/storage/memory.d.ts +0 -6
  735. package/dist/storage/memory.d.ts.map +0 -1
  736. package/dist/storage/memory.js +0 -36
  737. package/dist/storage/memory.js.map +0 -1
  738. package/dist/storage/pool.d.ts +0 -95
  739. package/dist/storage/pool.d.ts.map +0 -1
  740. package/dist/storage/pool.js +0 -202
  741. package/dist/storage/pool.js.map +0 -1
  742. package/dist/storage/s3compatible.d.ts +0 -3
  743. package/dist/storage/s3compatible.d.ts.map +0 -1
  744. package/dist/storage/s3compatible.js +0 -70
  745. package/dist/storage/s3compatible.js.map +0 -1
  746. package/dist/storage/sync.d.ts +0 -47
  747. package/dist/storage/sync.d.ts.map +0 -1
  748. package/dist/storage/sync.js +0 -75
  749. package/dist/storage/sync.js.map +0 -1
  750. package/dist/surfaces/adapters.d.ts +0 -97
  751. package/dist/surfaces/adapters.d.ts.map +0 -1
  752. package/dist/surfaces/adapters.js +0 -50
  753. package/dist/surfaces/adapters.js.map +0 -1
  754. package/dist/surfaces/controls.d.ts +0 -18
  755. package/dist/surfaces/controls.d.ts.map +0 -1
  756. package/dist/surfaces/controls.js +0 -45
  757. package/dist/surfaces/controls.js.map +0 -1
  758. package/dist/surfaces/manifest.d.ts +0 -68
  759. package/dist/surfaces/manifest.d.ts.map +0 -1
  760. package/dist/surfaces/manifest.js +0 -42
  761. package/dist/surfaces/manifest.js.map +0 -1
  762. package/dist/surfaces/n8n.d.ts +0 -25
  763. package/dist/surfaces/n8n.d.ts.map +0 -1
  764. package/dist/surfaces/n8n.js +0 -31
  765. package/dist/surfaces/n8n.js.map +0 -1
  766. package/dist/surfaces/operations.d.ts +0 -32
  767. package/dist/surfaces/operations.d.ts.map +0 -1
  768. package/dist/surfaces/operations.js +0 -53
  769. package/dist/surfaces/operations.js.map +0 -1
  770. package/dist/surfaces/requirements.d.ts +0 -29
  771. package/dist/surfaces/requirements.d.ts.map +0 -1
  772. package/dist/surfaces/requirements.js +0 -50
  773. package/dist/surfaces/requirements.js.map +0 -1
  774. package/dist/surfaces/targets.d.ts +0 -196
  775. package/dist/surfaces/targets.d.ts.map +0 -1
  776. package/dist/surfaces/targets.js +0 -27
  777. package/dist/surfaces/targets.js.map +0 -1
  778. package/dist/webhook/delivery.d.ts +0 -18
  779. package/dist/webhook/delivery.d.ts.map +0 -1
  780. package/dist/webhook/delivery.js +0 -36
  781. package/dist/webhook/delivery.js.map +0 -1
  782. package/dist/webhook/receiver.d.ts +0 -26
  783. package/dist/webhook/receiver.d.ts.map +0 -1
  784. package/dist/webhook/receiver.js +0 -24
  785. package/dist/webhook/receiver.js.map +0 -1
  786. package/dist/webhook/signature.d.ts +0 -3
  787. package/dist/webhook/signature.d.ts.map +0 -1
  788. package/dist/webhook/signature.js +0 -7
  789. package/dist/webhook/signature.js.map +0 -1
  790. package/dist/workflow/manifest.d.ts +0 -22
  791. package/dist/workflow/manifest.d.ts.map +0 -1
  792. package/dist/workflow/manifest.js +0 -21
  793. package/dist/workflow/manifest.js.map +0 -1
  794. package/dist/workflow/registry.d.ts +0 -7
  795. package/dist/workflow/registry.d.ts.map +0 -1
  796. package/dist/workflow/registry.js +0 -18
  797. package/dist/workflow/registry.js.map +0 -1
  798. package/dist/workflow/templates.d.ts +0 -6
  799. package/dist/workflow/templates.d.ts.map +0 -1
  800. package/dist/workflow/templates.js +0 -18
  801. package/dist/workflow/templates.js.map +0 -1
  802. package/dist/workflow/triggers.d.ts +0 -64
  803. package/dist/workflow/triggers.d.ts.map +0 -1
  804. package/dist/workflow/triggers.js +0 -99
  805. package/dist/workflow/triggers.js.map +0 -1
  806. package/docs/logs/.gitkeep +0 -0
  807. package/docs/plans/00.index.md +0 -50
  808. package/docs/plans/01.architecture.md +0 -86
  809. package/docs/plans/02.research.computer.use.md +0 -58
  810. package/docs/plans/03.research.captcha.bypass.md +0 -68
  811. package/docs/plans/04.research.sandbox.ai.md +0 -52
  812. package/docs/plans/05.capture.platform.md +0 -57
  813. package/docs/plans/06.dependencies.md +0 -97
  814. package/docs/plans/07.captcha.test.page.md +0 -41
  815. package/docs/plans/08.production.infra.md +0 -70
  816. package/docs/plans/09.database.schema.md +0 -121
  817. package/docs/plans/10.cloudinary.storage.md +0 -57
  818. package/docs/plans/11.movement.logs.json.md +0 -72
  819. package/docs/plans/12.research.atlas.agent.browser.md +0 -79
  820. package/docs/plans/13.research.anti.detection.md +0 -898
  821. package/docs/plans/14.research.proxy.md +0 -1495
  822. package/docs/plans/15.research.retry.rate.limit.md +0 -1958
  823. package/docs/plans/16.research.crawling.md +0 -1417
  824. package/docs/plans/17.research.caching.md +0 -1610
  825. package/docs/plans/18.research.content.extraction.md +0 -1952
  826. package/docs/plans/19.research.errors.events.md +0 -1523
  827. package/docs/plans/20.research.zod.validation.md +0 -1350
  828. package/docs/plans/21.research.batch.concurrency.md +0 -1888
  829. package/docs/plans/22.research.universal.runtime.md +0 -944
  830. package/docs/plans/23.research.ai.integration.md +0 -1465
  831. package/docs/plans/24.research.memory.persistence.md +0 -1979
  832. package/docs/plans/25.research.server.api.md +0 -342
  833. package/docs/plans/26.research.compilation.md +0 -249
  834. package/docs/plans/27.research.html.parsing.md +0 -251
  835. package/docs/plans/28.action.plan.md +0 -50
  836. package/docs/plans/29.api.reference.md +0 -174
  837. package/docs/plans/30.architecture.plan.md +0 -94
  838. package/docs/plans/31.auditoria.dados.md +0 -163
  839. package/docs/plans/32.bots.automacao.computacional.md +0 -214
  840. package/docs/plans/33.bots.codigo.revisao.md +0 -220
  841. package/docs/plans/34.bots.seguranca.cicd.md +0 -366
  842. package/docs/plans/35.comparativo.concorrencia.md +0 -464
  843. package/docs/plans/36.computational.memory.md +0 -340
  844. package/docs/plans/37.deploystrategy.md +0 -394
  845. package/docs/plans/38.flow.md +0 -155
  846. package/docs/plans/39.multi.platform.bot.md +0 -252
  847. package/docs/plans/40.npm.publish.md +0 -250
  848. package/docs/plans/41.o.que.falta.md +0 -407
  849. package/docs/plans/42.pesquisa.concorrencia.md +0 -721
  850. package/docs/plans/43.plan.universal.architecture.md +0 -496
  851. package/docs/plans/44.reference.md +0 -100
  852. package/docs/plans/45.robotarchitecture.md +0 -237
  853. package/docs/plans/46.scdnintegration.md +0 -284
  854. package/docs/plans/47.multiforge.readme.md +0 -129
  855. package/docs/plans/48.theory.v4.repo.os.md +0 -152
  856. package/docs/plans/49.third.party.infra.md +0 -12
  857. package/docs/plans/50.file.as.compute.md +0 -39
  858. package/docs/plans/51.architecture.virtual.processor.md +0 -80
  859. package/docs/plans/52.manifesto.v8.md +0 -11
  860. package/docs/plans/58.cdn.list.md +0 -23
  861. package/docs/plans/59.sql.frameworks.md +0 -33
  862. package/docs/plans/60.sql.thirdparty.md +0 -26
  863. package/docs/plans/61.objective.multiforge.md +0 -63
  864. package/docs/plans/62.huggingface.upload.md +0 -26
  865. package/docs/plans/63.kaggle.upload.md +0 -24
  866. package/docs/plans/64.npm.storage.md +0 -30
  867. package/docs/plans/65.rclone.terabox.md +0 -32
  868. package/docs/plans/66.buckets.and.models.todo.md +0 -14
  869. package/docs/plans/67.database.todo.md +0 -13
  870. package/docs/plans/68.deploy.packages.todo.md +0 -12
  871. package/docs/plans/69.report.human.operator.md +0 -133
  872. package/docs/plans/70.report.brain2qwerty.ems.md +0 -135
  873. package/docs/plans/71.report.hd.infinito.vram.md +0 -155
  874. package/docs/plans/72.plan.hd.infinito.node.md +0 -146
  875. package/docs/plans/73.plan.scifi.repos.md +0 -125
  876. package/docs/plans/74.000.manifesto.v8.flat.2..md +0 -11
  877. package/docs/plans/README.md +0 -489
  878. package/docs/plans/aggregate_platforms.mjs +0 -146
  879. package/docs/plans/examplesession.json +0 -36
  880. package/docs/plans/missing-facts.md +0 -192
  881. package/docs/plans/models.md +0 -64
  882. package/docs/plans/organize.cjs +0 -270
  883. package/docs/plans/platforms.md +0 -2887
  884. package/docs/plans/sites.md +0 -31322
  885. package/docs/sources/farm.py +0 -117
  886. package/docs/sources/html/saddle1.html +0 -132
  887. package/docs/sources/html/saddle2.html +0 -157
  888. package/docs/sources/html/saddle3.html +0 -119
  889. package/docs/sources/html/saddle4.html +0 -144
  890. package/docs/sources/html/saddle5.html +0 -72
  891. package/docs/sources/html/saddle6.html +0 -171
  892. package/docs/sources/html/saddle7.html +0 -236
  893. package/docs/sources/saddle.ts +0 -74
  894. package/docs/sources/schema.prisma +0 -88
  895. package/docs/sources/script.sh +0 -64
  896. package/docs/sources/workflows.yml +0 -458
  897. package/docs/talks1/_body.txt +0 -14
  898. package/docs/talks1/_index.md +0 -15
  899. package/docs/talks1/_screenshot.png +0 -0
  900. package/docs/talks1/assistant-01.md +0 -5
  901. package/docs/talks1/assistant-02.md +0 -5
  902. package/docs/talks1/assistant-03.md +0 -531
  903. package/docs/talks1/assistant-04.md +0 -26
  904. package/docs/talks1/assistant-05.md +0 -774
  905. package/docs/talks1/assistant-06.md +0 -1718
  906. package/docs/talks1/scrape-share.cjs +0 -185
  907. package/docs/talks1/scrape-share.ts +0 -183
  908. package/docs/talks1/user-01.md +0 -3
  909. package/docs/talks1/user-02.md +0 -3
  910. package/docs/talks1/user-03.md +0 -88
  911. package/docs/talks1/user-04.md +0 -3
  912. package/docs/talks1/user-05.md +0 -3
  913. package/docs/talks1/user-06.md +0 -88
  914. package/docs/talks1/user-07.md +0 -88
  915. package/docs/talks2/_body.txt +0 -14
  916. package/docs/talks2/_index.md +0 -16
  917. package/docs/talks2/_screenshot.png +0 -0
  918. package/docs/talks2/assistant-01.md +0 -5
  919. package/docs/talks2/assistant-02.md +0 -5
  920. package/docs/talks2/assistant-03.md +0 -424
  921. package/docs/talks2/assistant-04.md +0 -598
  922. package/docs/talks2/assistant-05.md +0 -1280
  923. package/docs/talks2/assistant-06.md +0 -1227
  924. package/docs/talks2/assistant-07.md +0 -1252
  925. package/docs/talks2/user-01.md +0 -3
  926. package/docs/talks2/user-02.md +0 -3
  927. package/docs/talks2/user-03.md +0 -88
  928. package/docs/talks2/user-04.md +0 -88
  929. package/docs/talks2/user-05.md +0 -88
  930. package/docs/talks2/user-06.md +0 -88
  931. package/docs/talks2/user-07.md +0 -3
  932. package/docs/talks3/_body.txt +0 -467
  933. package/docs/talks3/_index.md +0 -10
  934. package/docs/talks3/_screenshot.png +0 -0
  935. package/docs/talks3/assistant-01.md +0 -417
  936. package/docs/talks3/assistant-02.md +0 -417
  937. package/docs/talks3/assistant-03.md +0 -29
  938. package/docs/talks3/assistant-04.md +0 -727
  939. package/docs/talks3/user-01.md +0 -88
  940. package/docs/talks3/user-02.md +0 -88
  941. package/docs/talks3/user-03.md +0 -3
  942. package/docs/talks3/user-04.md +0 -3
  943. package/docs/talks4/_body.txt +0 -14
  944. package/docs/talks4/_index.md +0 -12
  945. package/docs/talks4/_screenshot.png +0 -0
  946. package/docs/talks4/assistant-01.md +0 -5
  947. package/docs/talks4/assistant-02.md +0 -5
  948. package/docs/talks4/assistant-03.md +0 -35
  949. package/docs/talks4/assistant-04.md +0 -512
  950. package/docs/talks4/assistant-05.md +0 -599
  951. package/docs/talks4/user-01.md +0 -3
  952. package/docs/talks4/user-02.md +0 -3
  953. package/docs/talks4/user-03.md +0 -88
  954. package/docs/talks4/user-04.md +0 -88
  955. package/docs/talks4/user-05.md +0 -7
  956. package/docs/talks5/_body.txt +0 -14
  957. package/docs/talks5/_index.md +0 -13
  958. package/docs/talks5/_screenshot.png +0 -0
  959. package/docs/talks5/assistant-01.md +0 -5
  960. package/docs/talks5/assistant-02.md +0 -5
  961. package/docs/talks5/assistant-03.md +0 -690
  962. package/docs/talks5/assistant-04.md +0 -758
  963. package/docs/talks5/assistant-05.md +0 -974
  964. package/docs/talks5/user-01.md +0 -3
  965. package/docs/talks5/user-02.md +0 -3
  966. package/docs/talks5/user-03.md +0 -105
  967. package/docs/talks5/user-04.md +0 -105
  968. package/docs/talks5/user-05.md +0 -63
  969. package/docs/talks5/user-06.md +0 -105
  970. package/docs/talks6/_body.txt +0 -14
  971. package/docs/talks6/_index.md +0 -9
  972. package/docs/talks6/_screenshot.png +0 -0
  973. package/docs/talks6/assistant-01.md +0 -5
  974. package/docs/talks6/assistant-02.md +0 -5
  975. package/docs/talks6/assistant-03.md +0 -1499
  976. package/docs/talks6/user-01.md +0 -3
  977. package/docs/talks6/user-02.md +0 -3
  978. package/docs/talks6/user-03.md +0 -88
  979. package/docs/talks6/user-04.md +0 -88
  980. package/docs/talks7/_body.txt +0 -14
  981. package/docs/talks7/_index.md +0 -10
  982. package/docs/talks7/_screenshot.png +0 -0
  983. package/docs/talks7/assistant-01.md +0 -5
  984. package/docs/talks7/assistant-02.md +0 -5
  985. package/docs/talks7/assistant-03.md +0 -523
  986. package/docs/talks7/assistant-04.md +0 -617
  987. package/docs/talks7/user-01.md +0 -3
  988. package/docs/talks7/user-02.md +0 -3
  989. package/docs/talks7/user-03.md +0 -105
  990. package/docs/talks7/user-04.md +0 -67
  991. package/docs/talks8/conversa1.txt +0 -1322
  992. package/docs/talks8/conversa2.txt +0 -237
  993. package/docs/talks9/Beyond the Obvious_ 50 Plataformas Auto-Hospedadas de Forja de C/303/263digo para Al/303/251m de Gitea e GitLab.md" +0 -174
  994. package/docs/talks9/De NPM a Multi-Linguagem_ Uma Arquitetura T/303/251cnica para a Execu/303/247/303/243o Integrada de C/303/263digo no Ecossistema Node.js.md" +0 -59
  995. package/docs/talks9/De NPM a VMs Virtuais_ Uma An/303/241lise Arquitet/303/264nica para a Realiza/303/247/303/243o do Ciclo de Vida do Projeto SADDLE.md" +0 -91
  996. package/docs/talks9/Mapeamento da Engrenagem Computacional_ Uma Arquitetura para Execu/303/247/303/243o Isolada e Persist/303/252ncia em Ambientes Distribu/303/255dos.md" +0 -116
  997. package/docs/talks9/O Cen/303/241rio Pr/303/241tico do SADDLE_ Uma An/303/241lise de Viabilidade e Modelo de Ciclo de Vida Integrado.md" +0 -128
  998. package/docs/talks9/README (2).md +0 -489
  999. package/docs/talks9/README.md +0 -198
  1000. package/docs/talks9/Viabilidade do Saddle_ Uma An/303/241lise T/303/251cnica da Transforma/303/247/303/243o de Armazenamento Remoto em Mem/303/263ria Computacional.md" +0 -80
  1001. package/docs/talks9/conversa.txt +0 -544
  1002. package/docs/talks9/other (2).md +0 -39
  1003. package/docs/talks9/other.md +0 -57
  1004. package/docs/talks9/outro.txt +0 -24
  1005. /package/{extension/README.md → docs/extension.md} +0 -0
@@ -1,721 +0,0 @@
1
- # Competitive Research: webscrape vs. 7 Competitors
2
-
3
- > **Date:** 2026-06-08
4
- > **Objective:** Deep analysis of 7 direct/indirect competitors to identify gaps, opportunities, and architectural insights for the `@wenathlan/webscrape` toolkit.
5
-
6
- ---
7
-
8
- ## Table of Contents
9
-
10
- 1. [Executive Summary](#executive-summary)
11
- 2. [Webscrape Current Capabilities](#webscrape-current-capabilities)
12
- 3. [Competitor Deep Dives](#competitor-deep-dives)
13
- - [1. Crawlee](#1-crawlee)
14
- - [2. Playwright](#2-playwright)
15
- - [3. Puppeteer](#3-puppeteer)
16
- - [4. Cheerio](#4-cheerio)
17
- - [5. Scrapy](#5-scrapy)
18
- - [6. Firecrawl](#6-firecrawl)
19
- - [7. Browserless](#7-browserless)
20
- 4. [Feature Comparison Table](#feature-comparison-table)
21
- 5. [Architecture Insights](#architecture-insights)
22
- 6. [Critical Gaps in Webscrape](#critical-gaps-in-webscrape)
23
- 7. [Recommendations](#recommendations)
24
-
25
- ---
26
-
27
- ## Executive Summary
28
-
29
- The web scraping ecosystem is mature and fragmented. Competitors range from low-level browser APIs (Puppeteer, Playwright) to full orchestration frameworks (Crawlee, Scrapy) to hosted AI-first services (Firecrawl).
30
-
31
- **webscrape's unique position:** A lightweight, cross-runtime (Node.js/Bun) toolkit that combines scraping, serialization, AI agent formatting, and an HTTP server — without requiring a cloud service. This is genuinely differentiated.
32
-
33
- **Biggest gaps:** Anti-bot/stealth capabilities, persistent queue/storage, persistent session management, Docker deployment, and MCP server integration.
34
-
35
- ---
36
-
37
- ## Webscrape Current Capabilities
38
-
39
- Based on codebase analysis (`C:\allan2\devthink\webscrape\`):
40
-
41
- | Module | File | What it does |
42
- |--------|------|-------------|
43
- | Browser automation | `browser.ts` | Playwright wrapper (chromium/firefox/webkit), ad blocking, stealth mode |
44
- | HTTP scraping | `fetch.ts` | Node fetch with auto mode detection |
45
- | Smart scraping | `scrape.ts` | Auto-detect fetch vs browser, scroll, extract |
46
- | Content extraction | `extract.ts` | Cheerio-based: links, images, tables, metadata, JSON-LD |
47
- | Serialization | `serialize.ts` | Markdown, XML, JSON, Redis, plain text |
48
- | Crawler | `crawler.ts` | BFS/DFS crawling with depth, concurrency, dedup |
49
- | Batch processing | `batch.ts` | Parallel/sequential batch scraping with p-limit |
50
- | Rate limiting | `rate-limiter.ts` | Token bucket algorithm with concurrency control |
51
- | Proxy pool | `proxy.ts` | Round-robin/random rotation, failure tracking, auto-revive |
52
- | Cache | `cache.ts` | LRU cache with TTL |
53
- | Session | `session.ts` | CookieJar, session state |
54
- | Headers | `headers.ts` | 4 browser profiles (Chrome/Firefox/Safari) |
55
- | Middleware | `middleware.ts` | Pipeline pattern (logging, timeout, retry) |
56
- | HTTP server | `server.ts` | Hono-based REST API (/scrape, /batch, /crawl, /health) |
57
- | AI agent | `agent.ts` | Format output for LLMs, token estimation |
58
- | Chunking | `chunking.ts` | Split content for RAG pipelines |
59
- | Browser pool | `pool.ts` | Browser instance reuse with wait queue |
60
- | LLMs.txt | `llms-txt.ts` | Generate llms.txt for sites |
61
- | CLI | `cli.ts` | Commander-based CLI tool |
62
-
63
- **Runtime support:** Node.js >= 26.2.0, Bun >= 1.4.0
64
-
65
- ---
66
-
67
- ## Competitor Deep Dives
68
-
69
- ### 1. Crawlee
70
-
71
- **Website:** [crawlee.dev](https://crawlee.dev) | **GitHub:** [apify/crawlee](https://github.com/apify/crawlee)
72
- **Stars:** 23.7k | **License:** Apache-2.0 | **Language:** TypeScript
73
- **npm:** `crawlee` (~100 dependents) | **Maintained by:** Apify
74
-
75
- #### What It Is
76
- A comprehensive web scraping and browser automation framework. Crawlee is the open-source engine behind the Apify platform. It supports HTTP crawling, headless browser crawling (Playwright, Puppeteer, Cheerio, JSDOM), proxy rotation, session management, and persistent storage.
77
-
78
- #### Key Features
79
- - **Multi-crawler interface:** `PlaywrightCrawler`, `PuppeteerCrawler`, `CheerioCrawler`, `JSDOMCrawler`, `BasicCrawler`
80
- - **Persistent request queue:** Breadth-first and depth-first crawling with disk/cloud storage
81
- - **Pluggable storage:** Dataset, Key-Value Store, Request Queue (local or Apify cloud)
82
- - **Automatic scaling:** Adjusts concurrency based on system resources
83
- - **Proxy rotation:** Integrated proxy configuration with session-based rotation
84
- - **Session management:** Per-session cookie and header persistence
85
- - **Browser fingerprint generation:** Human-like fingerprints by default
86
- - **Auto-retry:** Configurable retry with exponential backoff
87
- - **CLI scaffolding:** `npx crawlee create my-crawler`
88
- - **Docker deployment:** Pre-built Dockerfiles
89
- - **TypeScript-first:** Full generic support
90
-
91
- #### Architecture
92
- ```
93
- Crawler (Playwright/Puppeteer/Cheerio/JSDOM/Basic)
94
- → Request Handler (user logic)
95
- → Request Queue (persistent, FIFO/LIFO)
96
- → Storage (Dataset + KV Store)
97
- → Local filesystem OR Apify Cloud
98
- ```
99
-
100
- #### What Crawlee Does That Webscrape Doesn't
101
- 1. **Persistent request queue** — survives restarts, handles millions of URLs
102
- 2. **Pluggable storage adapters** — local disk, S3, Apify cloud
103
- 3. **Built-in auto-scaling** — adjusts concurrency to CPU/memory
104
- 4. **Session-based proxy rotation** — keeps same proxy per session
105
- 5. **Human-like fingerprint generation** — automatic browser fingerprint randomization
106
- 6. **Adaptive crawler** — automatically detects if page needs JS rendering
107
- 7. **Docker deployment templates** — production-ready containers
108
- 8. **CLI project scaffolding** — instant project setup
109
- 9. **Python version** — crawlee-python for Python ecosystem
110
- 10. **Apify platform integration** — cloud execution, monitoring, scheduling
111
-
112
- #### Success Factors
113
- - Backed by Apify (commercial company with cloud platform)
114
- - Battle-tested at scale (millions of pages)
115
- - Excellent documentation with interactive examples
116
- - Active community (Discord, Stack Overflow)
117
- - Regular releases (134 releases, v3.17.0)
118
-
119
- ---
120
-
121
- ### 2. Playwright
122
-
123
- **Website:** [playwright.dev](https://playwright.dev) | **GitHub:** [microsoft/playwright](https://github.com/microsoft/playwright)
124
- **Stars:** 90.5k | **License:** Apache-2.0 | **Language:** TypeScript (91%)
125
- **npm:** `playwright` (~471k dependents) | **Maintained by:** Microsoft
126
-
127
- #### What It Is
128
- A browser automation framework for testing and scripting. Drives Chromium, Firefox, and WebKit with a single API. Not a scraping framework per se, but widely used for scraping due to its reliability and cross-browser support.
129
-
130
- #### Key Features
131
- - **Cross-browser:** Chromium, Firefox, WebKit with single API
132
- - **Auto-wait:** No artificial timeouts, waits for elements to be actionable
133
- - **Locators:** Resilient element finding (role, label, test-id, etc.)
134
- - **Test isolation:** Each test gets fresh browser context
135
- - **Tracing:** Full execution traces, screenshots, videos on failure
136
- - **Parallelism:** Tests run in parallel by default
137
- - **Network interception:** Route/mock network requests
138
- - **Mobile emulation:** Device profiles built-in
139
- - **PDF generation:** Page-to-PDF conversion
140
- - **Code generation:** Record interactions as code
141
- - **MCP server:** AI agent integration via Model Context Protocol
142
- - **CLI for coding agents:** Token-efficient browser automation for AI
143
-
144
- #### Architecture
145
- ```
146
- Playwright Library
147
- → Browser Process (Chromium/Firefox/WebKit)
148
- → Browser Context (isolated profiles)
149
- → Page (tab)
150
- → Frame (iframe)
151
- → DOM / Network / Storage
152
- ```
153
-
154
- #### What Playwright Does That Webscrape Doesn't
155
- 1. **True multi-browser** — Firefox, WebKit support (webscrape uses Playwright but defaults to Chromium)
156
- 2. **Auto-wait and web-first assertions** — eliminates flaky timeouts
157
- 3. **Locator system** — resilient element finding with role/text/label selectors
158
- 4. **Tracing and debugging** — full execution traces with DOM snapshots
159
- 5. **Mobile device emulation** — built-in device profiles
160
- 6. **Network request mocking** — intercept and modify requests/responses
161
- 7. **Video recording** — record browser sessions
162
- 8. **MCP server integration** — `@playwright/mcp` for AI agents
163
- 9. **VS Code extension** — code generation and debugging in editor
164
- 10. **Massive ecosystem** — 471k dependents, used by 90%+ of browser automation projects
165
-
166
- #### Success Factors
167
- - Microsoft backing with dedicated team
168
- - Best-in-class cross-browser support
169
- - Superior developer experience (auto-wait, locators, tracing)
170
- - Works in CI/CD out of the box
171
- - Extensive documentation and examples
172
- - Active development (17k+ commits, v1.60.0)
173
-
174
- ---
175
-
176
- ### 3. Puppeteer
177
-
178
- **Website:** [pptr.dev](https://pptr.dev) | **GitHub:** [puppeteer/puppeteer](https://github.com/puppeteer/puppeteer)
179
- **Stars:** 94.5k | **License:** Apache-2.0 | **Language:** TypeScript (93.8%)
180
- **npm:** `puppeteer` (~575k dependents) | **Maintained by:** Google Chrome team
181
-
182
- #### What It Is
183
- A JavaScript library providing high-level API to control Chrome or Firefox over the DevTools Protocol or WebDriver BiDi. The original headless Chrome automation tool.
184
-
185
- #### Key Features
186
- - **Chrome DevTools Protocol** — direct browser control
187
- - **WebDriver BiDi** — modern protocol support
188
- - **Screenshot and PDF** — full page or element screenshots, PDF generation
189
- - **Network interception** — request/response modification
190
- - **JavaScript execution** — evaluate arbitrary JS in page context
191
- - **Cookie management** — set/get/delete cookies
192
- - **Emulation** — viewport, user agent, geolocation, timezone
193
- - **Chrome extensions support** — load custom extensions
194
- - **MCP server** — `chrome-devtools-mcp` for AI agents
195
- - **Docker support** — official Docker images
196
-
197
- #### Architecture
198
- ```
199
- Puppeteer API
200
- → Chrome DevTools Protocol (CDP) / WebDriver BiDi
201
- → Chrome/Firefox Browser Process
202
- → Browser Context
203
- → Page
204
- ```
205
-
206
- #### What Puppeteer Does That Webscrape Doesn't
207
- 1. **Direct CDP access** — low-level browser control when needed
208
- 2. **WebDriver BiDi support** — modern W3C standard protocol
209
- 3. **Chrome extensions** — load and use extensions in automation
210
- 4. **Lighthouse integration** — performance auditing built-in
211
- 5. **Chrome for Testing** — managed browser versions
212
- 6. **Massive community** — 575k dependents, most-used browser automation library
213
- 7. **MCP server** — `chrome-devtools-mcp` for AI agent integration
214
-
215
- #### Success Factors
216
- - Google Chrome team backing
217
- - First-mover advantage (created the headless Chrome automation space)
218
- - Simple, focused API
219
- - Excellent Chrome DevTools integration
220
- - Massive adoption and ecosystem
221
-
222
- ---
223
-
224
- ### 4. Cheerio
225
-
226
- **Website:** [cheerio.js.org](https://cheerio.js.org) | **GitHub:** [cheeriojs/cheerio](https://github.com/cheeriojs/cheerio)
227
- **Stars:** 30.4k | **License:** MIT | **Language:** TypeScript (65%)
228
- **npm:** `cheerio` (~1.8m dependents) | **Maintained by:** Community
229
-
230
- #### What It Is
231
- A fast, flexible library for parsing and manipulating HTML and XML. Implements a subset of jQuery API. Server-side HTML parsing without a browser.
232
-
233
- #### Key Features
234
- - **jQuery-like API** — familiar `$('.selector')` syntax
235
- - **Fast parsing** — uses parse5 (HTML) or htmlparser2 (forgiving mode)
236
- - **HTML manipulation** — add/remove/change elements
237
- - **Rendering** — serialize back to HTML
238
- - **Server-side** — no browser required
239
- - **Flexible** — works in Node.js and browser environments
240
- - **XML support** — parse and manipulate XML documents
241
-
242
- #### Architecture
243
- ```
244
- HTML String
245
- → Parser (parse5 or htmlparser2)
246
- → DOM Tree (in-memory)
247
- → Cheerio API (jQuery-like)
248
- → Manipulated DOM
249
- → Serialization (HTML/Text)
250
- ```
251
-
252
- #### What Cheerio Does That Webscrape Doesn't
253
- 1. **HTML manipulation** — modify DOM before extraction (webscrape only reads)
254
- 2. **XML parsing** — dedicated XML support
255
- 3. **Lightweight** — no browser dependency, tiny footprint
256
- 4. **Browser + server** — works in both environments
257
- 5. **Massive adoption** — 1.8m dependents, de facto standard for HTML parsing
258
-
259
- #### Success Factors
260
- - jQuery familiarity — easy learning curve
261
- - Blazingly fast — no browser overhead
262
- - Rock-solid stability — 4,200+ commits, 62 releases
263
- - Used by virtually every Node.js scraping project
264
- - MIT license — maximum compatibility
265
-
266
- ---
267
-
268
- ### 5. Scrapy
269
-
270
- **Website:** [scrapy.org](https://scrapy.org) | **GitHub:** [scrapy/scrapy](https://github.com/scrapy/scrapy)
271
- **Stars:** 62.1k | **License:** BSD-3-Clause | **Language:** Python (99.5%)
272
- **PyPI:** `Scrapy` (~55.2k dependents) | **Maintained by:** Zyte (formerly Scrapinghub)
273
-
274
- #### What It Is
275
- The gold standard for Python web scraping frameworks. A complete, batteries-included framework for extracting structured data from websites. Uses Twisted for async networking.
276
-
277
- #### Key Features
278
- - **Middleware pipeline** — request/response processing chain
279
- - **Item pipelines** — structured data processing and validation
280
- - **Built-in selectors** — CSS and XPath selectors
281
- - **Feed exports** — JSON, CSV, XML, databases
282
- - **Robust error handling** — auto-retry, dedup, crawl depth limits
283
- - ** robots.txt compliance** — automatic respect
284
- - **Link extraction** — automatic URL discovery
285
- - **Closeable items** — memory-efficient data structures
286
- - **Scrapyd** — deploy and run spiders as services
287
- - **Scrapy Cloud** — managed hosting (Zyte)
288
- - **Scrapyrt** — REST API for spiders
289
- - **Splash integration** — JavaScript rendering
290
-
291
- #### Architecture (Reference for webscrape)
292
- ```
293
- Spider (user logic)
294
- → Scheduler (priority queue, dedup)
295
- → Downloader (async, concurrent)
296
- → Downloader Middlewares (proxy, headers, cookies, retry)
297
- → Spider Middlewares (response processing)
298
- → Item Pipelines (validation, storage)
299
- → Exporters (JSON, CSV, XML)
300
- ```
301
-
302
- #### What Scrapy Does That Webscrape Doesn't
303
- 1. **Middleware pipeline** — formalized request/response processing chain
304
- 2. **Item pipelines** — structured data validation and post-processing
305
- 3. **Feed exports** — multiple output formats with auto-export
306
- 4. **XPath selectors** — CSS + XPath selector engine
307
- 5. **Robots.txt compliance** — automatic crawl-delay, disallow respect
308
- 6. **Scrapyd service** — deploy spiders as long-running services
309
- 7. **Scrapy Shell** — interactive debugging environment
310
- 8. **Crawl depth tracking** — per-domain statistics
311
- 9. **Signal system** — event-driven architecture
312
- 10. **Extension system** — plug in custom functionality
313
-
314
- #### Success Factors
315
- - 15+ years of production use
316
- - Python ecosystem dominance
317
- - Battle-tested at massive scale
318
- - Zyte commercial backing
319
- - Excellent documentation and books
320
-
321
- ---
322
-
323
- ### 6. Firecrawl
324
-
325
- **Website:** [firecrawl.dev](https://firecrawl.dev) | **GitHub:** [firecrawl/firecrawl](https://github.com/firecrawl/firecrawl)
326
- **Stars:** 130k (highest!) | **License:** AGPL-3.0 | **Languages:** TypeScript (67%), Python (17%), Rust (5%)
327
- **npm:** `firecrawl` | **Maintained by:** Firecrawl team
328
-
329
- #### What It Is
330
- An AI-first web scraping API. Converts any website into LLM-ready markdown or structured data. Handles proxies, JS rendering, captchas, and rate limits. Available as a hosted API or self-hosted.
331
-
332
- #### Key Features
333
- - **AI Agent endpoint** — describe what you need, Firecrawl finds and extracts it
334
- - **Search endpoint** — search the web and get full page content
335
- - **Scrape endpoint** — convert URL to markdown/HTML/screenshot/JSON
336
- - **Crawl endpoint** — scrape entire websites
337
- - **Map endpoint** — discover all URLs on a site instantly
338
- - **Batch scrape** — thousands of URLs asynchronously
339
- - **Interact endpoint** — scrape, then interact with AI prompts
340
- - **Video extraction** — extract video from YouTube, TikTok
341
- - **PDF/DOCX parsing** — parse uploaded documents
342
- - **MCP server** — direct integration with AI agents
343
- - **CLI tool** — `firecrawl scrape/crawl/search`
344
- - **Skill system** — installable agent skills
345
- - **Structured output** — Zod schema for typed extraction
346
- - **Self-hosted option** — Docker deployment
347
-
348
- #### Architecture
349
- ```
350
- API Request
351
- → Authentication & Rate Limiting
352
- → Orchestrator
353
- → Browser Pool (Playwright)
354
- → Proxy Rotation (residential)
355
- → Anti-detection (stealth, fingerprints)
356
- → Content Extraction (HTML → Markdown/JSON)
357
- → LLM Processing (optional)
358
- → Response
359
- ```
360
-
361
- #### What Firecrawl Does That Webscrape Doesn't
362
- 1. **AI Agent endpoint** — natural language data extraction without knowing URLs
363
- 2. **Search endpoint** — web search with full content extraction
364
- 3. **Map endpoint** — instant URL discovery
365
- 4. **Residential proxy pool** — managed IP rotation at scale
366
- 5. **Anti-bot bypass** — captcha solving, fingerprint rotation, JS-blocked content
367
- 6. **Video extraction** — YouTube/TikTok content
368
- 7. **Document parsing** — PDF, DOCX, HTML file processing
369
- 8. **MCP server** — native AI agent integration
370
- 9. **Hosted API** — zero infrastructure management
371
- 10. **Spark models** — custom AI models for web extraction
372
-
373
- #### Success Factors
374
- - **AI-first positioning** — perfect timing for LLM/RAG boom
375
- - **130k GitHub stars** — fastest-growing in the space
376
- - **AGPL license + hosted service** — open source + commercial
377
- - **Multi-language SDKs** — Python, Node.js, Java, Elixir, Rust
378
- - **Developer experience** — simple API, great docs, playground
379
- - **Self-hosted option** — Docker deployment for data sovereignty
380
-
381
- ---
382
-
383
- ### 7. Browserless
384
-
385
- **Website:** [browserless.io](https://browserless.io) | **GitHub:** [browserless/browserless](https://github.com/browserless/browserless)
386
- **Stars:** 13.3k | **License:** SSPL-1.0 / Commercial | **Language:** TypeScript (90%)
387
- **Docker:** `browserless/chrome` | **Maintained by:** Browserless team
388
-
389
- #### What It Is
390
- A Docker-deployed headless browser service. Provides Puppeteer/Playwright access via WebSocket or REST API. "Browser as a Service" — run Chrome in Docker with managed scaling, queues, and anti-detection.
391
-
392
- #### Key Features
393
- - **WebSocket API** — connect Puppeteer/Playwright remotely
394
- - **REST API** — screenshot, PDF, HTML, scrape without code
395
- - **Parallelism & queueing** — handle multiple sessions with concurrency limits
396
- - **Debug Viewer** — real-time browser session monitoring
397
- - **BrowserQL** — custom query language for anti-detection
398
- - **Persistent Sessions** — cookies/cache/localStorage across sessions (90-day retention)
399
- - **Session Replay** — record and debug browser sessions
400
- - **Chrome Extensions** — load custom extensions including ad blockers
401
- - **Advanced Captcha/Stealth** — fingerprint randomization, residential proxy rotation
402
- - **Inbuilt residential proxy** — automatic IP rotation
403
- - **/smart-scrape API** — cascading strategies (HTTP → proxy → browser → captcha solving)
404
- - **/crawl API** — async website crawling
405
- - **/map API** — URL discovery
406
- - **/search API** — web search with scraping
407
- - **MCP Server** — AI assistant integration
408
- - **ARM64 support** — Apple Silicon compatible
409
-
410
- #### Architecture
411
- ```
412
- Client (Puppeteer/Playwright/REST)
413
- → WebSocket / HTTP Gateway
414
- → Queue Manager (concurrency control)
415
- → Session Manager (isolation, persistence)
416
- → Browser Pool (Chromium/Firefox/WebKit)
417
- → Docker Container (managed Chrome)
418
- → Anti-detection Layer (BrowserQL, fingerprints)
419
- ```
420
-
421
- #### What Browserless Does That Webscrape Doesn't
422
- 1. **BrowserQL** — custom query language for anti-detection
423
- 2. **Persistent sessions** — 90-day cookie/cache retention
424
- 3. **Session replay** — record and debug sessions
425
- 4. **Chrome extensions in automation** — ad blockers, captcha solvers
426
- 5. **Residential proxy integration** — built-in IP rotation
427
- 6. **Smart scrape** — cascading strategies (try HTTP first, escalate to browser)
428
- 7. **REST API** — scrape without writing code
429
- 8. **Docker-first** — containerized browser service
430
- 9. **Debug viewer** — real-time session monitoring
431
- 10. **Enterprise features** — webhooks, monitoring, SLA
432
-
433
- #### Success Factors
434
- - **Browser-as-a-Service model** — removes infrastructure burden
435
- - **Anti-detection focus** — BrowserQL, fingerprint rotation
436
- - **Docker simplicity** — one command to deploy
437
- - **Enterprise ready** — SLA, monitoring, webhooks
438
- - **Battle-tested** — 6,187 commits, 655 releases
439
-
440
- ---
441
-
442
- ## Feature Comparison Table
443
-
444
- | Feature | webscrape | Crawlee | Playwright | Puppeteer | Cheerio | Scrapy | Firecrawl | Browserless |
445
- |---------|-----------|---------|------------|-----------|---------|--------|-----------|-------------|
446
- | **Type** | Toolkit | Framework | Browser API | Browser API | Parser | Framework | API Service | BaaS |
447
- | **GitHub Stars** | — | 23.7k | 90.5k | 94.5k | 30.4k | 62.1k | 130k | 13.3k |
448
- | **Language** | TypeScript | TypeScript | TypeScript | TypeScript | TypeScript | Python | TS/Py/Rust | TypeScript |
449
- | **Runtime** | Node/Bun | Node.js | Node/Py/Java/.NET | Node.js | Node/Browser | Python | Any (API) | Docker |
450
- | **Browser Support** | Chromium | All (PW/Puppeteer) | Chromium/FF/WebKit | Chrome/Firefox | None | None (or Splash) | All (managed) | Chromium/FF/WebKit |
451
- | **HTTP Scraping** | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ (REST) |
452
- | **HTML Parsing** | ✅ (Cheerio) | ✅ (Cheerio/JSDOM) | ❌ | ❌ | ✅ | ✅ (parsel) | ✅ | ❌ |
453
- | **Markdown Conversion** | ✅ (custom) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ (core feature) | ✅ (/smart-scrape) |
454
- | **Proxy Rotation** | ✅ (basic pool) | ✅ (session-based) | ❌ | ❌ | ❌ | ✅ (middleware) | ✅ (residential) | ✅ (residential) |
455
- | **Rate Limiting** | ✅ (token bucket) | ✅ (built-in) | ❌ | ❌ | ❌ | ✅ (auto) | ✅ (managed) | ✅ (managed) |
456
- | **Anti-Detection** | ❌ (basic headers) | ✅ (fingerprints) | ❌ | ❌ | ❌ | ❌ | ✅ (stealth) | ✅ (BrowserQL) |
457
- | **Session/Cookie Mgmt** | ✅ (CookieJar) | ✅ (per-session) | ✅ (contexts) | ✅ (cookies) | ❌ | ✅ (middleware) | ❌ (stateless API) | ✅ (persistent 90d) |
458
- | **Persistent Queue** | ❌ (in-memory) | ✅ (disk/cloud) | ❌ | ❌ | ❌ | ✅ (memory/SQLite) | ✅ (managed) | ✅ (managed) |
459
- | **Crawler** | ✅ (basic BFS) | ✅ (advanced) | ❌ | ❌ | ❌ | ✅ (spiders) | ✅ (API endpoint) | ✅ (/crawl API) |
460
- | **Batch Processing** | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ (API endpoint) | ❌ |
461
- | **Serialization** | ✅ (MD/XML/JSON/Redis) | ✅ (Dataset) | ❌ | ❌ | ✅ (HTML) | ✅ (Feed exports) | ✅ (MD/HTML/JSON) | ✅ (HTML/PDF/Screenshot) |
462
- | **AI/LLM Integration** | ✅ (formatForAgent) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ (core feature) | ❌ |
463
- | **Token Estimation** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
464
- | **Chunking for RAG** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
465
- | **HTTP Server API** | ✅ (Hono) | ❌ (use Apify) | ❌ | ❌ | ❌ | ✅ (Scrapyrt) | ✅ (cloud API) | ✅ (REST/WS) |
466
- | **MCP Server** | ❌ | ❌ | ✅ (@playwright/mcp) | ✅ (chrome-devtools-mcp) | ❌ | ❌ | ✅ (firecrawl-mcp) | ✅ |
467
- | **CLI** | ✅ | ✅ (crawlee create) | ✅ (playwright-cli) | ❌ | ❌ | ✅ (scrapy CLI) | ✅ (firecrawl-cli) | ❌ |
468
- | **Docker Support** | ❌ | ✅ (templates) | ✅ | ✅ | ❌ | ✅ | ✅ (self-host) | ✅ (core feature) |
469
- | **Middleware System** | ✅ (pipeline) | ✅ (hooks) | ✅ (route) | ✅ (plugins) | ❌ | ✅ (middleware) | ❌ | ❌ |
470
- | **Browser Pool** | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ (managed) | ✅ (managed) |
471
- | **Sitemap Discovery** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ (/map) | ✅ (/map API) |
472
- | **Robots.txt** | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
473
- | **Screenshots** | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
474
- | **PDF Generation** | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
475
- | **Video Extraction** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
476
- | **Mobile Emulation** | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
477
- | **Tracing/Debug** | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ (Debug Viewer) |
478
-
479
- ---
480
-
481
- ## Architecture Insights
482
-
483
- ### 1. Crawlee's Architecture (Best Reference for webscrape)
484
-
485
- ```
486
- ┌─────────────────────────────────────────────────┐
487
- │ Crawlee │
488
- ├─────────────┬───────────────┬───────────────────┤
489
- │ Crawler │ Queue │ Storage │
490
- │ (strategy) │ (persistent) │ (pluggable) │
491
- ├─────────────┼───────────────┼───────────────────┤
492
- │ Playwright │ Request Queue │ Dataset │
493
- │ Puppeteer │ (FIFO/LIFO) │ Key-Value Store │
494
- │ Cheerio │ │ Request Queue │
495
- │ JSDOM │ │ (local/cloud) │
496
- │ Basic HTTP │ │ │
497
- └─────────────┴───────────────┴───────────────────┘
498
- ↓ ↓ ↓
499
- Auto-scaling Session Mgmt Proxy Rotation
500
- ```
501
-
502
- **Key insight:** Crawlee's power comes from the separation of concerns — crawlers, queues, and storage are independent, pluggable components. webscrape could benefit from this modularity.
503
-
504
- ### 2. Scrapy's Middleware Pipeline (Most Mature Pattern)
505
-
506
- ```
507
- Request → [Downloader Middlewares] → Downloader → [Spider Middlewares] → Spider → [Item Pipelines] → Export
508
- ↓ ↓ ↓
509
- Proxy rotation Response processing Data validation
510
- Headers/cookies Link extraction Deduplication
511
- Retry logic Character encoding Storage
512
- Redirect handling
513
- ```
514
-
515
- **Key insight:** Scrapy's middleware pattern is the most battle-tested approach. webscrape's `MiddlewarePipeline` is a good start but lacks the three-tier separation (downloader → spider → pipeline).
516
-
517
- ### 3. Firecrawl's API-First Architecture (Most Modern)
518
-
519
- ```
520
- ┌─────────────┐ ┌──────────────┐ ┌────────────────┐
521
- │ API Layer │────→│ Orchestrator │────→│ Browser Pool │
522
- │ (REST/WS) │ │ (job queue) │ │ (Playwright) │
523
- └─────────────┘ └──────────────┘ └────────────────┘
524
- ↓ ↓
525
- ┌──────────────┐ ┌────────────────┐
526
- │ AI Models │ │ Proxy Pool │
527
- │ (Spark) │ │ (residential) │
528
- └──────────────┘ └────────────────┘
529
- ↓ ↓
530
- ┌──────────────────────────────────┐
531
- │ Output (Markdown/JSON/Screenshot)│
532
- └──────────────────────────────────┘
533
- ```
534
-
535
- **Key insight:** Firecrawl's success comes from treating scraping as an API service, not a library. webscrape has a server (`server.ts`) but it's basic compared to Firecrawl's managed infrastructure.
536
-
537
- ### 4. Browserless's Docker-First Architecture
538
-
539
- ```
540
- ┌──────────────────────────────────────┐
541
- │ Docker Container │
542
- ├──────────────┬───────────────────────┤
543
- │ Gateway │ Queue Manager │
544
- │ (WS/HTTP) │ (concurrency limits) │
545
- ├──────────────┴───────────────────────┤
546
- │ Session Manager │
547
- │ (isolation, persistence, replay) │
548
- ├──────────────────────────────────────┤
549
- │ Browser Pool │
550
- │ (Chromium/Firefox/WebKit) │
551
- ├──────────────────────────────────────┤
552
- │ Anti-Detection Layer │
553
- │ (BrowserQL, fingerprints, proxies) │
554
- └──────────────────────────────────────┘
555
- ```
556
-
557
- **Key insight:** Browserless succeeds by containerizing the browser and providing multiple access patterns (WebSocket, REST). webscrape's Docker support is a critical gap.
558
-
559
- ---
560
-
561
- ## Critical Gaps in Webscrape
562
-
563
- ### Gap 1: No Anti-Detection / Stealth (CRITICAL)
564
-
565
- **Current:** Only basic User-Agent rotation in `headers.ts` (4 profiles).
566
- **Competitors:** Crawlee generates human-like fingerprints. Firecrawl uses residential proxies + stealth. Browserless has BrowserQL.
567
- **Impact:** webscrape will fail against Cloudflare, DataDome, PerimeterX, and similar bot protection.
568
-
569
- **Recommendation:**
570
- - Integrate `puppeteer-extra-plugin-stealth` (already in optionalDependencies)
571
- - Add TLS fingerprint randomization
572
- - Add canvas/WebGL fingerprint spoofing
573
- - Add navigator property randomization
574
-
575
- ### Gap 2: No Persistent Queue (HIGH)
576
-
577
- **Current:** Crawler uses in-memory `Set` and `Array` for visited tracking and queue.
578
- **Competitors:** Crawlee has persistent request queue (survives restarts). Scrapy uses SQLite/memory. Firecrawl manages queues server-side.
579
- **Impact:** Cannot resume crawls, cannot handle millions of URLs, no crash recovery.
580
-
581
- **Recommendation:**
582
- - Add SQLite-backed request queue (already has `better-sqlite3` dependency)
583
- - Add Redis queue option for distributed crawling
584
- - Implement crawl state persistence
585
-
586
- ### Gap 3: No Docker Support (HIGH)
587
-
588
- **Current:** No Dockerfile, no container deployment.
589
- **Competitors:** All major competitors offer Docker support. Browserless is Docker-first.
590
- **Impact:** Cannot be deployed in containers, no Kubernetes support, no serverless deployment.
591
-
592
- **Recommendation:**
593
- - Add `Dockerfile` for the HTTP server
594
- - Add `docker-compose.yml` with optional Redis/SQLite
595
- - Add deployment docs for Railway, Fly.io, AWS ECS
596
-
597
- ### Gap 4: No MCP Server (MEDIUM-HIGH)
598
-
599
- **Current:** No MCP integration.
600
- **Competitors:** Playwright, Firecrawl, and Browserless all have MCP servers.
601
- **Impact:** Cannot be used by AI agents (Claude, Cursor, Windsurf) natively.
602
-
603
- **Recommendation:**
604
- - Create `@wenathlan/webscrape-mcp` package
605
- - Expose scrape/crawl/batch endpoints as MCP tools
606
- - Integrate with Claude Desktop, VS Code, Cursor
607
-
608
- ### Gap 5: No Persistent Session Management (MEDIUM)
609
-
610
- **Current:** `CookieJar` and `ScrapingSession` are in-memory only.
611
- **Competitors:** Crawlee persists sessions to disk. Browserless persists for 90 days.
612
- **Impact:** Cannot maintain login state across restarts, cannot share sessions.
613
-
614
- **Recommendation:**
615
- - Add file-based session persistence
616
- - Add Redis session storage option
617
- - Add session export/import
618
-
619
- ### Gap 6: No XPath Support (MEDIUM)
620
-
621
- **Current:** Only CSS selectors via Cheerio.
622
- **Competitors:** Scrapy has built-in XPath. Playwright supports both CSS and XPath.
623
- **Impact:** Many scraping patterns require XPath (especially for complex DOM navigation).
624
-
625
- **Recommendation:**
626
- - XPath is already available via Cheerio's `cheerio-select` — just needs documentation
627
- - Consider adding `xpath` package for advanced XPath 2.0+ support
628
-
629
- ### Gap 7: No PDF/Video Extraction (MEDIUM)
630
-
631
- **Current:** Screenshots only, no PDF generation, no video extraction.
632
- **Competitors:** Firecrawl extracts videos and PDFs. Browserless generates PDFs. Playwright/Puppeteer have PDF support.
633
- **Impact:** Cannot handle common scraping use cases (PDF reports, video content).
634
-
635
- **Recommendation:**
636
- - Add PDF generation via Playwright's `page.pdf()`
637
- - Add PDF content extraction via `pdf-parse`
638
- - Add video URL detection (YouTube/TikTok metadata)
639
-
640
- ### Gap 8: No Structured Output with Zod Schemas (MEDIUM)
641
-
642
- **Current:** `formatForAgent` generates generic agent output.
643
- **Competitors:** Firecrawl allows Zod schema for typed extraction. Crawlee has structured output.
644
- **Impact:** Cannot extract specific data structures from pages.
645
-
646
- **Recommendation:**
647
- - Add `extractWithSchema(url, schema)` function
648
- - Use Zod for runtime validation
649
- - Generate typed TypeScript output
650
-
651
- ### Gap 9: No Webhook Support (LOW-MEDIUM)
652
-
653
- **Current:** No webhook/event notification system.
654
- **Competitors:** Firecrawl has webhooks for async operations. Browserless has webhook integrations.
655
- **Impact:** Cannot notify external systems of crawl completion or errors.
656
-
657
- **Recommendation:**
658
- - Add webhook configuration to crawl/batch operations
659
- - Support HTTP POST callbacks on completion/error
660
-
661
- ### Gap 10: No Adaptive Rendering Detection (LOW-MEDIUM)
662
-
663
- **Current:** `detectRenderingMode()` in `fetch.ts` is basic.
664
- **Competitors:** Crawlee's adaptive crawler persists rendering type detection results.
665
- **Impact:** Same pages may be re-evaluated on every crawl.
666
-
667
- **Recommendation:**
668
- - Cache rendering mode decisions per domain
669
- - Use heuristics: frameworks (React/Vue/Angular), API calls, etc.
670
-
671
- ---
672
-
673
- ## Recommendations
674
-
675
- ### Priority 1: Anti-Detection (Immediate)
676
- The `puppeteer-extra-plugin-stealth` is already in `optionalDependencies`. Make it a first-class feature:
677
- ```typescript
678
- // Add to browser.ts
679
- import StealthPlugin from 'puppeteer-extra-plugin-stealth';
680
- ```
681
-
682
- ### Priority 2: Persistent Queue (Week 1)
683
- Use the existing `better-sqlite3` dependency:
684
- ```typescript
685
- // New file: queue.ts
686
- class SqliteQueue {
687
- private db: Database;
688
- // ... persistent request queue with dedup
689
- }
690
- ```
691
-
692
- ### Priority 3: Docker Support (Week 1)
693
- Add Dockerfile for the HTTP server mode.
694
-
695
- ### Priority 4: MCP Server (Week 2)
696
- Create MCP server package for AI agent integration.
697
-
698
- ### Priority 5: Session Persistence (Week 2)
699
- Add file/SQLite-based session storage.
700
-
701
- ### Priority 6: Structured Extraction (Week 3)
702
- Add Zod-based schema extraction.
703
-
704
- ---
705
-
706
- ## What Webscrape Does BETTER Than Competitors
707
-
708
- 1. **All-in-one toolkit** — scraping + serialization + AI formatting + server in one package
709
- 2. **Cross-runtime** — Node.js AND Bun support (unique)
710
- 3. **Multi-format serialization** — Markdown, XML, JSON, Redis, plain text
711
- 4. **Token estimation** — built-in LLM token counting
712
- 5. **Chunking for RAG** — content splitting for retrieval-augmented generation
713
- 6. **LLMs.txt generation** — unique feature for AI discoverability
714
- 7. **Lightweight** — no cloud dependency, no Docker required
715
- 8. **Middleware pipeline** — composable processing chain
716
- 9. **Browser pool** — efficient instance reuse
717
- 10. **Server mode** — instant REST API from any scraping logic
718
-
719
- ---
720
-
721
- *This research was compiled from official documentation, GitHub repositories, and npm registries as of June 2026.*