docpull 5.5.1__tar.gz → 6.0.1__tar.gz
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.
- {docpull-5.5.1/src/docpull.egg-info → docpull-6.0.1}/PKG-INFO +238 -152
- {docpull-5.5.1 → docpull-6.0.1}/README.md +223 -143
- {docpull-5.5.1 → docpull-6.0.1}/pyproject.toml +26 -15
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/__init__.py +49 -48
- docpull-6.0.1/src/docpull/agent_publish.py +185 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/auth_cli.py +87 -0
- docpull-6.0.1/src/docpull/basis.py +424 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/benchmark.py +44 -7
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/cli.py +115 -125
- docpull-6.0.1/src/docpull/context_aliases.py +132 -0
- docpull-6.0.1/src/docpull/context_ci.py +824 -0
- docpull-6.0.1/src/docpull/context_packs/__init__.py +35 -0
- docpull-5.5.1/src/docpull/context_packs/cli.py → docpull-6.0.1/src/docpull/context_packs/_legacy_cli.py +8 -39
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/brand.py +114 -7
- docpull-6.0.1/src/docpull/context_packs/cli.py +310 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/common.py +12 -0
- docpull-6.0.1/src/docpull/context_packs/dataset.py +311 -0
- docpull-6.0.1/src/docpull/context_packs/feed.py +919 -0
- docpull-6.0.1/src/docpull/context_packs/openapi.py +519 -0
- docpull-6.0.1/src/docpull/context_packs/package.py +377 -0
- docpull-6.0.1/src/docpull/context_packs/paper.py +572 -0
- docpull-6.0.1/src/docpull/context_packs/repo.py +831 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/schema_extract.py +111 -14
- docpull-6.0.1/src/docpull/context_packs/standards.py +459 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/styleguide.py +4 -2
- docpull-6.0.1/src/docpull/context_packs/transcript.py +276 -0
- docpull-6.0.1/src/docpull/context_packs/typed.py +533 -0
- docpull-6.0.1/src/docpull/context_packs/typed_models.py +81 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/visuals.py +13 -9
- docpull-6.0.1/src/docpull/context_packs/wiki.py +447 -0
- docpull-6.0.1/src/docpull/conversion/article_cleanup.py +115 -0
- docpull-6.0.1/src/docpull/conversion/ensemble.py +178 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/core/fetcher.py +7 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/contracts.py +111 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/doctor.py +40 -11
- docpull-6.0.1/src/docpull/document_parse.py +643 -0
- docpull-6.0.1/src/docpull/eval_grade.py +1375 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/exports.py +30 -4
- docpull-6.0.1/src/docpull/free_core.py +2168 -0
- docpull-6.0.1/src/docpull/free_core_smoke.py +474 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/http/client.py +65 -11
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/judge.py +4 -10
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/local_workflows.py +66 -4
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/mcp/server.py +14 -1158
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/mcp/sources.py +0 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/models/config.py +11 -2
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/models/document.py +33 -2
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/models/profiles.py +2 -2
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/models/run.py +1 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/monitor.py +275 -4
- docpull-6.0.1/src/docpull/output_contract.py +707 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pack_reader.py +60 -2
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pack_tools.py +625 -16
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/parallel_workflows.py +1 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/manifest.py +22 -4
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/convert.py +24 -2
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/save.py +3 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/save_json.py +6 -2
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/save_ndjson.py +3 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/save_okf.py +3 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/save_sqlite.py +136 -49
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/policy.py +14 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/policy_cli.py +20 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/project.py +846 -8
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/provider_cli.py +1 -1
- docpull-6.0.1/src/docpull/redaction.py +428 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/rendering.py +14 -13
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/source_scoring.py +91 -4
- docpull-6.0.1/src/docpull/surface.py +339 -0
- {docpull-5.5.1 → docpull-6.0.1/src/docpull.egg-info}/PKG-INFO +238 -152
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull.egg-info/SOURCES.txt +42 -1
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull.egg-info/requires.txt +16 -8
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_auth_cli.py +53 -0
- docpull-6.0.1/tests/test_basis.py +59 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_benchmark.py +12 -2
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_cache_conditional_get.py +2 -2
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_ci_policy.py +2 -1
- docpull-6.0.1/tests/test_claim_audit_script.py +74 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_cli.py +58 -21
- docpull-6.0.1/tests/test_context_ci.py +487 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_context_packs.py +172 -22
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_convert_step_new.py +47 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_discovery_contracts.py +17 -2
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_doctor.py +43 -2
- docpull-6.0.1/tests/test_document_parse.py +133 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_evidence_pack.py +22 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_exports.py +19 -0
- docpull-6.0.1/tests/test_extractor_ensemble.py +64 -0
- docpull-6.0.1/tests/test_feed_pack.py +250 -0
- docpull-6.0.1/tests/test_free_core.py +929 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_integration.py +1 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_judge.py +1 -1
- docpull-6.0.1/tests/test_live_web_smoke.py +75 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_local_workflows.py +1 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_mcp_server.py +13 -123
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_mcp_tools.py +1 -1
- docpull-6.0.1/tests/test_openapi_pack.py +114 -0
- docpull-6.0.1/tests/test_optional_extras_installed.py +144 -0
- docpull-6.0.1/tests/test_output_contract.py +119 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_outputs_e2e.py +2 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_pack_tools.py +239 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_parallel_workflows.py +19 -12
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_parity_workflows.py +13 -2
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_policy.py +8 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_project.py +148 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_provider_cli.py +11 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_provider_keys.py +11 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_provider_probes.py +11 -1
- docpull-6.0.1/tests/test_public_feature_smoke.py +446 -0
- docpull-6.0.1/tests/test_real_feature_smoke_script.py +172 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_real_site_regressions.py +42 -0
- docpull-6.0.1/tests/test_release_a_plus_check_script.py +124 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_rendering.py +13 -12
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_save_ndjson.py +1 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_save_sqlite.py +1 -1
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_security_hardening.py +66 -0
- docpull-6.0.1/tests/test_source_scoring.py +40 -0
- docpull-6.0.1/tests/test_surface_contract.py +217 -0
- docpull-6.0.1/tests/test_typed_knowledge_packs.py +770 -0
- docpull-5.5.1/src/docpull/context_packs/__init__.py +0 -20
- docpull-5.5.1/tests/test_surface_contract.py +0 -221
- {docpull-5.5.1 → docpull-6.0.1}/LICENSE +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/setup.cfg +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/__main__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/accounting.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/cache/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/cache/frontier.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/cache/manager.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/cache/streaming_dedup.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/product.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/context_packs/search.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/chunking.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/extractor.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/filings.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/markdown.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/protocols.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/special_cases.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/conversion/trafilatura_extractor.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/core/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/_fetch.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/composite.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/crawler.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/filters.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/link_extractors/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/link_extractors/enhanced.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/link_extractors/protocols.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/link_extractors/static.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/protocols.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery/sitemap.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/discovery_cli.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/evidence_pack.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/fixtures/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/fixtures/parallel-search-extract.json +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/graph.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/hosted.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/http/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/http/protocols.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/http/rate_limiter.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/mcp/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/mcp/tools.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/metadata_extractor.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/models/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/models/events.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/parity.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/parity_cli.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/passk.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/base.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/chunk.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/dedup.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/fetch.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/metadata.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/render.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/pipeline/steps/validate.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/provider_adapters.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/provider_capabilities.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/provider_keys.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/provider_probes.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/py.typed +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/scraper.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/security/__init__.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/security/download_policy.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/security/robots.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/security/url_validator.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/server.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/share.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/skill_export.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull/time_utils.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull.egg-info/dependency_links.txt +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull.egg-info/entry_points.txt +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/src/docpull.egg-info/top_level.txt +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_accounting.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_chunking.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_conversion.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_discovery.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_document_record.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_frontier_resume.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_graph.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_hosted.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_link_extractors.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_metadata_extractor.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_monitor.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_naming.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_pack_server.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_passk.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_pipeline.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_policy_cli.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_provider_adapters.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_rate_limiter.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_share.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_special_cases.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_time_utils.py +0 -0
- {docpull-5.5.1 → docpull-6.0.1}/tests/test_trafilatura_extractor.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docpull
|
|
3
|
-
Version:
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 6.0.1
|
|
4
|
+
Summary: Declare, sync, diff, and lock context dependencies for AI agents
|
|
5
5
|
Author-email: Zachary Roth <support@raintree.technology>
|
|
6
6
|
Maintainer-email: Raintree Technology <support@raintree.technology>
|
|
7
7
|
License-Expression: MIT
|
|
@@ -15,7 +15,7 @@ Project-URL: MCP Plugin, https://github.com/raintree-technology/docpull/tree/mai
|
|
|
15
15
|
Project-URL: Comparison Guide, https://github.com/raintree-technology/docpull/blob/main/docs/alternatives.md
|
|
16
16
|
Project-URL: Download Stats, https://pepy.tech/project/docpull
|
|
17
17
|
Project-URL: Changelog, https://github.com/raintree-technology/docpull/blob/main/docs/CHANGELOG.md
|
|
18
|
-
Keywords: python,markdown,documentation,web,website,web-extraction,web-to-markdown,
|
|
18
|
+
Keywords: python,markdown,documentation,web,website,web-extraction,web-to-markdown,source-ingestion,provenance,context-ci,content-extraction,developer-tools,cli,rag,llm,mcp,ai-agents,context-engineering,context-dependencies,context-packs,source-packs,research,claude,ai-training-data
|
|
19
19
|
Classifier: Development Status :: 5 - Production/Stable
|
|
20
20
|
Classifier: Intended Audience :: Developers
|
|
21
21
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -68,12 +68,17 @@ Requires-Dist: python-multipart>=0.0.27; extra == "mcp"
|
|
|
68
68
|
Requires-Dist: starlette>=1.3.1; extra == "mcp"
|
|
69
69
|
Provides-Extra: serve
|
|
70
70
|
Requires-Dist: uvicorn>=0.30.0; extra == "serve"
|
|
71
|
-
Provides-Extra: parallel
|
|
72
|
-
Requires-Dist: parallel-web>=1.0.1; extra == "parallel"
|
|
73
|
-
Provides-Extra: observability
|
|
74
|
-
Requires-Dist: raindrop-ai>=0.0.50; extra == "observability"
|
|
75
71
|
Provides-Extra: parquet
|
|
76
72
|
Requires-Dist: pyarrow>=16.0.0; extra == "parquet"
|
|
73
|
+
Provides-Extra: markitdown
|
|
74
|
+
Requires-Dist: markitdown>=0.1.0; extra == "markitdown"
|
|
75
|
+
Provides-Extra: unstructured
|
|
76
|
+
Requires-Dist: unstructured[all-docs]>=0.16.0; extra == "unstructured"
|
|
77
|
+
Provides-Extra: parse
|
|
78
|
+
Requires-Dist: markitdown>=0.1.0; extra == "parse"
|
|
79
|
+
Requires-Dist: unstructured[all-docs]>=0.16.0; extra == "parse"
|
|
80
|
+
Provides-Extra: presidio
|
|
81
|
+
Requires-Dist: presidio-analyzer>=2.2.0; extra == "presidio"
|
|
77
82
|
Provides-Extra: e2b
|
|
78
83
|
Requires-Dist: e2b>=2.0.0; extra == "e2b"
|
|
79
84
|
Provides-Extra: llm
|
|
@@ -90,9 +95,10 @@ Requires-Dist: pyjwt>=2.13.0; extra == "all"
|
|
|
90
95
|
Requires-Dist: python-multipart>=0.0.27; extra == "all"
|
|
91
96
|
Requires-Dist: starlette>=1.3.1; extra == "all"
|
|
92
97
|
Requires-Dist: uvicorn>=0.30.0; extra == "all"
|
|
93
|
-
Requires-Dist: parallel-web>=1.0.1; extra == "all"
|
|
94
|
-
Requires-Dist: raindrop-ai>=0.0.50; extra == "all"
|
|
95
98
|
Requires-Dist: pyarrow>=16.0.0; extra == "all"
|
|
99
|
+
Requires-Dist: markitdown>=0.1.0; extra == "all"
|
|
100
|
+
Requires-Dist: unstructured[all-docs]>=0.16.0; extra == "all"
|
|
101
|
+
Requires-Dist: presidio-analyzer>=2.2.0; extra == "all"
|
|
96
102
|
Requires-Dist: e2b>=2.0.0; extra == "all"
|
|
97
103
|
Provides-Extra: dev
|
|
98
104
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
@@ -112,7 +118,7 @@ Dynamic: license-file
|
|
|
112
118
|
|
|
113
119
|
# docpull
|
|
114
120
|
|
|
115
|
-
**
|
|
121
|
+
**Context dependencies for AI agents. Browser-free by default.**
|
|
116
122
|
|
|
117
123
|
[](https://www.python.org/downloads/)
|
|
118
124
|
[](https://pypi.org/project/docpull/)
|
|
@@ -120,10 +126,38 @@ Dynamic: license-file
|
|
|
120
126
|
[](https://github.com/raintree-technology/docpull/stargazers)
|
|
121
127
|
[](https://github.com/raintree-technology/docpull/blob/main/LICENSE)
|
|
122
128
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
129
|
+
<!-- mcp-name: io.github.raintree-technology/docpull -->
|
|
130
|
+
|
|
131
|
+
DocPull is a local-first dependency manager for AI context. Define the public
|
|
132
|
+
web sources an agent depends on, sync them into cited context packs, diff what
|
|
133
|
+
changed, and export reproducible context for Cursor, Claude, OpenAI,
|
|
134
|
+
LlamaIndex, LangChain, MCP clients, and RAG pipelines.
|
|
135
|
+
|
|
136
|
+
The core workflow is a `docpull.yaml` plus a `.docpull/context.lock.json`,
|
|
137
|
+
similar in spirit to code dependency manifests and lockfiles:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
docpull init my-agent-context
|
|
141
|
+
docpull add stripe react postgres
|
|
142
|
+
docpull install
|
|
143
|
+
docpull deps
|
|
144
|
+
docpull sync
|
|
145
|
+
docpull diff
|
|
146
|
+
docpull export context-pack --target openai
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Bundled aliases such as `stripe`, `react`, `postgres`, `openai`, and
|
|
150
|
+
`apple-hig` expand to normal HTTPS sources in `docpull.yaml`. Runs stay
|
|
151
|
+
reproducible through the lockfile: source URLs, discovered URLs, content hashes,
|
|
152
|
+
run IDs, aliases, and export metadata are recorded without storing secrets.
|
|
153
|
+
Use `docpull sources list` to inspect the bundled alias catalog and
|
|
154
|
+
`docpull install` to validate or recreate the local dependency lock.
|
|
155
|
+
Use `docpull deps` to see the current dependency, lockfile, latest run, and
|
|
156
|
+
export status.
|
|
157
|
+
|
|
158
|
+
Projects can also track typed known-source specs such as `pypi:requests`,
|
|
159
|
+
`rfc:9110`, `wiki:Web_scraping`, or a local dataset path. Those sources sync
|
|
160
|
+
through their typed lanes and do not use discovery.
|
|
127
161
|
|
|
128
162
|
The original `docpull URL ...` workflow still works: fetch public or explicitly
|
|
129
163
|
authorized static/server-rendered web pages and write clean Markdown, NDJSON,
|
|
@@ -131,14 +165,15 @@ SQLite, or OKF outputs. Project mode adds the persistent evidence lifecycle on
|
|
|
131
165
|
top: sources, runs, diffs, exports, evals, accounting, and local auditability.
|
|
132
166
|
|
|
133
167
|
DocPull is local-first: direct fetching, sitemap/link discovery, extraction,
|
|
134
|
-
indexing, pack intelligence, and
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
not enough.
|
|
168
|
+
indexing, pack intelligence, and opt-in `agent-browser` rendering can run with
|
|
169
|
+
no external account and no required API spend. Cloud rendering is explicit and
|
|
170
|
+
budget-guarded.
|
|
138
171
|
|
|
139
|
-
DocPull
|
|
140
|
-
|
|
141
|
-
|
|
172
|
+
DocPull aligns core workflows across CLI, Python SDK, and MCP, with each surface
|
|
173
|
+
optimized for its user. The [Surface Contract](docs/surface-contract.md) defines
|
|
174
|
+
how those surfaces align and where they intentionally differ.
|
|
175
|
+
For the context dependency workflow, see
|
|
176
|
+
[Context Dependencies](docs/context-dependencies.md).
|
|
142
177
|
|
|
143
178
|
Web-source ingestion is the core workflow. Documentation is one high-value
|
|
144
179
|
lane, not the product boundary. It works best on static or server-rendered
|
|
@@ -146,9 +181,9 @@ pages such as blogs, API references, OpenAPI specs, changelogs, vendor pages,
|
|
|
146
181
|
product pages, filings, docs sites, and other pages where the useful content is
|
|
147
182
|
available in HTML or embedded page data.
|
|
148
183
|
|
|
149
|
-
|
|
150
|
-
reason unless you explicitly opt into
|
|
151
|
-
[
|
|
184
|
+
DocPull is browser-free by default. JS-only pages are skipped with a clear
|
|
185
|
+
reason unless you explicitly opt into a local renderer. See
|
|
186
|
+
[Web Source Boundary](docs/scraping-boundary.md) and
|
|
152
187
|
[Alternatives](docs/alternatives.md) for the full boundary.
|
|
153
188
|
|
|
154
189
|
## Install
|
|
@@ -161,12 +196,50 @@ pip install docpull
|
|
|
161
196
|
|
|
162
197
|
```bash
|
|
163
198
|
docpull init stripe-docs
|
|
164
|
-
docpull add
|
|
199
|
+
docpull add stripe
|
|
200
|
+
docpull install
|
|
165
201
|
docpull sync
|
|
202
|
+
docpull deps
|
|
166
203
|
docpull diff
|
|
167
204
|
docpull export context-pack --target cursor
|
|
168
205
|
```
|
|
169
206
|
|
|
207
|
+
## Context CI
|
|
208
|
+
|
|
209
|
+
Use Context CI when an agent loop depends on current, cited context and a
|
|
210
|
+
missing or stale source should fail the build:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
docpull ci --prepare
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`docpull ci` runs locally against either a project root or a standalone pack. It
|
|
217
|
+
checks the project lockfile, pack score, pack audit, coverage confidence,
|
|
218
|
+
citation coverage, eval-grade sidecars, evidence basis quality, rights
|
|
219
|
+
metadata, and optional context predictions. It writes `context-ci.report.json` and `CONTEXT_CI.md`;
|
|
220
|
+
the command exits non-zero when hard gates fail.
|
|
221
|
+
|
|
222
|
+
Minimal GitHub Actions job:
|
|
223
|
+
|
|
224
|
+
```yaml
|
|
225
|
+
name: Context CI
|
|
226
|
+
on: [pull_request]
|
|
227
|
+
jobs:
|
|
228
|
+
context:
|
|
229
|
+
runs-on: ubuntu-latest
|
|
230
|
+
steps:
|
|
231
|
+
- uses: actions/checkout@v4
|
|
232
|
+
- uses: actions/setup-python@v5
|
|
233
|
+
with:
|
|
234
|
+
python-version: "3.11"
|
|
235
|
+
- run: pip install docpull
|
|
236
|
+
- run: docpull ci --prepare
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
For the full workflow, see [Context CI](docs/context-ci.md). The durable
|
|
240
|
+
artifact shape is documented in
|
|
241
|
+
[Context Pack Contract v3](docs/context-pack-contract-v3.md).
|
|
242
|
+
|
|
170
243
|
Example diff after a later sync:
|
|
171
244
|
|
|
172
245
|
```text
|
|
@@ -185,29 +258,64 @@ Changed pages:
|
|
|
185
258
|
0 paid/cloud routes used
|
|
186
259
|
```
|
|
187
260
|
|
|
261
|
+
## Context Pack Contract
|
|
262
|
+
|
|
263
|
+
DocPull writes three explicit layers of artifacts:
|
|
264
|
+
|
|
265
|
+
| Layer | Purpose | Contract check |
|
|
266
|
+
| --- | --- | --- |
|
|
267
|
+
| Raw extraction | Fetched documents, chunks, routes, and source index sidecars | `docpull pack validate PACK --level raw` |
|
|
268
|
+
| Agent-ready pack | Raw evidence plus citation index, coverage, score, audit, and lock sidecars | `docpull pack validate PACK --level agent` |
|
|
269
|
+
| Eval-grade pack | Agent pack plus rights, provenance, basis/eval artifacts, and pack card | `docpull pack validate PACK --level eval` |
|
|
270
|
+
|
|
271
|
+
Core ingestion paths write into the same v3 contract:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
docpull https://docs.example.com -o packs/docs
|
|
275
|
+
docpull parse ./handbook.pdf -o packs/handbook --backend auto
|
|
276
|
+
docpull openapi-pack ./openapi.json -o packs/api
|
|
277
|
+
docpull feed-pack https://example.com/news -o packs/news
|
|
278
|
+
docpull paper-pack arxiv:1706.03762 -o packs/papers
|
|
279
|
+
docpull repo-pack psf/requests -o packs/repo --cache
|
|
280
|
+
docpull package-pack pypi:requests -o packs/package
|
|
281
|
+
docpull standards-pack rfc:9110 -o packs/standard
|
|
282
|
+
docpull dataset-pack ./metrics.csv -o packs/dataset
|
|
283
|
+
docpull transcript-pack ./meeting.vtt -o packs/transcript
|
|
284
|
+
docpull wiki-pack wiki:Web_scraping -o packs/wiki
|
|
285
|
+
docpull pack prepare packs/docs --eval-grade
|
|
286
|
+
docpull pack validate packs/docs --level eval
|
|
287
|
+
docpull export packs/docs --format openai-vector-jsonl -o exports/openai.jsonl
|
|
288
|
+
docpull export packs/docs --format cursor-rules -o .cursor/rules --skill-name docs
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Use `docpull ci --prepare` to validate a project or standalone pack in CI.
|
|
292
|
+
|
|
188
293
|
Install optional extras as needed:
|
|
189
294
|
|
|
190
295
|
```bash
|
|
191
296
|
pip install 'docpull[llm]' # tiktoken for token-accurate chunking
|
|
192
297
|
pip install 'docpull[trafilatura]' # alternative extractor for noisy pages
|
|
298
|
+
pip install 'docpull[parse]' # MarkItDown + Unstructured local document parsers
|
|
299
|
+
pip install 'docpull[presidio]' # optional Presidio PII detection for redaction
|
|
193
300
|
pip install 'docpull[mcp]' # stdio MCP server
|
|
194
301
|
pip install 'docpull[serve]' # local pack JSON server runner
|
|
195
|
-
pip install 'docpull[
|
|
196
|
-
pip install 'docpull[observability]' # Raindrop benchmark tracing
|
|
302
|
+
pip install 'docpull[parquet]' # optional Parquet export support
|
|
197
303
|
pip install 'docpull[e2b]' # E2B cloud sandbox renderer SDK
|
|
198
|
-
pip install 'docpull[all]' # all optional extras
|
|
199
304
|
```
|
|
200
305
|
|
|
306
|
+
Prefer installing the extras needed for the current lane instead of a broad
|
|
307
|
+
bundle. The base install remains useful without API keys or paid services.
|
|
308
|
+
|
|
201
309
|
Browser rendering is an explicit external extension, not part of the base
|
|
202
310
|
install. Install an `agent-browser` compatible CLI separately, put it on
|
|
203
311
|
`PATH`, or set `DOCPULL_AGENT_BROWSER_BIN=/path/to/agent-browser`. Verify the
|
|
204
312
|
runtime with `docpull render --check`. Render targets must use HTTPS except for
|
|
205
313
|
localhost/loopback HTTP during local testing, and DocPull keeps renderer action
|
|
206
|
-
permissions locked down to HTML retrieval only. Because
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
314
|
+
permissions locked down to HTML retrieval only. Because browser rendering
|
|
315
|
+
cannot fully enforce redirect, subresource, or connect-time DNS allow-lists,
|
|
316
|
+
network browser rendering fails closed unless the operator sets
|
|
317
|
+
`DOCPULL_RENDER_TRUSTED_BROWSER_TARGETS=1` for trusted targets. For
|
|
318
|
+
localhost/loopback HTTP tests, set `DOCPULL_RENDER_ALLOW_LOCAL_TARGETS=1`.
|
|
211
319
|
|
|
212
320
|
For stronger isolation, cloud runtimes are available explicitly:
|
|
213
321
|
`docpull render URL --runtime vercel` uses the Vercel Sandbox CLI and Vercel
|
|
@@ -218,56 +326,43 @@ set a local per-render budget guard, and use `--cloud-agent-browser-install skip
|
|
|
218
326
|
with a prebuilt sandbox/template that already includes `agent-browser`. For E2B,
|
|
219
327
|
pass `--template` or set `DOCPULL_E2B_TEMPLATE` to use that prebuilt environment.
|
|
220
328
|
|
|
329
|
+
For release acceptance, run the opt-in real-data smoke harness. The default path
|
|
330
|
+
uses public free sources and local tooling; `--include-cloud` also attempts the
|
|
331
|
+
keyed/cloud render lanes when the local environment is configured for them.
|
|
332
|
+
The strict scorecard also requires synchronized generated metadata and a clean
|
|
333
|
+
`git status --short` before tagging.
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
python scripts/release_a_plus_check.py --strict
|
|
337
|
+
python scripts/real_feature_smoke.py --json --full-mcp --strict-ci --auth-matrix --monitor-soak-minutes 10
|
|
338
|
+
python scripts/real_feature_smoke.py --include-cloud --json
|
|
339
|
+
```
|
|
340
|
+
|
|
221
341
|
## Free-First Budgets
|
|
222
342
|
|
|
223
|
-
Use `--budget 0` when a run must not make paid-capable
|
|
343
|
+
Use `--budget 0` when a run must not make paid-capable cloud calls:
|
|
224
344
|
|
|
225
345
|
```bash
|
|
226
346
|
docpull https://docs.example.com --budget 0 -o ./docs/example
|
|
227
|
-
docpull discover scan https://docs.example.com -o ./packs/discovery
|
|
228
347
|
DOCPULL_RENDER_TRUSTED_BROWSER_TARGETS=1 docpull render https://example.com/app --runtime local --budget 0
|
|
229
|
-
docpull providers context-pack "Find official docs" --provider all --dry-run --budget 0 --json
|
|
230
|
-
docpull benchmark quick --zero-dollar --target-set zero-dollar --provider all
|
|
231
348
|
```
|
|
232
349
|
|
|
233
350
|
Under a zero budget, local cache, direct HTTP, sitemap/static-link discovery,
|
|
234
351
|
local extraction, local indexing, pack analysis, monitors, and local
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
local rendering or infrastructure is the blocker. Benchmark reports include
|
|
250
|
-
suggested commands, estimated paid request counts, and estimated paid cost
|
|
251
|
-
guards before any provider or cloud call is made.
|
|
252
|
-
|
|
253
|
-
The `zero-dollar` benchmark target set is the Phase 2 measurement matrix. It
|
|
254
|
-
keeps the existing docs/provider targets and adds JS-heavy docs, pricing,
|
|
255
|
-
filings, feeds, sitemaps, and search-to-evidence tasks. The report classifies
|
|
256
|
-
each target as `complete_for_0`, `complete_with_local_browser`, `partial_for_0`,
|
|
257
|
-
`requires_provider`, `requires_cloud_browser`, or `blocked_by_policy`.
|
|
258
|
-
|
|
259
|
-
## Open Source And Hosted Boundary
|
|
260
|
-
|
|
261
|
-
The open-source package owns local fetching, local rendering adapters,
|
|
262
|
-
provider-free discovery, extraction, indexing, packs, diffs, monitors, MCP,
|
|
263
|
-
BYOK providers, budget policy, accounting, and benchmarks.
|
|
264
|
-
|
|
265
|
-
A hosted DocPull product, if offered, should sell managed execution: always-on
|
|
266
|
-
schedules, browser/proxy infrastructure, persistent auth profiles, queues,
|
|
267
|
-
alerts, dashboards, collaboration, retention, SSO, audit logs, SLAs, and
|
|
268
|
-
bundled provider billing. The hosted boundary does not change the OSS default:
|
|
269
|
-
no hidden paid calls, no CAPTCHA bypass, no stealth scraping, and no claim of a
|
|
270
|
-
proprietary web-scale index.
|
|
352
|
+
browser rendering for trusted targets remain allowed. Vercel Sandbox and E2B
|
|
353
|
+
rendering are blocked before execution. Runs involving a budget or paid-capable
|
|
354
|
+
route write `run.accounting.json` with non-secret route, cost, HTTP/cache,
|
|
355
|
+
browser, and blocked-action metadata.
|
|
356
|
+
|
|
357
|
+
## Release Boundary
|
|
358
|
+
|
|
359
|
+
The open-source package owns local fetching, explicit rendering adapters,
|
|
360
|
+
source aliases, v3 pack contracts, validation, preparation, exports, Context
|
|
361
|
+
CI, monitors, MCP, budget policy, and accounting.
|
|
362
|
+
|
|
363
|
+
This release does not include a hosted scheduler, browser/proxy service,
|
|
364
|
+
accounts, marketplace, proprietary web index, CAPTCHA bypass, stealth scraping,
|
|
365
|
+
or hidden paid calls.
|
|
271
366
|
|
|
272
367
|
## Persistent Projects
|
|
273
368
|
|
|
@@ -304,15 +399,20 @@ docpull review
|
|
|
304
399
|
# Create a versioned context-pack release
|
|
305
400
|
docpull release context-pack --target cursor --tag stripe-docs-v1
|
|
306
401
|
|
|
307
|
-
# Generate eval cases from changed or latest documents
|
|
308
|
-
docpull eval-set --limit 25
|
|
309
|
-
|
|
310
402
|
# One-command project sync, diff, and export for one source
|
|
311
403
|
docpull watch https://docs.stripe.com --export cursor --alert changes
|
|
312
404
|
```
|
|
313
405
|
|
|
406
|
+
Ad hoc `docpull watch` projects are bounded to one page and one level of depth
|
|
407
|
+
by default. Use explicit bounds when the watch should cover more:
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
docpull watch https://docs.stripe.com --export cursor --max-pages 10 --max-depth 2
|
|
411
|
+
```
|
|
412
|
+
|
|
314
413
|
`docpull diff` is hash-based and deterministic locally. Optional BYOK semantic
|
|
315
|
-
summaries are advisory and skip cleanly when no model key is configured.
|
|
414
|
+
summaries are advisory and skip cleanly when no model key is configured. Each
|
|
415
|
+
diff also writes local semantic categories to `semantic.diff.json`.
|
|
316
416
|
Use `docpull add URL --discover` or `docpull sync --update-discovery` to
|
|
317
417
|
refresh and persist discovered source URLs in `docpull.yaml`; sync then uses
|
|
318
418
|
that stored URL set for repeatable exact refreshes.
|
|
@@ -332,14 +432,6 @@ sources:
|
|
|
332
432
|
policy: explicit-private
|
|
333
433
|
```
|
|
334
434
|
|
|
335
|
-
The commercial control-plane shape is API-led but not API-only: the local CLI
|
|
336
|
-
remains the trust-building engine, while hosted DocPull manages projects, sync
|
|
337
|
-
jobs, diffs, exports, releases, and signed webhooks through `/v1` JSON
|
|
338
|
-
endpoints. The hosted ASGI MVP lives in `docpull.hosted`; `docpull remote ...`
|
|
339
|
-
stores hosted API connection metadata and calls the same project lifecycle
|
|
340
|
-
remotely. Remote bearer tokens are sent only to HTTPS API URLs by default;
|
|
341
|
-
`--allow-insecure-local-http` is limited to localhost/loopback development.
|
|
342
|
-
|
|
343
435
|
The launch screenshot for this flow lives at
|
|
344
436
|
[`docs/launch-assets/docpull-project-diff-demo.png`](docs/launch-assets/docpull-project-diff-demo.png).
|
|
345
437
|
|
|
@@ -409,39 +501,16 @@ docpull https://sdk.vercel.ai \
|
|
|
409
501
|
--skill-description "Vercel AI SDK source reference"
|
|
410
502
|
```
|
|
411
503
|
|
|
412
|
-
Local-first parity workflows mirror common hosted search/extract/crawl/research
|
|
413
|
-
API shapes while writing auditable files instead of relying on a hosted index:
|
|
414
|
-
|
|
415
|
-
```bash
|
|
416
|
-
# Normalize candidate URLs without fetching content
|
|
417
|
-
docpull map urls ./urls.txt -o ./packs/map
|
|
418
|
-
|
|
419
|
-
# Extract known URLs into a local pack
|
|
420
|
-
docpull extract-pack ./urls.txt -o ./packs/extract
|
|
421
|
-
|
|
422
|
-
# Select mapped candidates and fetch them
|
|
423
|
-
docpull crawl-pack ./packs/map --select top:10 -o ./packs/crawl
|
|
424
|
-
|
|
425
|
-
# Answer/research from an existing local pack with lifecycle artifacts
|
|
426
|
-
docpull research-pack ./packs/crawl \
|
|
427
|
-
--objective "Summarize auth and webhook behavior" \
|
|
428
|
-
--schema ./output.schema.json
|
|
429
|
-
|
|
430
|
-
# Build a cited entity/list pack from existing evidence
|
|
431
|
-
docpull entities-pack ./packs/crawl --limit 100
|
|
432
|
-
```
|
|
433
|
-
|
|
434
504
|
More examples live in [CLI Recipes](docs/examples/README.md).
|
|
435
505
|
|
|
436
|
-
With an explicit `--skill-agent`, docpull stores the
|
|
506
|
+
With an explicit `--skill-agent`, docpull stores the fetched corpus under
|
|
437
507
|
`.docpull/skills/<name>/references` and creates agent-specific wrappers that
|
|
438
508
|
point at that corpus. `--skill-agent claude` writes a Claude Code skill under
|
|
439
|
-
`.claude/skills/<name>/`, `--skill-agent
|
|
440
|
-
`.
|
|
441
|
-
|
|
442
|
-
`--skill-agent
|
|
443
|
-
|
|
444
|
-
their active agent wrappers.
|
|
509
|
+
`.claude/skills/<name>/`, and `--skill-agent cursor` writes a Cursor project
|
|
510
|
+
rule at `.cursor/rules/<name>.mdc`. Use `--skill-agent all` to create every
|
|
511
|
+
supported wrapper. If you pass `--output-dir`, docpull stages the generated
|
|
512
|
+
corpus there; explicit `--skill-agent` targets still write their active agent
|
|
513
|
+
wrappers.
|
|
445
514
|
|
|
446
515
|
Use docpull when you need to:
|
|
447
516
|
|
|
@@ -478,6 +547,15 @@ special handling for common web, documentation, and API surfaces.
|
|
|
478
547
|
| Static HTML / SSR pages | Extracts article, main, or document regions |
|
|
479
548
|
| Next.js / Mintlify | Parses static HTML and `__NEXT_DATA__` when available |
|
|
480
549
|
| OpenAPI / Swagger | Renders specs into Markdown |
|
|
550
|
+
| OpenAPI pack | `docpull openapi-pack` emits endpoint/schema records with v3 sidecars |
|
|
551
|
+
| RSS / Atom / JSON Feed | `docpull feed-pack` emits item-level records, dates, and listing sidecars |
|
|
552
|
+
| Research papers | `docpull paper-pack` emits paper metadata, abstracts, optional local/arXiv PDF full text, and references |
|
|
553
|
+
| Public GitHub repos | `docpull repo-pack` emits repo metadata, README/docs/examples/changelog files, manifests, and releases |
|
|
554
|
+
| npm / PyPI packages | `docpull package-pack` emits registry metadata, README/description, versions, license, dependencies, and install commands |
|
|
555
|
+
| Standards | `docpull standards-pack` emits RFC, IETF, W3C, and WHATWG metadata plus section-level records |
|
|
556
|
+
| Local datasets | `docpull dataset-pack` emits bounded schema, exact row counts where streamable, column, null-count, and sample summaries |
|
|
557
|
+
| Transcripts | `docpull transcript-pack` emits timestamped segment records from VTT, SRT, text, JSON, or direct transcript URLs |
|
|
558
|
+
| Wikimedia / Wikipedia | `docpull wiki-pack` emits MediaWiki REST page metadata, license/revision metadata, and section-level records |
|
|
481
559
|
| Docusaurus / Sphinx / MkDocs | Extracts static article or document regions |
|
|
482
560
|
| VitePress / VuePress / Astro Starlight | Extracts static content regions |
|
|
483
561
|
| GitBook / ReadMe.io | Extracts available article or content regions |
|
|
@@ -497,6 +575,23 @@ errors instead of normal skips.
|
|
|
497
575
|
| OKF | Portable Open Knowledge Format bundles with indexes and manifests |
|
|
498
576
|
| Archive / mirror | Cached offline source snapshots |
|
|
499
577
|
|
|
578
|
+
All file-backed outputs now write the DocPull output contract v3 raw sidecars:
|
|
579
|
+
`corpus.manifest.json`, `sources.md`, and `acquisition.routes.json`. Use
|
|
580
|
+
`docpull pack validate <pack-dir> --level raw|agent|eval` to check whether a
|
|
581
|
+
pack is raw extraction output, agent-ready context, or eval-grade context.
|
|
582
|
+
|
|
583
|
+
Local files can enter the same contract with the document parse lane:
|
|
584
|
+
|
|
585
|
+
```bash
|
|
586
|
+
docpull parse ./handbook.pdf -o ./packs/handbook --backend auto
|
|
587
|
+
docpull parse ./handbook.docx -o ./packs/handbook --prepare --eval-grade
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
`--backend auto` reads plain text/Markdown directly and uses optional
|
|
591
|
+
MarkItDown or Unstructured parsers for complex office/PDF files when installed.
|
|
592
|
+
Install `docpull[markitdown]`, `docpull[unstructured]`, or `docpull[parse]`
|
|
593
|
+
for those backends.
|
|
594
|
+
|
|
500
595
|
Every file-backed run writes `corpus.manifest.json` with stable document IDs,
|
|
501
596
|
chunk IDs, hashes, output paths, and chunk counts. See
|
|
502
597
|
[Corpus Manifest](docs/corpus-manifest.md).
|
|
@@ -524,12 +619,17 @@ enabled. It is not the right tool for:
|
|
|
524
619
|
- Pages behind CAPTCHA or bot challenges.
|
|
525
620
|
- Workflows that require clicking, scrolling, or browser state.
|
|
526
621
|
|
|
527
|
-
For those cases, use browser automation
|
|
528
|
-
HTML or exported content into your pipeline. For simple public
|
|
529
|
-
pages, `docpull render
|
|
530
|
-
fallback
|
|
531
|
-
the
|
|
532
|
-
|
|
622
|
+
For those cases, use full browser automation outside DocPull, then pass
|
|
623
|
+
rendered HTML or exported content into your pipeline. For simple public
|
|
624
|
+
JS-rendered pages, use `docpull render --runtime local` or fetch with
|
|
625
|
+
`--render fallback` for an explicit `agent-browser` fallback without changing
|
|
626
|
+
the default fetch behavior. DocPull does not claim complete browser coverage
|
|
627
|
+
unless rendering is explicitly enabled and available.
|
|
628
|
+
|
|
629
|
+
Use `--extractor ensemble` when a crawl should score multiple local extraction
|
|
630
|
+
candidates and keep the strongest Markdown. The ensemble always includes the
|
|
631
|
+
built-in generic extractor and adds trafilatura when `docpull[trafilatura]` is
|
|
632
|
+
installed.
|
|
533
633
|
|
|
534
634
|
## How It Compares
|
|
535
635
|
|
|
@@ -599,41 +699,28 @@ part of the package release contract.
|
|
|
599
699
|
|
|
600
700
|
## Advanced Workflows
|
|
601
701
|
|
|
602
|
-
- `docpull[parallel]` can discover, extract, enrich, score, diff, and archive
|
|
603
|
-
live web sources with your own Parallel API key. See
|
|
604
|
-
[Parallel Integration](docs/parallel.md).
|
|
605
702
|
- Local pack intelligence can build citation maps, extract cited entities,
|
|
606
|
-
search pack records,
|
|
607
|
-
|
|
703
|
+
search pack records, build cited source graphs, prepare the full sidecar
|
|
704
|
+
bundle, and write eval-grade rights/provenance artifacts with
|
|
608
705
|
`docpull pack citations`, `docpull pack entities`, `docpull pack search`,
|
|
609
|
-
`docpull pack brief`, `docpull graph build`, `docpull graph query`,
|
|
610
|
-
`docpull pack prepare`.
|
|
611
|
-
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
`docpull policy`, `docpull
|
|
615
|
-
`docpull
|
|
616
|
-
`docpull
|
|
617
|
-
`docpull
|
|
706
|
+
`docpull pack brief`, `docpull graph build`, `docpull graph query`,
|
|
707
|
+
and `docpull pack prepare --eval-grade`.
|
|
708
|
+
- Release commands add policy files, refresh reports, audits, exports, a
|
|
709
|
+
localhost pack server, explicit rendering, authenticated-source checks, and
|
|
710
|
+
cron-friendly monitors:
|
|
711
|
+
`docpull policy`, `docpull refresh`,
|
|
712
|
+
`docpull parse`, `docpull openapi-pack`, `docpull feed-pack`,
|
|
713
|
+
`docpull paper-pack`, `docpull repo-pack`, `docpull package-pack`,
|
|
714
|
+
`docpull standards-pack`, `docpull dataset-pack`, `docpull transcript-pack`,
|
|
715
|
+
`docpull wiki-pack`,
|
|
716
|
+
`docpull pack validate`,
|
|
717
|
+
`docpull pack audit`, `docpull export`,
|
|
718
|
+
`docpull serve`, `docpull share`, `docpull render`, `docpull auth check`,
|
|
719
|
+
and `docpull monitor`.
|
|
618
720
|
- `docpull export` writes local files for OpenAI vector JSONL, LangChain,
|
|
619
721
|
LlamaIndex, DSPy, Sheets CSV/TSV, n8n workflow JSON, Vercel AI SDK JSON,
|
|
620
722
|
CrewAI JSON, warehouse NDJSON, optional Parquet via `docpull[parquet]`, and
|
|
621
|
-
|
|
622
|
-
- Optional provider workflows can use Parallel, Tavily, and Exa when configured.
|
|
623
|
-
Tavily and Exa are available through `docpull providers ...` and first-class
|
|
624
|
-
aliases such as `docpull tavily context-pack`, `docpull exa context-pack`,
|
|
625
|
-
`docpull exa extract-pack`, and `docpull tavily map-pack`. Use
|
|
626
|
-
`docpull providers capabilities` to see the shared baseline and provider-only
|
|
627
|
-
extensions. For agent or CI logs, use
|
|
628
|
-
`docpull providers auth --json --require-ready --redact-paths` for offline
|
|
629
|
-
local readiness, then `docpull providers probe --json --require-verified
|
|
630
|
-
--redact-paths` when explicit live key validation is intended. Successful
|
|
631
|
-
provider context-pack runs are post-processed into the same local pack
|
|
632
|
-
intelligence artifacts.
|
|
633
|
-
See [CLI Recipes](docs/examples/README.md#parallel-context-pack).
|
|
634
|
-
- SEC filing evidence packs use rule profiles such as
|
|
635
|
-
[vendor-dependency-rules.yml](docs/examples/vendor-dependency-rules.yml).
|
|
636
|
-
|
|
723
|
+
agent reference bundles.
|
|
637
724
|
## Security Defaults
|
|
638
725
|
|
|
639
726
|
- HTTPS-only fetching with robots.txt compliance.
|
|
@@ -659,11 +746,10 @@ docpull URL --preview-urls
|
|
|
659
746
|
## Documentation
|
|
660
747
|
|
|
661
748
|
- [CLI Recipes](docs/examples/README.md) - common commands and advanced workflows.
|
|
662
|
-
- [
|
|
749
|
+
- [Web Source Boundary](docs/scraping-boundary.md) - what docpull does and does not fetch.
|
|
663
750
|
- [Alternatives](docs/alternatives.md) - when to use browser automation or hosted extraction.
|
|
664
751
|
- [Corpus Manifest](docs/corpus-manifest.md) - stable IDs, hashes, and source maps.
|
|
665
752
|
- [Surface Contract](docs/surface-contract.md) - how the CLI, Python SDK/API, and MCP surfaces align.
|
|
666
|
-
- [Parallel Integration](docs/parallel.md) - live-source context pack workflows.
|
|
667
753
|
- [Changelog](docs/CHANGELOG.md) - release history.
|
|
668
754
|
|
|
669
755
|
## Links
|