docpull 6.2.0__tar.gz → 6.4.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.
Files changed (264) hide show
  1. {docpull-6.2.0/src/docpull.egg-info → docpull-6.4.0}/PKG-INFO +18 -3
  2. {docpull-6.2.0 → docpull-6.4.0}/README.md +17 -2
  3. {docpull-6.2.0 → docpull-6.4.0}/pyproject.toml +1 -1
  4. docpull-6.4.0/src/docpull/__init__.py +295 -0
  5. docpull-6.4.0/src/docpull/acquisition_workflows.py +567 -0
  6. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/basis.py +18 -14
  7. docpull-6.4.0/src/docpull/cache/__init__.py +50 -0
  8. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/cache/frontier.py +72 -10
  9. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/cache/manager.py +6 -1
  10. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/cli.py +191 -55
  11. docpull-6.4.0/src/docpull/context_packs/__init__.py +69 -0
  12. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/brand.py +23 -9
  13. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/cli.py +5 -2
  14. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/common.py +117 -16
  15. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/dataset.py +128 -12
  16. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/policy_pack.py +16 -7
  17. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/product.py +165 -37
  18. docpull-6.4.0/src/docpull/context_packs/relationship.py +567 -0
  19. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/styleguide.py +14 -7
  20. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/typed.py +54 -1
  21. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/visuals.py +6 -2
  22. docpull-6.4.0/src/docpull/context_packs/website.py +1238 -0
  23. docpull-6.4.0/src/docpull/context_packs/workflow_cli.py +143 -0
  24. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/contracts.py +294 -1
  25. docpull-6.4.0/src/docpull/conversion/__init__.py +76 -0
  26. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/extractor.py +16 -4
  27. docpull-6.4.0/src/docpull/discovery/__init__.py +101 -0
  28. docpull-6.4.0/src/docpull/discovery/link_extractors/__init__.py +37 -0
  29. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/evidence.py +76 -3
  30. docpull-6.4.0/src/docpull/export_formats.py +27 -0
  31. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/exports.py +7 -25
  32. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/graph.py +84 -34
  33. docpull-6.4.0/src/docpull/http/__init__.py +46 -0
  34. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/http/client.py +66 -1
  35. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/local_workflows.py +48 -9
  36. docpull-6.4.0/src/docpull/mcp/__init__.py +24 -0
  37. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/mcp/server.py +156 -23
  38. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/mcp/tools.py +21 -4
  39. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/metadata_extractor.py +1 -1
  40. docpull-6.4.0/src/docpull/models/__init__.py +128 -0
  41. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/models/events.py +6 -1
  42. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/models/run.py +15 -6
  43. docpull-6.4.0/src/docpull/models/schema.py +9 -0
  44. docpull-6.4.0/src/docpull/native_integrations.py +88 -0
  45. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/output_contract.py +7 -2
  46. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pack_reader.py +86 -20
  47. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pack_tools.py +278 -75
  48. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/base.py +6 -0
  49. docpull-6.4.0/src/docpull/pipeline/steps/__init__.py +74 -0
  50. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/convert.py +51 -3
  51. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/fetch.py +26 -0
  52. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/metadata.py +2 -2
  53. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/project.py +34 -5
  54. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/intelligence-bundle.v1.schema.json +133 -0
  55. docpull-6.4.0/src/docpull/schemas/relationship-pack.v1.schema.json +401 -0
  56. docpull-6.4.0/src/docpull/schemas/website-snapshot.v1.schema.json +567 -0
  57. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/workflow-result.v1.schema.json +45 -0
  58. docpull-6.4.0/src/docpull/security/__init__.py +43 -0
  59. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/surface.py +16 -1
  60. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/workflows.py +110 -3
  61. {docpull-6.2.0 → docpull-6.4.0/src/docpull.egg-info}/PKG-INFO +18 -3
  62. {docpull-6.2.0 → docpull-6.4.0}/src/docpull.egg-info/SOURCES.txt +15 -0
  63. docpull-6.4.0/tests/test_acquisition_workflows.py +100 -0
  64. {docpull-6.2.0 → docpull-6.4.0}/tests/test_ci_policy.py +53 -14
  65. {docpull-6.2.0 → docpull-6.4.0}/tests/test_cli.py +46 -0
  66. docpull-6.4.0/tests/test_frontier_resume.py +90 -0
  67. docpull-6.4.0/tests/test_http_efficiency.py +169 -0
  68. docpull-6.4.0/tests/test_import_efficiency.py +107 -0
  69. docpull-6.4.0/tests/test_local_pack_workflows.py +151 -0
  70. docpull-6.4.0/tests/test_native_integrations.py +29 -0
  71. {docpull-6.2.0 → docpull-6.4.0}/tests/test_pack_tools.py +23 -0
  72. {docpull-6.2.0 → docpull-6.4.0}/tests/test_pipeline.py +20 -0
  73. docpull-6.4.0/tests/test_relationship_workflow.py +218 -0
  74. {docpull-6.2.0 → docpull-6.4.0}/tests/test_release_a_plus_check_script.py +10 -12
  75. {docpull-6.2.0 → docpull-6.4.0}/tests/test_surface_contract.py +11 -43
  76. {docpull-6.2.0 → docpull-6.4.0}/tests/test_typed_knowledge_packs.py +35 -0
  77. docpull-6.4.0/tests/test_website_snapshot.py +352 -0
  78. {docpull-6.2.0 → docpull-6.4.0}/tests/test_workflow_contracts.py +4 -1
  79. docpull-6.2.0/src/docpull/__init__.py +0 -244
  80. docpull-6.2.0/src/docpull/cache/__init__.py +0 -16
  81. docpull-6.2.0/src/docpull/context_packs/__init__.py +0 -46
  82. docpull-6.2.0/src/docpull/context_packs/workflow_cli.py +0 -52
  83. docpull-6.2.0/src/docpull/conversion/__init__.py +0 -37
  84. docpull-6.2.0/src/docpull/discovery/__init__.py +0 -52
  85. docpull-6.2.0/src/docpull/discovery/link_extractors/__init__.py +0 -11
  86. docpull-6.2.0/src/docpull/http/__init__.py +0 -13
  87. docpull-6.2.0/src/docpull/mcp/__init__.py +0 -10
  88. docpull-6.2.0/src/docpull/models/__init__.py +0 -61
  89. docpull-6.2.0/src/docpull/pipeline/steps/__init__.py +0 -31
  90. docpull-6.2.0/src/docpull/security/__init__.py +0 -13
  91. docpull-6.2.0/tests/test_frontier_resume.py +0 -35
  92. {docpull-6.2.0 → docpull-6.4.0}/LICENSE +0 -0
  93. {docpull-6.2.0 → docpull-6.4.0}/setup.cfg +0 -0
  94. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/__main__.py +0 -0
  95. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/accounting.py +0 -0
  96. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/agent_publish.py +0 -0
  97. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/auth_cli.py +0 -0
  98. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/benchmark.py +0 -0
  99. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/cache/streaming_dedup.py +0 -0
  100. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/change_events.py +0 -0
  101. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_aliases.py +0 -0
  102. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_ci.py +0 -0
  103. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/_legacy_cli.py +0 -0
  104. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/feed.py +0 -0
  105. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/openapi.py +0 -0
  106. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/package.py +0 -0
  107. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/paper.py +0 -0
  108. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/repo.py +0 -0
  109. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/schema_extract.py +0 -0
  110. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/search.py +0 -0
  111. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/standards.py +0 -0
  112. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/transcript.py +0 -0
  113. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/typed_models.py +0 -0
  114. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/context_packs/wiki.py +0 -0
  115. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/contracts_cli.py +0 -0
  116. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/article_cleanup.py +0 -0
  117. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/chunking.py +0 -0
  118. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/ensemble.py +0 -0
  119. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/filings.py +0 -0
  120. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/markdown.py +0 -0
  121. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/protocols.py +0 -0
  122. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/special_cases.py +0 -0
  123. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/conversion/trafilatura_extractor.py +0 -0
  124. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/core/__init__.py +0 -0
  125. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/core/fetcher.py +0 -0
  126. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/_fetch.py +0 -0
  127. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/composite.py +0 -0
  128. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/contracts.py +0 -0
  129. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/crawler.py +0 -0
  130. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/filters.py +0 -0
  131. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/link_extractors/enhanced.py +0 -0
  132. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/link_extractors/protocols.py +0 -0
  133. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/link_extractors/static.py +0 -0
  134. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/protocols.py +0 -0
  135. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery/sitemap.py +0 -0
  136. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/discovery_cli.py +0 -0
  137. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/doctor.py +0 -0
  138. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/document_parse.py +0 -0
  139. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/document_worker.py +0 -0
  140. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/eval_grade.py +0 -0
  141. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/evidence_pack.py +0 -0
  142. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/fixtures/__init__.py +0 -0
  143. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/fixtures/parallel-search-extract.json +0 -0
  144. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/free_core.py +0 -0
  145. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/free_core_smoke.py +0 -0
  146. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/hosted.py +0 -0
  147. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/http/protocols.py +0 -0
  148. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/http/rate_limiter.py +0 -0
  149. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/judge.py +0 -0
  150. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/mcp/sources.py +0 -0
  151. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/models/config.py +0 -0
  152. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/models/document.py +0 -0
  153. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/models/profiles.py +0 -0
  154. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/monitor.py +0 -0
  155. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/parallel_workflows.py +0 -0
  156. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/parity.py +0 -0
  157. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/parity_cli.py +0 -0
  158. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/passk.py +0 -0
  159. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/__init__.py +0 -0
  160. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/manifest.py +0 -0
  161. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/chunk.py +0 -0
  162. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/dedup.py +0 -0
  163. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/render.py +0 -0
  164. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/save.py +0 -0
  165. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/save_json.py +0 -0
  166. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/save_ndjson.py +0 -0
  167. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/save_okf.py +0 -0
  168. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/save_sqlite.py +0 -0
  169. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/pipeline/steps/validate.py +0 -0
  170. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/policy.py +0 -0
  171. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/policy_cli.py +0 -0
  172. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/provider_adapters.py +0 -0
  173. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/provider_capabilities.py +0 -0
  174. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/provider_cli.py +0 -0
  175. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/provider_keys.py +0 -0
  176. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/provider_probes.py +0 -0
  177. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/py.typed +0 -0
  178. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/redaction.py +0 -0
  179. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/rendering.py +0 -0
  180. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/artifact-manifest.v1.schema.json +0 -0
  181. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/basis.v2.schema.json +0 -0
  182. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/change-event.v1.schema.json +0 -0
  183. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/citation-map.v1.schema.json +0 -0
  184. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/document.v3.schema.json +0 -0
  185. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/pack.v3.schema.json +0 -0
  186. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/provenance.v1.schema.json +0 -0
  187. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/rights.v1.schema.json +0 -0
  188. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/run-identity.v1.schema.json +0 -0
  189. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/schemas/workflow-request.v1.schema.json +0 -0
  190. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/scraper.py +0 -0
  191. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/security/download_policy.py +0 -0
  192. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/security/robots.py +0 -0
  193. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/security/url_validator.py +0 -0
  194. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/server.py +0 -0
  195. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/share.py +0 -0
  196. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/skill_export.py +0 -0
  197. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/source_scoring.py +0 -0
  198. {docpull-6.2.0 → docpull-6.4.0}/src/docpull/time_utils.py +0 -0
  199. {docpull-6.2.0 → docpull-6.4.0}/src/docpull.egg-info/dependency_links.txt +0 -0
  200. {docpull-6.2.0 → docpull-6.4.0}/src/docpull.egg-info/entry_points.txt +0 -0
  201. {docpull-6.2.0 → docpull-6.4.0}/src/docpull.egg-info/requires.txt +0 -0
  202. {docpull-6.2.0 → docpull-6.4.0}/src/docpull.egg-info/top_level.txt +0 -0
  203. {docpull-6.2.0 → docpull-6.4.0}/tests/test_accounting.py +0 -0
  204. {docpull-6.2.0 → docpull-6.4.0}/tests/test_auth_cli.py +0 -0
  205. {docpull-6.2.0 → docpull-6.4.0}/tests/test_basis.py +0 -0
  206. {docpull-6.2.0 → docpull-6.4.0}/tests/test_benchmark.py +0 -0
  207. {docpull-6.2.0 → docpull-6.4.0}/tests/test_cache_conditional_get.py +0 -0
  208. {docpull-6.2.0 → docpull-6.4.0}/tests/test_chunking.py +0 -0
  209. {docpull-6.2.0 → docpull-6.4.0}/tests/test_claim_audit_script.py +0 -0
  210. {docpull-6.2.0 → docpull-6.4.0}/tests/test_context_ci.py +0 -0
  211. {docpull-6.2.0 → docpull-6.4.0}/tests/test_context_packs.py +0 -0
  212. {docpull-6.2.0 → docpull-6.4.0}/tests/test_conversion.py +0 -0
  213. {docpull-6.2.0 → docpull-6.4.0}/tests/test_convert_step_new.py +0 -0
  214. {docpull-6.2.0 → docpull-6.4.0}/tests/test_discovery.py +0 -0
  215. {docpull-6.2.0 → docpull-6.4.0}/tests/test_discovery_contracts.py +0 -0
  216. {docpull-6.2.0 → docpull-6.4.0}/tests/test_doctor.py +0 -0
  217. {docpull-6.2.0 → docpull-6.4.0}/tests/test_document_parse.py +0 -0
  218. {docpull-6.2.0 → docpull-6.4.0}/tests/test_document_record.py +0 -0
  219. {docpull-6.2.0 → docpull-6.4.0}/tests/test_evidence_pack.py +0 -0
  220. {docpull-6.2.0 → docpull-6.4.0}/tests/test_exports.py +0 -0
  221. {docpull-6.2.0 → docpull-6.4.0}/tests/test_extractor_ensemble.py +0 -0
  222. {docpull-6.2.0 → docpull-6.4.0}/tests/test_feed_pack.py +0 -0
  223. {docpull-6.2.0 → docpull-6.4.0}/tests/test_free_core.py +0 -0
  224. {docpull-6.2.0 → docpull-6.4.0}/tests/test_graph.py +0 -0
  225. {docpull-6.2.0 → docpull-6.4.0}/tests/test_hosted.py +0 -0
  226. {docpull-6.2.0 → docpull-6.4.0}/tests/test_integration.py +0 -0
  227. {docpull-6.2.0 → docpull-6.4.0}/tests/test_judge.py +0 -0
  228. {docpull-6.2.0 → docpull-6.4.0}/tests/test_link_extractors.py +0 -0
  229. {docpull-6.2.0 → docpull-6.4.0}/tests/test_live_web_smoke.py +0 -0
  230. {docpull-6.2.0 → docpull-6.4.0}/tests/test_local_workflows.py +0 -0
  231. {docpull-6.2.0 → docpull-6.4.0}/tests/test_mcp_server.py +0 -0
  232. {docpull-6.2.0 → docpull-6.4.0}/tests/test_mcp_tools.py +0 -0
  233. {docpull-6.2.0 → docpull-6.4.0}/tests/test_metadata_extractor.py +0 -0
  234. {docpull-6.2.0 → docpull-6.4.0}/tests/test_monitor.py +0 -0
  235. {docpull-6.2.0 → docpull-6.4.0}/tests/test_naming.py +0 -0
  236. {docpull-6.2.0 → docpull-6.4.0}/tests/test_openapi_pack.py +0 -0
  237. {docpull-6.2.0 → docpull-6.4.0}/tests/test_optional_extras_installed.py +0 -0
  238. {docpull-6.2.0 → docpull-6.4.0}/tests/test_output_contract.py +0 -0
  239. {docpull-6.2.0 → docpull-6.4.0}/tests/test_outputs_e2e.py +0 -0
  240. {docpull-6.2.0 → docpull-6.4.0}/tests/test_pack_server.py +0 -0
  241. {docpull-6.2.0 → docpull-6.4.0}/tests/test_parallel_workflows.py +0 -0
  242. {docpull-6.2.0 → docpull-6.4.0}/tests/test_parity_workflows.py +0 -0
  243. {docpull-6.2.0 → docpull-6.4.0}/tests/test_passk.py +0 -0
  244. {docpull-6.2.0 → docpull-6.4.0}/tests/test_policy.py +0 -0
  245. {docpull-6.2.0 → docpull-6.4.0}/tests/test_policy_cli.py +0 -0
  246. {docpull-6.2.0 → docpull-6.4.0}/tests/test_project.py +0 -0
  247. {docpull-6.2.0 → docpull-6.4.0}/tests/test_provider_adapters.py +0 -0
  248. {docpull-6.2.0 → docpull-6.4.0}/tests/test_provider_cli.py +0 -0
  249. {docpull-6.2.0 → docpull-6.4.0}/tests/test_provider_keys.py +0 -0
  250. {docpull-6.2.0 → docpull-6.4.0}/tests/test_provider_probes.py +0 -0
  251. {docpull-6.2.0 → docpull-6.4.0}/tests/test_public_feature_smoke.py +0 -0
  252. {docpull-6.2.0 → docpull-6.4.0}/tests/test_rate_limiter.py +0 -0
  253. {docpull-6.2.0 → docpull-6.4.0}/tests/test_real_feature_smoke_script.py +0 -0
  254. {docpull-6.2.0 → docpull-6.4.0}/tests/test_real_site_regressions.py +0 -0
  255. {docpull-6.2.0 → docpull-6.4.0}/tests/test_rendering.py +0 -0
  256. {docpull-6.2.0 → docpull-6.4.0}/tests/test_reproducible_release_build.py +0 -0
  257. {docpull-6.2.0 → docpull-6.4.0}/tests/test_save_ndjson.py +0 -0
  258. {docpull-6.2.0 → docpull-6.4.0}/tests/test_save_sqlite.py +0 -0
  259. {docpull-6.2.0 → docpull-6.4.0}/tests/test_security_hardening.py +0 -0
  260. {docpull-6.2.0 → docpull-6.4.0}/tests/test_share.py +0 -0
  261. {docpull-6.2.0 → docpull-6.4.0}/tests/test_source_scoring.py +0 -0
  262. {docpull-6.2.0 → docpull-6.4.0}/tests/test_special_cases.py +0 -0
  263. {docpull-6.2.0 → docpull-6.4.0}/tests/test_time_utils.py +0 -0
  264. {docpull-6.2.0 → docpull-6.4.0}/tests/test_trafilatura_extractor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docpull
