devrev-Python-SDK 2.11.0__tar.gz → 2.12.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 (366) hide show
  1. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/PKG-INFO +1 -1
  2. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/cloudbuild.yaml +1 -1
  3. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/search.md +2 -1
  4. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/changelog.md +10 -0
  5. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/pyproject.toml +1 -1
  6. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/search.py +4 -4
  7. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/search.py +4 -4
  8. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/parts.py +6 -0
  9. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_specialized_services_phase3.py +2 -2
  10. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_parts.py +52 -1
  11. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_articles.py +77 -0
  12. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_search.py +2 -2
  13. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/uv.lock +1 -1
  14. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/bug-fixer.md +0 -0
  15. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/builder.md +0 -0
  16. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/documentation.md +0 -0
  17. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/foreman.md +0 -0
  18. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/pr-review-boss.md +0 -0
  19. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/release-manager.md +0 -0
  20. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/simplifier.md +0 -0
  21. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/agents/tester.md +0 -0
  22. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/foreman-work.md +0 -0
  23. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/release-prepare.md +0 -0
  24. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/review-start.md +0 -0
  25. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/commands/simplify-code.md +0 -0
  26. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/code-quality.md +0 -0
  27. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/data-modeling.md +0 -0
  28. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/devrev-sdk.md +0 -0
  29. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/git-workflow.md +0 -0
  30. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/pull-requests.md +0 -0
  31. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/python-development.md +0 -0
  32. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/security.md +0 -0
  33. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.augment/rules/testing.md +0 -0
  34. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.dockerignore +0 -0
  35. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.env.sample +0 -0
  36. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
  37. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  38. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  39. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  40. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  41. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/dependabot.yml +0 -0
  42. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/pull_request_template.md +0 -0
  43. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/api-check.yml +0 -0
  44. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/ci.yml +0 -0
  45. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/claude-code-review.yml +0 -0
  46. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/claude.yml +0 -0
  47. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/deploy.yml +0 -0
  48. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/docs.yml +0 -0
  49. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/integration-tests.yml +0 -0
  50. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/release.yml +0 -0
  51. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.github/workflows/sync-openapi.yml +0 -0
  52. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.gitignore +0 -0
  53. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/.pre-commit-config.yaml +0 -0
  54. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/CLAUDE.md +0 -0
  55. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/CODE_OF_CONDUCT.md +0 -0
  56. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/CONTRIBUTING.md +0 -0
  57. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/DEPRECATIONS.md +0 -0
  58. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/Dockerfile +0 -0
  59. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/KNOWN_ISSUES.md +0 -0
  60. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
  61. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/README.md +0 -0
  62. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/SECURITY.md +0 -0
  63. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/augment-mcp-config-remote.json +0 -0
  64. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/augment-mcp-config.json +0 -0
  65. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/augment-settings.json +0 -0
  66. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/README.md +0 -0
  67. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/bench_http_client.py +0 -0
  68. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/bench_models.py +0 -0
  69. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/bench_pagination.py +0 -0
  70. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/benchmarks/conftest.py +0 -0
  71. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/context7.json +0 -0
  72. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/README.md +0 -0
  73. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/audit-logging-setup.sh +0 -0
  74. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/README.md +0 -0
  75. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/alert-policies.yaml +0 -0
  76. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/dashboard.json +0 -0
  77. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/monitoring/validate-config.sh +0 -0
  78. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/deploy/service.yaml +0 -0
  79. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docker-compose.yml +0 -0
  80. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/brands.md +0 -0
  81. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/engagements.md +0 -0
  82. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/incidents.md +0 -0
  83. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/index.md +0 -0
  84. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/question-answers.md +0 -0
  85. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/recommendations.md +0 -0
  86. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta/uoms.md +0 -0
  87. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/beta-api-differences.md +0 -0
  88. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/client.md +0 -0
  89. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/config.md +0 -0
  90. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/exceptions.md +0 -0
  91. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/index.md +0 -0
  92. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/accounts.md +0 -0
  93. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/base.md +0 -0
  94. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/index.md +0 -0
  95. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/users.md +0 -0
  96. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/models/works.md +0 -0
  97. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/accounts.md +0 -0
  98. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/articles.md +0 -0
  99. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/code-changes.md +0 -0
  100. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/conversations.md +0 -0
  101. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/dev-users.md +0 -0
  102. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/groups.md +0 -0
  103. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/index.md +0 -0
  104. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/links.md +0 -0
  105. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/parts.md +0 -0
  106. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/rev-users.md +0 -0
  107. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/slas.md +0 -0
  108. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/tags.md +0 -0
  109. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/timeline-entries.md +0 -0
  110. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/webhooks.md +0 -0
  111. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/api/services/works.md +0 -0
  112. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/advanced.md +0 -0
  113. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/basic.md +0 -0
  114. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/beta-features.md +0 -0
  115. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/index.md +0 -0
  116. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/examples/integrations.md +0 -0
  117. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/authentication.md +0 -0
  118. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/index.md +0 -0
  119. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/installation.md +0 -0
  120. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/getting-started/quickstart.md +0 -0
  121. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/beta-api.md +0 -0
  122. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/compatibility.md +0 -0
  123. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/configuration.md +0 -0
  124. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/error-handling.md +0 -0
  125. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/github-actions-setup.md +0 -0
  126. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/index.md +0 -0
  127. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/logging.md +0 -0
  128. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/pagination.md +0 -0
  129. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/sync-vs-async.md +0 -0
  130. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/testing.md +0 -0
  131. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/version-support.md +0 -0
  132. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/guides/write-integration-testing-strategy.md +0 -0
  133. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/hooks/copy_llms.py +0 -0
  134. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/index.md +0 -0
  135. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/deployment.md +0 -0
  136. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/index.md +0 -0
  137. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/quickstart.md +0 -0
  138. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/mcp/tools-reference.md +0 -0
  139. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/docs/stylesheets/extra.css +0 -0
  140. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/README.md +0 -0
  141. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/README.md +0 -0
  142. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/async_example.py +0 -0
  143. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/create_work.py +0 -0
  144. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/error_handling.py +0 -0
  145. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/list_accounts.py +0 -0
  146. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/pagination.py +0 -0
  147. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/basic/search_users.py +0 -0
  148. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/cloud_functions/README.md +0 -0
  149. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/cloud_functions/main.py +0 -0
  150. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/cloud_functions/requirements.txt +0 -0
  151. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/fastapi/README.md +0 -0
  152. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/fastapi/main.py +0 -0
  153. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/fastapi/requirements.txt +0 -0
  154. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/flask/README.md +0 -0
  155. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/flask/app.py +0 -0
  156. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/examples/integrations/flask/requirements.txt +0 -0
  157. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms-ctx-full.txt +0 -0
  158. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms-ctx.txt +0 -0
  159. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms-mcp.txt +0 -0
  160. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/llms.txt +0 -0
  161. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/mkdocs.yml +0 -0
  162. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/openapi-beta.yaml +0 -0
  163. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/openapi-public.yaml +0 -0
  164. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/openapi-spec-corrections.yaml +0 -0
  165. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/scripts/build_ai_docs.py +0 -0
  166. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/scripts/debug_articles.py +0 -0
  167. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/scripts/setup-github-secrets.sh +0 -0
  168. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/__init__.py +0 -0
  169. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/client.py +0 -0
  170. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/config.py +0 -0
  171. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/exceptions.py +0 -0
  172. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/__init__.py +0 -0
  173. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/accounts.py +0 -0
  174. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/articles.py +0 -0
  175. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/artifacts.py +0 -0
  176. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/base.py +0 -0
  177. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/brands.py +0 -0
  178. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/code_changes.py +0 -0
  179. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/conversations.py +0 -0
  180. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/dev_users.py +0 -0
  181. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/engagements.py +0 -0
  182. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/groups.py +0 -0
  183. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/incidents.py +0 -0
  184. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/links.py +0 -0
  185. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/notifications.py +0 -0
  186. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/parts.py +0 -0
  187. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/preferences.py +0 -0
  188. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/question_answers.py +0 -0
  189. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/recommendations.py +0 -0
  190. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/rev_users.py +0 -0
  191. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/slas.py +0 -0
  192. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/sync.py +0 -0
  193. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/tags.py +0 -0
  194. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/tasks.py +0 -0
  195. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/timeline_entries.py +0 -0
  196. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/timeline_events.py +0 -0
  197. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/track_events.py +0 -0
  198. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/uoms.py +0 -0
  199. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/webhooks.py +0 -0
  200. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/widgets.py +0 -0
  201. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/models/works.py +0 -0
  202. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/py.typed +0 -0
  203. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/__init__.py +0 -0
  204. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/accounts.py +0 -0
  205. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/articles.py +0 -0
  206. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/artifacts.py +0 -0
  207. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/base.py +0 -0
  208. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/brands.py +0 -0
  209. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/code_changes.py +0 -0
  210. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/conversations.py +0 -0
  211. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/dev_users.py +0 -0
  212. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/engagements.py +0 -0
  213. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/groups.py +0 -0
  214. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/incidents.py +0 -0
  215. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/links.py +0 -0
  216. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/notifications.py +0 -0
  217. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/parts.py +0 -0
  218. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/preferences.py +0 -0
  219. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/question_answers.py +0 -0
  220. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/recommendations.py +0 -0
  221. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/rev_users.py +0 -0
  222. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/slas.py +0 -0
  223. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/tags.py +0 -0
  224. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/timeline_entries.py +0 -0
  225. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/track_events.py +0 -0
  226. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/uoms.py +0 -0
  227. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/webhooks.py +0 -0
  228. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/services/works.py +0 -0
  229. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/__init__.py +0 -0
  230. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/content_converter.py +0 -0
  231. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/deprecation.py +0 -0
  232. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/http.py +0 -0
  233. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/logging.py +0 -0
  234. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev/utils/pagination.py +0 -0
  235. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/__init__.py +0 -0
  236. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/__main__.py +0 -0
  237. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/config.py +0 -0
  238. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/__init__.py +0 -0
  239. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/audit.py +0 -0
  240. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/auth.py +0 -0
  241. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/health.py +0 -0
  242. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/middleware/rate_limit.py +0 -0
  243. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/__init__.py +0 -0
  244. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/escalation.py +0 -0
  245. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/investigate.py +0 -0
  246. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/response.py +0 -0
  247. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/summarize.py +0 -0
  248. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/prompts/triage.py +0 -0
  249. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/__init__.py +0 -0
  250. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/account.py +0 -0
  251. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/article.py +0 -0
  252. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/conversation.py +0 -0
  253. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/part.py +0 -0
  254. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/server_info.py +0 -0
  255. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/ticket.py +0 -0
  256. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/resources/user.py +0 -0
  257. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/server.py +0 -0
  258. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/__init__.py +0 -0
  259. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/accounts.py +0 -0
  260. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/articles.py +0 -0
  261. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/conversations.py +0 -0
  262. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/engagements.py +0 -0
  263. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/groups.py +0 -0
  264. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/incidents.py +0 -0
  265. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/links.py +0 -0
  266. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/question_answers.py +0 -0
  267. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/recommendations.py +0 -0
  268. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/search.py +0 -0
  269. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/server_info.py +0 -0
  270. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/slas.py +0 -0
  271. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/tags.py +0 -0
  272. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/timeline.py +0 -0
  273. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/users.py +0 -0
  274. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/tools/works.py +0 -0
  275. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/__init__.py +0 -0
  276. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/errors.py +0 -0
  277. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/formatting.py +0 -0
  278. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/src/devrev_mcp/utils/pagination.py +0 -0
  279. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/__init__.py +0 -0
  280. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/conftest.py +0 -0
  281. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/__init__.py +0 -0
  282. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/conftest.py +0 -0
  283. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_accounts_e2e.py +0 -0
  284. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_all_readonly_endpoints.py +0 -0
  285. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_articles_lifecycle.py +0 -0
  286. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_backwards_compatibility.py +0 -0
  287. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_contacts_e2e.py +0 -0
  288. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_core_services_phase1.py +0 -0
  289. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_extended_services_phase2.py +0 -0
  290. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_get_endpoints.py +0 -0
  291. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_issues_e2e.py +0 -0
  292. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_kb_articles_e2e.py +0 -0
  293. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_mcp_articles.py +0 -0
  294. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_ping.py +0 -0
  295. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_question_answers_e2e.py +0 -0
  296. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_readonly_endpoints.py +0 -0
  297. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_tickets_e2e.py +0 -0
  298. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/test_write_operations.py +0 -0
  299. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/__init__.py +0 -0
  300. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/cleanup.py +0 -0
  301. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/constants.py +0 -0
  302. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/integration/utils/data_manager.py +0 -0
  303. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/performance/__init__.py +0 -0
  304. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/performance/test_articles_performance.py +0 -0
  305. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/__init__.py +0 -0
  306. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/__init__.py +0 -0
  307. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/conftest.py +0 -0
  308. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_audit.py +0 -0
  309. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_config.py +0 -0
  310. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_phase4_transport.py +0 -0
  311. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_prompts.py +0 -0
  312. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_resources.py +0 -0
  313. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_server_info.py +0 -0
  314. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_accounts.py +0 -0
  315. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_articles.py +0 -0
  316. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_conversations.py +0 -0
  317. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_engagements.py +0 -0
  318. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_groups.py +0 -0
  319. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_incidents.py +0 -0
  320. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_links.py +0 -0
  321. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_question_answers.py +0 -0
  322. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_recommendations.py +0 -0
  323. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_search.py +0 -0
  324. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_slas.py +0 -0
  325. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_tags.py +0 -0
  326. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_timeline.py +0 -0
  327. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_users.py +0 -0
  328. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_tools_works.py +0 -0
  329. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/mcp/test_utils.py +0 -0
  330. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/models/__init__.py +0 -0
  331. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/models/test_user_state_regression.py +0 -0
  332. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/__init__.py +0 -0
  333. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/conftest.py +0 -0
  334. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_async_services.py +0 -0
  335. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_brands.py +0 -0
  336. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_code_changes.py +0 -0
  337. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_conversations.py +0 -0
  338. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_engagements.py +0 -0
  339. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_groups.py +0 -0
  340. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_incidents.py +0 -0
  341. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_links.py +0 -0
  342. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_notifications.py +0 -0
  343. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_parts.py +0 -0
  344. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_preferences.py +0 -0
  345. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_question_answers.py +0 -0
  346. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_recommendations.py +0 -0
  347. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_slas.py +0 -0
  348. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_tags.py +0 -0
  349. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_timeline_entries.py +0 -0
  350. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_track_events.py +0 -0
  351. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_uoms.py +0 -0
  352. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_webhooks.py +0 -0
  353. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/services/test_works.py +0 -0
  354. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_articles_unified.py +0 -0
  355. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_artifacts.py +0 -0
  356. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_backward_compatibility.py +0 -0
  357. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_base_service.py +0 -0
  358. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_client.py +0 -0
  359. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_config.py +0 -0
  360. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_content_converter.py +0 -0
  361. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_deprecation.py +0 -0
  362. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_error_handling.py +0 -0
  363. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_exceptions.py +0 -0
  364. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_http.py +0 -0
  365. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_logging.py +0 -0
  366. {devrev_python_sdk-2.11.0 → devrev_python_sdk-2.12.1}/tests/unit/test_pagination.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devrev-Python-SDK
