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