@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.
- package/Dockerfile +1339 -0
- package/README.md +68 -22
- package/alternatives.ts +1218 -0
- package/biome.json +153 -0
- package/boards.json +1517 -0
- package/compute.ts +3144 -0
- package/cores.json +1801 -0
- package/dist/acquisition.d.ts +359 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +629 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/alternatives.d.ts +509 -0
- package/dist/alternatives.d.ts.map +1 -0
- package/dist/alternatives.js +951 -0
- package/dist/alternatives.js.map +1 -0
- package/dist/automation.d.ts +426 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +561 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +562 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1057 -0
- package/dist/browser.js.map +1 -0
- package/dist/capacitor.config.d.ts +13 -0
- package/dist/capacitor.config.d.ts.map +1 -0
- package/dist/capacitor.config.js +26 -0
- package/dist/capacitor.config.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/communication.d.ts +192 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +418 -0
- package/dist/communication.js.map +1 -0
- package/dist/compute.d.ts +1161 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +2273 -0
- package/dist/compute.js.map +1 -0
- package/dist/distribution.d.ts +529 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +811 -0
- package/dist/distribution.js.map +1 -0
- package/dist/execution.d.ts +530 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +761 -0
- package/dist/execution.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +60 -0
- package/dist/format.js.map +1 -0
- package/dist/foundation.d.ts +176 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +309 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +733 -122
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -122
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +236 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +236 -0
- package/dist/integration.js.map +1 -0
- package/dist/intelligence.d.ts +94 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +145 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/isolation.d.ts +129 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +96 -0
- package/dist/isolation.js.map +1 -0
- package/dist/media.d.ts +344 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +986 -0
- package/dist/media.js.map +1 -0
- package/dist/modes.d.ts +359 -0
- package/dist/modes.d.ts.map +1 -0
- package/dist/modes.js +134 -0
- package/dist/modes.js.map +1 -0
- package/dist/{library/public.d.ts → operations.d.ts} +15 -1
- package/dist/operations.d.ts.map +1 -0
- package/dist/{library/public.js → operations.js} +18 -7
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator.d.ts +1339 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4308 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/performance.d.ts +416 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +827 -0
- package/dist/performance.js.map +1 -0
- package/dist/quantum.d.ts +810 -0
- package/dist/quantum.d.ts.map +1 -0
- package/dist/quantum.js +2073 -0
- package/dist/quantum.js.map +1 -0
- package/dist/render.d.ts +381 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1073 -0
- package/dist/render.js.map +1 -0
- package/dist/scheduler.d.ts +596 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +1259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +501 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +1170 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/{server/node.js → server.js} +16 -2
- package/dist/server.js.map +1 -0
- package/dist/tiers.d.ts +1002 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +2165 -0
- package/dist/tiers.js.map +1 -0
- package/dist/virtual.d.ts +641 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1285 -0
- package/dist/virtual.js.map +1 -0
- package/dist/virtualcpu.d.ts +316 -0
- package/dist/virtualcpu.d.ts.map +1 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualcpu.js.map +1 -0
- package/dist/virtualgpu.d.ts +345 -0
- package/dist/virtualgpu.d.ts.map +1 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualgpu.js.map +1 -0
- package/dist/virtualization.d.ts +607 -0
- package/dist/virtualization.d.ts.map +1 -0
- package/dist/virtualization.js +1187 -0
- package/dist/virtualization.js.map +1 -0
- package/dist/virtualmemory.d.ts +818 -0
- package/dist/virtualmemory.d.ts.map +1 -0
- package/dist/virtualmemory.js +1796 -0
- package/dist/virtualmemory.js.map +1 -0
- package/dist/webscrape.d.ts +720 -0
- package/dist/webscrape.d.ts.map +1 -0
- package/dist/webscrape.js +2697 -0
- package/dist/webscrape.js.map +1 -0
- package/docker.config +769 -0
- package/docs/CONVERSA.txt +1523 -0
- package/docs/alternatives.md +499 -0
- package/docs/architecture-1.8.19.md +76 -0
- package/docs/architecture-1.8.19.mmd +33 -0
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/architecture.md +355 -0
- package/docs/artifactavailability.md +6 -0
- package/docs/brancharchive-2026-08-18.md +18 -0
- package/docs/browser.md +7 -0
- package/docs/consolidation.md +70 -0
- package/docs/e2ugh-engine.md +528 -0
- package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
- package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
- package/docs/hardware.md +342 -0
- package/docs/optimization.md +126 -0
- package/docs/performance.md +499 -0
- package/docs/planning.1.8.18.md +94 -0
- package/docs/planning.1.8.19.md +49 -0
- package/docs/releasenotes-1.8.17.md +6 -0
- package/docs/releasenotes-1.8.18.md +32 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.18-isolation.md +43 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.16.md +56 -1
- package/docs/todo-1.8.18.md +164 -0
- package/docs/todo-1.8.19.md +241 -0
- package/docs/viability.md +777 -0
- package/docs/virtualization.md +335 -0
- package/docs/web-duplicatecleanup.md +9 -0
- package/docs/web-ideas.md +106 -0
- package/docs/workflowimprovements-2026-08-19.md +70 -0
- package/gpumonitor.cpp +1543 -0
- package/gpus.json +2408 -0
- package/index.ts +1478 -0
- package/media.ts +1337 -0
- package/mttg.config +1549 -0
- package/orchestrator.ts +5462 -0
- package/package.json +304 -55
- package/passage.config +1331 -0
- package/performance.ts +1049 -0
- package/processors.json +2217 -0
- package/qemu.config +1062 -0
- package/qemubridge.py +1340 -0
- package/quantum.ts +2393 -0
- package/render.ts +1325 -0
- package/scheduler.ts +1600 -0
- package/security.ts +1449 -0
- package/tiers.ts +2871 -0
- package/tsconfig.json +29 -0
- package/virtualcpu.ts +1273 -0
- package/virtualgpu.ts +1181 -0
- package/virtualhardware.c +1011 -0
- package/virtualhardware.json +739 -0
- package/virtualization.ts +1628 -0
- package/virtualizationcore.cpp +4635 -0
- package/virtualmemory.ts +2303 -0
- package/vm.config.json +1910 -0
- package/{extension → web/extension}/manifest.json +1 -1
- package/web/readme.md +382 -0
- package/web/tsconfig.json +25 -0
- package/dist/adapters/forge.d.ts +0 -17
- package/dist/adapters/forge.d.ts.map +0 -1
- package/dist/adapters/forge.js +0 -19
- package/dist/adapters/forge.js.map +0 -1
- package/dist/adapters/forgejo.d.ts +0 -49
- package/dist/adapters/forgejo.d.ts.map +0 -1
- package/dist/adapters/forgejo.js +0 -8
- package/dist/adapters/forgejo.js.map +0 -1
- package/dist/adapters/github.d.ts +0 -12
- package/dist/adapters/github.d.ts.map +0 -1
- package/dist/adapters/github.js +0 -20
- package/dist/adapters/github.js.map +0 -1
- package/dist/adapters/gitlab.d.ts +0 -17
- package/dist/adapters/gitlab.d.ts.map +0 -1
- package/dist/adapters/gitlab.js +0 -10
- package/dist/adapters/gitlab.js.map +0 -1
- package/dist/adapters/huggingface.d.ts +0 -17
- package/dist/adapters/huggingface.d.ts.map +0 -1
- package/dist/adapters/huggingface.js +0 -6
- package/dist/adapters/huggingface.js.map +0 -1
- package/dist/adapters/socket.d.ts +0 -11
- package/dist/adapters/socket.d.ts.map +0 -1
- package/dist/adapters/socket.js +0 -17
- package/dist/adapters/socket.js.map +0 -1
- package/dist/adapters/transport.d.ts +0 -7
- package/dist/adapters/transport.d.ts.map +0 -1
- package/dist/adapters/transport.js +0 -36
- package/dist/adapters/transport.js.map +0 -1
- package/dist/ai/chunk.d.ts +0 -2
- package/dist/ai/chunk.d.ts.map +0 -1
- package/dist/ai/chunk.js +0 -36
- package/dist/ai/chunk.js.map +0 -1
- package/dist/ai/llmstxt.d.ts +0 -6
- package/dist/ai/llmstxt.d.ts.map +0 -1
- package/dist/ai/llmstxt.js +0 -12
- package/dist/ai/llmstxt.js.map +0 -1
- package/dist/ai/provenance.d.ts +0 -22
- package/dist/ai/provenance.d.ts.map +0 -1
- package/dist/ai/provenance.js +0 -25
- package/dist/ai/provenance.js.map +0 -1
- package/dist/ai/rag.d.ts +0 -26
- package/dist/ai/rag.d.ts.map +0 -1
- package/dist/ai/rag.js +0 -22
- package/dist/ai/rag.js.map +0 -1
- package/dist/ai/tokens.d.ts +0 -15
- package/dist/ai/tokens.d.ts.map +0 -1
- package/dist/ai/tokens.js +0 -9
- package/dist/ai/tokens.js.map +0 -1
- package/dist/api/auth.d.ts +0 -16
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -19
- package/dist/api/auth.js.map +0 -1
- package/dist/api/contracts.d.ts +0 -28
- package/dist/api/contracts.d.ts.map +0 -1
- package/dist/api/contracts.js +0 -14
- package/dist/api/contracts.js.map +0 -1
- package/dist/api/control.d.ts +0 -10
- package/dist/api/control.d.ts.map +0 -1
- package/dist/api/control.js +0 -35
- package/dist/api/control.js.map +0 -1
- package/dist/api/http.d.ts +0 -7
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/api/http.js.map +0 -1
- package/dist/api/rate.d.ts +0 -28
- package/dist/api/rate.d.ts.map +0 -1
- package/dist/api/rate.js +0 -36
- package/dist/api/rate.js.map +0 -1
- package/dist/api/security.d.ts +0 -12
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -56
- package/dist/api/security.js.map +0 -1
- package/dist/api/service.d.ts +0 -5
- package/dist/api/service.d.ts.map +0 -1
- package/dist/api/service.js +0 -70
- package/dist/api/service.js.map +0 -1
- package/dist/apps/registry.d.ts +0 -33
- package/dist/apps/registry.d.ts.map +0 -1
- package/dist/apps/registry.js +0 -24
- package/dist/apps/registry.js.map +0 -1
- package/dist/binary/archive.d.ts +0 -27
- package/dist/binary/archive.d.ts.map +0 -1
- package/dist/binary/archive.js +0 -46
- package/dist/binary/archive.js.map +0 -1
- package/dist/binary/build.d.ts +0 -29
- package/dist/binary/build.d.ts.map +0 -1
- package/dist/binary/build.js +0 -17
- package/dist/binary/build.js.map +0 -1
- package/dist/binary/transform.d.ts +0 -70
- package/dist/binary/transform.d.ts.map +0 -1
- package/dist/binary/transform.js +0 -105
- package/dist/binary/transform.js.map +0 -1
- package/dist/bot/adapter.d.ts +0 -5
- package/dist/bot/adapter.d.ts.map +0 -1
- package/dist/bot/adapter.js +0 -11
- package/dist/bot/adapter.js.map +0 -1
- package/dist/bot/bot.d.ts +0 -28
- package/dist/bot/bot.d.ts.map +0 -1
- package/dist/bot/bot.js +0 -52
- package/dist/bot/bot.js.map +0 -1
- package/dist/bot/commands.d.ts +0 -8
- package/dist/bot/commands.d.ts.map +0 -1
- package/dist/bot/commands.js +0 -19
- package/dist/bot/commands.js.map +0 -1
- package/dist/bot/permissions.d.ts +0 -13
- package/dist/bot/permissions.d.ts.map +0 -1
- package/dist/bot/permissions.js +0 -16
- package/dist/bot/permissions.js.map +0 -1
- package/dist/browser/actions.d.ts +0 -33
- package/dist/browser/actions.d.ts.map +0 -1
- package/dist/browser/actions.js +0 -44
- package/dist/browser/actions.js.map +0 -1
- package/dist/browser/agent.d.ts +0 -21
- package/dist/browser/agent.d.ts.map +0 -1
- package/dist/browser/agent.js +0 -13
- package/dist/browser/agent.js.map +0 -1
- package/dist/browser/context.d.ts +0 -43
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js +0 -54
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/fingerprint.d.ts +0 -4
- package/dist/browser/fingerprint.d.ts.map +0 -1
- package/dist/browser/fingerprint.js +0 -12
- package/dist/browser/fingerprint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -11
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -11
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/playwright.d.ts +0 -11
- package/dist/browser/playwright.d.ts.map +0 -1
- package/dist/browser/playwright.js +0 -24
- package/dist/browser/playwright.js.map +0 -1
- package/dist/browser/recorder.d.ts +0 -21
- package/dist/browser/recorder.d.ts.map +0 -1
- package/dist/browser/recorder.js +0 -58
- package/dist/browser/recorder.js.map +0 -1
- package/dist/browser/session.d.ts +0 -14
- package/dist/browser/session.d.ts.map +0 -1
- package/dist/browser/session.js +0 -21
- package/dist/browser/session.js.map +0 -1
- package/dist/browser/snapshot.d.ts +0 -69
- package/dist/browser/snapshot.d.ts.map +0 -1
- package/dist/browser/snapshot.js +0 -133
- package/dist/browser/snapshot.js.map +0 -1
- package/dist/captcha/contract.d.ts +0 -35
- package/dist/captcha/contract.d.ts.map +0 -1
- package/dist/captcha/contract.js +0 -17
- package/dist/captcha/contract.js.map +0 -1
- package/dist/captcha/evidence.d.ts +0 -10
- package/dist/captcha/evidence.d.ts.map +0 -1
- package/dist/captcha/evidence.js +0 -9
- package/dist/captcha/evidence.js.map +0 -1
- package/dist/captcha/guard.d.ts +0 -23
- package/dist/captcha/guard.d.ts.map +0 -1
- package/dist/captcha/guard.js +0 -12
- package/dist/captcha/guard.js.map +0 -1
- package/dist/cli/main.d.ts +0 -4
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -46
- package/dist/cli/main.js.map +0 -1
- package/dist/core/errors.d.ts +0 -84
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -54
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events.d.ts +0 -9
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -21
- package/dist/core/events.js.map +0 -1
- package/dist/core/hash.d.ts +0 -10
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -82
- package/dist/core/hash.js.map +0 -1
- package/dist/core/ids.d.ts +0 -10
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -15
- package/dist/core/ids.js.map +0 -1
- package/dist/delivery/manifest.d.ts +0 -35
- package/dist/delivery/manifest.d.ts.map +0 -1
- package/dist/delivery/manifest.js +0 -68
- package/dist/delivery/manifest.js.map +0 -1
- package/dist/deploy/index.d.ts +0 -6
- package/dist/deploy/index.d.ts.map +0 -1
- package/dist/deploy/index.js +0 -6
- package/dist/deploy/index.js.map +0 -1
- package/dist/dispatch/resumable.d.ts +0 -102
- package/dist/dispatch/resumable.d.ts.map +0 -1
- package/dist/dispatch/resumable.js +0 -64
- package/dist/dispatch/resumable.js.map +0 -1
- package/dist/dispatch/workflow.d.ts +0 -6
- package/dist/dispatch/workflow.d.ts.map +0 -1
- package/dist/dispatch/workflow.js +0 -37
- package/dist/dispatch/workflow.js.map +0 -1
- package/dist/domain/artifacts.d.ts +0 -12
- package/dist/domain/artifacts.d.ts.map +0 -1
- package/dist/domain/artifacts.js +0 -14
- package/dist/domain/artifacts.js.map +0 -1
- package/dist/domain/jobs.d.ts +0 -12
- package/dist/domain/jobs.d.ts.map +0 -1
- package/dist/domain/jobs.js +0 -20
- package/dist/domain/jobs.js.map +0 -1
- package/dist/domain/providers.d.ts +0 -10
- package/dist/domain/providers.d.ts.map +0 -1
- package/dist/domain/providers.js +0 -8
- package/dist/domain/providers.js.map +0 -1
- package/dist/domain/runtime.d.ts +0 -14
- package/dist/domain/runtime.d.ts.map +0 -1
- package/dist/domain/runtime.js +0 -10
- package/dist/domain/runtime.js.map +0 -1
- package/dist/domain/sessions.d.ts +0 -12
- package/dist/domain/sessions.d.ts.map +0 -1
- package/dist/domain/sessions.js +0 -57
- package/dist/domain/sessions.js.map +0 -1
- package/dist/examples/localjob.d.ts +0 -2
- package/dist/examples/localjob.d.ts.map +0 -1
- package/dist/examples/localjob.js.map +0 -1
- package/dist/examples/publicapi.d.ts +0 -2
- package/dist/examples/publicapi.d.ts.map +0 -1
- package/dist/examples/publicapi.js.map +0 -1
- package/dist/extension/build.d.ts +0 -9
- package/dist/extension/build.d.ts.map +0 -1
- package/dist/extension/build.js +0 -85
- package/dist/extension/build.js.map +0 -1
- package/dist/extension/content.d.ts +0 -6
- package/dist/extension/content.d.ts.map +0 -1
- package/dist/extension/content.js +0 -135
- package/dist/extension/content.js.map +0 -1
- package/dist/extension/index.d.ts +0 -7
- package/dist/extension/index.d.ts.map +0 -1
- package/dist/extension/index.js +0 -7
- package/dist/extension/index.js.map +0 -1
- package/dist/extension/pagebridge.d.ts +0 -6
- package/dist/extension/pagebridge.d.ts.map +0 -1
- package/dist/extension/pagebridge.js +0 -42
- package/dist/extension/pagebridge.js.map +0 -1
- package/dist/extension/permissions.d.ts +0 -26
- package/dist/extension/permissions.d.ts.map +0 -1
- package/dist/extension/permissions.js +0 -28
- package/dist/extension/permissions.js.map +0 -1
- package/dist/extension/popup.d.ts +0 -5
- package/dist/extension/popup.d.ts.map +0 -1
- package/dist/extension/popup.js +0 -26
- package/dist/extension/popup.js.map +0 -1
- package/dist/extension/protocol.d.ts +0 -58
- package/dist/extension/protocol.d.ts.map +0 -1
- package/dist/extension/protocol.js +0 -101
- package/dist/extension/protocol.js.map +0 -1
- package/dist/extension/serviceworker.d.ts +0 -25
- package/dist/extension/serviceworker.d.ts.map +0 -1
- package/dist/extension/serviceworker.js +0 -102
- package/dist/extension/serviceworker.js.map +0 -1
- package/dist/extension/worker.d.ts +0 -28
- package/dist/extension/worker.d.ts.map +0 -1
- package/dist/extension/worker.js +0 -22
- package/dist/extension/worker.js.map +0 -1
- package/dist/format/check.d.ts +0 -8
- package/dist/format/check.d.ts.map +0 -1
- package/dist/format/check.js +0 -38
- package/dist/format/check.js.map +0 -1
- package/dist/library/public.d.ts.map +0 -1
- package/dist/library/public.js.map +0 -1
- package/dist/mcp/browser.d.ts +0 -9
- package/dist/mcp/browser.d.ts.map +0 -1
- package/dist/mcp/browser.js +0 -13
- package/dist/mcp/browser.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -35
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -40
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -7
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -17
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/bridge.d.ts +0 -14
- package/dist/memory/bridge.d.ts.map +0 -1
- package/dist/memory/bridge.js +0 -16
- package/dist/memory/bridge.js.map +0 -1
- package/dist/memory/engine.d.ts +0 -38
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -109
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/modes.d.ts +0 -43
- package/dist/memory/modes.d.ts.map +0 -1
- package/dist/memory/modes.js +0 -66
- package/dist/memory/modes.js.map +0 -1
- package/dist/memory/objects.d.ts +0 -21
- package/dist/memory/objects.d.ts.map +0 -1
- package/dist/memory/objects.js +0 -20
- package/dist/memory/objects.js.map +0 -1
- package/dist/memory/planner.d.ts +0 -66
- package/dist/memory/planner.d.ts.map +0 -1
- package/dist/memory/planner.js +0 -108
- package/dist/memory/planner.js.map +0 -1
- package/dist/memory/targets.d.ts +0 -78
- package/dist/memory/targets.d.ts.map +0 -1
- package/dist/memory/targets.js +0 -29
- package/dist/memory/targets.js.map +0 -1
- package/dist/memory/transforms.d.ts +0 -19
- package/dist/memory/transforms.d.ts.map +0 -1
- package/dist/memory/transforms.js +0 -14
- package/dist/memory/transforms.js.map +0 -1
- package/dist/modes/matrix.d.ts +0 -23
- package/dist/modes/matrix.d.ts.map +0 -1
- package/dist/modes/matrix.js +0 -18
- package/dist/modes/matrix.js.map +0 -1
- package/dist/modes/modes.d.ts +0 -33
- package/dist/modes/modes.d.ts.map +0 -1
- package/dist/modes/modes.js +0 -15
- package/dist/modes/modes.js.map +0 -1
- package/dist/modes/resolve.d.ts +0 -96
- package/dist/modes/resolve.d.ts.map +0 -1
- package/dist/modes/resolve.js +0 -48
- package/dist/modes/resolve.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -14
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -18
- package/dist/observability/metrics.js.map +0 -1
- package/dist/packager/manifest.d.ts +0 -66
- package/dist/packager/manifest.d.ts.map +0 -1
- package/dist/packager/manifest.js +0 -94
- package/dist/packager/manifest.js.map +0 -1
- package/dist/packager/publish.d.ts +0 -51
- package/dist/packager/publish.d.ts.map +0 -1
- package/dist/packager/publish.js +0 -18
- package/dist/packager/publish.js.map +0 -1
- package/dist/packager/targetcli.d.ts +0 -7
- package/dist/packager/targetcli.d.ts.map +0 -1
- package/dist/packager/targetcli.js +0 -22
- package/dist/packager/targetcli.js.map +0 -1
- package/dist/persistence/adapter.d.ts +0 -5
- package/dist/persistence/adapter.d.ts.map +0 -1
- package/dist/persistence/adapter.js +0 -11
- package/dist/persistence/adapter.js.map +0 -1
- package/dist/persistence/drizzle.d.ts +0 -2
- package/dist/persistence/drizzle.d.ts.map +0 -1
- package/dist/persistence/drizzle.js +0 -12
- package/dist/persistence/drizzle.js.map +0 -1
- package/dist/persistence/memory.d.ts +0 -2
- package/dist/persistence/memory.d.ts.map +0 -1
- package/dist/persistence/memory.js +0 -27
- package/dist/persistence/memory.js.map +0 -1
- package/dist/persistence/migrations.d.ts +0 -19
- package/dist/persistence/migrations.d.ts.map +0 -1
- package/dist/persistence/migrations.js +0 -13
- package/dist/persistence/migrations.js.map +0 -1
- package/dist/persistence/prisma.d.ts +0 -2
- package/dist/persistence/prisma.d.ts.map +0 -1
- package/dist/persistence/prisma.js +0 -25
- package/dist/persistence/prisma.js.map +0 -1
- package/dist/persistence/schema.d.ts +0 -63
- package/dist/persistence/schema.d.ts.map +0 -1
- package/dist/persistence/schema.js +0 -28
- package/dist/persistence/schema.js.map +0 -1
- package/dist/persistence/sql.d.ts +0 -3
- package/dist/persistence/sql.d.ts.map +0 -1
- package/dist/persistence/sql.js +0 -37
- package/dist/persistence/sql.js.map +0 -1
- package/dist/protocol/blocks.d.ts +0 -10
- package/dist/protocol/blocks.d.ts.map +0 -1
- package/dist/protocol/blocks.js +0 -26
- package/dist/protocol/blocks.js.map +0 -1
- package/dist/protocol/json.d.ts +0 -6
- package/dist/protocol/json.d.ts.map +0 -1
- package/dist/protocol/json.js +0 -6
- package/dist/protocol/json.js.map +0 -1
- package/dist/protocol/ndjson.d.ts +0 -3
- package/dist/protocol/ndjson.d.ts.map +0 -1
- package/dist/protocol/ndjson.js +0 -20
- package/dist/protocol/ndjson.js.map +0 -1
- package/dist/protocol/sse.d.ts +0 -7
- package/dist/protocol/sse.d.ts.map +0 -1
- package/dist/protocol/sse.js +0 -25
- package/dist/protocol/sse.js.map +0 -1
- package/dist/proxy/pool.d.ts +0 -9
- package/dist/proxy/pool.d.ts.map +0 -1
- package/dist/proxy/pool.js +0 -27
- package/dist/proxy/pool.js.map +0 -1
- package/dist/queue/idempotency.d.ts +0 -10
- package/dist/queue/idempotency.d.ts.map +0 -1
- package/dist/queue/idempotency.js +0 -13
- package/dist/queue/idempotency.js.map +0 -1
- package/dist/queue/persistent.d.ts +0 -14
- package/dist/queue/persistent.d.ts.map +0 -1
- package/dist/queue/persistent.js +0 -66
- package/dist/queue/persistent.js.map +0 -1
- package/dist/queue/queue.d.ts +0 -7
- package/dist/queue/queue.d.ts.map +0 -1
- package/dist/queue/queue.js +0 -55
- package/dist/queue/queue.js.map +0 -1
- package/dist/queue/saga.d.ts +0 -5
- package/dist/queue/saga.d.ts.map +0 -1
- package/dist/queue/saga.js +0 -20
- package/dist/queue/saga.js.map +0 -1
- package/dist/release/assets.d.ts +0 -144
- package/dist/release/assets.d.ts.map +0 -1
- package/dist/release/assets.js +0 -157
- package/dist/release/assets.js.map +0 -1
- package/dist/release/evidence.d.ts +0 -92
- package/dist/release/evidence.d.ts.map +0 -1
- package/dist/release/evidence.js +0 -148
- package/dist/release/evidence.js.map +0 -1
- package/dist/release/verify.d.ts +0 -12
- package/dist/release/verify.d.ts.map +0 -1
- package/dist/release/verify.js +0 -112
- package/dist/release/verify.js.map +0 -1
- package/dist/runners/chain.d.ts +0 -125
- package/dist/runners/chain.d.ts.map +0 -1
- package/dist/runners/chain.js +0 -95
- package/dist/runners/chain.js.map +0 -1
- package/dist/runners/health.d.ts +0 -36
- package/dist/runners/health.d.ts.map +0 -1
- package/dist/runners/health.js +0 -26
- package/dist/runners/health.js.map +0 -1
- package/dist/runners/heartbeat.d.ts +0 -23
- package/dist/runners/heartbeat.d.ts.map +0 -1
- package/dist/runners/heartbeat.js +0 -29
- package/dist/runners/heartbeat.js.map +0 -1
- package/dist/runners/inprocess.d.ts +0 -17
- package/dist/runners/inprocess.d.ts.map +0 -1
- package/dist/runners/inprocess.js +0 -20
- package/dist/runners/inprocess.js.map +0 -1
- package/dist/runners/scheduler.d.ts +0 -5
- package/dist/runners/scheduler.d.ts.map +0 -1
- package/dist/runners/scheduler.js +0 -19
- package/dist/runners/scheduler.js.map +0 -1
- package/dist/runtime/abort.d.ts +0 -8
- package/dist/runtime/abort.d.ts.map +0 -1
- package/dist/runtime/abort.js +0 -13
- package/dist/runtime/abort.js.map +0 -1
- package/dist/runtime/compatibility.d.ts +0 -37
- package/dist/runtime/compatibility.d.ts.map +0 -1
- package/dist/runtime/compatibility.js +0 -10
- package/dist/runtime/compatibility.js.map +0 -1
- package/dist/runtime/detect.d.ts +0 -13
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/detect.js +0 -18
- package/dist/runtime/detect.js.map +0 -1
- package/dist/runtime/engine.d.ts +0 -20
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/engine.js +0 -61
- package/dist/runtime/engine.js.map +0 -1
- package/dist/runtime/retry.d.ts +0 -19
- package/dist/runtime/retry.d.ts.map +0 -1
- package/dist/runtime/retry.js +0 -54
- package/dist/runtime/retry.js.map +0 -1
- package/dist/runtime/worker.d.ts +0 -10
- package/dist/runtime/worker.d.ts.map +0 -1
- package/dist/runtime/worker.js +0 -25
- package/dist/runtime/worker.js.map +0 -1
- package/dist/scrape/cache.d.ts +0 -45
- package/dist/scrape/cache.d.ts.map +0 -1
- package/dist/scrape/cache.js +0 -45
- package/dist/scrape/cache.js.map +0 -1
- package/dist/scrape/crawl.d.ts +0 -47
- package/dist/scrape/crawl.d.ts.map +0 -1
- package/dist/scrape/crawl.js +0 -114
- package/dist/scrape/crawl.js.map +0 -1
- package/dist/scrape/extract.d.ts +0 -63
- package/dist/scrape/extract.d.ts.map +0 -1
- package/dist/scrape/extract.js +0 -47
- package/dist/scrape/extract.js.map +0 -1
- package/dist/scrape/normalize.d.ts +0 -52
- package/dist/scrape/normalize.d.ts.map +0 -1
- package/dist/scrape/normalize.js +0 -102
- package/dist/scrape/normalize.js.map +0 -1
- package/dist/scrape/robots.d.ts +0 -37
- package/dist/scrape/robots.d.ts.map +0 -1
- package/dist/scrape/robots.js +0 -71
- package/dist/scrape/robots.js.map +0 -1
- package/dist/scrape/schema.d.ts +0 -23
- package/dist/scrape/schema.d.ts.map +0 -1
- package/dist/scrape/schema.js +0 -92
- package/dist/scrape/schema.js.map +0 -1
- package/dist/scrape/scraper.d.ts +0 -6
- package/dist/scrape/scraper.d.ts.map +0 -1
- package/dist/scrape/scraper.js +0 -46
- package/dist/scrape/scraper.js.map +0 -1
- package/dist/scrape/semantic.d.ts +0 -25
- package/dist/scrape/semantic.d.ts.map +0 -1
- package/dist/scrape/semantic.js +0 -27
- package/dist/scrape/semantic.js.map +0 -1
- package/dist/server/node.d.ts +0 -7
- package/dist/server/node.d.ts.map +0 -1
- package/dist/server/node.js.map +0 -1
- package/dist/sessions/file.d.ts +0 -25
- package/dist/sessions/file.d.ts.map +0 -1
- package/dist/sessions/file.js +0 -13
- package/dist/sessions/file.js.map +0 -1
- package/dist/sessions/replay.d.ts +0 -9
- package/dist/sessions/replay.d.ts.map +0 -1
- package/dist/sessions/replay.js +0 -70
- package/dist/sessions/replay.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -25
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -13
- package/dist/sessions/store.js.map +0 -1
- package/dist/storage/adapter.d.ts +0 -5
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js +0 -11
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/cache.d.ts +0 -23
- package/dist/storage/cache.d.ts.map +0 -1
- package/dist/storage/cache.js +0 -79
- package/dist/storage/cache.js.map +0 -1
- package/dist/storage/checksum.d.ts +0 -3
- package/dist/storage/checksum.d.ts.map +0 -1
- package/dist/storage/checksum.js +0 -19
- package/dist/storage/checksum.js.map +0 -1
- package/dist/storage/chunked.d.ts +0 -21
- package/dist/storage/chunked.d.ts.map +0 -1
- package/dist/storage/chunked.js +0 -67
- package/dist/storage/chunked.js.map +0 -1
- package/dist/storage/content.d.ts +0 -24
- package/dist/storage/content.d.ts.map +0 -1
- package/dist/storage/content.js +0 -44
- package/dist/storage/content.js.map +0 -1
- package/dist/storage/filehosting.d.ts +0 -2
- package/dist/storage/filehosting.d.ts.map +0 -1
- package/dist/storage/filehosting.js +0 -24
- package/dist/storage/filehosting.js.map +0 -1
- package/dist/storage/githubcontents.d.ts +0 -2
- package/dist/storage/githubcontents.d.ts.map +0 -1
- package/dist/storage/githubcontents.js +0 -29
- package/dist/storage/githubcontents.js.map +0 -1
- package/dist/storage/index.d.ts +0 -12
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -12
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/local.d.ts +0 -2
- package/dist/storage/local.d.ts.map +0 -1
- package/dist/storage/local.js +0 -72
- package/dist/storage/local.js.map +0 -1
- package/dist/storage/memory.d.ts +0 -6
- package/dist/storage/memory.d.ts.map +0 -1
- package/dist/storage/memory.js +0 -36
- package/dist/storage/memory.js.map +0 -1
- package/dist/storage/pool.d.ts +0 -95
- package/dist/storage/pool.d.ts.map +0 -1
- package/dist/storage/pool.js +0 -202
- package/dist/storage/pool.js.map +0 -1
- package/dist/storage/s3compatible.d.ts +0 -3
- package/dist/storage/s3compatible.d.ts.map +0 -1
- package/dist/storage/s3compatible.js +0 -70
- package/dist/storage/s3compatible.js.map +0 -1
- package/dist/storage/sync.d.ts +0 -47
- package/dist/storage/sync.d.ts.map +0 -1
- package/dist/storage/sync.js +0 -75
- package/dist/storage/sync.js.map +0 -1
- package/dist/surfaces/adapters.d.ts +0 -97
- package/dist/surfaces/adapters.d.ts.map +0 -1
- package/dist/surfaces/adapters.js +0 -50
- package/dist/surfaces/adapters.js.map +0 -1
- package/dist/surfaces/controls.d.ts +0 -18
- package/dist/surfaces/controls.d.ts.map +0 -1
- package/dist/surfaces/controls.js +0 -45
- package/dist/surfaces/controls.js.map +0 -1
- package/dist/surfaces/manifest.d.ts +0 -68
- package/dist/surfaces/manifest.d.ts.map +0 -1
- package/dist/surfaces/manifest.js +0 -42
- package/dist/surfaces/manifest.js.map +0 -1
- package/dist/surfaces/n8n.d.ts +0 -25
- package/dist/surfaces/n8n.d.ts.map +0 -1
- package/dist/surfaces/n8n.js +0 -31
- package/dist/surfaces/n8n.js.map +0 -1
- package/dist/surfaces/operations.d.ts +0 -32
- package/dist/surfaces/operations.d.ts.map +0 -1
- package/dist/surfaces/operations.js +0 -53
- package/dist/surfaces/operations.js.map +0 -1
- package/dist/surfaces/requirements.d.ts +0 -29
- package/dist/surfaces/requirements.d.ts.map +0 -1
- package/dist/surfaces/requirements.js +0 -50
- package/dist/surfaces/requirements.js.map +0 -1
- package/dist/surfaces/targets.d.ts +0 -196
- package/dist/surfaces/targets.d.ts.map +0 -1
- package/dist/surfaces/targets.js +0 -27
- package/dist/surfaces/targets.js.map +0 -1
- package/dist/webhook/delivery.d.ts +0 -18
- package/dist/webhook/delivery.d.ts.map +0 -1
- package/dist/webhook/delivery.js +0 -36
- package/dist/webhook/delivery.js.map +0 -1
- package/dist/webhook/receiver.d.ts +0 -26
- package/dist/webhook/receiver.d.ts.map +0 -1
- package/dist/webhook/receiver.js +0 -24
- package/dist/webhook/receiver.js.map +0 -1
- package/dist/webhook/signature.d.ts +0 -3
- package/dist/webhook/signature.d.ts.map +0 -1
- package/dist/webhook/signature.js +0 -7
- package/dist/webhook/signature.js.map +0 -1
- package/dist/workflow/manifest.d.ts +0 -22
- package/dist/workflow/manifest.d.ts.map +0 -1
- package/dist/workflow/manifest.js +0 -21
- package/dist/workflow/manifest.js.map +0 -1
- package/dist/workflow/registry.d.ts +0 -7
- package/dist/workflow/registry.d.ts.map +0 -1
- package/dist/workflow/registry.js +0 -18
- package/dist/workflow/registry.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -6
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -18
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/triggers.d.ts +0 -64
- package/dist/workflow/triggers.d.ts.map +0 -1
- package/dist/workflow/triggers.js +0 -99
- package/dist/workflow/triggers.js.map +0 -1
- package/docs/logs/.gitkeep +0 -0
- package/docs/plans/00.index.md +0 -50
- package/docs/plans/01.architecture.md +0 -86
- package/docs/plans/02.research.computer.use.md +0 -58
- package/docs/plans/03.research.captcha.bypass.md +0 -68
- package/docs/plans/04.research.sandbox.ai.md +0 -52
- package/docs/plans/05.capture.platform.md +0 -57
- package/docs/plans/06.dependencies.md +0 -97
- package/docs/plans/07.captcha.test.page.md +0 -41
- package/docs/plans/08.production.infra.md +0 -70
- package/docs/plans/09.database.schema.md +0 -121
- package/docs/plans/10.cloudinary.storage.md +0 -57
- package/docs/plans/11.movement.logs.json.md +0 -72
- package/docs/plans/12.research.atlas.agent.browser.md +0 -79
- package/docs/plans/13.research.anti.detection.md +0 -898
- package/docs/plans/14.research.proxy.md +0 -1495
- package/docs/plans/15.research.retry.rate.limit.md +0 -1958
- package/docs/plans/16.research.crawling.md +0 -1417
- package/docs/plans/17.research.caching.md +0 -1610
- package/docs/plans/18.research.content.extraction.md +0 -1952
- package/docs/plans/19.research.errors.events.md +0 -1523
- package/docs/plans/20.research.zod.validation.md +0 -1350
- package/docs/plans/21.research.batch.concurrency.md +0 -1888
- package/docs/plans/22.research.universal.runtime.md +0 -944
- package/docs/plans/23.research.ai.integration.md +0 -1465
- package/docs/plans/24.research.memory.persistence.md +0 -1979
- package/docs/plans/25.research.server.api.md +0 -342
- package/docs/plans/26.research.compilation.md +0 -249
- package/docs/plans/27.research.html.parsing.md +0 -251
- package/docs/plans/28.action.plan.md +0 -50
- package/docs/plans/29.api.reference.md +0 -174
- package/docs/plans/30.architecture.plan.md +0 -94
- package/docs/plans/31.auditoria.dados.md +0 -163
- package/docs/plans/32.bots.automacao.computacional.md +0 -214
- package/docs/plans/33.bots.codigo.revisao.md +0 -220
- package/docs/plans/34.bots.seguranca.cicd.md +0 -366
- package/docs/plans/35.comparativo.concorrencia.md +0 -464
- package/docs/plans/36.computational.memory.md +0 -340
- package/docs/plans/37.deploystrategy.md +0 -394
- package/docs/plans/38.flow.md +0 -155
- package/docs/plans/39.multi.platform.bot.md +0 -252
- package/docs/plans/40.npm.publish.md +0 -250
- package/docs/plans/41.o.que.falta.md +0 -407
- package/docs/plans/42.pesquisa.concorrencia.md +0 -721
- package/docs/plans/43.plan.universal.architecture.md +0 -496
- package/docs/plans/44.reference.md +0 -100
- package/docs/plans/45.robotarchitecture.md +0 -237
- package/docs/plans/46.scdnintegration.md +0 -284
- package/docs/plans/47.multiforge.readme.md +0 -129
- package/docs/plans/48.theory.v4.repo.os.md +0 -152
- package/docs/plans/49.third.party.infra.md +0 -12
- package/docs/plans/50.file.as.compute.md +0 -39
- package/docs/plans/51.architecture.virtual.processor.md +0 -80
- package/docs/plans/52.manifesto.v8.md +0 -11
- package/docs/plans/58.cdn.list.md +0 -23
- package/docs/plans/59.sql.frameworks.md +0 -33
- package/docs/plans/60.sql.thirdparty.md +0 -26
- package/docs/plans/61.objective.multiforge.md +0 -63
- package/docs/plans/62.huggingface.upload.md +0 -26
- package/docs/plans/63.kaggle.upload.md +0 -24
- package/docs/plans/64.npm.storage.md +0 -30
- package/docs/plans/65.rclone.terabox.md +0 -32
- package/docs/plans/66.buckets.and.models.todo.md +0 -14
- package/docs/plans/67.database.todo.md +0 -13
- package/docs/plans/68.deploy.packages.todo.md +0 -12
- package/docs/plans/69.report.human.operator.md +0 -133
- package/docs/plans/70.report.brain2qwerty.ems.md +0 -135
- package/docs/plans/71.report.hd.infinito.vram.md +0 -155
- package/docs/plans/72.plan.hd.infinito.node.md +0 -146
- package/docs/plans/73.plan.scifi.repos.md +0 -125
- package/docs/plans/74.000.manifesto.v8.flat.2..md +0 -11
- package/docs/plans/README.md +0 -489
- package/docs/plans/aggregate_platforms.mjs +0 -146
- package/docs/plans/examplesession.json +0 -36
- package/docs/plans/missing-facts.md +0 -192
- package/docs/plans/models.md +0 -64
- package/docs/plans/organize.cjs +0 -270
- package/docs/plans/platforms.md +0 -2887
- package/docs/plans/sites.md +0 -31322
- package/docs/sources/farm.py +0 -117
- package/docs/sources/html/saddle1.html +0 -132
- package/docs/sources/html/saddle2.html +0 -157
- package/docs/sources/html/saddle3.html +0 -119
- package/docs/sources/html/saddle4.html +0 -144
- package/docs/sources/html/saddle5.html +0 -72
- package/docs/sources/html/saddle6.html +0 -171
- package/docs/sources/html/saddle7.html +0 -236
- package/docs/sources/saddle.ts +0 -74
- package/docs/sources/schema.prisma +0 -88
- package/docs/sources/script.sh +0 -64
- package/docs/sources/workflows.yml +0 -458
- package/docs/talks1/_body.txt +0 -14
- package/docs/talks1/_index.md +0 -15
- package/docs/talks1/_screenshot.png +0 -0
- package/docs/talks1/assistant-01.md +0 -5
- package/docs/talks1/assistant-02.md +0 -5
- package/docs/talks1/assistant-03.md +0 -531
- package/docs/talks1/assistant-04.md +0 -26
- package/docs/talks1/assistant-05.md +0 -774
- package/docs/talks1/assistant-06.md +0 -1718
- package/docs/talks1/scrape-share.cjs +0 -185
- package/docs/talks1/scrape-share.ts +0 -183
- package/docs/talks1/user-01.md +0 -3
- package/docs/talks1/user-02.md +0 -3
- package/docs/talks1/user-03.md +0 -88
- package/docs/talks1/user-04.md +0 -3
- package/docs/talks1/user-05.md +0 -3
- package/docs/talks1/user-06.md +0 -88
- package/docs/talks1/user-07.md +0 -88
- package/docs/talks2/_body.txt +0 -14
- package/docs/talks2/_index.md +0 -16
- package/docs/talks2/_screenshot.png +0 -0
- package/docs/talks2/assistant-01.md +0 -5
- package/docs/talks2/assistant-02.md +0 -5
- package/docs/talks2/assistant-03.md +0 -424
- package/docs/talks2/assistant-04.md +0 -598
- package/docs/talks2/assistant-05.md +0 -1280
- package/docs/talks2/assistant-06.md +0 -1227
- package/docs/talks2/assistant-07.md +0 -1252
- package/docs/talks2/user-01.md +0 -3
- package/docs/talks2/user-02.md +0 -3
- package/docs/talks2/user-03.md +0 -88
- package/docs/talks2/user-04.md +0 -88
- package/docs/talks2/user-05.md +0 -88
- package/docs/talks2/user-06.md +0 -88
- package/docs/talks2/user-07.md +0 -3
- package/docs/talks3/_body.txt +0 -467
- package/docs/talks3/_index.md +0 -10
- package/docs/talks3/_screenshot.png +0 -0
- package/docs/talks3/assistant-01.md +0 -417
- package/docs/talks3/assistant-02.md +0 -417
- package/docs/talks3/assistant-03.md +0 -29
- package/docs/talks3/assistant-04.md +0 -727
- package/docs/talks3/user-01.md +0 -88
- package/docs/talks3/user-02.md +0 -88
- package/docs/talks3/user-03.md +0 -3
- package/docs/talks3/user-04.md +0 -3
- package/docs/talks4/_body.txt +0 -14
- package/docs/talks4/_index.md +0 -12
- package/docs/talks4/_screenshot.png +0 -0
- package/docs/talks4/assistant-01.md +0 -5
- package/docs/talks4/assistant-02.md +0 -5
- package/docs/talks4/assistant-03.md +0 -35
- package/docs/talks4/assistant-04.md +0 -512
- package/docs/talks4/assistant-05.md +0 -599
- package/docs/talks4/user-01.md +0 -3
- package/docs/talks4/user-02.md +0 -3
- package/docs/talks4/user-03.md +0 -88
- package/docs/talks4/user-04.md +0 -88
- package/docs/talks4/user-05.md +0 -7
- package/docs/talks5/_body.txt +0 -14
- package/docs/talks5/_index.md +0 -13
- package/docs/talks5/_screenshot.png +0 -0
- package/docs/talks5/assistant-01.md +0 -5
- package/docs/talks5/assistant-02.md +0 -5
- package/docs/talks5/assistant-03.md +0 -690
- package/docs/talks5/assistant-04.md +0 -758
- package/docs/talks5/assistant-05.md +0 -974
- package/docs/talks5/user-01.md +0 -3
- package/docs/talks5/user-02.md +0 -3
- package/docs/talks5/user-03.md +0 -105
- package/docs/talks5/user-04.md +0 -105
- package/docs/talks5/user-05.md +0 -63
- package/docs/talks5/user-06.md +0 -105
- package/docs/talks6/_body.txt +0 -14
- package/docs/talks6/_index.md +0 -9
- package/docs/talks6/_screenshot.png +0 -0
- package/docs/talks6/assistant-01.md +0 -5
- package/docs/talks6/assistant-02.md +0 -5
- package/docs/talks6/assistant-03.md +0 -1499
- package/docs/talks6/user-01.md +0 -3
- package/docs/talks6/user-02.md +0 -3
- package/docs/talks6/user-03.md +0 -88
- package/docs/talks6/user-04.md +0 -88
- package/docs/talks7/_body.txt +0 -14
- package/docs/talks7/_index.md +0 -10
- package/docs/talks7/_screenshot.png +0 -0
- package/docs/talks7/assistant-01.md +0 -5
- package/docs/talks7/assistant-02.md +0 -5
- package/docs/talks7/assistant-03.md +0 -523
- package/docs/talks7/assistant-04.md +0 -617
- package/docs/talks7/user-01.md +0 -3
- package/docs/talks7/user-02.md +0 -3
- package/docs/talks7/user-03.md +0 -105
- package/docs/talks7/user-04.md +0 -67
- package/docs/talks8/conversa1.txt +0 -1322
- package/docs/talks8/conversa2.txt +0 -237
- 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
- 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
- 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
- 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
- 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
- package/docs/talks9/README (2).md +0 -489
- package/docs/talks9/README.md +0 -198
- 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
- package/docs/talks9/conversa.txt +0 -544
- package/docs/talks9/other (2).md +0 -39
- package/docs/talks9/other.md +0 -57
- package/docs/talks9/outro.txt +0 -24
- /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.*
|