3
- Version: 6.2.0
3
+ Version: 6.4.0
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>
@@ -122,6 +122,14 @@ Requires-Dist: types-defusedxml>=0.7.0; extra == "dev"
122
122
  Requires-Dist: types-pyyaml>=6.0.0; extra == "dev"
123
123
  Dynamic: license-file
124
124
 
125
+ <p align="center">
126
+ <img
127
+ src="https://raw.githubusercontent.com/raintree-technology/docpull/main/docs/launch-assets/logo-square-light-400.png"
128
+ alt="DocPull"
129
+ width="128"
130
+ />
131
+ </p>
132
+
125
133
  # docpull
126
134
 
127
135
  **Context dependencies for AI agents. Browser-free by default.**
@@ -297,6 +305,9 @@ docpull repo-pack psf/requests -o packs/repo --cache
297
305
  docpull package-pack pypi:requests -o packs/package
298
306
  docpull standards-pack rfc:9110 -o packs/standard
299
307
  docpull dataset-pack ./metrics.csv -o packs/dataset
308
+ docpull dataset-pack 'https://data.example.org/rows.json?$limit=100' -o packs/dataset
309
+ docpull relationship-pack example.com --subject "Example Brand" -o packs/relationships
310
+ docpull website-pack example.com -o packs/website
300
311
  docpull transcript-pack ./meeting.vtt -o packs/transcript
