docpull 5.5.1__tar.gz → 6.0.1__tar.gz

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