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.
Files changed (214) hide show
  1. {docpull-6.0.0/src/docpull.egg-info → docpull-6.0.1}/PKG-INFO +13 -12
  2. {docpull-6.0.0 → docpull-6.0.1}/README.md +12 -11
  3. {docpull-6.0.0 → docpull-6.0.1}/pyproject.toml +1 -1
  4. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/__init__.py +2 -2
  5. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/benchmark.py +40 -2
  6. {docpull-6.0.0 → docpull-6.0.1/src/docpull.egg-info}/PKG-INFO +13 -12
  7. {docpull-6.0.0 → docpull-6.0.1}/tests/test_benchmark.py +2 -0
  8. {docpull-6.0.0 → docpull-6.0.1}/LICENSE +0 -0
  9. {docpull-6.0.0 → docpull-6.0.1}/setup.cfg +0 -0
  10. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/__main__.py +0 -0
  11. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/accounting.py +0 -0
  12. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/agent_publish.py +0 -0
  13. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/auth_cli.py +0 -0
  14. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/basis.py +0 -0
  15. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/__init__.py +0 -0
  16. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/frontier.py +0 -0
  17. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/manager.py +0 -0
  18. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cache/streaming_dedup.py +0 -0
  19. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/cli.py +0 -0
  20. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_aliases.py +0 -0
  21. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_ci.py +0 -0
  22. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/__init__.py +0 -0
  23. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/_legacy_cli.py +0 -0
  24. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/brand.py +0 -0
  25. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/cli.py +0 -0
  26. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/common.py +0 -0
  27. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/dataset.py +0 -0
  28. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/feed.py +0 -0
  29. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/openapi.py +0 -0
  30. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/package.py +0 -0
  31. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/paper.py +0 -0
  32. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/product.py +0 -0
  33. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/repo.py +0 -0
  34. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/schema_extract.py +0 -0
  35. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/search.py +0 -0
  36. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/standards.py +0 -0
  37. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/styleguide.py +0 -0
  38. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/transcript.py +0 -0
  39. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/typed.py +0 -0
  40. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/typed_models.py +0 -0
  41. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/visuals.py +0 -0
  42. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/context_packs/wiki.py +0 -0
  43. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/__init__.py +0 -0
  44. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/article_cleanup.py +0 -0
  45. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/chunking.py +0 -0
  46. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/ensemble.py +0 -0
  47. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/extractor.py +0 -0
  48. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/filings.py +0 -0
  49. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/markdown.py +0 -0
  50. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/protocols.py +0 -0
  51. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/special_cases.py +0 -0
  52. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/conversion/trafilatura_extractor.py +0 -0
  53. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/core/__init__.py +0 -0
  54. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/core/fetcher.py +0 -0
  55. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/__init__.py +0 -0
  56. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/_fetch.py +0 -0
  57. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/composite.py +0 -0
  58. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/contracts.py +0 -0
  59. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/crawler.py +0 -0
  60. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/filters.py +0 -0
  61. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/__init__.py +0 -0
  62. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/enhanced.py +0 -0
  63. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/protocols.py +0 -0
  64. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/link_extractors/static.py +0 -0
  65. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/protocols.py +0 -0
  66. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery/sitemap.py +0 -0
  67. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/discovery_cli.py +0 -0
  68. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/doctor.py +0 -0
  69. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/document_parse.py +0 -0
  70. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/eval_grade.py +0 -0
  71. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/evidence_pack.py +0 -0
  72. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/exports.py +0 -0
  73. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/fixtures/__init__.py +0 -0
  74. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/fixtures/parallel-search-extract.json +0 -0
  75. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/free_core.py +0 -0
  76. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/free_core_smoke.py +0 -0
  77. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/graph.py +0 -0
  78. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/hosted.py +0 -0
  79. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/__init__.py +0 -0
  80. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/client.py +0 -0
  81. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/protocols.py +0 -0
  82. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/http/rate_limiter.py +0 -0
  83. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/judge.py +0 -0
  84. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/local_workflows.py +0 -0
  85. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/__init__.py +0 -0
  86. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/server.py +0 -0
  87. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/sources.py +0 -0
  88. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/mcp/tools.py +0 -0
  89. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/metadata_extractor.py +0 -0
  90. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/__init__.py +0 -0
  91. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/config.py +0 -0
  92. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/document.py +0 -0
  93. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/events.py +0 -0
  94. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/profiles.py +0 -0
  95. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/models/run.py +0 -0
  96. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/monitor.py +0 -0
  97. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/output_contract.py +0 -0
  98. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pack_reader.py +0 -0
  99. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pack_tools.py +0 -0
  100. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/parallel_workflows.py +0 -0
  101. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/parity.py +0 -0
  102. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/parity_cli.py +0 -0
  103. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/passk.py +0 -0
  104. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/__init__.py +0 -0
  105. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/base.py +0 -0
  106. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/manifest.py +0 -0
  107. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/__init__.py +0 -0
  108. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/chunk.py +0 -0
  109. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/convert.py +0 -0
  110. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/dedup.py +0 -0
  111. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/fetch.py +0 -0
  112. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/metadata.py +0 -0
  113. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/render.py +0 -0
  114. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save.py +0 -0
  115. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_json.py +0 -0
  116. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_ndjson.py +0 -0
  117. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_okf.py +0 -0
  118. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/save_sqlite.py +0 -0
  119. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/pipeline/steps/validate.py +0 -0
  120. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/policy.py +0 -0
  121. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/policy_cli.py +0 -0
  122. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/project.py +0 -0
  123. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_adapters.py +0 -0
  124. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_capabilities.py +0 -0
  125. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_cli.py +0 -0
  126. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_keys.py +0 -0
  127. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/provider_probes.py +0 -0
  128. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/py.typed +0 -0
  129. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/redaction.py +0 -0
  130. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/rendering.py +0 -0
  131. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/scraper.py +0 -0
  132. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/__init__.py +0 -0
  133. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/download_policy.py +0 -0
  134. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/robots.py +0 -0
  135. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/security/url_validator.py +0 -0
  136. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/server.py +0 -0
  137. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/share.py +0 -0
  138. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/skill_export.py +0 -0
  139. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/source_scoring.py +0 -0
  140. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/surface.py +0 -0
  141. {docpull-6.0.0 → docpull-6.0.1}/src/docpull/time_utils.py +0 -0
  142. {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/SOURCES.txt +0 -0
  143. {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/dependency_links.txt +0 -0
  144. {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/entry_points.txt +0 -0
  145. {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/requires.txt +0 -0
  146. {docpull-6.0.0 → docpull-6.0.1}/src/docpull.egg-info/top_level.txt +0 -0
  147. {docpull-6.0.0 → docpull-6.0.1}/tests/test_accounting.py +0 -0
  148. {docpull-6.0.0 → docpull-6.0.1}/tests/test_auth_cli.py +0 -0
  149. {docpull-6.0.0 → docpull-6.0.1}/tests/test_basis.py +0 -0
  150. {docpull-6.0.0 → docpull-6.0.1}/tests/test_cache_conditional_get.py +0 -0
  151. {docpull-6.0.0 → docpull-6.0.1}/tests/test_chunking.py +0 -0
  152. {docpull-6.0.0 → docpull-6.0.1}/tests/test_ci_policy.py +0 -0
  153. {docpull-6.0.0 → docpull-6.0.1}/tests/test_claim_audit_script.py +0 -0
  154. {docpull-6.0.0 → docpull-6.0.1}/tests/test_cli.py +0 -0
  155. {docpull-6.0.0 → docpull-6.0.1}/tests/test_context_ci.py +0 -0
  156. {docpull-6.0.0 → docpull-6.0.1}/tests/test_context_packs.py +0 -0
  157. {docpull-6.0.0 → docpull-6.0.1}/tests/test_conversion.py +0 -0
  158. {docpull-6.0.0 → docpull-6.0.1}/tests/test_convert_step_new.py +0 -0
  159. {docpull-6.0.0 → docpull-6.0.1}/tests/test_discovery.py +0 -0
  160. {docpull-6.0.0 → docpull-6.0.1}/tests/test_discovery_contracts.py +0 -0
  161. {docpull-6.0.0 → docpull-6.0.1}/tests/test_doctor.py +0 -0
  162. {docpull-6.0.0 → docpull-6.0.1}/tests/test_document_parse.py +0 -0
  163. {docpull-6.0.0 → docpull-6.0.1}/tests/test_document_record.py +0 -0
  164. {docpull-6.0.0 → docpull-6.0.1}/tests/test_evidence_pack.py +0 -0
  165. {docpull-6.0.0 → docpull-6.0.1}/tests/test_exports.py +0 -0
  166. {docpull-6.0.0 → docpull-6.0.1}/tests/test_extractor_ensemble.py +0 -0
  167. {docpull-6.0.0 → docpull-6.0.1}/tests/test_feed_pack.py +0 -0
  168. {docpull-6.0.0 → docpull-6.0.1}/tests/test_free_core.py +0 -0
  169. {docpull-6.0.0 → docpull-6.0.1}/tests/test_frontier_resume.py +0 -0
  170. {docpull-6.0.0 → docpull-6.0.1}/tests/test_graph.py +0 -0
  171. {docpull-6.0.0 → docpull-6.0.1}/tests/test_hosted.py +0 -0
  172. {docpull-6.0.0 → docpull-6.0.1}/tests/test_integration.py +0 -0
  173. {docpull-6.0.0 → docpull-6.0.1}/tests/test_judge.py +0 -0
  174. {docpull-6.0.0 → docpull-6.0.1}/tests/test_link_extractors.py +0 -0
  175. {docpull-6.0.0 → docpull-6.0.1}/tests/test_live_web_smoke.py +0 -0
  176. {docpull-6.0.0 → docpull-6.0.1}/tests/test_local_workflows.py +0 -0
  177. {docpull-6.0.0 → docpull-6.0.1}/tests/test_mcp_server.py +0 -0
  178. {docpull-6.0.0 → docpull-6.0.1}/tests/test_mcp_tools.py +0 -0
  179. {docpull-6.0.0 → docpull-6.0.1}/tests/test_metadata_extractor.py +0 -0
  180. {docpull-6.0.0 → docpull-6.0.1}/tests/test_monitor.py +0 -0
  181. {docpull-6.0.0 → docpull-6.0.1}/tests/test_naming.py +0 -0
  182. {docpull-6.0.0 → docpull-6.0.1}/tests/test_openapi_pack.py +0 -0
  183. {docpull-6.0.0 → docpull-6.0.1}/tests/test_optional_extras_installed.py +0 -0
  184. {docpull-6.0.0 → docpull-6.0.1}/tests/test_output_contract.py +0 -0
  185. {docpull-6.0.0 → docpull-6.0.1}/tests/test_outputs_e2e.py +0 -0
  186. {docpull-6.0.0 → docpull-6.0.1}/tests/test_pack_server.py +0 -0
  187. {docpull-6.0.0 → docpull-6.0.1}/tests/test_pack_tools.py +0 -0
  188. {docpull-6.0.0 → docpull-6.0.1}/tests/test_parallel_workflows.py +0 -0
  189. {docpull-6.0.0 → docpull-6.0.1}/tests/test_parity_workflows.py +0 -0
  190. {docpull-6.0.0 → docpull-6.0.1}/tests/test_passk.py +0 -0
  191. {docpull-6.0.0 → docpull-6.0.1}/tests/test_pipeline.py +0 -0
  192. {docpull-6.0.0 → docpull-6.0.1}/tests/test_policy.py +0 -0
  193. {docpull-6.0.0 → docpull-6.0.1}/tests/test_policy_cli.py +0 -0
  194. {docpull-6.0.0 → docpull-6.0.1}/tests/test_project.py +0 -0
  195. {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_adapters.py +0 -0
  196. {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_cli.py +0 -0
  197. {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_keys.py +0 -0
  198. {docpull-6.0.0 → docpull-6.0.1}/tests/test_provider_probes.py +0 -0
  199. {docpull-6.0.0 → docpull-6.0.1}/tests/test_public_feature_smoke.py +0 -0
  200. {docpull-6.0.0 → docpull-6.0.1}/tests/test_rate_limiter.py +0 -0
  201. {docpull-6.0.0 → docpull-6.0.1}/tests/test_real_feature_smoke_script.py +0 -0
  202. {docpull-6.0.0 → docpull-6.0.1}/tests/test_real_site_regressions.py +0 -0
  203. {docpull-6.0.0 → docpull-6.0.1}/tests/test_release_a_plus_check_script.py +0 -0
  204. {docpull-6.0.0 → docpull-6.0.1}/tests/test_rendering.py +0 -0
  205. {docpull-6.0.0 → docpull-6.0.1}/tests/test_save_ndjson.py +0 -0
  206. {docpull-6.0.0 → docpull-6.0.1}/tests/test_save_sqlite.py +0 -0
  207. {docpull-6.0.0 → docpull-6.0.1}/tests/test_security_hardening.py +0 -0
  208. {docpull-6.0.0 → docpull-6.0.1}/tests/test_share.py +0 -0
  209. {docpull-6.0.0 → docpull-6.0.1}/tests/test_source_scoring.py +0 -0
  210. {docpull-6.0.0 → docpull-6.0.1}/tests/test_special_cases.py +0 -0
  211. {docpull-6.0.0 → docpull-6.0.1}/tests/test_surface_contract.py +0 -0
  212. {docpull-6.0.0 → docpull-6.0.1}/tests/test_time_utils.py +0 -0
  213. {docpull-6.0.0 → docpull-6.0.1}/tests/test_trafilatura_extractor.py +0 -0
  214. {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.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
  [![GitHub stars](https://img.shields.io/github/stars/raintree-technology/docpull?style=social)](https://github.com/raintree-technology/docpull/stargazers)
127
127
  [![License: MIT](https://img.shields.io/github/license/raintree-technology/docpull)](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
- docs and web sources an agent depends on, sync them into cited context packs,
131
- diff what changed, and export reproducible context for Cursor, Claude, Codex,
132
- OpenAI, LlamaIndex, LangChain, MCP clients, and RAG pipelines.
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 codex
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 codex` writes a Codex skill under
508
- `.agents/skills/<name>/` with `agents/openai.yaml`, and `--skill-agent cursor`
509
- writes a Cursor project rule at `.cursor/rules/<name>.mdc`. Use
510
- `--skill-agent all` to create all three. If you pass `--output-dir`, docpull
511
- stages the generated corpus there; explicit `--skill-agent` targets still write
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
- Codex/Claude/Cursor agent references.
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
  [![GitHub stars](https://img.shields.io/github/stars/raintree-technology/docpull?style=social)](https://github.com/raintree-technology/docpull/stargazers)
9
9
  [![License: MIT](https://img.shields.io/github/license/raintree-technology/docpull)](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
- docs and web sources an agent depends on, sync them into cited context packs,
13
- diff what changed, and export reproducible context for Cursor, Claude, Codex,
14
- OpenAI, LlamaIndex, LangChain, MCP clients, and RAG pipelines.
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 codex
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 codex` writes a Codex skill under
390
- `.agents/skills/<name>/` with `agents/openai.yaml`, and `--skill-agent cursor`
391
- writes a Cursor project rule at `.cursor/rules/<name>.mdc`. Use
392
- `--skill-agent all` to create all three. If you pass `--output-dir`, docpull
393
- stages the generated corpus there; explicit `--skill-agent` targets still write
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
- Codex/Claude/Cursor agent references.
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.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 - Fetch and convert static/server-rendered web content to markdown.
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.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": utc_now_iso(),
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": _benchmark_provider_statuses(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.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
  [![GitHub stars](https://img.shields.io/github/stars/raintree-technology/docpull?style=social)](https://github.com/raintree-technology/docpull/stargazers)
127
127
  [![License: MIT](https://img.shields.io/github/license/raintree-technology/docpull)](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
- docs and web sources an agent depends on, sync them into cited context packs,
131
- diff what changed, and export reproducible context for Cursor, Claude, Codex,
132
- OpenAI, LlamaIndex, LangChain, MCP clients, and RAG pipelines.
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 codex
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 codex` writes a Codex skill under
508
- `.agents/skills/<name>/` with `agents/openai.yaml`, and `--skill-agent cursor`
509
- writes a Cursor project rule at `.cursor/rules/<name>.mdc`. Use
510
- `--skill-agent all` to create all three. If you pass `--output-dir`, docpull
511
- stages the generated corpus there; explicit `--skill-agent` targets still write
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
- Codex/Claude/Cursor agent references.
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