301
312
  docpull wiki-pack wiki:Web_scraping -o packs/wiki
302
313
  docpull brand-pack example.com -o packs/brand
@@ -310,6 +321,9 @@ docpull export packs/docs --format openai-vector-jsonl -o exports/openai.jsonl
310
321
  docpull export packs/docs --format cursor-rules -o .cursor/rules --skill-name docs
311
322
  ```
312
323
 
324
+ The canonical baseline-aware website acquisition contract is documented in
325
+ [Website snapshots](docs/website-snapshot.md).
326
+
313
327
  Use `docpull ci --prepare` to validate a project or standalone pack in CI.
314
328
 
315
329
  Install optional extras as needed:
@@ -575,7 +589,8 @@ special handling for common web, documentation, and API surfaces.
575
589
  | Public GitHub repos | `docpull repo-pack` emits repo metadata, README/docs/examples/changelog files, manifests, and releases |
576
590
  | npm / PyPI packages | `docpull package-pack` emits registry metadata, README/description, versions, license, dependencies, and install commands |
577
591
  | Standards | `docpull standards-pack` emits RFC, IETF, W3C, and WHATWG metadata plus section-level records |
578
- | Local datasets | `docpull dataset-pack` emits bounded schema, exact row counts where streamable, column, null-count, and sample summaries |
592
+ | Local/remote datasets | `docpull dataset-pack` emits bounded schema, exact row counts where streamable, column/null/sample summaries, and HTTPS JSON/CSV snapshot provenance |
593
+ | Relationship review | `docpull relationship-pack` emits cited observations and explicit coverage gaps without approving claims or inferring independence |
579
594
  | Transcripts | `docpull transcript-pack` emits timestamped segment records from VTT, SRT, text, JSON, or direct transcript URLs |
580
595
  | Wikimedia / Wikipedia | `docpull wiki-pack` emits MediaWiki REST page metadata, license/revision metadata, and section-level records |
581
596
  | Brand evidence | `docpull brand-pack` emits cited identity, firmographic, social, logo, and color observations |
@@ -761,7 +776,7 @@ part of the package release contract.
761
776
  `docpull parse`, `docpull openapi-pack`, `docpull feed-pack`,
762
777
  `docpull paper-pack`, `docpull repo-pack`, `docpull package-pack`,
763
778
  `docpull standards-pack`, `docpull dataset-pack`, `docpull transcript-pack`,
764
- `docpull wiki-pack`, `docpull brand-pack`, `docpull product-pack`,
779
+ `docpull wiki-pack`, `docpull website-pack`, `docpull brand-pack`, `docpull product-pack`,
765
780
  `docpull styleguide-pack`, `docpull image-pack`, `docpull policy-pack`,
766
781
  `docpull pack validate`,
767
782
  `docpull pack audit`, `docpull export`,
@@ -1,3 +1,11 @@
1
+ <p align="center">
2
+ <img
3
+ src="https://raw.githubusercontent.com/raintree-technology/docpull/main/docs/launch-assets/logo-square-light-400.png"
4
+ alt="DocPull"
5
+ width="128"
6
+ />
7
+ </p>
8
+
1
9
  # docpull
2
10
 
3
11
  **Context dependencies for AI agents. Browser-free by default.**
@@ -173,6 +181,9 @@ docpull repo-pack psf/requests -o packs/repo --cache
173
181
  docpull package-pack pypi:requests -o packs/package
174
182
  docpull standards-pack rfc:9110 -o packs/standard
175
183
  docpull dataset-pack ./metrics.csv -o packs/dataset
184
+ docpull dataset-pack 'https://data.example.org/rows.json?$limit=100' -o packs/dataset
185
+ docpull relationship-pack example.com --subject "Example Brand" -o packs/relationships
186
+ docpull website-pack example.com -o packs/website
176
187
  docpull transcript-pack ./meeting.vtt -o packs/transcript
177
188
  docpull wiki-pack wiki:Web_scraping -o packs/wiki
178
189
  docpull brand-pack example.com -o packs/brand
@@ -186,6 +197,9 @@ docpull export packs/docs --format openai-vector-jsonl -o exports/openai.jsonl
186
197
  docpull export packs/docs --format cursor-rules -o .cursor/rules --skill-name docs
187
198
  ```
