devrev-Python-SDK 3.0.4__tar.gz → 3.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/PKG-INFO +4 -16
  2. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/README.md +3 -15
  3. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/index.md +0 -2
  4. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/models/index.md +0 -1
  5. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/models/works.md +0 -3
  6. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/index.md +0 -1
  7. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/works.md +2 -29
  8. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/changelog.md +12 -12
  9. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/mcp/tools-reference.md +27 -2
  10. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/mkdocs.yml +0 -2
  11. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/pyproject.toml +1 -1
  12. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/client.py +0 -16
  13. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/__init__.py +0 -11
  14. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/works.py +0 -42
  15. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/__init__.py +0 -4
  16. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/works.py +0 -20
  17. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/server.py +1 -0
  18. devrev_python_sdk-3.1.0/src/devrev_mcp/tools/webhooks.py +153 -0
  19. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/don_id.py +2 -0
  20. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/conftest.py +8 -0
  21. devrev_python_sdk-3.1.0/tests/unit/mcp/test_tools_webhooks.py +207 -0
  22. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_works.py +0 -112
  23. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_client.py +0 -13
  24. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/uv.lock +4 -4
  25. devrev_python_sdk-3.0.4/.github/workflows/claude.yml +0 -50
  26. devrev_python_sdk-3.0.4/docs/api/models/survey-responses.md +0 -47
  27. devrev_python_sdk-3.0.4/docs/api/services/survey-responses.md +0 -83
  28. devrev_python_sdk-3.0.4/src/devrev/models/survey_responses.py +0 -77
  29. devrev_python_sdk-3.0.4/src/devrev/services/survey_responses.py +0 -122
  30. devrev_python_sdk-3.0.4/tests/unit/services/test_survey_responses.py +0 -129
  31. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/bug-fixer.md +0 -0
  32. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/builder.md +0 -0
  33. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/documentation.md +0 -0
  34. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/foreman.md +0 -0
  35. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/pr-review-boss.md +0 -0
  36. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/release-manager.md +0 -0
  37. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/simplifier.md +0 -0
  38. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/agents/tester.md +0 -0
  39. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/commands/foreman-work.md +0 -0
  40. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/commands/release-prepare.md +0 -0
  41. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/commands/review-start.md +0 -0
  42. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/commands/simplify-code.md +0 -0
  43. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/code-quality.md +0 -0
  44. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/data-modeling.md +0 -0
  45. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/devrev-sdk.md +0 -0
  46. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/git-workflow.md +0 -0
  47. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/pull-requests.md +0 -0
  48. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/python-development.md +0 -0
  49. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/security.md +0 -0
  50. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.augment/rules/testing.md +0 -0
  51. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.dockerignore +0 -0
  52. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.env.sample +0 -0
  53. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
  54. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  55. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  56. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  57. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  58. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/dependabot.yml +0 -0
  59. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/pull_request_template.md +0 -0
  60. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/api-check.yml +0 -0
  61. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/ci.yml +0 -0
  62. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/claude-code-review.yml +0 -0
  63. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/deploy.yml +0 -0
  64. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/docs.yml +0 -0
  65. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/integration-tests.yml +0 -0
  66. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/release.yml +0 -0
  67. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.github/workflows/sync-openapi.yml +0 -0
  68. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.gitignore +0 -0
  69. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/.pre-commit-config.yaml +0 -0
  70. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/CLAUDE.md +0 -0
  71. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/CODE_OF_CONDUCT.md +0 -0
  72. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/CONTRIBUTING.md +0 -0
  73. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/DEPRECATIONS.md +0 -0
  74. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/Dockerfile +0 -0
  75. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/KNOWN_ISSUES.md +0 -0
  76. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
  77. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/SECURITY.md +0 -0
  78. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/augment-mcp-config-remote.json +0 -0
  79. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/augment-mcp-config.json +0 -0
  80. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/augment-settings.json +0 -0
  81. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/benchmarks/README.md +0 -0
  82. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/benchmarks/bench_http_client.py +0 -0
  83. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/benchmarks/bench_models.py +0 -0
  84. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/benchmarks/bench_pagination.py +0 -0
  85. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/benchmarks/conftest.py +0 -0
  86. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/context7.json +0 -0
  87. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/README.md +0 -0
  88. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/audit-logging-setup.sh +0 -0
  89. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/cloudbuild.yaml +0 -0
  90. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/monitoring/README.md +0 -0
  91. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/monitoring/alert-policies.yaml +0 -0
  92. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/monitoring/dashboard.json +0 -0
  93. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/monitoring/validate-config.sh +0 -0
  94. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/deploy/service.yaml +0 -0
  95. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docker-compose.yml +0 -0
  96. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/brands.md +0 -0
  97. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/engagements.md +0 -0
  98. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/incidents.md +0 -0
  99. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/index.md +0 -0
  100. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/question-answers.md +0 -0
  101. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/recommendations.md +0 -0
  102. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/search.md +0 -0
  103. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta/uoms.md +0 -0
  104. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/beta-api-differences.md +0 -0
  105. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/client.md +0 -0
  106. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/config.md +0 -0
  107. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/exceptions.md +0 -0
  108. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/models/accounts.md +0 -0
  109. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/models/base.md +0 -0
  110. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/models/users.md +0 -0
  111. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/accounts.md +0 -0
  112. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/articles.md +0 -0
  113. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/code-changes.md +0 -0
  114. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/conversations.md +0 -0
  115. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/dev-users.md +0 -0
  116. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/groups.md +0 -0
  117. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/links.md +0 -0
  118. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/parts.md +0 -0
  119. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/rev-users.md +0 -0
  120. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/slas.md +0 -0
  121. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/tags.md +0 -0
  122. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/timeline-entries.md +0 -0
  123. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/api/services/webhooks.md +0 -0
  124. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/examples/advanced.md +0 -0
  125. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/examples/basic.md +0 -0
  126. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/examples/beta-features.md +0 -0
  127. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/examples/index.md +0 -0
  128. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/examples/integrations.md +0 -0
  129. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/getting-started/authentication.md +0 -0
  130. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/getting-started/index.md +0 -0
  131. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/getting-started/installation.md +0 -0
  132. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/getting-started/quickstart.md +0 -0
  133. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/beta-api.md +0 -0
  134. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/compatibility.md +0 -0
  135. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/configuration.md +0 -0
  136. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/error-handling.md +0 -0
  137. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/github-actions-setup.md +0 -0
  138. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/index.md +0 -0
  139. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/logging.md +0 -0
  140. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/pagination.md +0 -0
  141. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/sync-vs-async.md +0 -0
  142. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/testing.md +0 -0
  143. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/version-support.md +0 -0
  144. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/guides/write-integration-testing-strategy.md +0 -0
  145. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/hooks/copy_llms.py +0 -0
  146. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/index.md +0 -0
  147. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/mcp/deployment.md +0 -0
  148. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/mcp/index.md +0 -0
  149. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/mcp/quickstart.md +0 -0
  150. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/docs/stylesheets/extra.css +0 -0
  151. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/README.md +0 -0
  152. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/README.md +0 -0
  153. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/async_example.py +0 -0
  154. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/create_work.py +0 -0
  155. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/error_handling.py +0 -0
  156. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/list_accounts.py +0 -0
  157. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/pagination.py +0 -0
  158. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/basic/search_users.py +0 -0
  159. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/cloud_functions/README.md +0 -0
  160. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/cloud_functions/main.py +0 -0
  161. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/cloud_functions/requirements.txt +0 -0
  162. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/fastapi/README.md +0 -0
  163. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/fastapi/main.py +0 -0
  164. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/fastapi/requirements.txt +0 -0
  165. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/flask/README.md +0 -0
  166. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/flask/app.py +0 -0
  167. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/examples/integrations/flask/requirements.txt +0 -0
  168. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/llms-ctx-full.txt +0 -0
  169. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/llms-ctx.txt +0 -0
  170. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/llms-mcp.txt +0 -0
  171. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/llms.txt +0 -0
  172. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/openapi-beta.yaml +0 -0
  173. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/openapi-public.yaml +0 -0
  174. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/openapi-spec-corrections.yaml +0 -0
  175. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/scripts/build_ai_docs.py +0 -0
  176. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/scripts/debug_articles.py +0 -0
  177. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/scripts/setup-github-secrets.sh +0 -0
  178. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/__init__.py +0 -0
  179. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/config.py +0 -0
  180. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/exceptions.py +0 -0
  181. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/accounts.py +0 -0
  182. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/articles.py +0 -0
  183. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/artifacts.py +0 -0
  184. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/base.py +0 -0
  185. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/brands.py +0 -0
  186. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/code_changes.py +0 -0
  187. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/conversations.py +0 -0
  188. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/dev_users.py +0 -0
  189. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/engagements.py +0 -0
  190. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/groups.py +0 -0
  191. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/incidents.py +0 -0
  192. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/links.py +0 -0
  193. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/notifications.py +0 -0
  194. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/parts.py +0 -0
  195. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/preferences.py +0 -0
  196. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/question_answers.py +0 -0
  197. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/recommendations.py +0 -0
  198. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/rev_orgs.py +0 -0
  199. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/rev_users.py +0 -0
  200. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/search.py +0 -0
  201. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/slas.py +0 -0
  202. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/sync.py +0 -0
  203. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/tags.py +0 -0
  204. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/tasks.py +0 -0
  205. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/timeline_entries.py +0 -0
  206. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/timeline_events.py +0 -0
  207. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/track_events.py +0 -0
  208. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/uoms.py +0 -0
  209. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/webhooks.py +0 -0
  210. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/models/widgets.py +0 -0
  211. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/py.typed +0 -0
  212. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/_pagination.py +0 -0
  213. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/accounts.py +0 -0
  214. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/articles.py +0 -0
  215. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/artifacts.py +0 -0
  216. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/base.py +0 -0
  217. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/brands.py +0 -0
  218. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/code_changes.py +0 -0
  219. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/conversations.py +0 -0
  220. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/dev_users.py +0 -0
  221. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/engagements.py +0 -0
  222. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/groups.py +0 -0
  223. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/incidents.py +0 -0
  224. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/links.py +0 -0
  225. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/notifications.py +0 -0
  226. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/parts.py +0 -0
  227. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/preferences.py +0 -0
  228. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/question_answers.py +0 -0
  229. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/recommendations.py +0 -0
  230. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/rev_orgs.py +0 -0
  231. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/rev_users.py +0 -0
  232. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/search.py +0 -0
  233. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/slas.py +0 -0
  234. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/tags.py +0 -0
  235. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/timeline_entries.py +0 -0
  236. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/track_events.py +0 -0
  237. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/uoms.py +0 -0
  238. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/services/webhooks.py +0 -0
  239. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/utils/__init__.py +0 -0
  240. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/utils/content_converter.py +0 -0
  241. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/utils/deprecation.py +0 -0
  242. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/utils/http.py +0 -0
  243. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/utils/logging.py +0 -0
  244. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev/utils/pagination.py +0 -0
  245. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/__init__.py +0 -0
  246. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/__main__.py +0 -0
  247. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/config.py +0 -0
  248. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/__init__.py +0 -0
  249. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/audit.py +0 -0
  250. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/auth.py +0 -0
  251. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/health.py +0 -0
  252. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/rate_limit.py +0 -0
  253. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/__init__.py +0 -0
  254. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/escalation.py +0 -0
  255. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/investigate.py +0 -0
  256. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/response.py +0 -0
  257. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/summarize.py +0 -0
  258. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/triage.py +0 -0
  259. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/__init__.py +0 -0
  260. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/account.py +0 -0
  261. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/article.py +0 -0
  262. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/conversation.py +0 -0
  263. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/part.py +0 -0
  264. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/server_info.py +0 -0
  265. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/ticket.py +0 -0
  266. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/user.py +0 -0
  267. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/__init__.py +0 -0
  268. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/accounts.py +0 -0
  269. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/articles.py +0 -0
  270. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/conversations.py +0 -0
  271. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/engagements.py +0 -0
  272. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/groups.py +0 -0
  273. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/incidents.py +0 -0
  274. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/links.py +0 -0
  275. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/parts.py +0 -0
  276. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/question_answers.py +0 -0
  277. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/recommendations.py +0 -0
  278. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/rev_orgs.py +0 -0
  279. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/search.py +0 -0
  280. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/server_info.py +0 -0
  281. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/slas.py +0 -0
  282. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/tags.py +0 -0
  283. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/timeline.py +0 -0
  284. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/users.py +0 -0
  285. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/works.py +0 -0
  286. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/__init__.py +0 -0
  287. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/errors.py +0 -0
  288. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/formatting.py +0 -0
  289. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/pagination.py +0 -0
  290. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/__init__.py +0 -0
  291. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/conftest.py +0 -0
  292. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/__init__.py +0 -0
  293. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/conftest.py +0 -0
  294. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_accounts_e2e.py +0 -0
  295. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_all_readonly_endpoints.py +0 -0
  296. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_articles_lifecycle.py +0 -0
  297. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_backwards_compatibility.py +0 -0
  298. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_contacts_e2e.py +0 -0
  299. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_core_services_phase1.py +0 -0
  300. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_date_filtering.py +0 -0
  301. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_extended_services_phase2.py +0 -0
  302. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_get_endpoints.py +0 -0
  303. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_issues_e2e.py +0 -0
  304. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_kb_articles_e2e.py +0 -0
  305. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_mcp_articles.py +0 -0
  306. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_ping.py +0 -0
  307. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_question_answers_e2e.py +0 -0
  308. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_readonly_endpoints.py +0 -0
  309. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_specialized_services_phase3.py +0 -0
  310. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_tickets_e2e.py +0 -0
  311. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/test_write_operations.py +0 -0
  312. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/utils/__init__.py +0 -0
  313. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/utils/cleanup.py +0 -0
  314. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/utils/constants.py +0 -0
  315. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/integration/utils/data_manager.py +0 -0
  316. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/performance/__init__.py +0 -0
  317. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/performance/test_articles_performance.py +0 -0
  318. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/__init__.py +0 -0
  319. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/__init__.py +0 -0
  320. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_audit.py +0 -0
  321. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_config.py +0 -0
  322. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_phase4_transport.py +0 -0
  323. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_prompts.py +0 -0
  324. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_resources.py +0 -0
  325. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_server_info.py +0 -0
  326. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_accounts.py +0 -0
  327. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_articles.py +0 -0
  328. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_conversations.py +0 -0
  329. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_engagements.py +0 -0
  330. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_groups.py +0 -0
  331. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_incidents.py +0 -0
  332. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_links.py +0 -0
  333. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_parts.py +0 -0
  334. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_question_answers.py +0 -0
  335. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_recommendations.py +0 -0
  336. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_search.py +0 -0
  337. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_slas.py +0 -0
  338. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_tags.py +0 -0
  339. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_timeline.py +0 -0
  340. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_users.py +0 -0
  341. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_works.py +0 -0
  342. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_utils.py +0 -0
  343. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/models/__init__.py +0 -0
  344. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/models/test_user_state_regression.py +0 -0
  345. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/__init__.py +0 -0
  346. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/conftest.py +0 -0
  347. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_articles.py +0 -0
  348. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_async_services.py +0 -0
  349. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_brands.py +0 -0
  350. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_code_changes.py +0 -0
  351. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_conversations.py +0 -0
  352. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_engagements.py +0 -0
  353. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_groups.py +0 -0
  354. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_incidents.py +0 -0
  355. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_links.py +0 -0
  356. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_notifications.py +0 -0
  357. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_pagination.py +0 -0
  358. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_parts.py +0 -0
  359. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_preferences.py +0 -0
  360. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_question_answers.py +0 -0
  361. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_recommendations.py +0 -0
  362. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_search.py +0 -0
  363. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_slas.py +0 -0
  364. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_tags.py +0 -0
  365. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_timeline_entries.py +0 -0
  366. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_track_events.py +0 -0
  367. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_uoms.py +0 -0
  368. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/services/test_webhooks.py +0 -0
  369. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_articles_unified.py +0 -0
  370. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_artifacts.py +0 -0
  371. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_backward_compatibility.py +0 -0
  372. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_base_service.py +0 -0
  373. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_config.py +0 -0
  374. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_content_converter.py +0 -0
  375. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_deprecation.py +0 -0
  376. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_don_id_validation.py +0 -0
  377. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_error_handling.py +0 -0
  378. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_exceptions.py +0 -0
  379. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_http.py +0 -0
  380. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_logging.py +0 -0
  381. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_pagination.py +0 -0
  382. {devrev_python_sdk-3.0.4 → devrev_python_sdk-3.1.0}/tests/unit/test_rev_orgs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devrev-Python-SDK