3
- Version: 2.11.0
3
+ Version: 2.12.1
4
4
  Summary: A modern, type-safe Python SDK for the DevRev API
5
5
  Project-URL: Homepage, https://github.com/mgmonteleone/py-dev-rev
6
6
  Project-URL: Documentation, https://github.com/mgmonteleone/py-dev-rev
@@ -71,7 +71,7 @@ substitutions:
71
71
  # Build options
72
72
  options:
73
73
  logging: CLOUD_LOGGING_ONLY
74
- machineType: 'N1_HIGHCPU_8'
74
+ machineType: 'E2_HIGHCPU_8'
75
75
 
76
76
  # Timeout for the entire build
77
77
  timeout: '1200s'
@@ -90,7 +90,7 @@ from devrev.models.search import CoreSearchRequest, HybridSearchRequest, SearchN
90
90
  # Core search with request object
91
91
  request = CoreSearchRequest(
92
92
  query="type:incident AND severity:sev0",
93
- namespace=SearchNamespace.WORK,
93
+ namespaces=[SearchNamespace.WORK],
94
94
  limit=50,
95
95
  )
96
96
  results = client.search.core(request)
@@ -98,6 +98,7 @@ results = client.search.core(request)
98
98
  # Hybrid search with request object
99
99
  request = HybridSearchRequest(
100
100
  query="database performance issues",
101
+ namespaces=[SearchNamespace.WORK],
101
102
  semantic_weight=0.8,
102
103
  limit=20,
103
104
  )
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.12.1] - 2026-04-07
11
+
12
+ ### Fixed
13
+
14
+ - **Search API Bad Request error** (#204) — Fixed `devrev_search_core_devrev` and `devrev_search_hybrid_devrev` MCP tools returning "Validation error: Bad Request" by changing `CoreSearchRequest` and `HybridSearchRequest` models to send `namespaces` (plural, array) instead of `namespace` (singular, string), matching the DevRev API specification.
15
+
16
+ ### Maintenance
17
+
18
+ - **Cloud Build machine type** — Updated Cloud Build machine type from `N1_HIGHCPU_8` to `E2_HIGHCPU_8`.
19
+
10
20
  ## [2.10.2] - 2026-03-11
11
21
 
12
22
  ### Fixed
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "2.11.0"
7
+ version = "2.12.1"
8
8
  description = "A modern, type-safe Python SDK for the DevRev API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -93,8 +93,8 @@ class CoreSearchRequest(DevRevBaseModel):
93
93
  """Request model for core search."""
94
94
 
95
95
  query: str = Field(..., description="Search query")
96
- namespace: SearchNamespace = Field(
97
- ..., description="Namespace to search (e.g. account, work, article)"
96
+ namespaces: list[SearchNamespace] = Field(
97
+ ..., description="Namespaces to search in (e.g. ['account'], ['work', 'ticket'])"
98
98
  )
99
99
  limit: int | None = Field(
100
100
  default=None,
@@ -109,8 +109,8 @@ class HybridSearchRequest(DevRevBaseModel):
109
109
  """Request model for hybrid search."""
110
110
 
111
111
  query: str = Field(..., description="Search query")
112
- namespace: SearchNamespace = Field(
113
- ..., description="Namespace to search (e.g. account, work, article)"
112
+ namespaces: list[SearchNamespace] = Field(
113
+ ..., description="Namespaces to search in (e.g. ['account'], ['work', 'ticket'])"
114
114
  )
115
115
  semantic_weight: float | None = Field(
116
116
  default=None, description="Weight for semantic search (0-1)"
@@ -94,7 +94,7 @@ class SearchService(BaseService):
94
94
  )
95
95
  request = CoreSearchRequest(
96
96
  query=request_or_query,
97
- namespace=namespace,
97
+ namespaces=[namespace],
98
98
  limit=limit,
99
99
  cursor=cursor,
100
100
  )
@@ -180,7 +180,7 @@ class SearchService(BaseService):
180
180
  )
181
181
  request = HybridSearchRequest(
182
182
  query=request_or_query,
183
- namespace=namespace,
183
+ namespaces=[namespace],
184
184
  semantic_weight=semantic_weight,
185
185
  limit=limit,
186
186
  cursor=cursor,
@@ -266,7 +266,7 @@ class AsyncSearchService(AsyncBaseService):
266
266
  )
267
267
  request = CoreSearchRequest(
268
268
  query=request_or_query,
269
- namespace=namespace,
269
+ namespaces=[namespace],
270
270
  limit=limit,
271
271
  cursor=cursor,
272
272
  )
@@ -352,7 +352,7 @@ class AsyncSearchService(AsyncBaseService):
352
352
  )
353
353
  request = HybridSearchRequest(
354
354
  query=request_or_query,
355
- namespace=namespace,
355
+ namespaces=[namespace],
356
356
  semantic_weight=semantic_weight,
357
357
  limit=limit,
358
358
  cursor=cursor,
@@ -117,6 +117,12 @@ if _config.enable_destructive_tools:
117
117
  f"Invalid part type: {e.args[0]}. "
118
118
  f"Valid types: {', '.join(t.name for t in PartType)}"
119
119
  ) from e
120
+ # Validate parent_part is provided for non-product parts
121
+ if part_type != PartType.PRODUCT and not parent_part:
122
+ raise RuntimeError(
123
+ f"parent_part is required when creating a {part_type.name} part. "
124
+ "Only PRODUCT parts can be created without a parent."
125
+ )
120
126
  request = PartsCreateRequest(
121
127
  name=name,
122
128
  type=part_type,
@@ -69,7 +69,7 @@ class TestSearchEndpoints:
69
69
  )
70
70
  def test_search_core_with_request(self, beta_client: DevRevClient) -> None:
71
71
  """Test search.core endpoint with request object."""
72
- request = CoreSearchRequest(query="test", namespace=SearchNamespace.WORK, limit=5)
72
+ request = CoreSearchRequest(query="test", namespaces=[SearchNamespace.WORK], limit=5)
73
73
  result = beta_client.search.core(request)
74
74
  assert result is not None
75
75
  assert hasattr(result, "results")
@@ -96,7 +96,7 @@ class TestSearchEndpoints:
96
96
  def test_search_hybrid_with_request(self, beta_client: DevRevClient) -> None:
97
97
  """Test search.hybrid endpoint with request object."""
98
98
  request = HybridSearchRequest(
99
- query="test", namespace=SearchNamespace.WORK, limit=5, semantic_weight=0.5
99
+ query="test", namespaces=[SearchNamespace.WORK], limit=5, semantic_weight=0.5
100
100
  )
101
101
  result = beta_client.search.hybrid(request)
102
102
  assert result is not None
@@ -150,7 +150,12 @@ class TestPartsCreateTool:
150
150
  mock_part = _make_mock_part(id="FEAT-789", name="New Feature", type="feature")
151
151
  mock_client.parts.create.return_value = mock_part
152
152
 
153
- result = await devrev_parts_create(mock_ctx, name="New Feature", type="FEATURE")
153
+ result = await devrev_parts_create(
154
+ mock_ctx,
155
+ name="New Feature",
156
+ type="FEATURE",
157
+ parent_part=["don:core:dvrv-us-1:devo/1:part/1"],
158
+ )
154
159
 
155
160
  assert result["id"] == "FEAT-789"
156
161
  call_args = mock_client.parts.create.call_args[0][0]
@@ -245,6 +250,52 @@ class TestPartsCreateTool:
245
250
  type="invalid",
246
251
  )
247
252
 
253
+ @pytest.mark.asyncio
254
+ async def test_create_capability_without_parent_part_raises(self, mock_ctx, mock_client):
255
+ """Test that creating a CAPABILITY without parent_part raises RuntimeError. (#184)"""
256
+ with pytest.raises(RuntimeError, match="parent_part is required"):
257
+ await devrev_parts_create(
258
+ mock_ctx,
259
+ name="Orphan Capability",
260
+ type="capability",
261
+ )
262
+
263
+ @pytest.mark.asyncio
264
+ async def test_create_feature_without_parent_part_raises(self, mock_ctx, mock_client):
265
+ """Test that creating a FEATURE without parent_part raises RuntimeError. (#184)"""
266
+ with pytest.raises(RuntimeError, match="parent_part is required"):
267
+ await devrev_parts_create(
268
+ mock_ctx,
269
+ name="Orphan Feature",
270
+ type="feature",
271
+ )
272
+
273
+ @pytest.mark.asyncio
274
+ async def test_create_enhancement_without_parent_part_raises(self, mock_ctx, mock_client):
275
+ """Test that creating an ENHANCEMENT without parent_part raises RuntimeError. (#184)"""
276
+ with pytest.raises(RuntimeError, match="parent_part is required"):
277
+ await devrev_parts_create(
278
+ mock_ctx,
279
+ name="Orphan Enhancement",
280
+ type="enhancement",
281
+ )
282
+
283
+ @pytest.mark.asyncio
284
+ async def test_create_product_without_parent_part_succeeds(self, mock_ctx, mock_client):
285
+ """Test that creating a PRODUCT without parent_part succeeds. (#184)"""
286
+ mock_part = _make_mock_part(id="PROD-999", name="Standalone Product")
287
+ mock_client.parts.create.return_value = mock_part
288
+
289
+ result = await devrev_parts_create(
290
+ mock_ctx,
291
+ name="Standalone Product",
292
+ type="product",
293
+ )
294
+
295
+ assert result["id"] == "PROD-999"
296
+ call_args = mock_client.parts.create.call_args[0][0]
297
+ assert call_args.parent_part is None
298
+
248
299
 
249
300
  class TestPartsUpdateTool:
250
301
  """Tests for devrev_parts_update tool."""
@@ -15,6 +15,7 @@ from devrev.models.articles import (
15
15
  ArticlesUpdateRequestOwnedBy,
16
16
  ArticlesUpdateRequestTags,
17
17
  ArticleType,
18
+ SetSharedWithMembership,
18
19
  )
19
20
  from devrev.models.base import SetTagWithValue
20
21
  from devrev.services.articles import ArticlesService
@@ -355,3 +356,79 @@ class TestArticlesService:
355
356
  call_data = mock_http_client.post.call_args.kwargs["data"]
356
357
  assert call_data["language"] == "fr"
357
358
  assert call_data["authored_by"] == ["author-1", "author-2"]
359
+
360
+ def test_update_with_content_shared_with_serialization(
361
+ self,
362
+ mock_http_client: MagicMock,
363
+ sample_article_data: dict[str, Any],
364
+ ) -> None:
365
+ """Test that shared_with is wrapped in ArticlesUpdateRequestSharedWith for updates.
366
+
367
+ The update path wraps shared_with in {"set": [...]} unlike the create path
368
+ which passes a raw list. This test asserts the serialized payload shape.
369
+ """
370
+ mock_http_client.post.return_value = create_mock_response({"article": sample_article_data})
371
+
372
+ mock_parent = MagicMock()
373
+ service = ArticlesService(mock_http_client, parent_client=mock_parent)
374
+
375
+ memberships = [
376
+ SetSharedWithMembership(member="don:identity:user:100"),
377
+ SetSharedWithMembership(member="don:identity:user:200", role="editor"),
378
+ ]
379
+ service.update_with_content(
380
+ "don:core:article:123",
381
+ shared_with=memberships,
382
+ )
383
+
384
+ # update_with_content calls update -> _post, so check the serialized payload
385
+ mock_http_client.post.assert_called_once()
386
+ call_data = mock_http_client.post.call_args.kwargs["data"]
387
+ assert "shared_with" in call_data
388
+ assert "set" in call_data["shared_with"]
389
+ assert len(call_data["shared_with"]["set"]) == 2
390
+ assert call_data["shared_with"]["set"][0]["member"] == "don:identity:user:100"
391
+ assert call_data["shared_with"]["set"][1]["member"] == "don:identity:user:200"
392
+ assert call_data["shared_with"]["set"][1]["role"] == "editor"
393
+
394
+ def test_update_with_content_empty_shared_with_clears_sharing(
395
+ self,
396
+ mock_http_client: MagicMock,
397
+ sample_article_data: dict[str, Any],
398
+ ) -> None:
399
+ """Test that an empty shared_with list serializes as {"set": []} to clear sharing."""
400
+ mock_http_client.post.return_value = create_mock_response({"article": sample_article_data})
401
+
402
+ mock_parent = MagicMock()
403
+ service = ArticlesService(mock_http_client, parent_client=mock_parent)
404
+
405
+ service.update_with_content(
406
+ "don:core:article:123",
407
+ shared_with=[],
408
+ )
409
+
410
+ mock_http_client.post.assert_called_once()
411
+ call_data = mock_http_client.post.call_args.kwargs["data"]
412
+ assert "shared_with" in call_data
413
+ assert call_data["shared_with"] == {"set": []}
414
+
415
+ def test_update_with_content_without_shared_with_omits_field(
416
+ self,
417
+ mock_http_client: MagicMock,
418
+ sample_article_data: dict[str, Any],
419
+ ) -> None:
420
+ """Test that shared_with is omitted from payload when not provided."""
421
+ mock_http_client.post.return_value = create_mock_response({"article": sample_article_data})
422
+
423
+ mock_parent = MagicMock()
424
+ service = ArticlesService(mock_http_client, parent_client=mock_parent)
425
+
426
+ service.update_with_content(
427
+ "don:core:article:123",
428
+ title="Updated Title",
429
+ )
430
+
431
+ mock_http_client.post.assert_called_once()
432
+ call_data = mock_http_client.post.call_args.kwargs["data"]
433
+ # shared_with should be truly absent from the payload, not just None
434
+ assert "shared_with" not in call_data
@@ -46,7 +46,7 @@ class TestSearchService:
46
46
  service = SearchService(mock_http_client)
47
47
  request = CoreSearchRequest(
48
48
  query="type:ticket AND status:open",
49
- namespace=SearchNamespace.WORK,
49
+ namespaces=[SearchNamespace.WORK],
50
50
  limit=20,
51
51
  )
52
52
  result = service.core(request)
@@ -101,7 +101,7 @@ class TestSearchService:
101
101
  service = SearchService(mock_http_client)
102
102
  request = HybridSearchRequest(
103
103
  query="authentication issues",
104
- namespace=SearchNamespace.CONVERSATION,
104
+ namespaces=[SearchNamespace.CONVERSATION],
105
105
  semantic_weight=0.7,
106
106
  limit=10,
107
107
  )
@@ -483,7 +483,7 @@ wheels = [
483
483
 
484
484
  [[package]]
485
485
  name = "devrev-python-sdk"
486
- version = "2.11.0"
486
+ version = "2.12.1"
487
487
  source = { editable = "." }
488
488
  dependencies = [
489
489
  { name = "beautifulsoup4" },