188
199
 
200
+ The canonical baseline-aware website acquisition contract is documented in
201
+ [Website snapshots](docs/website-snapshot.md).
202
+
189
203
  Use `docpull ci --prepare` to validate a project or standalone pack in CI.
190
204
 
191
205
  Install optional extras as needed:
@@ -451,7 +465,8 @@ special handling for common web, documentation, and API surfaces.
451
465
  | Public GitHub repos | `docpull repo-pack` emits repo metadata, README/docs/examples/changelog files, manifests, and releases |
452
466
  | npm / PyPI packages | `docpull package-pack` emits registry metadata, README/description, versions, license, dependencies, and install commands |
453
467
  | Standards | `docpull standards-pack` emits RFC, IETF, W3C, and WHATWG metadata plus section-level records |
454
- | Local datasets | `docpull dataset-pack` emits bounded schema, exact row counts where streamable, column, null-count, and sample summaries |
468
+ | Local/remote datasets | `docpull dataset-pack` emits bounded schema, exact row counts where streamable, column/null/sample summaries, and HTTPS JSON/CSV snapshot provenance |
469
+ | Relationship review | `docpull relationship-pack` emits cited observations and explicit coverage gaps without approving claims or inferring independence |
455
470
  | Transcripts | `docpull transcript-pack` emits timestamped segment records from VTT, SRT, text, JSON, or direct transcript URLs |
