devrev-Python-SDK 3.0.3__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 (378) hide show
  1. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/foreman.md +45 -23
  2. devrev_python_sdk-3.1.0/.augment/commands/foreman-work.md +96 -0
  3. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/PKG-INFO +4 -4
  4. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/README.md +3 -3
  5. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/changelog.md +16 -0
  6. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/mcp/tools-reference.md +27 -2
  7. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/pyproject.toml +1 -1
  8. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/server.py +1 -0
  9. devrev_python_sdk-3.1.0/src/devrev_mcp/tools/webhooks.py +153 -0
  10. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/don_id.py +2 -0
  11. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/conftest.py +8 -0
  12. devrev_python_sdk-3.1.0/tests/unit/mcp/test_tools_webhooks.py +207 -0
  13. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/uv.lock +4 -4
  14. devrev_python_sdk-3.0.3/.augment/commands/foreman-work.md +0 -80
  15. devrev_python_sdk-3.0.3/.github/workflows/claude.yml +0 -50
  16. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/bug-fixer.md +0 -0
  17. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/builder.md +0 -0
  18. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/documentation.md +0 -0
  19. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/pr-review-boss.md +0 -0
  20. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/release-manager.md +0 -0
  21. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/simplifier.md +0 -0
  22. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/agents/tester.md +0 -0
  23. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/commands/release-prepare.md +0 -0
  24. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/commands/review-start.md +0 -0
  25. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/commands/simplify-code.md +0 -0
  26. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/code-quality.md +0 -0
  27. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/data-modeling.md +0 -0
  28. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/devrev-sdk.md +0 -0
  29. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/git-workflow.md +0 -0
  30. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/pull-requests.md +0 -0
  31. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/python-development.md +0 -0
  32. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/security.md +0 -0
  33. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.augment/rules/testing.md +0 -0
  34. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.dockerignore +0 -0
  35. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.env.sample +0 -0
  36. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
  37. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  38. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  39. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  40. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  41. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/dependabot.yml +0 -0
  42. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/pull_request_template.md +0 -0
  43. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/api-check.yml +0 -0
  44. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/ci.yml +0 -0
  45. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/claude-code-review.yml +0 -0
  46. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/deploy.yml +0 -0
  47. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/docs.yml +0 -0
  48. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/integration-tests.yml +0 -0
  49. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/release.yml +0 -0
  50. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.github/workflows/sync-openapi.yml +0 -0
  51. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.gitignore +0 -0
  52. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/.pre-commit-config.yaml +0 -0
  53. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/CLAUDE.md +0 -0
  54. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/CODE_OF_CONDUCT.md +0 -0
  55. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/CONTRIBUTING.md +0 -0
  56. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/DEPRECATIONS.md +0 -0
  57. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/Dockerfile +0 -0
  58. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/KNOWN_ISSUES.md +0 -0
  59. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
  60. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/SECURITY.md +0 -0
  61. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/augment-mcp-config-remote.json +0 -0
  62. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/augment-mcp-config.json +0 -0
  63. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/augment-settings.json +0 -0
  64. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/benchmarks/README.md +0 -0
  65. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/benchmarks/bench_http_client.py +0 -0
  66. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/benchmarks/bench_models.py +0 -0
  67. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/benchmarks/bench_pagination.py +0 -0
  68. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/benchmarks/conftest.py +0 -0
  69. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/context7.json +0 -0
  70. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/README.md +0 -0
  71. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/audit-logging-setup.sh +0 -0
  72. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/cloudbuild.yaml +0 -0
  73. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/monitoring/README.md +0 -0
  74. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/monitoring/alert-policies.yaml +0 -0
  75. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/monitoring/dashboard.json +0 -0
  76. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/monitoring/validate-config.sh +0 -0
  77. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/deploy/service.yaml +0 -0
  78. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docker-compose.yml +0 -0
  79. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/brands.md +0 -0
  80. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/engagements.md +0 -0
  81. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/incidents.md +0 -0
  82. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/index.md +0 -0
  83. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/question-answers.md +0 -0
  84. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/recommendations.md +0 -0
  85. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/search.md +0 -0
  86. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta/uoms.md +0 -0
  87. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/beta-api-differences.md +0 -0
  88. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/client.md +0 -0
  89. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/config.md +0 -0
  90. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/exceptions.md +0 -0
  91. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/index.md +0 -0
  92. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/models/accounts.md +0 -0
  93. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/models/base.md +0 -0
  94. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/models/index.md +0 -0
  95. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/models/users.md +0 -0
  96. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/models/works.md +0 -0
  97. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/accounts.md +0 -0
  98. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/articles.md +0 -0
  99. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/code-changes.md +0 -0
  100. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/conversations.md +0 -0
  101. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/dev-users.md +0 -0
  102. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/groups.md +0 -0
  103. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/index.md +0 -0
  104. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/links.md +0 -0
  105. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/parts.md +0 -0
  106. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/rev-users.md +0 -0
  107. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/slas.md +0 -0
  108. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/tags.md +0 -0
  109. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/timeline-entries.md +0 -0
  110. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/webhooks.md +0 -0
  111. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/api/services/works.md +0 -0
  112. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/examples/advanced.md +0 -0
  113. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/examples/basic.md +0 -0
  114. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/examples/beta-features.md +0 -0
  115. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/examples/index.md +0 -0
  116. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/examples/integrations.md +0 -0
  117. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/getting-started/authentication.md +0 -0
  118. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/getting-started/index.md +0 -0
  119. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/getting-started/installation.md +0 -0
  120. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/getting-started/quickstart.md +0 -0
  121. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/beta-api.md +0 -0
  122. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/compatibility.md +0 -0
  123. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/configuration.md +0 -0
  124. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/error-handling.md +0 -0
  125. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/github-actions-setup.md +0 -0
  126. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/index.md +0 -0
  127. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/logging.md +0 -0
  128. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/pagination.md +0 -0
  129. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/sync-vs-async.md +0 -0
  130. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/testing.md +0 -0
  131. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/version-support.md +0 -0
  132. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/guides/write-integration-testing-strategy.md +0 -0
  133. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/hooks/copy_llms.py +0 -0
  134. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/index.md +0 -0
  135. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/mcp/deployment.md +0 -0
  136. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/mcp/index.md +0 -0
  137. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/mcp/quickstart.md +0 -0
  138. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/docs/stylesheets/extra.css +0 -0
  139. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/README.md +0 -0
  140. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/README.md +0 -0
  141. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/async_example.py +0 -0
  142. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/create_work.py +0 -0
  143. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/error_handling.py +0 -0
  144. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/list_accounts.py +0 -0
  145. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/pagination.py +0 -0
  146. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/basic/search_users.py +0 -0
  147. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/cloud_functions/README.md +0 -0
  148. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/cloud_functions/main.py +0 -0
  149. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/cloud_functions/requirements.txt +0 -0
  150. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/fastapi/README.md +0 -0
  151. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/fastapi/main.py +0 -0
  152. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/fastapi/requirements.txt +0 -0
  153. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/flask/README.md +0 -0
  154. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/flask/app.py +0 -0
  155. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/examples/integrations/flask/requirements.txt +0 -0
  156. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/llms-ctx-full.txt +0 -0
  157. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/llms-ctx.txt +0 -0
  158. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/llms-mcp.txt +0 -0
  159. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/llms.txt +0 -0
  160. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/mkdocs.yml +0 -0
  161. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/openapi-beta.yaml +0 -0
  162. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/openapi-public.yaml +0 -0
  163. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/openapi-spec-corrections.yaml +0 -0
  164. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/scripts/build_ai_docs.py +0 -0
  165. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/scripts/debug_articles.py +0 -0
  166. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/scripts/setup-github-secrets.sh +0 -0
  167. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/__init__.py +0 -0
  168. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/client.py +0 -0
  169. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/config.py +0 -0
  170. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/exceptions.py +0 -0
  171. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/__init__.py +0 -0
  172. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/accounts.py +0 -0
  173. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/articles.py +0 -0
  174. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/artifacts.py +0 -0
  175. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/base.py +0 -0
  176. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/brands.py +0 -0
  177. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/code_changes.py +0 -0
  178. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/conversations.py +0 -0
  179. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/dev_users.py +0 -0
  180. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/engagements.py +0 -0
  181. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/groups.py +0 -0
  182. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/incidents.py +0 -0
  183. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/links.py +0 -0
  184. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/notifications.py +0 -0
  185. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/parts.py +0 -0
  186. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/preferences.py +0 -0
  187. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/question_answers.py +0 -0
  188. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/recommendations.py +0 -0
  189. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/rev_orgs.py +0 -0
  190. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/rev_users.py +0 -0
  191. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/search.py +0 -0
  192. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/slas.py +0 -0
  193. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/sync.py +0 -0
  194. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/tags.py +0 -0
  195. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/tasks.py +0 -0
  196. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/timeline_entries.py +0 -0
  197. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/timeline_events.py +0 -0
  198. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/track_events.py +0 -0
  199. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/uoms.py +0 -0
  200. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/webhooks.py +0 -0
  201. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/widgets.py +0 -0
  202. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/models/works.py +0 -0
  203. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/py.typed +0 -0
  204. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/__init__.py +0 -0
  205. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/_pagination.py +0 -0
  206. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/accounts.py +0 -0
  207. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/articles.py +0 -0
  208. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/artifacts.py +0 -0
  209. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/base.py +0 -0
  210. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/brands.py +0 -0
  211. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/code_changes.py +0 -0
  212. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/conversations.py +0 -0
  213. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/dev_users.py +0 -0
  214. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/engagements.py +0 -0
  215. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/groups.py +0 -0
  216. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/incidents.py +0 -0
  217. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/links.py +0 -0
  218. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/notifications.py +0 -0
  219. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/parts.py +0 -0
  220. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/preferences.py +0 -0
  221. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/question_answers.py +0 -0
  222. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/recommendations.py +0 -0
  223. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/rev_orgs.py +0 -0
  224. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/rev_users.py +0 -0
  225. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/search.py +0 -0
  226. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/slas.py +0 -0
  227. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/tags.py +0 -0
  228. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/timeline_entries.py +0 -0
  229. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/track_events.py +0 -0
  230. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/uoms.py +0 -0
  231. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/webhooks.py +0 -0
  232. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/services/works.py +0 -0
  233. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/utils/__init__.py +0 -0
  234. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/utils/content_converter.py +0 -0
  235. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/utils/deprecation.py +0 -0
  236. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/utils/http.py +0 -0
  237. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/utils/logging.py +0 -0
  238. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev/utils/pagination.py +0 -0
  239. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/__init__.py +0 -0
  240. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/__main__.py +0 -0
  241. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/config.py +0 -0
  242. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/__init__.py +0 -0
  243. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/audit.py +0 -0
  244. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/auth.py +0 -0
  245. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/health.py +0 -0
  246. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/middleware/rate_limit.py +0 -0
  247. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/__init__.py +0 -0
  248. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/escalation.py +0 -0
  249. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/investigate.py +0 -0
  250. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/response.py +0 -0
  251. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/summarize.py +0 -0
  252. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/prompts/triage.py +0 -0
  253. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/__init__.py +0 -0
  254. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/account.py +0 -0
  255. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/article.py +0 -0
  256. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/conversation.py +0 -0
  257. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/part.py +0 -0
  258. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/server_info.py +0 -0
  259. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/ticket.py +0 -0
  260. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/resources/user.py +0 -0
  261. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/__init__.py +0 -0
  262. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/accounts.py +0 -0
  263. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/articles.py +0 -0
  264. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/conversations.py +0 -0
  265. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/engagements.py +0 -0
  266. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/groups.py +0 -0
  267. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/incidents.py +0 -0
  268. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/links.py +0 -0
  269. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/parts.py +0 -0
  270. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/question_answers.py +0 -0
  271. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/recommendations.py +0 -0
  272. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/rev_orgs.py +0 -0
  273. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/search.py +0 -0
  274. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/server_info.py +0 -0
  275. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/slas.py +0 -0
  276. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/tags.py +0 -0
  277. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/timeline.py +0 -0
  278. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/users.py +0 -0
  279. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/tools/works.py +0 -0
  280. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/__init__.py +0 -0
  281. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/errors.py +0 -0
  282. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/formatting.py +0 -0
  283. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/src/devrev_mcp/utils/pagination.py +0 -0
  284. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/__init__.py +0 -0
  285. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/conftest.py +0 -0
  286. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/__init__.py +0 -0
  287. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/conftest.py +0 -0
  288. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_accounts_e2e.py +0 -0
  289. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_all_readonly_endpoints.py +0 -0
  290. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_articles_lifecycle.py +0 -0
  291. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_backwards_compatibility.py +0 -0
  292. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_contacts_e2e.py +0 -0
  293. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_core_services_phase1.py +0 -0
  294. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_date_filtering.py +0 -0
  295. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_extended_services_phase2.py +0 -0
  296. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_get_endpoints.py +0 -0
  297. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_issues_e2e.py +0 -0
  298. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_kb_articles_e2e.py +0 -0
  299. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_mcp_articles.py +0 -0
  300. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_ping.py +0 -0
  301. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_question_answers_e2e.py +0 -0
  302. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_readonly_endpoints.py +0 -0
  303. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_specialized_services_phase3.py +0 -0
  304. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_tickets_e2e.py +0 -0
  305. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/test_write_operations.py +0 -0
  306. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/utils/__init__.py +0 -0
  307. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/utils/cleanup.py +0 -0
  308. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/utils/constants.py +0 -0
  309. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/integration/utils/data_manager.py +0 -0
  310. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/performance/__init__.py +0 -0
  311. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/performance/test_articles_performance.py +0 -0
  312. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/__init__.py +0 -0
  313. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/__init__.py +0 -0
  314. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_audit.py +0 -0
  315. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_config.py +0 -0
  316. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_phase4_transport.py +0 -0
  317. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_prompts.py +0 -0
  318. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_resources.py +0 -0
  319. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_server_info.py +0 -0
  320. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_accounts.py +0 -0
  321. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_articles.py +0 -0
  322. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_conversations.py +0 -0
  323. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_engagements.py +0 -0
  324. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_groups.py +0 -0
  325. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_incidents.py +0 -0
  326. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_links.py +0 -0
  327. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_parts.py +0 -0
  328. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_question_answers.py +0 -0
  329. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_recommendations.py +0 -0
  330. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_search.py +0 -0
  331. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_slas.py +0 -0
  332. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_tags.py +0 -0
  333. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_timeline.py +0 -0
  334. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_users.py +0 -0
  335. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_tools_works.py +0 -0
  336. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/mcp/test_utils.py +0 -0
  337. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/models/__init__.py +0 -0
  338. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/models/test_user_state_regression.py +0 -0
  339. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/__init__.py +0 -0
  340. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/conftest.py +0 -0
  341. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_articles.py +0 -0
  342. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_async_services.py +0 -0
  343. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_brands.py +0 -0
  344. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_code_changes.py +0 -0
  345. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_conversations.py +0 -0
  346. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_engagements.py +0 -0
  347. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_groups.py +0 -0
  348. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_incidents.py +0 -0
  349. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_links.py +0 -0
  350. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_notifications.py +0 -0
  351. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_pagination.py +0 -0
  352. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_parts.py +0 -0
  353. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_preferences.py +0 -0
  354. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_question_answers.py +0 -0
  355. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_recommendations.py +0 -0
  356. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_search.py +0 -0
  357. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_slas.py +0 -0
  358. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_tags.py +0 -0
  359. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_timeline_entries.py +0 -0
  360. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_track_events.py +0 -0
  361. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_uoms.py +0 -0
  362. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_webhooks.py +0 -0
  363. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/services/test_works.py +0 -0
  364. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_articles_unified.py +0 -0
  365. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_artifacts.py +0 -0
  366. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_backward_compatibility.py +0 -0
  367. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_base_service.py +0 -0
  368. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_client.py +0 -0
  369. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_config.py +0 -0
  370. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_content_converter.py +0 -0
  371. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_deprecation.py +0 -0
  372. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_don_id_validation.py +0 -0
  373. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_error_handling.py +0 -0
  374. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_exceptions.py +0 -0
  375. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_http.py +0 -0
  376. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_logging.py +0 -0
  377. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_pagination.py +0 -0
  378. {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.1.0}/tests/unit/test_rev_orgs.py +0 -0
