devrev-Python-SDK 3.0.3__tar.gz → 3.0.4__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.
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/foreman.md +45 -23
- devrev_python_sdk-3.0.4/.augment/commands/foreman-work.md +96 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/PKG-INFO +13 -1
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/README.md +12 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/index.md +2 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/models/index.md +1 -0
- devrev_python_sdk-3.0.4/docs/api/models/survey-responses.md +47 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/models/works.md +3 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/index.md +1 -0
- devrev_python_sdk-3.0.4/docs/api/services/survey-responses.md +83 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/works.md +29 -2
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/changelog.md +16 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/mkdocs.yml +2 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/pyproject.toml +1 -1
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/client.py +16 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/__init__.py +11 -0
- devrev_python_sdk-3.0.4/src/devrev/models/survey_responses.py +77 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/works.py +42 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/__init__.py +4 -0
- devrev_python_sdk-3.0.4/src/devrev/services/survey_responses.py +122 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/works.py +20 -0
- devrev_python_sdk-3.0.4/tests/unit/services/test_survey_responses.py +129 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_works.py +112 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_client.py +13 -0
- devrev_python_sdk-3.0.3/.augment/commands/foreman-work.md +0 -80
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/bug-fixer.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/builder.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/documentation.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/pr-review-boss.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/release-manager.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/simplifier.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/agents/tester.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/commands/release-prepare.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/commands/review-start.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/commands/simplify-code.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/code-quality.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/data-modeling.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/devrev-sdk.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/git-workflow.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/pull-requests.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/python-development.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/security.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.augment/rules/testing.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.dockerignore +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.env.sample +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/ISSUE_TEMPLATE/article-artifact-simplification.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/dependabot.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/pull_request_template.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/api-check.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/ci.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/claude-code-review.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/claude.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/deploy.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/docs.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/integration-tests.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/release.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.github/workflows/sync-openapi.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.gitignore +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/.pre-commit-config.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/CLAUDE.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/CODE_OF_CONDUCT.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/CONTRIBUTING.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/DEPRECATIONS.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/Dockerfile +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/KNOWN_ISSUES.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/OPENAPI_SPEC_DISCREPANCIES.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/SECURITY.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/augment-mcp-config-remote.json +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/augment-mcp-config.json +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/augment-settings.json +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/benchmarks/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/benchmarks/bench_http_client.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/benchmarks/bench_models.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/benchmarks/bench_pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/benchmarks/conftest.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/context7.json +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/audit-logging-setup.sh +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/cloudbuild.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/monitoring/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/monitoring/alert-policies.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/monitoring/dashboard.json +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/monitoring/validate-config.sh +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/deploy/service.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docker-compose.yml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/brands.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/engagements.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/incidents.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/index.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/question-answers.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/recommendations.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/search.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta/uoms.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/beta-api-differences.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/client.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/config.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/exceptions.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/models/accounts.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/models/base.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/models/users.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/accounts.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/articles.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/code-changes.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/conversations.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/dev-users.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/groups.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/links.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/parts.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/rev-users.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/slas.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/tags.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/timeline-entries.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/api/services/webhooks.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/examples/advanced.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/examples/basic.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/examples/beta-features.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/examples/index.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/examples/integrations.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/getting-started/authentication.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/getting-started/index.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/getting-started/installation.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/getting-started/quickstart.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/beta-api.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/compatibility.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/configuration.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/error-handling.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/github-actions-setup.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/index.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/logging.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/pagination.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/sync-vs-async.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/testing.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/version-support.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/guides/write-integration-testing-strategy.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/hooks/copy_llms.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/index.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/mcp/deployment.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/mcp/index.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/mcp/quickstart.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/mcp/tools-reference.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/docs/stylesheets/extra.css +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/async_example.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/create_work.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/error_handling.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/list_accounts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/basic/search_users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/cloud_functions/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/cloud_functions/main.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/cloud_functions/requirements.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/fastapi/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/fastapi/main.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/fastapi/requirements.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/flask/README.md +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/flask/app.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/examples/integrations/flask/requirements.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/llms-ctx-full.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/llms-ctx.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/llms-mcp.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/llms.txt +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/openapi-beta.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/openapi-public.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/openapi-spec-corrections.yaml +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/scripts/build_ai_docs.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/scripts/debug_articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/scripts/setup-github-secrets.sh +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/config.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/exceptions.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/accounts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/artifacts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/base.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/brands.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/code_changes.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/conversations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/dev_users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/engagements.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/groups.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/incidents.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/links.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/notifications.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/parts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/preferences.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/question_answers.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/recommendations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/rev_orgs.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/rev_users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/search.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/slas.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/sync.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/tags.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/tasks.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/timeline_entries.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/timeline_events.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/track_events.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/uoms.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/webhooks.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/models/widgets.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/py.typed +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/_pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/accounts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/artifacts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/base.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/brands.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/code_changes.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/conversations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/dev_users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/engagements.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/groups.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/incidents.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/links.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/notifications.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/parts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/preferences.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/question_answers.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/recommendations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/rev_orgs.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/rev_users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/search.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/slas.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/tags.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/timeline_entries.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/track_events.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/uoms.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/services/webhooks.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/utils/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/utils/content_converter.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/utils/deprecation.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/utils/http.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/utils/logging.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev/utils/pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/__main__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/config.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/middleware/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/middleware/audit.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/middleware/auth.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/middleware/health.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/middleware/rate_limit.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/prompts/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/prompts/escalation.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/prompts/investigate.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/prompts/response.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/prompts/summarize.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/prompts/triage.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/account.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/article.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/conversation.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/part.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/server_info.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/ticket.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/resources/user.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/server.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/accounts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/conversations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/engagements.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/groups.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/incidents.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/links.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/parts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/question_answers.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/recommendations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/rev_orgs.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/search.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/server_info.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/slas.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/tags.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/timeline.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/tools/works.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/utils/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/utils/don_id.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/utils/errors.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/utils/formatting.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/src/devrev_mcp/utils/pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/conftest.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/conftest.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_accounts_e2e.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_all_readonly_endpoints.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_articles_lifecycle.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_backwards_compatibility.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_contacts_e2e.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_core_services_phase1.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_date_filtering.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_extended_services_phase2.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_get_endpoints.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_issues_e2e.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_kb_articles_e2e.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_mcp_articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_ping.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_question_answers_e2e.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_readonly_endpoints.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_specialized_services_phase3.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_tickets_e2e.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/test_write_operations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/utils/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/utils/cleanup.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/utils/constants.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/integration/utils/data_manager.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/performance/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/performance/test_articles_performance.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/conftest.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_audit.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_config.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_phase4_transport.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_prompts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_resources.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_server_info.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_accounts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_conversations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_engagements.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_groups.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_incidents.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_links.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_parts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_question_answers.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_recommendations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_search.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_slas.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_tags.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_timeline.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_users.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_tools_works.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/mcp/test_utils.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/models/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/models/test_user_state_regression.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/__init__.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/conftest.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_articles.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_async_services.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_brands.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_code_changes.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_conversations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_engagements.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_groups.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_incidents.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_links.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_notifications.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_parts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_preferences.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_question_answers.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_recommendations.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_search.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_slas.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_tags.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_timeline_entries.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_track_events.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_uoms.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/services/test_webhooks.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_articles_unified.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_artifacts.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_backward_compatibility.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_base_service.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_config.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_content_converter.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_deprecation.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_don_id_validation.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_error_handling.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_exceptions.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_http.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_logging.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_pagination.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/tests/unit/test_rev_orgs.py +0 -0
- {devrev_python_sdk-3.0.3 → devrev_python_sdk-3.0.4}/uv.lock +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"
|
|
17
|
-
the human mentions a feature without an issue
|
|
18
|
-
the human to create
|
|
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
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
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
|
-
"
|
|
43
|
-
"
|
|
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
|
-
|
|
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-{
|
|
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} (
|
|
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
|
|
87
|
-
- Add progress comments to the
|
|
88
|
-
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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
|
+
Version: 3.0.4
|
|
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
|
|
@@ -215,6 +215,17 @@ 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
|
+
|
|
218
229
|
# Create a new ticket
|
|
219
230
|
ticket = client.works.create(
|
|
220
231
|
title="Bug: Login page not loading",
|
|
@@ -297,6 +308,7 @@ The SDK provides complete coverage of all 209 DevRev public API endpoints, organ
|
|
|
297
308
|
|---------|-----------|-------------|
|
|
298
309
|
| **Articles** | 5 | Knowledge base articles |
|
|
299
310
|
| **Conversations** | 5 | Customer conversations |
|
|
311
|
+
| **Survey Responses** | 1 | Survey and CSAT response listing |
|
|
300
312
|
| **Timeline Entries** | 5 | Activity timeline management |
|
|
301
313
|
| **Tags** | 5 | Tagging and categorization |
|
|
302
314
|
|
|
@@ -140,6 +140,17 @@ 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
|
+
|
|
143
154
|
# Create a new ticket
|
|
144
155
|
ticket = client.works.create(
|
|
145
156
|
title="Bug: Login page not loading",
|
|
@@ -222,6 +233,7 @@ The SDK provides complete coverage of all 209 DevRev public API endpoints, organ
|
|
|
222
233
|
|---------|-----------|-------------|
|
|
223
234
|
| **Articles** | 5 | Knowledge base articles |
|
|
224
235
|
| **Conversations** | 5 | Customer conversations |
|
|
236
|
+
| **Survey Responses** | 1 | Survey and CSAT response listing |
|
|
225
237
|
| **Timeline Entries** | 5 | Activity timeline management |
|
|
226
238
|
| **Tags** | 5 | Tagging and categorization |
|
|
227
239
|
|
|
@@ -44,6 +44,7 @@ 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 |
|
|
47
48
|
| [Tags](services/tags.md) | Categorization | 5 |
|
|
48
49
|
| [Groups](services/groups.md) | User groups | 6 |
|
|
49
50
|
| [Webhooks](services/webhooks.md) | Event notifications | 6 |
|
|
@@ -77,6 +78,7 @@ Request and response models:
|
|
|
77
78
|
|--------|-------------|
|
|
78
79
|
| [Base](models/base.md) | Common base classes |
|
|
79
80
|
| [Accounts](models/accounts.md) | Account models |
|
|
81
|
+
| [Survey Responses](models/survey-responses.md) | Survey response models |
|
|
80
82
|
| [Works](models/works.md) | Work item models |
|
|
81
83
|
| [Users](models/users.md) | User models |
|
|
82
84
|
|
|
@@ -30,6 +30,7 @@ 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 |
|
|
33
34
|
| [Works](works.md) | Work item models (tickets, issues) |
|
|
34
35
|
| [Users](users.md) | User models (dev and rev users) |
|
|
35
36
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Survey Response Models
|
|
2
|
+
|
|
3
|
+
Models for survey and CSAT response operations.
|
|
4
|
+
|
|
5
|
+
## SurveyResponse
|
|
6
|
+
|
|
7
|
+
The main survey response model.
|
|
8
|
+
|
|
9
|
+
::: devrev.models.survey_responses.SurveyResponse
|
|
10
|
+
options:
|
|
11
|
+
show_source: true
|
|
12
|
+
|
|
13
|
+
## Enums
|
|
14
|
+
|
|
15
|
+
### SurveyResponsesListMode
|
|
16
|
+
|
|
17
|
+
::: devrev.models.survey_responses.SurveyResponsesListMode
|
|
18
|
+
options:
|
|
19
|
+
show_source: true
|
|
20
|
+
|
|
21
|
+
## Request Models
|
|
22
|
+
|
|
23
|
+
### SurveyResponsesListRequest
|
|
24
|
+
|
|
25
|
+
::: devrev.models.survey_responses.SurveyResponsesListRequest
|
|
26
|
+
options:
|
|
27
|
+
show_source: true
|
|
28
|
+
|
|
29
|
+
## Response Models
|
|
30
|
+
|
|
31
|
+
### SurveyResponsesListResponse
|
|
32
|
+
|
|
33
|
+
::: devrev.models.survey_responses.SurveyResponsesListResponse
|
|
34
|
+
options:
|
|
35
|
+
show_source: true
|
|
36
|
+
|
|
37
|
+
## Usage Examples
|
|
38
|
+
|
|
39
|
+
### Work with survey responses
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
responses = client.survey_responses.list(object_id="don:core:...", limit=10)
|
|
43
|
+
|
|
44
|
+
for survey_response in responses.survey_responses:
|
|
45
|
+
print(survey_response.id)
|
|
46
|
+
print(survey_response.response)
|
|
47
|
+
```
|
|
@@ -111,6 +111,9 @@ 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}")
|
|
114
117
|
elif work.type == WorkType.ISSUE:
|
|
115
118
|
print(f"Priority: {work.priority}")
|
|
116
119
|
```
|
|
@@ -36,6 +36,7 @@ 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) |
|
|
39
40
|
| **Tags** | Categorization | [tags](tags.md) |
|
|
40
41
|
| **Timeline Entries** | Activity tracking | [timeline-entries](timeline-entries.md) |
|
|
41
42
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Survey Responses Service
|
|
2
|
+
|
|
3
|
+
List survey and CSAT responses in DevRev.
|
|
4
|
+
|
|
5
|
+
Use this service when a ticket or work sync needs survey responses without
|
|
6
|
+
reaching through the private client transport.
|
|
7
|
+
|
|
8
|
+
## SurveyResponsesService
|
|
9
|
+
|
|
10
|
+
::: devrev.services.survey_responses.SurveyResponsesService
|
|
11
|
+
options:
|
|
12
|
+
show_source: true
|
|
13
|
+
members:
|
|
14
|
+
- list
|
|
15
|
+
|
|
16
|
+
## AsyncSurveyResponsesService
|
|
17
|
+
|
|
18
|
+
::: devrev.services.survey_responses.AsyncSurveyResponsesService
|
|
19
|
+
options:
|
|
20
|
+
show_source: true
|
|
21
|
+
members:
|
|
22
|
+
- list
|
|
23
|
+
|
|
24
|
+
## Usage Examples
|
|
25
|
+
|
|
26
|
+
### List responses for a ticket/work object
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
from devrev import DevRevClient
|
|
30
|
+
|
|
31
|
+
client = DevRevClient()
|
|
32
|
+
|
|
33
|
+
responses = client.survey_responses.list(
|
|
34
|
+
object_id="don:core:dvrv-us-1:devo/1:ticket/123",
|
|
35
|
+
limit=50,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
for survey_response in responses.survey_responses:
|
|
39
|
+
print(survey_response.id, survey_response.response)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Filter with multiple objects
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
responses = client.survey_responses.list(
|
|
46
|
+
objects=[
|
|
47
|
+
"don:core:dvrv-us-1:devo/1:ticket/123",
|
|
48
|
+
"don:core:dvrv-us-1:devo/1:ticket/456",
|
|
49
|
+
],
|
|
50
|
+
)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Async usage
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
import asyncio
|
|
57
|
+
|
|
58
|
+
from devrev import AsyncDevRevClient
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
async def main():
|
|
62
|
+
async with AsyncDevRevClient() as client:
|
|
63
|
+
responses = await client.survey_responses.list(
|
|
64
|
+
object_id="don:core:dvrv-us-1:devo/1:ticket/123",
|
|
65
|
+
)
|
|
66
|
+
print(len(responses.survey_responses))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
asyncio.run(main())
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Pagination
|
|
73
|
+
|
|
74
|
+
`survey_responses.list(...)` returns a paginated response with `next_cursor`.
|
|
75
|
+
When you need more than one page, pass the returned cursor into a follow-up
|
|
76
|
+
call and continue until `next_cursor` is `None`.
|
|
77
|
+
|
|
78
|
+
## Related Models
|
|
79
|
+
|
|
80
|
+
- [`SurveyResponse`](../models/survey-responses.md#surveyresponse)
|
|
81
|
+
- [`SurveyResponsesListRequest`](../models/survey-responses.md#surveyresponseslistrequest)
|
|
82
|
+
- [`SurveyResponsesListResponse`](../models/survey-responses.md#surveyresponseslistresponse)
|
|
83
|
+
- [`SurveyResponsesListMode`](../models/survey-responses.md#surveyresponseslistmode)
|
|
@@ -13,6 +13,7 @@ issues (engineering), and tasks.
|
|
|
13
13
|
members:
|
|
14
14
|
- list
|
|
15
15
|
- get
|
|
16
|
+
- get_raw
|
|
16
17
|
- create
|
|
17
18
|
- update
|
|
18
19
|
- delete
|
|
@@ -57,13 +58,39 @@ response = client.works.list(
|
|
|
57
58
|
### Get Work Item
|
|
58
59
|
|
|
59
60
|
```python
|
|
60
|
-
|
|
61
|
-
work = response.work
|
|
61
|
+
work = client.works.get(id="don:core:dvrv-us-1:devo/1:ticket/123")
|
|
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
|
+
|
|
67
94
|
### Create Ticket
|
|
68
95
|
|
|
69
96
|
```python
|
|
@@ -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.0.4] - 2026-05-03
|
|
17
|
+
|
|
18
|
+
### Added
|
|
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
|
|
31
|
+
|
|
16
32
|
## [3.0.1] - 2026-04-22
|
|
17
33
|
|
|
18
34
|
### Changed
|
|
@@ -169,6 +169,7 @@ 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
|
|
172
173
|
- Tags: api/services/tags.md
|
|
173
174
|
- Groups: api/services/groups.md
|
|
174
175
|
- Webhooks: api/services/webhooks.md
|
|
@@ -180,6 +181,7 @@ nav:
|
|
|
180
181
|
- api/models/index.md
|
|
181
182
|
- Base: api/models/base.md
|
|
182
183
|
- Accounts: api/models/accounts.md
|
|
184
|
+
- Survey Responses: api/models/survey-responses.md
|
|
183
185
|
- Works: api/models/works.md
|
|
184
186
|
- Users: api/models/users.md
|
|
185
187
|
- Examples:
|
|
@@ -42,6 +42,10 @@ 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
|
+
)
|
|
45
49
|
from devrev.services.tags import AsyncTagsService, TagsService
|
|
46
50
|
from devrev.services.timeline_entries import (
|
|
47
51
|
AsyncTimelineEntriesService,
|
|
@@ -164,6 +168,7 @@ class DevRevClient:
|
|
|
164
168
|
self._rev_orgs = RevOrgsService(self._http)
|
|
165
169
|
self._rev_users = RevUsersService(self._http)
|
|
166
170
|
self._slas = SlasService(self._http)
|
|
171
|
+
self._survey_responses = SurveyResponsesService(self._http)
|
|
167
172
|
self._tags = TagsService(self._http)
|
|
168
173
|
self._timeline_entries = TimelineEntriesService(self._http)
|
|
169
174
|
self._webhooks = WebhooksService(self._http)
|
|
@@ -259,6 +264,11 @@ class DevRevClient:
|
|
|
259
264
|
"""Access the SLAs service."""
|
|
260
265
|
return self._slas
|
|
261
266
|
|
|
267
|
+
@property
|
|
268
|
+
def survey_responses(self) -> SurveyResponsesService:
|
|
269
|
+
"""Access the Survey Responses service."""
|
|
270
|
+
return self._survey_responses
|
|
271
|
+
|
|
262
272
|
@property
|
|
263
273
|
def tags(self) -> TagsService:
|
|
264
274
|
"""Access the Tags service."""
|
|
@@ -492,6 +502,7 @@ class AsyncDevRevClient:
|
|
|
492
502
|
self._rev_orgs = AsyncRevOrgsService(self._http)
|
|
493
503
|
self._rev_users = AsyncRevUsersService(self._http)
|
|
494
504
|
self._slas = AsyncSlasService(self._http)
|
|
505
|
+
self._survey_responses = AsyncSurveyResponsesService(self._http)
|
|
495
506
|
self._tags = AsyncTagsService(self._http)
|
|
496
507
|
self._timeline_entries = AsyncTimelineEntriesService(self._http)
|
|
497
508
|
self._webhooks = AsyncWebhooksService(self._http)
|
|
@@ -587,6 +598,11 @@ class AsyncDevRevClient:
|
|
|
587
598
|
"""Access the SLAs service."""
|
|
588
599
|
return self._slas
|
|
589
600
|
|
|
601
|
+
@property
|
|
602
|
+
def survey_responses(self) -> AsyncSurveyResponsesService:
|
|
603
|
+
"""Access the Survey Responses service."""
|
|
604
|
+
return self._survey_responses
|
|
605
|
+
|
|
590
606
|
@property
|
|
591
607
|
def tags(self) -> AsyncTagsService:
|
|
592
608
|
"""Access the Tags service."""
|
|
@@ -328,6 +328,12 @@ 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
|
+
)
|
|
331
337
|
from devrev.models.sync import (
|
|
332
338
|
ExternalRef,
|
|
333
339
|
StagedInfo,
|
|
@@ -699,6 +705,11 @@ __all__ = [
|
|
|
699
705
|
"QuestionAnswersUpdateRequest",
|
|
700
706
|
"QuestionAnswersUpdateResponse",
|
|
701
707
|
"QuestionAnswersDeleteRequest",
|
|
708
|
+
# Survey Responses
|
|
709
|
+
"SurveyResponse",
|
|
710
|
+
"SurveyResponsesListMode",
|
|
711
|
+
"SurveyResponsesListRequest",
|
|
712
|
+
"SurveyResponsesListResponse",
|
|
702
713
|
# Recommendations
|
|
703
714
|
"MessageRole",
|
|
704
715
|
"ChatMessage",
|