456
471
  | Wikimedia / Wikipedia | `docpull wiki-pack` emits MediaWiki REST page metadata, license/revision metadata, and section-level records |
457
472
  | Brand evidence | `docpull brand-pack` emits cited identity, firmographic, social, logo, and color observations |
@@ -637,7 +652,7 @@ part of the package release contract.
637
652
  `docpull parse`, `docpull openapi-pack`, `docpull feed-pack`,
638
653
  `docpull paper-pack`, `docpull repo-pack`, `docpull package-pack`,
639
654
  `docpull standards-pack`, `docpull dataset-pack`, `docpull transcript-pack`,
640
- `docpull wiki-pack`, `docpull brand-pack`, `docpull product-pack`,
655
+ `docpull wiki-pack`, `docpull website-pack`, `docpull brand-pack`, `docpull product-pack`,
641
656
  `docpull styleguide-pack`, `docpull image-pack`, `docpull policy-pack`,
642
657
  `docpull pack validate`,
643
658
  `docpull pack audit`, `docpull export`,
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "docpull"
7
- version = "6.2.0"
7
+ version = "6.4.0"
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"}
@@ -0,0 +1,295 @@
1
+ """DocPull — reproducible context dependencies for AI agents.
2
+
3
+ The public SDK is loaded lazily. Importing :mod:`docpull` is common to every
4
+ CLI command and Python submodule import, so the package root must not eagerly
5
+ load optional workflows or rendering backends. Attribute access and
6
+ ``from docpull import ...`` retain the public contract while loading only the
7
+ module that owns the requested symbol.
8
+ """
9
+ # ruff: noqa: F401 - TYPE_CHECKING imports document the lazy public re-exports.
10
+
11
+ from __future__ import annotations
12
+
13
+ from importlib import import_module
14
+ from typing import TYPE_CHECKING, Any
15
+
16
+ from .surface import PUBLIC_SDK_EXPORTS
17
+
18
+ __version__ = "6.4.0"
19
+
20
+ _LAZY_EXPORTS: dict[str, tuple[str, str]] = {
21
+ **{
22
+ name: (".context_packs", name)
23
+ for name in (
24
+ "async_build_dataset_pack",
25
+ "async_build_package_pack",
26
+ "async_build_paper_pack",
27
+ "async_build_repo_pack",
28
+ "async_build_standards_pack",
29
+ "async_build_transcript_pack",
30
+ "async_build_wiki_pack",
31
+ "build_brand_pack",
32
+ "build_dataset_pack",
33
+ "build_feed_pack",
34
+ "build_image_pack",
35
+ "build_openapi_pack",
36
+ "build_package_pack",
37
+ "build_paper_pack",
38
+ "build_policy_pack",
39
+ "build_relationship_pack",
40
+ "build_product_pack",
41
+ "build_repo_pack",
42
+ "build_standards_pack",
43
+ "build_styleguide_pack",
44
+ "build_website_pack",
45
+ "build_transcript_pack",
46
+ "build_wiki_pack",
47
+ "capture_screenshot_pack",
48
+ "validate_website_snapshot_pack",
49
+ )
50
+ },
51
+ **{
52
+ name: (".contracts", name)
53
+ for name in (
54
+ "ArtifactManifest",
55
+ "ChangeEvent",
56
+ "EvidenceSpan",
57
+ "IntelligenceBundle",
58
+ "CoverageResult",
59
+ "RelationshipCandidate",
60
+ "RelationshipPack",
61
+ "SourceAuthority",
62
+ "WorkflowRequest",
63
+ "WorkflowResult",
64
+ "WebsiteSnapshot",
65
+ "WebsiteSnapshotDocument",
66
+ "bundled_schema_path",
67
+ "write_contract_schemas",
68
+ )
69
+ },
70
+ **{
71
+ name: (".workflows", name)
72
+ for name in ("async_run_workflow", "create_workflow_request", "run_workflow")
73
+ },
74
+ **{name: (".core.fetcher", name) for name in ("Fetcher", "fetch_blocking", "fetch_one")},
75
+ **{name: (".conversion.chunking", name) for name in ("Chunk", "TokenCounter", "chunk_markdown")},
76
+ "PageContext": (".pipeline.base", "PageContext"),
77
+ **{name: (".pipeline.steps", name) for name in ("SqliteSearchResult", "search_sqlite_documents")},
78
+ **{
79
+ name: (".models.config", name)
80
+ for name in (
81
+ "BudgetConfig",
82
+ "CacheConfig",
83
+ "ContentFilterConfig",
84
+ "CrawlConfig",
85
+ "DocpullConfig",
86
+ "NetworkConfig",
87
+ "OutputConfig",
88
+ "PerformanceConfig",
89
+ "ProfileName",
90
+ "RenderActionPolicy",
91
+ "RenderConfig",
92
+ "RenderViewport",
93
+ )
94
+ },
95
+ **{name: (".models.events", name) for name in ("EventType", "FetchEvent", "FetchStats")},
96
+ **{name: (".cache", name) for name in ("CacheManager", "StreamingDeduplicator")},
97
+ "PolicyConfig": (".policy", "PolicyConfig"),
98
+ **{name: (".local_workflows", name) for name in ("audit_pack", "refresh_pack")},
99
+ **{
100
+ name: (".document_parse", name)
101
+ for name in ("DocumentParseError", "ParsedDocument", "parse_documents", "parse_one_document")
102
+ },
103
+ **{
104
+ name: (".pack_tools", name)
105
+ for name in (
106
+ "build_citation_map",
107
+ "build_company_brain_bundle",
108
+ "build_intelligence_bundle",
109
+ "build_research_brief",
110
+ "diff_packs",
111
+ "extract_pack_entities",
112
+ "prepare_pack",
113
+ "score_pack",
114
+ "score_pack_sources",
115
+ "search_pack",
116
+ )
117
+ },
118
+ "validate_pack_contract": (".output_contract", "validate_pack_contract"),
119
+ **{name: (".context_ci", name) for name in ("CIThresholds", "ContextCIError", "run_context_ci")},
120
+ **{name: (".exports", name) for name in ("ExportResult", "export_pack")},
121
+ **{name: (".pack_reader", name) for name in ("LocalPack", "PackReadError", "PackSource", "load_pack")},
122
+ **{
123
+ name: (".graph", name)
124
+ for name in (
125
+ "GraphError",
126
+ "build_graph",
127
+ "graph_neighbors",
128
+ "graph_status",
129
+ "load_graph",
130
+ "query_graph",
131
+ "refresh_graph",
132
+ )
133
+ },
134
+ **{name: (".server", name) for name in ("PackASGIApp", "PackServerError", "create_pack_app")},
135
+ **{
136
+ name: (".share", name)
137
+ for name in ("ReportHTTPServer", "ShareError", "create_report_server", "render_report_document")
138
+ },
139
+ **{
140
+ name: (".rendering", name)
141
+ for name in (
142
+ "AgentBrowserRenderer",
143
+ "E2BSandboxRenderer",
144
+ "RenderedPage",
145
+ "Renderer",
146
+ "RenderError",
147
+ "RendererUnavailableError",
148
+ "VercelSandboxRenderer",
149
+ "agent_browser_binary",
150
+ "check_agent_browser_availability",
151
+ "check_e2b_sandbox_availability",
152
+ "check_render_backend_availability",
153
+ "check_vercel_sandbox_availability",
154
+ "estimate_cloud_render_cost_usd",
155
+ "render_url",
156
+ "render_url_to_directory",
157
+ )
158
+ },
159
+ }
160
+
161
+ __all__ = list(PUBLIC_SDK_EXPORTS)
162
+
163
+
164
+ def __getattr__(name: str) -> Any:
165
+ """Load one public SDK symbol on first access and cache it locally."""
166
+ target = _LAZY_EXPORTS.get(name)
167
+ if target is None:
168
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
169
+ module_name, attribute_name = target
170
+ value = getattr(import_module(module_name, __name__), attribute_name)
171
+ globals()[name] = value
172
+ return value
173
+
174
+
175
+ def __dir__() -> list[str]:
176
+ """Include lazy public attributes in interactive discovery."""
177
+ return sorted(set(globals()) | set(__all__))
178
+
179
+
180
+ if TYPE_CHECKING:
181
+ from .cache import CacheManager, StreamingDeduplicator
182
+ from .context_ci import CIThresholds, ContextCIError, run_context_ci
183
+ from .context_packs import (
184
+ async_build_dataset_pack,
185
+ async_build_package_pack,
186
+ async_build_paper_pack,
187
+ async_build_repo_pack,
188
+ async_build_standards_pack,
189
+ async_build_transcript_pack,
190
+ async_build_wiki_pack,
191
+ build_brand_pack,
192
+ build_dataset_pack,
193
+ build_feed_pack,
194
+ build_image_pack,
195
+ build_openapi_pack,
196
+ build_package_pack,
197
+ build_paper_pack,
198
+ build_policy_pack,
199
+ build_product_pack,
200
+ build_relationship_pack,
201
+ build_repo_pack,
202
+ build_standards_pack,
203
+ build_styleguide_pack,
204
+ build_transcript_pack,
205
+ build_website_pack,
206
+ build_wiki_pack,
207
+ capture_screenshot_pack,
208
+ validate_website_snapshot_pack,
209
+ )
210
+ from .contracts import (
211
+ ArtifactManifest,
212
+ ChangeEvent,
213
+ CoverageResult,
214
+ EvidenceSpan,
215
+ IntelligenceBundle,
216
+ RelationshipCandidate,
217
+ RelationshipPack,
218
+ SourceAuthority,
219
+ WebsiteSnapshot,
220
+ WebsiteSnapshotDocument,
221
+ WorkflowRequest,
222
+ WorkflowResult,
223
+ bundled_schema_path,
224
+ write_contract_schemas,
225
+ )
226
+ from .conversion.chunking import Chunk, TokenCounter, chunk_markdown
227
+ from .core.fetcher import Fetcher, fetch_blocking, fetch_one
228
+ from .document_parse import DocumentParseError, ParsedDocument, parse_documents, parse_one_document
229
+ from .exports import ExportResult, export_pack
230
+ from .graph import (
231
+ GraphError,
232
+ build_graph,
233
+ graph_neighbors,
234
+ graph_status,
235
+ load_graph,
236
+ query_graph,
237
+ refresh_graph,
238
+ )
239
+ from .local_workflows import audit_pack, refresh_pack
240
+ from .models.config import (
241
+ BudgetConfig,
242
+ CacheConfig,
243
+ ContentFilterConfig,
244
+ CrawlConfig,
245
+ DocpullConfig,
246
+ NetworkConfig,
247
+ OutputConfig,
248
+ PerformanceConfig,
249
+ ProfileName,
250
+ RenderActionPolicy,
251
+ RenderConfig,
252
+ RenderViewport,
253
+ )
254
+ from .models.events import EventType, FetchEvent, FetchStats
255
+ from .output_contract import validate_pack_contract
256
+ from .pack_reader import LocalPack, PackReadError, PackSource, load_pack
257
+ from .pack_tools import (
258
+ build_citation_map,
259
+ build_company_brain_bundle,
260
+ build_intelligence_bundle,
261
+ build_research_brief,
262
+ diff_packs,
263
+ extract_pack_entities,
264
+ prepare_pack,
265
+ score_pack,
266
+ score_pack_sources,
267
+ search_pack,
268
+ )
269
+ from .pipeline.base import PageContext
270
+ from .pipeline.steps import SqliteSearchResult, search_sqlite_documents
271
+ from .policy import PolicyConfig
272
+ from .rendering import (
273
+ AgentBrowserRenderer,
274
+ E2BSandboxRenderer,
275
+ RenderedPage,
276
+ Renderer,
277
+ RenderError,
278
+ RendererUnavailableError,
279
+ VercelSandboxRenderer,
280
+ agent_browser_binary,
281
+ check_agent_browser_availability,
282
+ check_e2b_sandbox_availability,
283
+ check_render_backend_availability,
284
+ check_vercel_sandbox_availability,
285
+ estimate_cloud_render_cost_usd,
286
+ render_url,
287
+ render_url_to_directory,
288
+ )
289
+ from .server import PackASGIApp, PackServerError, create_pack_app
290
+ from .share import ReportHTTPServer, ShareError, create_report_server, render_report_document
291
+ from .workflows import async_run_workflow, create_workflow_request, run_workflow
292
+
293
+
294
+ assert tuple(__all__) == PUBLIC_SDK_EXPORTS
295
+ assert set(_LAZY_EXPORTS) == set(__all__) - {"__version__"}