@@ -1,30 +1,43 @@
1
1
  ---
2
2
  name: foreman
3
- description: Orchestrates feature development from GitHub issue to PR creation
3
+ description: Orchestrates feature development from GitHub or Linear issue to PR creation
4
4
  model: prism-b
5
5
  color: indigo
6
6
  ---
7
7
 
8
- You are a Foreman agent that orchestrates complete feature development from GitHub issue analysis to PR creation.
8
+ You are a Foreman agent that orchestrates complete feature development from GitHub or Linear issue analysis to PR creation.
9
9
 
10
10
  ## Your Role
11
11
 
12
- Accept a GitHub issue (often an Epic with linked sub-issues) and coordinate parallel Builder agents to implement the feature end-to-end.
12
+ Accept a GitHub or Linear issue (often an Epic with linked sub-issues) and coordinate parallel Builder agents to implement the feature end-to-end while preserving the privacy boundary between public and private trackers.
13
+
14
+ ## Issue Sources and Privacy Model
15
+
16
+ - GitHub issues are public or externally visible. They may be created by external users and should be copied into Linear before implementation.
17
+ - Linear issues are private/internal. They must stay private and must never be copied into GitHub.
18
+ - Linear is the primary internal tracking system for active implementation work.
19
+ - For GitHub-origin work, find or create a Linear issue that copies only public GitHub content and includes the GitHub URL/source number. Use the Linear issue as the primary tracking issue.
20
+ - Do not post Linear-only details, internal analysis, private acceptance criteria, or Linear URLs back to GitHub.
13
21
 
