docpull 6.0.0__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-6.0.0/src/docpull.egg-info → docpull-6.0.1}/PKG-INFO +13 -12
- {docpull-6.0.0 → docpull-6.0.1}/README.md +12 -11
- {docpull-6.0.0 → docpull-6.0.1}/pyproject.toml +1 -1
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/__init__.py +2 -2
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/benchmark.py +40 -2
- {docpull-6.0.0 → docpull-6.0.1/src/docpull.egg-info}/PKG-INFO +13 -12
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_benchmark.py +2 -0
- {docpull-6.0.0 → docpull-6.0.1}/LICENSE +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/setup.cfg +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/__main__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/accounting.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/agent_publish.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/auth_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/basis.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/frontier.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/manager.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/streaming_dedup.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_aliases.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_ci.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/_legacy_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/brand.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/common.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/dataset.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/feed.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/openapi.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/package.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/paper.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/product.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/repo.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/schema_extract.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/search.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/standards.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/styleguide.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/transcript.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/typed.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/typed_models.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/visuals.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/wiki.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/article_cleanup.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/chunking.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/ensemble.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/extractor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/filings.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/markdown.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/protocols.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/special_cases.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/trafilatura_extractor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/core/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/core/fetcher.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/_fetch.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/composite.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/contracts.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/crawler.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/filters.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/enhanced.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/protocols.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/static.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/protocols.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/sitemap.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/doctor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/document_parse.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/eval_grade.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/evidence_pack.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/exports.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/fixtures/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/fixtures/parallel-search-extract.json +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/free_core.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/free_core_smoke.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/graph.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/hosted.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/client.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/protocols.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/rate_limiter.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/judge.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/local_workflows.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/server.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/sources.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/tools.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/metadata_extractor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/config.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/document.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/events.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/profiles.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/run.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/monitor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/output_contract.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pack_reader.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pack_tools.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/parallel_workflows.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/parity.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/parity_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/passk.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/base.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/manifest.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/chunk.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/convert.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/dedup.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/fetch.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/metadata.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/render.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_json.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_ndjson.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_okf.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_sqlite.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/validate.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/policy.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/policy_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/project.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_adapters.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_capabilities.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_keys.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_probes.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/py.typed +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/redaction.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/rendering.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/scraper.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/__init__.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/download_policy.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/robots.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/url_validator.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/server.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/share.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/skill_export.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/source_scoring.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/surface.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull/time_utils.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/SOURCES.txt +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/dependency_links.txt +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/entry_points.txt +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/requires.txt +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/top_level.txt +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_accounting.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_auth_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_basis.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_cache_conditional_get.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_chunking.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_ci_policy.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_claim_audit_script.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_context_ci.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_context_packs.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_conversion.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_convert_step_new.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_discovery.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_discovery_contracts.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_doctor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_document_parse.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_document_record.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_evidence_pack.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_exports.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_extractor_ensemble.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_feed_pack.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_free_core.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_frontier_resume.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_graph.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_hosted.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_integration.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_judge.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_link_extractors.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_live_web_smoke.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_local_workflows.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_mcp_server.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_mcp_tools.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_metadata_extractor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_monitor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_naming.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_openapi_pack.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_optional_extras_installed.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_output_contract.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_outputs_e2e.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_pack_server.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_pack_tools.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_parallel_workflows.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_parity_workflows.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_passk.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_pipeline.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_policy.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_policy_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_project.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_adapters.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_cli.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_keys.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_probes.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_public_feature_smoke.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_rate_limiter.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_real_feature_smoke_script.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_real_site_regressions.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_release_a_plus_check_script.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_rendering.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_save_ndjson.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_save_sqlite.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_security_hardening.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_share.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_source_scoring.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_special_cases.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_surface_contract.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_time_utils.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_trafilatura_extractor.py +0 -0
- {docpull-6.0.0 → docpull-6.0.1}/tests/test_typed_knowledge_packs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docpull
|
|
3
|
-
Version: 6.0.
|
|
3
|
+
Version: 6.0.1
|
|
4
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>
|
|
@@ -126,10 +126,12 @@ Dynamic: license-file
|
|
|
126
126
|
[](https://github.com/raintree-technology/docpull/stargazers)
|
|
127
127
|
[](https://github.com/raintree-technology/docpull/blob/main/LICENSE)
|
|
128
128
|
|
|
129
|
+
<!-- mcp-name: io.github.raintree-technology/docpull -->
|
|
130
|
+
|
|
129
131
|
DocPull is a local-first dependency manager for AI context. Define the public
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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.
|
|
133
135
|
|
|
134
136
|
The core workflow is a `docpull.yaml` plus a `.docpull/context.lock.json`,
|
|
135
137
|
similar in spirit to code dependency manifests and lockfiles:
|
|
@@ -141,7 +143,7 @@ docpull install
|
|
|
141
143
|
docpull deps
|
|
142
144
|
docpull sync
|
|
143
145
|
docpull diff
|
|
144
|
-
docpull export context-pack --target
|
|
146
|
+
docpull export context-pack --target openai
|
|
145
147
|
```
|
|
146
148
|
|
|
147
149
|
Bundled aliases such as `stripe`, `react`, `postgres`, `openai`, and
|
|
@@ -504,12 +506,11 @@ More examples live in [CLI Recipes](docs/examples/README.md).
|
|
|
504
506
|
With an explicit `--skill-agent`, docpull stores the fetched corpus under
|
|
505
507
|
`.docpull/skills/<name>/references` and creates agent-specific wrappers that
|
|
506
508
|
point at that corpus. `--skill-agent claude` writes a Claude Code skill under
|
|
507
|
-
`.claude/skills/<name>/`, `--skill-agent
|
|
508
|
-
`.
|
|
509
|
-
|
|
510
|
-
`--skill-agent
|
|
511
|
-
|
|
512
|
-
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.
|
|
513
514
|
|
|
514
515
|
Use docpull when you need to:
|
|
515
516
|
|
|
@@ -719,7 +720,7 @@ part of the package release contract.
|
|
|
719
720
|
- `docpull export` writes local files for OpenAI vector JSONL, LangChain,
|
|
720
721
|
LlamaIndex, DSPy, Sheets CSV/TSV, n8n workflow JSON, Vercel AI SDK JSON,
|
|
721
722
|
CrewAI JSON, warehouse NDJSON, optional Parquet via `docpull[parquet]`, and
|
|
722
|
-
|
|
723
|
+
agent reference bundles.
|
|
723
724
|
## Security Defaults
|
|
724
725
|
|
|
725
726
|
- HTTPS-only fetching with robots.txt compliance.
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
[](https://github.com/raintree-technology/docpull/stargazers)
|
|
9
9
|
[](https://github.com/raintree-technology/docpull/blob/main/LICENSE)
|
|
10
10
|
|
|
11
|
+
<!-- mcp-name: io.github.raintree-technology/docpull -->
|
|
12
|
+
|
|
11
13
|
DocPull is a local-first dependency manager for AI context. Define the public
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
web sources an agent depends on, sync them into cited context packs, diff what
|
|
15
|
+
changed, and export reproducible context for Cursor, Claude, OpenAI,
|
|
16
|
+
LlamaIndex, LangChain, MCP clients, and RAG pipelines.
|
|
15
17
|
|
|
16
18
|
The core workflow is a `docpull.yaml` plus a `.docpull/context.lock.json`,
|
|
17
19
|
similar in spirit to code dependency manifests and lockfiles:
|
|
@@ -23,7 +25,7 @@ docpull install
|
|
|
23
25
|
docpull deps
|
|
24
26
|
docpull sync
|
|
25
27
|
docpull diff
|
|
26
|
-
docpull export context-pack --target
|
|
28
|
+
docpull export context-pack --target openai
|
|
27
29
|
```
|
|
28
30
|
|
|
29
31
|
Bundled aliases such as `stripe`, `react`, `postgres`, `openai`, and
|
|
@@ -386,12 +388,11 @@ More examples live in [CLI Recipes](docs/examples/README.md).
|
|
|
386
388
|
With an explicit `--skill-agent`, docpull stores the fetched corpus under
|
|
387
389
|
`.docpull/skills/<name>/references` and creates agent-specific wrappers that
|
|
388
390
|
point at that corpus. `--skill-agent claude` writes a Claude Code skill under
|
|
389
|
-
`.claude/skills/<name>/`, `--skill-agent
|
|
390
|
-
`.
|
|
391
|
-
|
|
392
|
-
`--skill-agent
|
|
393
|
-
|
|
394
|
-
their active agent wrappers.
|
|
391
|
+
`.claude/skills/<name>/`, and `--skill-agent cursor` writes a Cursor project
|
|
392
|
+
rule at `.cursor/rules/<name>.mdc`. Use `--skill-agent all` to create every
|
|
393
|
+
supported wrapper. If you pass `--output-dir`, docpull stages the generated
|
|
394
|
+
corpus there; explicit `--skill-agent` targets still write their active agent
|
|
395
|
+
wrappers.
|
|
395
396
|
|
|
396
397
|
Use docpull when you need to:
|
|
397
398
|
|
|
@@ -601,7 +602,7 @@ part of the package release contract.
|
|
|
601
602
|
- `docpull export` writes local files for OpenAI vector JSONL, LangChain,
|
|
602
603
|
LlamaIndex, DSPy, Sheets CSV/TSV, n8n workflow JSON, Vercel AI SDK JSON,
|
|
603
604
|
CrewAI JSON, warehouse NDJSON, optional Parquet via `docpull[parquet]`, and
|
|
604
|
-
|
|
605
|
+
agent reference bundles.
|
|
605
606
|
## Security Defaults
|
|
606
607
|
|
|
607
608
|
- HTTPS-only fetching with robots.txt compliance.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "docpull"
|
|
7
|
-
version = "6.0.
|
|
7
|
+
version = "6.0.1"
|
|
8
8
|
dynamic = []
|
|
9
9
|
description = "Declare, sync, diff, and lock context dependencies for AI agents"
|
|
10
10
|
readme = {file = "README.md", content-type = "text/markdown"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
docpull -
|
|
2
|
+
docpull - Context dependencies for AI agents.
|
|
3
3
|
|
|
4
4
|
Usage:
|
|
5
5
|
from docpull import Fetcher, DocpullConfig, ProfileName
|
|
@@ -14,7 +14,7 @@ Usage:
|
|
|
14
14
|
print(event)
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
|
-
__version__ = "6.0.
|
|
17
|
+
__version__ = "6.0.1"
|
|
18
18
|
|
|
19
19
|
from .cache import CacheManager, StreamingDeduplicator
|
|
20
20
|
from .context_ci import CIThresholds, ContextCIError, run_context_ci
|
|
@@ -963,13 +963,45 @@ def run_quick_benchmark(
|
|
|
963
963
|
|
|
964
964
|
report_path = run_dir / "benchmark.report.json"
|
|
965
965
|
markdown_path = run_dir / "benchmark.summary.md"
|
|
966
|
+
config_path = run_dir / "benchmark.config.json"
|
|
967
|
+
generated_at = utc_now_iso()
|
|
968
|
+
safe_provider_status = _benchmark_provider_statuses(provider_status)
|
|
966
969
|
artifacts: dict[str, str] = {
|
|
970
|
+
"config": str(config_path),
|
|
967
971
|
"json": str(report_path),
|
|
968
972
|
"markdown": str(markdown_path),
|
|
969
973
|
}
|
|
974
|
+
benchmark_config = {
|
|
975
|
+
"schema_version": BENCHMARK_SCHEMA_VERSION,
|
|
976
|
+
"generated_at": generated_at,
|
|
977
|
+
"run_dir": str(run_dir),
|
|
978
|
+
"target_url": targets[0].url,
|
|
979
|
+
"target_set": target_set,
|
|
980
|
+
"targets": [target.report_dict() for target in targets],
|
|
981
|
+
"requested_providers": requested_providers,
|
|
982
|
+
"enabled_providers": ["core", *providers],
|
|
983
|
+
"skipped_providers": skipped_providers,
|
|
984
|
+
"provider_status": safe_provider_status,
|
|
985
|
+
"runs_per_case": runs,
|
|
986
|
+
"budget_limit_usd": budget_limit,
|
|
987
|
+
"zero_dollar": zero_dollar,
|
|
988
|
+
"settings": {
|
|
989
|
+
"max_pages": max_pages,
|
|
990
|
+
"max_depth": max_depth,
|
|
991
|
+
"max_concurrent": max_concurrent,
|
|
992
|
+
"per_host_concurrent": per_host_concurrent,
|
|
993
|
+
"cache_enabled": cache_enabled,
|
|
994
|
+
"cached_pass": cached_pass,
|
|
995
|
+
"mode": mode,
|
|
996
|
+
"max_search_results": max_search_results,
|
|
997
|
+
"extract_limit": extract_limit,
|
|
998
|
+
"max_estimated_cost": max_estimated_cost,
|
|
999
|
+
},
|
|
1000
|
+
"cost_normalization": _cost_normalization_metadata(tavily_credit_usd),
|
|
1001
|
+
}
|
|
970
1002
|
report = {
|
|
971
1003
|
"schema_version": BENCHMARK_SCHEMA_VERSION,
|
|
972
|
-
"generated_at":
|
|
1004
|
+
"generated_at": generated_at,
|
|
973
1005
|
"run_dir": str(run_dir),
|
|
974
1006
|
"target_url": targets[0].url,
|
|
975
1007
|
"target_set": target_set,
|
|
@@ -981,7 +1013,7 @@ def run_quick_benchmark(
|
|
|
981
1013
|
"skipped_providers": skipped_providers,
|
|
982
1014
|
"budget_limit_usd": budget_limit,
|
|
983
1015
|
"zero_dollar": zero_dollar,
|
|
984
|
-
"provider_status":
|
|
1016
|
+
"provider_status": safe_provider_status,
|
|
985
1017
|
"cost_normalization": _cost_normalization_metadata(tavily_credit_usd),
|
|
986
1018
|
"runs_per_case": runs,
|
|
987
1019
|
"trace": trace.metadata(),
|
|
@@ -1011,6 +1043,10 @@ def run_quick_benchmark(
|
|
|
1011
1043
|
report["zero_dollar_completion"] = _zero_dollar_completion(cases)
|
|
1012
1044
|
trace.finish(report)
|
|
1013
1045
|
report["trace"] = trace.metadata()
|
|
1046
|
+
config_path.write_text(
|
|
1047
|
+
json.dumps(benchmark_config, indent=2, ensure_ascii=False) + "\n",
|
|
1048
|
+
encoding="utf-8",
|
|
1049
|
+
)
|
|
1014
1050
|
report_path.write_text(json.dumps(report, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
|
1015
1051
|
markdown_path.write_text(_markdown_report(report), encoding="utf-8")
|
|
1016
1052
|
return report
|
|
@@ -3848,6 +3884,7 @@ def _article_markdown(report: dict[str, Any], *, title: str) -> str:
|
|
|
3848
3884
|
"",
|
|
3849
3885
|
"## Artifacts",
|
|
3850
3886
|
"",
|
|
3887
|
+
f"- Config: `{artifacts.get('config')}`",
|
|
3851
3888
|
f"- JSON report: `{artifacts.get('json')}`",
|
|
3852
3889
|
f"- Summary: `{artifacts.get('markdown')}`",
|
|
3853
3890
|
"",
|
|
@@ -3977,6 +4014,7 @@ def _legacy_article_markdown(report: dict[str, Any], *, title: str) -> str:
|
|
|
3977
4014
|
"",
|
|
3978
4015
|
"## Artifacts",
|
|
3979
4016
|
"",
|
|
4017
|
+
f"- Config: `{artifacts.get('config')}`",
|
|
3980
4018
|
f"- JSON report: `{artifacts.get('json')}`",
|
|
3981
4019
|
f"- Summary: `{artifacts.get('markdown')}`",
|
|
3982
4020
|
"",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docpull
|
|
3
|
-
Version: 6.0.
|
|
3
|
+
Version: 6.0.1
|
|
4
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>
|
|
@@ -126,10 +126,12 @@ Dynamic: license-file
|
|
|
126
126
|
[](https://github.com/raintree-technology/docpull/stargazers)
|
|
127
127
|
[](https://github.com/raintree-technology/docpull/blob/main/LICENSE)
|
|
128
128
|
|
|
129
|
+
<!-- mcp-name: io.github.raintree-technology/docpull -->
|
|
130
|
+
|
|
129
131
|
DocPull is a local-first dependency manager for AI context. Define the public
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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.
|
|
133
135
|
|
|
134
136
|
The core workflow is a `docpull.yaml` plus a `.docpull/context.lock.json`,
|
|
135
137
|
similar in spirit to code dependency manifests and lockfiles:
|
|
@@ -141,7 +143,7 @@ docpull install
|
|
|
141
143
|
docpull deps
|
|
142
144
|
docpull sync
|
|
143
145
|
docpull diff
|
|
144
|
-
docpull export context-pack --target
|
|
146
|
+
docpull export context-pack --target openai
|
|
145
147
|
```
|
|
146
148
|
|
|
147
149
|
Bundled aliases such as `stripe`, `react`, `postgres`, `openai`, and
|
|
@@ -504,12 +506,11 @@ More examples live in [CLI Recipes](docs/examples/README.md).
|
|
|
504
506
|
With an explicit `--skill-agent`, docpull stores the fetched corpus under
|
|
505
507
|
`.docpull/skills/<name>/references` and creates agent-specific wrappers that
|
|
506
508
|
point at that corpus. `--skill-agent claude` writes a Claude Code skill under
|
|
507
|
-
`.claude/skills/<name>/`, `--skill-agent
|
|
508
|
-
`.
|
|
509
|
-
|
|
510
|
-
`--skill-agent
|
|
511
|
-
|
|
512
|
-
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.
|
|
513
514
|
|
|
514
515
|
Use docpull when you need to:
|
|
515
516
|
|
|
@@ -719,7 +720,7 @@ part of the package release contract.
|
|
|
719
720
|
- `docpull export` writes local files for OpenAI vector JSONL, LangChain,
|
|
720
721
|
LlamaIndex, DSPy, Sheets CSV/TSV, n8n workflow JSON, Vercel AI SDK JSON,
|
|
721
722
|
CrewAI JSON, warehouse NDJSON, optional Parquet via `docpull[parquet]`, and
|
|
722
|
-
|
|
723
|
+
agent reference bundles.
|
|
723
724
|
## Security Defaults
|
|
724
725
|
|
|
725
726
|
- HTTPS-only fetching with robots.txt compliance.
|
|
@@ -92,6 +92,8 @@ def test_benchmark_quick_cli_writes_reports(
|
|
|
92
92
|
assert report["trace"]["provider"] == "none"
|
|
93
93
|
assert report["targets"][0]["id"] == "docs-parallel-ai"
|
|
94
94
|
assert report["cases"][0]["target_id"] == "docs-parallel-ai"
|
|
95
|
+
assert report["artifacts"]["config"].endswith("benchmark.config.json")
|
|
96
|
+
assert (output_dir / "benchmark.config.json").exists()
|
|
95
97
|
assert (output_dir / "benchmark.summary.md").exists()
|
|
96
98
|
|
|
97
99
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|