3
- Version: 3.0.4
3
+ Version: 3.1.0
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
@@ -75,7 +75,7 @@ Description-Content-Type: text/markdown
75
75
 
76
76
  # py-devrev
77
77
 
78
- A modern, type-safe Python SDK for the DevRev API.
78
+ A modern, type-safe Python SDK and MCP for the DevRev API.
79
79
 
80
80
  [![Built with Augment](https://img.shields.io/badge/Built%20with-Auggie-6366f1?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyTDIgMTloMjBMMTIgMnptMCAzLjc1TDE4LjI1IDE3SDUuNzVMMTIgNS43NXoiLz48L3N2Zz4=)](https://www.augmentcode.com/)
81
81
  [![PyPI Version](https://img.shields.io/pypi/v/devrev-python-sdk.svg)](https://pypi.org/project/devrev-Python-SDK/)
@@ -159,7 +159,7 @@ This SDK is generated and maintained from the official DevRev OpenAPI specificat
159
159
 
160
160
  ### MCP Server (AI Integration)
161
161
 
162
- - ✅ **78+ MCP Tools** — Full CRUD for tickets, accounts, users, articles, and all DevRev resources
162
+ - ✅ **83+ MCP Tools** — Full CRUD for tickets, accounts, users, articles, webhooks, and all DevRev resources
163
163
  - ✅ **7 Resource Templates** — `devrev://` URI scheme for AI-accessible data browsing
164
164
  - ✅ **8 Workflow Prompts** — Pre-built triage, escalation, investigation, and reporting workflows
165
165
  - ✅ **3 Transport Modes** — stdio (local), Streamable HTTP (production), SSE (legacy)
@@ -215,17 +215,6 @@ for account in accounts:
215
215
  work = client.works.get(id="don:core:...")
216
216
  print(f"Work: {work.title} - Status: {work.stage.name}")
217
217
 
218
- # Ticket integrations can read optional account/sentiment/SLA fields
219
- ticket = client.works.get(id="don:core:dvrv-us-1:devo/1:ticket/123")
220
- print(ticket.rev_org, ticket.account, ticket.needs_response)
221
-
222
- # Use a supported raw escape hatch when the API returns newer fields
223
- raw_ticket = client.works.get_raw(id="don:core:dvrv-us-1:devo/1:ticket/123")
224
- print(raw_ticket["work"].keys())
225
-
226
- # List survey/CSAT responses for a ticket without using private _http
227
- survey_responses = client.survey_responses.list(object_id=ticket.id)
228
-
229
218
  # Create a new ticket
230
219
  ticket = client.works.create(
231
220
  title="Bug: Login page not loading",
@@ -308,7 +297,6 @@ The SDK provides complete coverage of all 209 DevRev public API endpoints, organ
308
297
  |---------|-----------|-------------|
309
298
  | **Articles** | 5 | Knowledge base articles |
310
299
  | **Conversations** | 5 | Customer conversations |
311
- | **Survey Responses** | 1 | Survey and CSAT response listing |
312
300
  | **Timeline Entries** | 5 | Activity timeline management |
313
301
  | **Tags** | 5 | Tagging and categorization |
314
302
 
@@ -737,7 +725,7 @@ The DevRev MCP Server exposes the full DevRev platform as [Model Context Protoco
737
725
 
738
726
  ### MCP Server Features
739
727
 
740
- - **78+ MCP Tools** — Full CRUD for tickets, accounts, users, conversations, articles, parts, tags, groups, timeline, links, SLAs, plus beta tools (search, recommendations, incidents, engagements)
728
+ - **83+ MCP Tools** — Full CRUD for tickets, accounts, users, conversations, articles, parts, tags, groups, timeline, links, SLAs, webhooks, plus beta tools (search, recommendations, incidents, engagements)
741
729
  - **7 Resource Templates** — `devrev://` URI scheme for browsing tickets, accounts, articles, users, parts, conversations
742
730
  - **8 Workflow Prompts** — Triage, draft response, escalate, summarize account, investigate, weekly report, find similar, onboard customer
743
731
  - **3 Transports** — stdio (local dev), Streamable HTTP (production), SSE (legacy)
@@ -1,6 +1,6 @@
1
1
  # py-devrev
2
2
 
3
- A modern, type-safe Python SDK for the DevRev API.
3
+ A modern, type-safe Python SDK and MCP for the DevRev API.
4
4
 
5
5
  [![Built with Augment](https://img.shields.io/badge/Built%20with-Auggie-6366f1?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyTDIgMTloMjBMMTIgMnptMCAzLjc1TDE4LjI1IDE3SDUuNzVMMTIgNS43NXoiLz48L3N2Zz4=)](https://www.augmentcode.com/)
6
6
  [![PyPI Version](https://img.shields.io/pypi/v/devrev-python-sdk.svg)](https://pypi.org/project/devrev-Python-SDK/)
@@ -84,7 +84,7 @@ This SDK is generated and maintained from the official DevRev OpenAPI specificat
84
84
 
85
85
  ### MCP Server (AI Integration)
86
86
 
87
- - ✅ **78+ MCP Tools** — Full CRUD for tickets, accounts, users, articles, and all DevRev resources
87
+ - ✅ **83+ MCP Tools** — Full CRUD for tickets, accounts, users, articles, webhooks, and all DevRev resources
88
88
  - ✅ **7 Resource Templates** — `devrev://` URI scheme for AI-accessible data browsing
89
89
  - ✅ **8 Workflow Prompts** — Pre-built triage, escalation, investigation, and reporting workflows
90
90
  - ✅ **3 Transport Modes** — stdio (local), Streamable HTTP (production), SSE (legacy)
@@ -140,17 +140,6 @@ for account in accounts:
140
140
  work = client.works.get(id="don:core:...")
141
141
  print(f"Work: {work.title} - Status: {work.stage.name}")
142
142
 
143
- # Ticket integrations can read optional account/sentiment/SLA fields
144
- ticket = client.works.get(id="don:core:dvrv-us-1:devo/1:ticket/123")
145
- print(ticket.rev_org, ticket.account, ticket.needs_response)
146
-
147
- # Use a supported raw escape hatch when the API returns newer fields
148
- raw_ticket = client.works.get_raw(id="don:core:dvrv-us-1:devo/1:ticket/123")
149
- print(raw_ticket["work"].keys())
150
-
151
- # List survey/CSAT responses for a ticket without using private _http
152
- survey_responses = client.survey_responses.list(object_id=ticket.id)
153
-
154
143
  # Create a new ticket
155
144
  ticket = client.works.create(
156
145
  title="Bug: Login page not loading",
@@ -233,7 +222,6 @@ The SDK provides complete coverage of all 209 DevRev public API endpoints, organ
233
222
  |---------|-----------|-------------|
234
223
  | **Articles** | 5 | Knowledge base articles |
235
224
  | **Conversations** | 5 | Customer conversations |
236
- | **Survey Responses** | 1 | Survey and CSAT response listing |
237
225
  | **Timeline Entries** | 5 | Activity timeline management |
238
226
  | **Tags** | 5 | Tagging and categorization |
239
227
 
@@ -662,7 +650,7 @@ The DevRev MCP Server exposes the full DevRev platform as [Model Context Protoco
662
650
 
663
651
  ### MCP Server Features
664
652
 
665
- - **78+ MCP Tools** — Full CRUD for tickets, accounts, users, conversations, articles, parts, tags, groups, timeline, links, SLAs, plus beta tools (search, recommendations, incidents, engagements)
653
+ - **83+ MCP Tools** — Full CRUD for tickets, accounts, users, conversations, articles, parts, tags, groups, timeline, links, SLAs, webhooks, plus beta tools (search, recommendations, incidents, engagements)
666
654
  - **7 Resource Templates** — `devrev://` URI scheme for browsing tickets, accounts, articles, users, parts, conversations
667
655
  - **8 Workflow Prompts** — Triage, draft response, escalate, summarize account, investigate, weekly report, find similar, onboard customer
668
656
  - **3 Transports** — stdio (local dev), Streamable HTTP (production), SSE (legacy)
@@ -44,7 +44,6 @@ All API operations are organized into service classes:
44
44
  | [Parts](services/parts.md) | Product components | 5 |
45
45
  | [Articles](services/articles.md) | Knowledge base | 5 |
46
46
  | [Conversations](services/conversations.md) | Customer conversations | 5 |
47
- | [Survey Responses](services/survey-responses.md) | Survey and CSAT responses | 1 |
48
47
  | [Tags](services/tags.md) | Categorization | 5 |
49
48
  | [Groups](services/groups.md) | User groups | 6 |
50
49
  | [Webhooks](services/webhooks.md) | Event notifications | 6 |
@@ -78,7 +77,6 @@ Request and response models:
78
77
  |--------|-------------|
79
78
  | [Base](models/base.md) | Common base classes |
80
79
  | [Accounts](models/accounts.md) | Account models |
81
- | [Survey Responses](models/survey-responses.md) | Survey response models |
82
80
  | [Works](models/works.md) | Work item models |
83
81
  | [Users](models/users.md) | User models |
84
82
 
@@ -30,7 +30,6 @@ Models for specific resources:
30
30
  | Resource | Description |
31
31
  |----------|-------------|
32
32
  | [Accounts](accounts.md) | Customer account models |
33
- | [Survey Responses](survey-responses.md) | Survey response list and payload models |
34
33
  | [Works](works.md) | Work item models (tickets, issues) |
35
34
  | [Users](users.md) | User models (dev and rev users) |
36
35
 
@@ -111,9 +111,6 @@ print(f"Stage: {work.stage.name if work.stage else 'N/A'}")
111
111
 
112
112
  if work.type == WorkType.TICKET:
113
113
  print(f"Severity: {work.severity}")
114
- print(f"Account: {work.account}")
115
- print(f"Rev org: {work.rev_org}")
116
- print(f"Needs response: {work.needs_response}")
117
114
  elif work.type == WorkType.ISSUE:
118
115
  print(f"Priority: {work.priority}")
119
116
  ```
@@ -36,7 +36,6 @@ client.dev_users # DevUsersService
36
36
  |---------|-------------|-----------|
37
37
  | **Articles** | Knowledge base articles with unified content management | [articles](articles.md) |
38
38
  | **Conversations** | Customer conversations | [conversations](conversations.md) |
39
- | **Survey Responses** | Survey and CSAT responses | [survey-responses](survey-responses.md) |
40
39
  | **Tags** | Categorization | [tags](tags.md) |
41
40
  | **Timeline Entries** | Activity tracking | [timeline-entries](timeline-entries.md) |
42
41
 
@@ -13,7 +13,6 @@ issues (engineering), and tasks.
13
13
  members:
14
14
  - list
15
15
  - get
16
- - get_raw
17
16
  - create
18
17
  - update
19
18
  - delete
@@ -58,39 +57,13 @@ response = client.works.list(
58
57
  ### Get Work Item
59
58
 
60
59
  ```python
61
- work = client.works.get(id="don:core:dvrv-us-1:devo/1:ticket/123")
60
+ response = client.works.get(id="don:core:dvrv-us-1:devo/1:ticket/123")
61
+ work = response.work
62
62
  print(f"Title: {work.title}")
63
63
  print(f"Type: {work.type}")
64
64
  print(f"Stage: {work.stage.name if work.stage else 'N/A'}")
65
65
  ```
66
66
 
67
- ### Get Raw Work Payload
68
-
69
- Use `get_raw` when the REST API returns a newly-added field that is not yet
70
- modeled by the typed `Work` object. This keeps callers on a supported SDK API
71
- instead of relying on the private `_http` transport.
72
-
73
- ```python
74
- payload = client.works.get_raw(id="don:core:dvrv-us-1:devo/1:ticket/123")
75
- raw_work = payload["work"]
76
- print(raw_work.get("rev_org"))
77
- ```
78
-
79
- ### Ticket Account Association
80
-
81
- For tickets, the typed `Work` model now includes optional account-association
82
- fields when the API returns them. Prefer the typed fields first, and use
83
- `get_raw` only as a fallback for workspace-specific or newly-added fields.
84
-
85
- ```python
86
- ticket = client.works.get(id="don:core:dvrv-us-1:devo/1:ticket/123")
87
-
88
- if ticket.rev_org:
89
- print(f"Ticket rev org: {ticket.rev_org}")
90
- if ticket.account:
91
- print(f"Ticket account: {ticket.account}")
92
- ```
93
-
94
67
  ### Create Ticket
95
68
 
96
69
  ```python
@@ -13,21 +13,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
 
14
14
  ### Fixed
15
15
 
16
- ## [3.0.4] - 2026-05-03
16
+ ## [3.1.0] - 2026-06-16
17
17
 
18
18
  ### Added
19
19
 
20
- - **Ticket SDK coverage enhancements** (CUSS-370, GitHub #220) — Added optional
21
- typed `Work` fields used by ticket integrations (`account`, `rev_org`,
22
- sentiment fields, `sla_summary`, `needs_response`, channels, group,
23
- `is_frozen`, and `visibility`), a public `WorksService.get_raw` /
24
- `AsyncWorksService.get_raw` escape hatch for raw `/works.get` payloads, and
25
- new sync/async `survey_responses.list(...)` support for
26
- `/surveys.responses.list`.
27
-
28
- ### Changed
29
-
30
- ### Fixed
20
+ - **Webhook management MCP tools** (CSS-1041) — New `devrev_webhooks_*` MCP
21
+ tools exposing the existing `WebhooksService` through the MCP server:
22
+ `devrev_webhooks_list` and `devrev_webhooks_get` (read-only), plus
23
+ `devrev_webhooks_create`, `devrev_webhooks_update`, and
24
+ `devrev_webhooks_delete` (registered only when destructive tools are
25
+ enabled). The module follows the established tool conventions (DON ID
26
+ validation, paginated list responses, `WebhookStatus` resolution on update)
27
+ and is registered in the core (non-beta) tool block. Documentation in
28
+ `docs/mcp/tools-reference.md` now covers all five tools plus an advisory
29
+ section on event types, target URL requirements, the signing `secret`, and
30
+ the webhook status lifecycle.
31
31
 
32
32
  ## [3.0.1] - 2026-04-22
33
33
 
@@ -6,7 +6,7 @@ icon: material/tools
6
6
 
7
7
  Complete reference of all MCP capabilities provided by the DevRev MCP Server.
8
8
 
9
- ## Tools (83+)
9
+ ## Tools (88+)
10
10
 
11
11
  Tools are the primary way AI assistants interact with DevRev. Each tool maps to one or more DevRev API endpoints.
12
12
 
@@ -148,12 +148,37 @@ issues (engineering), and tasks.
148
148
 
149
149
  ### Webhooks
150
150
 
151
+ Webhooks deliver DevRev events to an external HTTPS endpoint. Each webhook has a
152
+ target `url`, an optional list of `event_types` to subscribe to (defaults to all
153
+ events), and an optional `secret` used to sign payloads so the receiver can
154
+ verify authenticity. A webhook's `status` moves through `unverified` → `active`
155
+ once DevRev confirms the endpoint, and can be set to `inactive` to pause
156
+ delivery.
157
+
151
158
  | Tool | Description |
152
159
  |------|-------------|
153
160
  | `devrev_webhooks_list` | List webhooks |
154
161
  | `devrev_webhooks_get` | Get webhook details |
155
162
  | `devrev_webhooks_create` | Create a webhook |
156
- | `devrev_webhooks_update` | Update a webhook |
163
+ | `devrev_webhooks_update` | Update a webhook (url, event types, status) |
164
+ | `devrev_webhooks_delete` | Delete a webhook |
165
+
166
+ **Managing webhooks**
167
+
168
+ - **Target URL** must be a publicly reachable HTTPS endpoint that responds to
169
+ DevRev's verification handshake; until it does, the webhook stays
170
+ `unverified` and no events are delivered.
171
+ - **Event types** scope which events are sent. Omit `event_types` on create to
172
+ receive all event types, or pass a specific list (e.g. `work_created`,
173
+ `work_updated`) to narrow delivery.
174
+ - **Secret** is a shared signing key — store it as a secret on the receiving
175
+ service and use it to verify each payload's signature. Never log or commit it.
176
+ - **Status lifecycle**: `unverified` (awaiting handshake) → `active` (delivering)
177
+ ↔ `inactive` (paused). Use `devrev_webhooks_update` with `status` to pause or
178
+ resume a webhook.
179
+ - **Typical workflow**: `devrev_webhooks_create` (register the endpoint) → verify
180
+ the endpoint so it becomes `active` → `devrev_webhooks_list` / `devrev_webhooks_get`
181
+ to confirm configuration → `devrev_webhooks_delete` when it is no longer needed.
157
182
 
158
183
  ### Beta Tools
159
184
 
@@ -169,7 +169,6 @@ nav:
169
169
  - Parts: api/services/parts.md
170
170
  - Articles: api/services/articles.md
171
171
  - Conversations: api/services/conversations.md
172
- - Survey Responses: api/services/survey-responses.md
173
172
  - Tags: api/services/tags.md
174
173
  - Groups: api/services/groups.md
175
174
  - Webhooks: api/services/webhooks.md
@@ -181,7 +180,6 @@ nav:
181
180
  - api/models/index.md
182
181
  - Base: api/models/base.md
183
182
  - Accounts: api/models/accounts.md
184
- - Survey Responses: api/models/survey-responses.md
185
183
  - Works: api/models/works.md
186
184
  - Users: api/models/users.md
187
185
  - Examples:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "3.0.4"
7
+ version = "3.1.0"
8
8
  description = "A modern, type-safe Python SDK for the DevRev API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -42,10 +42,6 @@ from devrev.services.rev_orgs import AsyncRevOrgsService, RevOrgsService
42
42
  from devrev.services.rev_users import AsyncRevUsersService, RevUsersService
43
43
  from devrev.services.search import AsyncSearchService, SearchService
44
44
  from devrev.services.slas import AsyncSlasService, SlasService
45
- from devrev.services.survey_responses import (
46
- AsyncSurveyResponsesService,
47
- SurveyResponsesService,
48
- )
49
45
  from devrev.services.tags import AsyncTagsService, TagsService
50
46
  from devrev.services.timeline_entries import (
51
47
  AsyncTimelineEntriesService,
@@ -168,7 +164,6 @@ class DevRevClient:
168
164
  self._rev_orgs = RevOrgsService(self._http)
169
165
  self._rev_users = RevUsersService(self._http)
170
166
  self._slas = SlasService(self._http)
171
- self._survey_responses = SurveyResponsesService(self._http)
172
167
  self._tags = TagsService(self._http)
173
168
  self._timeline_entries = TimelineEntriesService(self._http)
174
169
  self._webhooks = WebhooksService(self._http)
@@ -264,11 +259,6 @@ class DevRevClient:
264
259
  """Access the SLAs service."""
265
260
  return self._slas
266
261
 
267
- @property
268
- def survey_responses(self) -> SurveyResponsesService:
269
- """Access the Survey Responses service."""
270
- return self._survey_responses
271
-
272
262
  @property
273
263
  def tags(self) -> TagsService:
274
264
  """Access the Tags service."""
@@ -502,7 +492,6 @@ class AsyncDevRevClient:
502
492
  self._rev_orgs = AsyncRevOrgsService(self._http)
503
493
  self._rev_users = AsyncRevUsersService(self._http)
504
494
  self._slas = AsyncSlasService(self._http)
505
- self._survey_responses = AsyncSurveyResponsesService(self._http)
506
495
  self._tags = AsyncTagsService(self._http)
507
496
  self._timeline_entries = AsyncTimelineEntriesService(self._http)
508
497
  self._webhooks = AsyncWebhooksService(self._http)
@@ -598,11 +587,6 @@ class AsyncDevRevClient:
598
587
  """Access the SLAs service."""
599
588
  return self._slas
600
589
 
601
- @property
602
- def survey_responses(self) -> AsyncSurveyResponsesService:
603
- """Access the Survey Responses service."""
604
- return self._survey_responses
605
-
606
590
  @property
607
591
  def tags(self) -> AsyncTagsService:
608
592
  """Access the Tags service."""
@@ -328,12 +328,6 @@ from devrev.models.slas import (
328
328
  SlasUpdateResponse,
329
329
  SlaTrackerStatus,
330
330
  )
331
- from devrev.models.survey_responses import (
332
- SurveyResponse,
333
- SurveyResponsesListMode,
334
- SurveyResponsesListRequest,
335
- SurveyResponsesListResponse,
336
- )
337
331
  from devrev.models.sync import (
338
332
  ExternalRef,
339
333
  StagedInfo,
@@ -705,11 +699,6 @@ __all__ = [
705
699
  "QuestionAnswersUpdateRequest",
706
700
  "QuestionAnswersUpdateResponse",
707
701
  "QuestionAnswersDeleteRequest",
708
- # Survey Responses
709
- "SurveyResponse",
710
- "SurveyResponsesListMode",
711
- "SurveyResponsesListRequest",
712
- "SurveyResponsesListResponse",
713
702
  # Recommendations
714
703
  "MessageRole",
715
704
  "ChatMessage",
@@ -96,48 +96,6 @@ class Work(DevRevResponseModel):
96
96
  actual_close_date: datetime | None = Field(default=None, description="Actual close date")
97
97
  custom_fields: dict[str, Any] | None = Field(default=None, description="Custom fields")
98
98
  external_ref: str | None = Field(default=None, description="External reference")
99
- account: dict[str, Any] | str | None = Field(
100
- default=None,
101
- description="Account associated with the ticket/work, when returned by the API",
102
- )
103
- rev_org: dict[str, Any] | str | None = Field(
104
- default=None,
105
- description="Rev organization associated with the ticket/work",
106
- )
107
- sentiment: dict[str, Any] | str | None = Field(
108
- default=None,
109
- description="Current ticket sentiment, when returned by the API",
110
- )
111
- sentiment_summary: dict[str, Any] | str | None = Field(
112
- default=None,
113
- description="Structured or textual sentiment summary",
114
- )
115
- sentiment_modified_date: datetime | None = Field(
116
- default=None,
117
- description="When ticket sentiment was last modified",
118
- )
119
- sla_summary: dict[str, Any] | None = Field(default=None, description="Ticket SLA summary")
120
- needs_response: bool | None = Field(
121
- default=None,
122
- description="Whether the ticket needs a customer response",
123
- )
124
- channels: list[dict[str, Any] | str] | None = Field(
125
- default=None,
126
- description="Channels associated with the ticket",
127
- )
128
- source_channel: dict[str, Any] | str | None = Field(
129
- default=None,
130
- description="Source channel that created the ticket",
131
- )
132
- group: dict[str, Any] | str | None = Field(
133
- default=None,
134
- description="Group associated with the work item",
135
- )
136
- is_frozen: bool | None = Field(default=None, description="Whether the work item is frozen")
137
- visibility: dict[str, Any] | str | None = Field(
138
- default=None,
139
- description="Work item visibility, when returned by the API",
140
- )
141
99
 
142
100
 
143
101
  class WorkSummary(DevRevResponseModel):
@@ -38,7 +38,6 @@ from devrev.services.rev_orgs import AsyncRevOrgsService, RevOrgsService
38
38
  from devrev.services.rev_users import AsyncRevUsersService, RevUsersService
39
39
  from devrev.services.search import AsyncSearchService, SearchService
40
40
  from devrev.services.slas import AsyncSlasService, SlasService
41
- from devrev.services.survey_responses import AsyncSurveyResponsesService, SurveyResponsesService
42
41
  from devrev.services.tags import AsyncTagsService, TagsService
43
42
  from devrev.services.timeline_entries import (
44
43
  AsyncTimelineEntriesService,
@@ -113,9 +112,6 @@ __all__ = [
113
112
  # SLAs
114
113
  "SlasService",
115
114
  "AsyncSlasService",
116
- # Survey Responses
117
- "SurveyResponsesService",
118
- "AsyncSurveyResponsesService",
119
115
  # Tags
120
116
  "TagsService",
121
117
  "AsyncTagsService",
@@ -147,21 +147,6 @@ class WorksService(BaseService):
147
147
  response = self._post("/works.get", request, WorksGetResponse)
148
148
  return response.work
149
149
 
150
- def get_raw(self, id: str) -> dict[str, Any]:
151
- """Get the raw API payload for a work item.
152
-
153
- Use this supported escape hatch when the DevRev API returns fields that
154
- are not yet represented on the typed :class:`Work` model.
155
-
156
- Args:
157
- id: Work item ID
158
-
159
- Returns:
160
- Raw ``/works.get`` response payload.
161
- """
162
- request = WorksGetRequest(id=id)
163
- return self._post("/works.get", request)
164
-
165
150
  def list(
166
151
  self,
167
152
  *,
@@ -454,11 +439,6 @@ class AsyncWorksService(AsyncBaseService):
454
439
  response = await self._post("/works.get", request, WorksGetResponse)
455
440
  return response.work
456
441
 
457
- async def get_raw(self, id: str) -> dict[str, Any]:
458
- """Get the raw API payload for a work item."""
459
- request = WorksGetRequest(id=id)
460
- return await self._post("/works.get", request)
461
-
462
442
  async def list(
463
443
  self,
464
444
  *,
@@ -249,6 +249,7 @@ from devrev_mcp.tools import slas as _slas_tools # noqa: E402, F401
249
249
  from devrev_mcp.tools import tags as _tags_tools # noqa: E402, F401
250
250
  from devrev_mcp.tools import timeline as _timeline_tools # noqa: E402, F401
251
251
  from devrev_mcp.tools import users as _users_tools # noqa: E402, F401
252
+ from devrev_mcp.tools import webhooks as _webhooks_tools # noqa: E402, F401
252
253
  from devrev_mcp.tools import works as _works_tools # noqa: E402, F401
253
254
 
254
255
  # Beta tools (only if beta tools are enabled)
@@ -0,0 +1,153 @@
1
+ """MCP tools for DevRev webhook operations."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from typing import Any
7
+
8
+ from mcp.server.fastmcp import Context
9
+
10
+ from devrev.exceptions import DevRevError
11
+ from devrev.models.webhooks import (
12
+ WebhooksCreateRequest,
13
+ WebhooksDeleteRequest,
14
+ WebhooksGetRequest,
15
+ WebhooksListRequest,
16
+ WebhookStatus,
17
+ WebhooksUpdateRequest,
18
+ )
19
+ from devrev_mcp.server import _config, mcp
20
+ from devrev_mcp.utils.don_id import validate_don_id
21
+ from devrev_mcp.utils.errors import format_devrev_error
22
+ from devrev_mcp.utils.formatting import serialize_model, serialize_models
23
+ from devrev_mcp.utils.pagination import clamp_page_size
24
+
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ @mcp.tool()
29
+ async def devrev_webhooks_list(
30
+ ctx: Context[Any, Any, Any],
31
+ cursor: str | None = None,
32
+ limit: int | None = None,
33
+ ) -> dict[str, Any]:
34
+ """List DevRev webhooks.
35
+
36
+ Args:
37
+ cursor: Pagination cursor from a previous response.
38
+ limit: Maximum number of items to return (default: 25, max: 100).
39
+ """
40
+ app = ctx.request_context.lifespan_context
41
+ try:
42
+ request = WebhooksListRequest(
43
+ cursor=cursor,
44
+ limit=clamp_page_size(
45
+ limit, default=app.config.default_page_size, maximum=app.config.max_page_size
46
+ ),
47
+ )
48
+ webhooks = await app.get_client().webhooks.list(request)
49
+ items = serialize_models(list(webhooks))
50
+ return {"count": len(items), "webhooks": items}
51
+ except DevRevError as e:
52
+ raise RuntimeError(format_devrev_error(e)) from e
53
+
54
+
55
+ @mcp.tool()
56
+ async def devrev_webhooks_get(
57
+ ctx: Context[Any, Any, Any],
58
+ id: str,
59
+ ) -> dict[str, Any]:
60
+ """Get a DevRev webhook by ID.
61
+
62
+ Args:
63
+ id: Webhook ID (e.g., "don:integration:dvrv-us-1:devo/1:webhook/123").
64
+ """
65
+ validate_don_id(id, "webhook", "devrev_webhooks_get")
66
+ app = ctx.request_context.lifespan_context
67
+ try:
68
+ request = WebhooksGetRequest(id=id)
69
+ webhook = await app.get_client().webhooks.get(request)
70
+ return serialize_model(webhook)
71
+ except DevRevError as e:
72
+ raise RuntimeError(format_devrev_error(e)) from e
73
+
74
+
75
+ # Destructive tools (only registered when enabled)
76
+ if _config.enable_destructive_tools:
77
+
78
+ @mcp.tool()
79
+ async def devrev_webhooks_create(
80
+ ctx: Context[Any, Any, Any],
81
+ url: str,
82
+ event_types: list[str] | None = None,
83
+ secret: str | None = None,
84
+ ) -> dict[str, Any]:
85
+ """Create a new DevRev webhook.
86
+
87
+ Args:
88
+ url: Target URL that will receive webhook event POSTs.
89
+ event_types: Event types to subscribe to (default: all events).
90
+ secret: Shared secret used to sign and verify webhook payloads.
91
+ """
92
+ app = ctx.request_context.lifespan_context
93
+ try:
94
+ request = WebhooksCreateRequest(url=url, event_types=event_types, secret=secret)
95
+ webhook = await app.get_client().webhooks.create(request)
96
+ return serialize_model(webhook)
97
+ except DevRevError as e:
98
+ raise RuntimeError(format_devrev_error(e)) from e
99
+
100
+ @mcp.tool()
101
+ async def devrev_webhooks_update(
102
+ ctx: Context[Any, Any, Any],
103
+ id: str,
104
+ url: str | None = None,
105
+ event_types: list[str] | None = None,
106
+ status: str | None = None,
107
+ ) -> dict[str, Any]:
108
+ """Update a DevRev webhook.
109
+
110
+ Args:
111
+ id: Webhook ID to update.
112
+ url: New target URL.
113
+ event_types: New list of event types to subscribe to.
114
+ status: New status (active, inactive, unverified).
115
+ """
116
+ validate_don_id(id, "webhook", "devrev_webhooks_update")
117
+ app = ctx.request_context.lifespan_context
118
+ try:
119
+ resolved_status: WebhookStatus | None = None
120
+ if status is not None:
121
+ try:
122
+ resolved_status = WebhookStatus(status.lower())
123
+ except ValueError as e:
124
+ raise RuntimeError(
125
+ f"Invalid webhook status '{status}'. "
126
+ "Valid values: active, inactive, unverified."
127
+ ) from e
128
+ request = WebhooksUpdateRequest(
129
+ id=id, url=url, event_types=event_types, status=resolved_status
130
+ )
131
+ webhook = await app.get_client().webhooks.update(request)
132
+ return serialize_model(webhook)
133
+ except DevRevError as e:
134
+ raise RuntimeError(format_devrev_error(e)) from e
135
+
136
+ @mcp.tool()
137
+ async def devrev_webhooks_delete(
138
+ ctx: Context[Any, Any, Any],
139
+ id: str,
140
+ ) -> dict[str, Any]:
141
+ """Delete a DevRev webhook.
142
+
143
+ Args:
144
+ id: Webhook ID to delete.
145
+ """
146
+ validate_don_id(id, "webhook", "devrev_webhooks_delete")
147
+ app = ctx.request_context.lifespan_context
148
+ try:
149
+ request = WebhooksDeleteRequest(id=id)
150
+ await app.get_client().webhooks.delete(request)
151
+ return {"deleted": True, "id": id}
152
+ except DevRevError as e:
153
+ raise RuntimeError(format_devrev_error(e)) from e