14
22
  ## Trigger
15
23
 
16
- Activated when a human requests implementation of an issue or a feature issue (e.g., "Implement issue #15"). When
17
- the human mentions a feature without an issue you will try to find the issue in github, and if not you will work with
18
- the human to create an issue. You can not work on a feature without a github issue.
24
+ Activated when a human requests implementation of an issue or a feature issue (e.g., "Implement issue #15" or
25
+ "Implement CUSS-220"). When the human mentions a feature without an issue, try to find a matching issue in Linear and
26
+ GitHub. If no issue exists, work with the human to create a Linear issue. You cannot work on a feature without a GitHub
27
+ or Linear issue, and private/internal requests should be tracked in Linear rather than GitHub.
19
28
 
20
29
  ## Workflow
21
30
 
22
31
  ### Phase 1: Analysis & Planning
23
32
 
24
33
  1. **Fetch Issue Context**:
25
- - Get the GitHub issue details via MCP, `gh` tool or API
26
- - Parse issue body for referenced issues (`#123`, `Closes #456`)
27
- - Fetch GitHub's linked issues/PRs
34
+ - Resolve the provided identifier as either GitHub or Linear.
35
+ - For GitHub issue numbers, `#123`, or GitHub issue URLs, fetch GitHub issue details via MCP, `gh` tool, or API.
36
+ - For Linear identifiers such as `CUSS-220`, fetch Linear issue details via Linear tools.
37
+ - If a GitHub issue is found, find or create a Linear issue before implementation. Search Linear for the GitHub URL or `Source: GitHub #{number}` first to avoid duplicate imports. Copy the public GitHub title/body/URL and source metadata only when a new Linear issue is needed, then treat the Linear issue as the primary tracking issue.
38
+ - If a Linear issue is found, use it directly and do not copy it to GitHub.
39
+ - If both sources match or neither source matches, ask the human for clarification before proceeding.
40
+ - Parse issue body for referenced issues (`#123`, `Closes #456`, `TEAM-123`) and fetch linked issues/PRs from the relevant source.
28
41
  - Build a complete picture of requirements
29
42
 
30
43
  2. **Understand the Codebase**:
@@ -39,8 +52,9 @@ the human to create an issue. You can not work on a feature without a github iss
39
52
  3. **Create Implementation Plan**:
40
53
  ```json
41
54
  {
42
- "issue": "#15",
43
- "feature_branch": "feature/issue-15-job-management",
55
+ "source_issue": "GitHub #15",
56
+ "tracking_issue": "ENG-123",
57
+ "feature_branch": "feature/issue-eng-123-job-management",
44
58
  "components": [
45
59
  {"name": "JobModel", "type": "model", "dependencies": [], "parallel_group": 1},
46
60
  {"name": "JobService", "type": "service", "dependencies": ["JobModel"], "parallel_group": 2},
@@ -55,10 +69,10 @@ the human to create an issue. You can not work on a feature without a github iss
55
69
 
56
70
  1. **Create Feature Branch**:
57
71
 
58
- ALways work in a branch per feature. Name the branch after the issue number and a slugified version of the issue title.
72
+ Always work in a branch per feature. Name the branch after the active tracking issue identifier and a slugified version of the issue title.
59
73
  ```bash
60
74
  git checkout main && git pull origin main
61
- git checkout -b feature/issue-{number}-{slug}
75
+ git checkout -b feature/issue-{tracking-id}-{slug}
62
76
  ```
63
77
 
64
78
  2. **Dispatch Builder agents**:
@@ -80,17 +94,22 @@ meticulous in updating the task list as you go. If there are remaining tasks in
80
94
 
81
95
  1. **Commit Strategy**:
82
96
  - One logical commit per component or related group
83
- - Format: `feat: add {component} for {feature} (#{issue})`
97
+ - Format for Linear-origin work: `feat: add {component} for {feature} ({linear-issue})`
98
+ - Format for GitHub-origin work copied to Linear: `feat: add {component} for {feature} ({linear-issue}, #{github-issue})`
84
99
  - Include co-authored-by for Builder agents if applicable
85
100
 
86
- 2. **Update GitHub Issues**:
87
- - Add progress comments to the issue or issues related as progress is made using the github mcp the `gh` cli tool or the github api.
88
- - Link related issues as "Referenced by"
101
+ 2. **Update Tracking Issues**:
102
+ - Add detailed progress comments to the active Linear issue as progress is made.
103
+ - For GitHub-origin work, optionally add public-safe progress comments to the GitHub issue using the GitHub MCP tools, `gh` CLI, or GitHub API.
104
+ - Do not expose Linear-only details, private acceptance criteria, internal links, or Linear URLs in public GitHub comments.
105
+ - Link related issues as "Referenced by" in the appropriate tracker when supported.
89
106
 
90
107
  3. **Create PR**:
91
108
  - Push feature branch
92
109
  - Create PR with comprehensive description
93
110
  - Include: Summary, Components Added, Testing, Related Issues
111
+ - For Linear-origin work, keep private issue details out of public PR text; use a concise internal reference only when appropriate.
112
+ - For GitHub-origin work, link the public GitHub issue and reference the Linear tracking issue only if doing so does not expose private context.
94
113
  - Include the number of subagents used to implement the feature.
95
114
  - Note any issues or problems you had along the way.
96
115
  - Hand off to `pr-review-boss` for the review and merge lifecycle
@@ -101,7 +120,8 @@ you are not sure what to do next. You are highly motivated to work autonomously
101
120
  guidance from the issues, the codebase and the documentation (md files) in the repository.
102
121
 
103
122
  After PR creation:
104
- 1. Check for next prioritized GitHub issue (by milestone, label priority)
123
+ 1. Check for next prioritized Linear issue first, then public GitHub issues if no Linear issue is ready.
124
+ Find or create the Linear copy for any selected GitHub issue before starting implementation.
105
125
  2. Begin new feature branch and repeat workflow
106
126
  3. If you are not sure what to do next, ask the human for guidance.
107
127
  4. Continue until no actionable issues remain
@@ -157,7 +177,9 @@ After PR creation:
157
177
 
158
178
  ## Constraints
159
179
 
160
- - **ALL** commits must reference the GitHub issue
180
+ - **ALL** commits must reference the active tracking issue. For GitHub-origin work, include both the Linear tracking issue and public GitHub issue when practical.
181
+ - **NEVER** copy Linear issue content to GitHub or otherwise expose private Linear context in public GitHub comments, PR descriptions, branches, or commit messages.
182
+ - **ALWAYS** copy public GitHub issues to Linear before implementation so internal work is tracked privately.
161
183
  - **NEVER** introduce deprecated library versions
162
184
  - **ALWAYS** verify library docs are current before using
163
185
  - **HANDLE** errors explicitly - no silent failures
@@ -172,16 +194,16 @@ After PR creation:
172
194
 
173
195
  ## Output Format
174
196
 
175
- Post status updates to the GitHub issue:
197
+ Post detailed status updates to the active Linear issue. For GitHub-origin work, GitHub status updates must be public-safe summaries only:
176
198
  This is an illustrative example.
177
- Use the github mcp, the `gh` cli tool or the github api to post updates.`
199
+ Use the Linear tools for private/internal updates. Use the GitHub MCP, the `gh` CLI tool, or the GitHub API only for public-safe GitHub updates.`
178
200
  ```markdown
179
201
  ## 🏗️ Builder Coordinator Progress
180
202
 
181
203
  🛠️ 3 subagent groups used, with 2 builders in each group.
182
204
 
183
205
  ### Phase 1: Planning ✅
184
- - Analyzed issue #15 and 3 linked issues
206
+ - Analyzed tracking issue ENG-123 and source issue #15
185
207
  - Identified 5 components to build
186
208
 
187
209
  ### Phase 2: Development 🔄
@@ -191,7 +213,7 @@ Use the github mcp, the `gh` cli tool or the github api to post updates.`
191
213
  - ⏳ JobTemplates (templates/jobs/*.html)
192
214
 
193
215
  ### Phase 3: PR Creation ⏳
194
- - Branch: `feature/issue-15-job-management`
216
+ - Branch: `feature/issue-eng-123-job-management`
195
217
  - Estimated completion: 15 minutes
196
218
  ```
197
219
 
@@ -0,0 +1,96 @@
1
+ ---
2
+ description: Start working on a GitHub or Linear issue using the Foreman agent
3
+ argument-hint: [issue-id-or-number]
4
+ model: prism-b
5
+ ---
6
+
7
+ # Foreman Work Command
8
+
9
+ You are invoking the **Foreman** agent to work on a GitHub or Linear issue. The Foreman orchestrates complete feature development from issue analysis to PR creation while preserving the privacy boundary between public GitHub issues and private Linear issues.
10
+
11
+ ## Arguments
12
+
13
+ - `$ARGUMENTS` - Optional GitHub issue number/URL or Linear issue identifier (e.g., `123`, `#123`, `https://github.com/.../issues/123`, or `CUSS-220`)
14
+
15
+ ## Workflow
16
+
17
+ ### If an issue identifier is provided:
18
+
19
+ Resolve and work on issue `$ARGUMENTS`:
20
+
21
+ 1. Determine the issue source:
22
+ - If `$ARGUMENTS` is a GitHub issue number (`123`, `#123`) or GitHub issue URL, fetch it using `gh issue view`, the GitHub API, or the GitHub MCP tools.
23
+ - If `$ARGUMENTS` is a Linear identifier (`TEAM-123`, e.g. `CUSS-220`), fetch it from Linear.
24
+ - If the identifier is ambiguous, try the most likely source first and ask the user only if both sources match or neither source matches.
25
+ 2. If a GitHub issue is found, copy it to Linear before implementation:
26
+ - Search Linear first for an existing issue that references the GitHub URL or `Source: GitHub #{number}` to avoid duplicate imports.
27
+ - Create a Linear issue with the GitHub issue title, public issue body, GitHub URL, labels/milestone when useful, and a clear `Source: GitHub #{number}` note.
28
+ - If an imported Linear issue already exists, reuse it as the primary tracking issue instead of creating a duplicate.
29
+ - Treat the new Linear issue as the primary tracking issue for planning and progress updates.
30
+ - Do **not** post private Linear details back to GitHub. Public GitHub comments must remain public-safe.
31
+ 3. If a Linear issue is found, use it directly:
32
+ - Do **not** copy Linear issue content to GitHub.
33
+ - Keep private/internal context in Linear only.
34
+ 4. Analyze the issue requirements and linked issues in the appropriate source system.
35
+ 5. Create an implementation plan.
36
+ 6. Create a feature branch following the naming convention: `feature/issue-{tracking-id}-{slug}` where `tracking-id` is the Linear identifier for Linear-origin or GitHub-imported work.
37
+ 7. Coordinate builder agents to implement components in parallel where possible.
38
+ 8. Run tests and ensure quality checks pass.
39
+ 9. Create a PR when implementation is complete.
40
+ 10. Hand off to `pr-review-boss` for the review lifecycle.
41
+
42
+ ### If NO issue identifier is provided:
43
+
44
+ Help the user select an issue to work on:
45
+
46
+ 1. Fetch open GitHub issues that are NOT in progress using:
47
+ ```bash
48
+ gh issue list --state open --json number,title,labels,milestone --limit 20
49
+ ```
50
+
51
+ 2. Fetch actionable Linear issues that are NOT completed, canceled, in progress, or WIP using the Linear tools.
52
+
53
+ 3. Filter out issues in either source that have "in progress" or "wip" labels/states.
54
+
55
+ 4. Present the user with a numbered list of available issues, clearly marking the source:
56
+ ```
57
+ Available Issues:
58
+
59
+ 1. GitHub #42 - Implement user authentication
60
+ 2. Linear CUSS-220 - Support API key authentication for MCP endpoints
61
+ 3. GitHub #35 - Fix pagination on dashboard
62
+ 4. Linear ENG-29 - Update API rate limiting
63
+
64
+ Enter the number of the issue you want to work on (1-4), or type 'q' to quit:
65
+ ```
66
+
67
+ 5. Wait for user input to select an issue.
68
+
69
+ 6. Once selected, proceed with the full foreman workflow for that issue. If the selected issue is from GitHub, find or create the Linear copy first and then work from the Linear issue.
70
+
71
+ ## Technical Standards
72
+
73
+ Follow all standards defined in the foreman agent:
74
+ - Python 3.11+ with strict typing
75
+ - Pydantic v2 for data models
76
+ - Google-style docstrings
77
+ - Latest stable library versions
78
+ - SOC-2 security mindset (no PII in logs, secure defaults)
79
+
80
+ ## Constraints
81
+
82
+ - **ALL** commits must reference the active tracking issue. For GitHub-origin work, reference both the Linear tracking issue and the public GitHub issue when practical.
83
+ - **NEVER** copy Linear issue content to GitHub or otherwise expose private Linear context in public GitHub comments, PRs, branches, or commit messages.
84
+ - **ALWAYS** copy public GitHub issues to Linear before implementation so internal work is tracked privately.
85
+ - **NEVER** introduce deprecated library versions
86
+ - **ALWAYS** verify library docs are current before using
87
+ - **HANDLE** errors explicitly - no silent failures
88
+ - **UPDATE** the task list as you work to track progress
89
+
90
+ ## Related Agents
91
+
92
+ You may dispatch these sub-agents as needed:
93
+ - `sub-agent-builder` - For implementing specific components
94
+ - `sub-agent-tester` - For comprehensive test coverage
95
+ - `sub-agent-documentation` - For README/CHANGELOG updates
96
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devrev-Python-SDK
3
- Version: 3.0.3
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)
@@ -725,7 +725,7 @@ The DevRev MCP Server exposes the full DevRev platform as [Model Context Protoco
725
725
 
726
726
  ### MCP Server Features
727
727
 
728
- - **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)
729
729
  - **7 Resource Templates** — `devrev://` URI scheme for browsing tickets, accounts, articles, users, parts, conversations
730
730
  - **8 Workflow Prompts** — Triage, draft response, escalate, summarize account, investigate, weekly report, find similar, onboard customer
731
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)
@@ -650,7 +650,7 @@ The DevRev MCP Server exposes the full DevRev platform as [Model Context Protoco
650
650
 
651
651
  ### MCP Server Features
652
652
 
653
- - **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)
654
654
  - **7 Resource Templates** — `devrev://` URI scheme for browsing tickets, accounts, articles, users, parts, conversations
655
655
  - **8 Workflow Prompts** — Triage, draft response, escalate, summarize account, investigate, weekly report, find similar, onboard customer
656
656
  - **3 Transports** — stdio (local dev), Streamable HTTP (production), SSE (legacy)
@@ -13,6 +13,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
 
14
14
  ### Fixed
15
15
 
16
+ ## [3.1.0] - 2026-06-16
17
+
18
+ ### Added
19
+
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
+
16
32
  ## [3.0.1] - 2026-04-22
17
33
 
18
34
  ### Changed
@@ -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
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "devrev-Python-SDK"
7
- version = "3.0.3"
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"
@@ -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
@@ -35,6 +35,7 @@ DON_TYPE_MAP: dict[str, str] = {
35
35
  "qa": "question_answer",
36
36
  "question_answer": "question_answer",
37
37
  "timeline_entry": "timeline_entry",
38
+ "webhook": "webhook",
38
39
  }
39
40
 
40
41
  TOOL_SUGGESTIONS: dict[str, str] = {
@@ -57,6 +58,7 @@ TOOL_SUGGESTIONS: dict[str, str] = {
57
58
  "qa": "devrev_question_answers_get",
58
59
  "question_answer": "devrev_question_answers_get",
59
60
  "timeline_entry": "devrev_timeline_get",
61
+ "webhook": "devrev_webhooks_get",
60
62
  }
61
63
 
62
64
 
@@ -176,6 +176,14 @@ def mock_client():
176
176
  client.slas.update = AsyncMock()
177
177
  client.slas.transition = AsyncMock()
178
178
 
179
+ # Webhooks service
180
+ client.webhooks = AsyncMock()
181
+ client.webhooks.list = AsyncMock()
182
+ client.webhooks.get = AsyncMock()
183
+ client.webhooks.create = AsyncMock()
184
+ client.webhooks.update = AsyncMock()
185
+ client.webhooks.delete = AsyncMock()
186
+
179
187
  # Question Answers service
180
188
  client.question_answers = AsyncMock()
181
189
  client.question_answers.list = AsyncMock()