airbyte-internal-ops 0.10.0__tar.gz → 0.10.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/PKG-INFO +1 -1
  2. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cloud_admin/api_client.py +70 -0
  3. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/connector_rollout.py +104 -1
  4. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/prod_db_queries.py +0 -87
  5. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/prod_db_access/queries.py +0 -61
  6. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/prod_db_access/sql.py +0 -91
  7. airbyte_internal_ops-0.10.1/tests/test_connector_rollout_monitoring.py +181 -0
  8. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.env.template +0 -0
  9. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/copilot-instructions.md +0 -0
  10. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/dependabot.yml +0 -0
  11. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/pr-welcome-message.md +0 -0
  12. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/autofix-command.yml +0 -0
  13. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/connector-regression-test.yml +0 -0
  14. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/format-check.yml +0 -0
  15. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/lint-check.yml +0 -0
  16. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/lock-command.yml +0 -0
  17. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/pdoc_preview.yml +0 -0
  18. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/pdoc_publish.yml +0 -0
  19. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/poe-command.yml +0 -0
  20. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/pr-welcome.yml +0 -0
  21. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/publish.yml +0 -0
  22. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/pytest-fast.yml +0 -0
  23. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/pytest-matrix.yml +0 -0
  24. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/regression-tests-ci.yml +0 -0
  25. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/release-drafter.yml +0 -0
  26. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/semantic-pr-check.yml +0 -0
  27. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/sentry-apply-command.yml +0 -0
  28. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/sentry-preview.yml +0 -0
  29. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/slash-command-dispatch.yml +0 -0
  30. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/tk-todo-check.yml +0 -0
  31. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.github/workflows/validate-build.yml +0 -0
  32. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.gitignore +0 -0
  33. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/.mcp.json.template +0 -0
  34. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/CONTRIBUTING.md +0 -0
  35. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/README.md +0 -0
  36. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/conftest.py +0 -0
  37. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/docs/.gitignore +0 -0
  38. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/docs/generate.py +0 -0
  39. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/docs/progressive-rollouts.md +0 -0
  40. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/docs/templates/custom.css +0 -0
  41. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/docs/templates/theme.css +0 -0
  42. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/.gitignore +0 -0
  43. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/CONTRIBUTING.md +0 -0
  44. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/Pulumi.prod.yaml +0 -0
  45. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/Pulumi.yaml +0 -0
  46. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/README.md +0 -0
  47. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/__main__.py +0 -0
  48. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/infra/sentry/requirements.txt +0 -0
  49. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/poe_tasks.toml +0 -0
  50. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/pyproject.toml +0 -0
  51. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/pyrefly.toml +0 -0
  52. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/pytest.ini +0 -0
  53. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/ruff.toml +0 -0
  54. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/__init__.py +0 -0
  55. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/__init__.py +0 -0
  56. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/README.md +0 -0
  57. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_erd_generator/README.md +0 -0
  58. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_erd_generator/__init__.py +0 -0
  59. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_erd_generator/dbml_assembler.py +0 -0
  60. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_erd_generator/erd_service.py +0 -0
  61. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_erd_generator/relationships.py +0 -0
  62. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/README.md +0 -0
  63. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/__init__.py +0 -0
  64. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/cli.py +0 -0
  65. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/hacks.py +0 -0
  66. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/insights.py +0 -0
  67. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/models.py +0 -0
  68. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/pylint.py +0 -0
  69. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/pylint_plugins/cdk_deprecation_checkers.py +0 -0
  70. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/result_backends.py +0 -0
  71. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_insights/utils.py +0 -0
  72. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_ops/README.md +0 -0
  73. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_ops/__init__.py +0 -0
  74. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_ops/utils.py +0 -0
  75. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/README.md +0 -0
  76. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/__init__.py +0 -0
  77. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/connector/hooks.py +0 -0
  78. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/connector/normalization.py +0 -0
  79. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/python/common.py +0 -0
  80. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/python/pipx.py +0 -0
  81. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/python/poetry.py +0 -0
  82. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/remote_storage.py +0 -0
  83. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/secrets.py +0 -0
  84. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/system/common.py +0 -0
  85. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/actions/system/docker.py +0 -0
  86. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/containers/git.py +0 -0
  87. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/containers/internal_tools.py +0 -0
  88. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/containers/java.py +0 -0
  89. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger/containers/python.py +0 -0
  90. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/__init__.py +0 -0
  91. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/cache_keys.py +0 -0
  92. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/cli.py +0 -0
  93. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/__init__.py +0 -0
  94. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/cdk_helpers.py +0 -0
  95. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/command.py +0 -0
  96. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/dagger_fs.py +0 -0
  97. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/format.py +0 -0
  98. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/modifed.py +0 -0
  99. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/connectors/yaml.py +0 -0
  100. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/execution/__init__.py +0 -0
  101. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/execution/argument_parsing.py +0 -0
  102. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/execution/run_steps.py +0 -0
  103. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/gcs.py +0 -0
  104. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/git.py +0 -0
  105. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/github.py +0 -0
  106. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/pip.py +0 -0
  107. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/sentry_utils.py +0 -0
  108. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/slack.py +0 -0
  109. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/DELETEME-dagger-helpers/utils.py +0 -0
  110. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/README.md +0 -0
  111. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/__init__.py +0 -0
  112. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/__init__.py +0 -0
  113. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/__init__.py +0 -0
  114. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/__init__.py +0 -0
  115. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/commands.py +0 -0
  116. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/pipeline.py +0 -0
  117. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/__init__.py +0 -0
  118. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/build_customization.py +0 -0
  119. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/common.py +0 -0
  120. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/java_connectors.py +0 -0
  121. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/manifest_only_connectors.py +0 -0
  122. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/normalization.py +0 -0
  123. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/build_image/steps/python_connectors.py +0 -0
  124. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/commands.py +0 -0
  125. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/consts.py +0 -0
  126. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/context.py +0 -0
  127. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/generate_erd/__init__.py +0 -0
  128. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/generate_erd/commands.py +0 -0
  129. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/generate_erd/pipeline.py +0 -0
  130. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/list/__init__.py +0 -0
  131. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/list/commands.py +0 -0
  132. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/migrate_to_inline_schemas/__init__.py +0 -0
  133. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/migrate_to_inline_schemas/commands.py +0 -0
  134. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/migrate_to_inline_schemas/pipeline.py +0 -0
  135. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/pipeline.py +0 -0
  136. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/pull_request/__init__.py +0 -0
  137. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/pull_request/commands.py +0 -0
  138. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/pull_request/pipeline.py +0 -0
  139. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/reports.py +0 -0
  140. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/__init__.py +0 -0
  141. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/commands.py +0 -0
  142. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/context.py +0 -0
  143. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/pipeline.py +0 -0
  144. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/steps/__init__.py +0 -0
  145. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/steps/common.py +0 -0
  146. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/steps/java_connectors.py +0 -0
  147. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/steps/manifest_only_connectors.py +0 -0
  148. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/steps/python_connectors.py +0 -0
  149. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/test/steps/templates/test_report.html.j2 +0 -0
  150. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/up_to_date/__init__.py +0 -0
  151. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/up_to_date/commands.py +0 -0
  152. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/up_to_date/pipeline.py +0 -0
  153. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/up_to_date/steps.py +0 -0
  154. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/up_to_date/templates/up_to_date_pr_body.md.j2 +0 -0
  155. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/upgrade_cdk/__init__.py +0 -0
  156. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/upgrade_cdk/commands.py +0 -0
  157. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/connectors/upgrade_cdk/pipeline.py +0 -0
  158. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/metadata/__init__.py +0 -0
  159. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/metadata/commands.py +0 -0
  160. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/metadata/pipeline.py +0 -0
  161. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/poetry/__init__.py +0 -0
  162. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/poetry/commands.py +0 -0
  163. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/__init__.py +0 -0
  164. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/base_image.py +0 -0
  165. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/docker.py +0 -0
  166. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/gradle.py +0 -0
  167. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/no_op.py +0 -0
  168. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/poetry.py +0 -0
  169. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/steps/pull_request.py +0 -0
  170. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/test/__init__.py +0 -0
  171. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/test/commands.py +0 -0
  172. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/test/models.py +0 -0
  173. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/test/pipeline.py +0 -0
  174. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/update/__init__.py +0 -0
  175. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/airbyte_ci/update/commands.py +0 -0
  176. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/airbyte_ci.py +0 -0
  177. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/auto_update.py +0 -0
  178. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/click_decorators.py +0 -0
  179. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/confirm_prompt.py +0 -0
  180. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/dagger_pipeline_command.py +0 -0
  181. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/dagger_run.py +0 -0
  182. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/ensure_repo_root.py +0 -0
  183. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/lazy_group.py +0 -0
  184. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/secrets.py +0 -0
  185. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/cli/telemetry.py +0 -0
  186. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/consts.py +0 -0
  187. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/hacks.py +0 -0
  188. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/__init__.py +0 -0
  189. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/artifacts.py +0 -0
  190. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/ci_requirements.py +0 -0
  191. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/contexts/__init__.py +0 -0
  192. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/contexts/click_pipeline_context.py +0 -0
  193. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/contexts/pipeline_context.py +0 -0
  194. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/reports.py +0 -0
  195. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/secrets.py +0 -0
  196. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/singleton.py +0 -0
  197. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/connector_pipelines/models/steps.py +0 -0
  198. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/README.md +0 -0
  199. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/commands.py +0 -0
  200. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/constants.py +0 -0
  201. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/docs/external_documentation_urls.md +0 -0
  202. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/gcs_upload.py +0 -0
  203. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/helpers/files.py +0 -0
  204. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/helpers/gcs.py +0 -0
  205. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/helpers/object_helpers.py +0 -0
  206. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/helpers/slack.py +0 -0
  207. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/.env.template +0 -0
  208. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/README.md +0 -0
  209. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/dagster_cloud.yaml +0 -0
  210. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/__init__.py +0 -0
  211. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/connector_metrics.py +0 -0
  212. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/github.py +0 -0
  213. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/metadata.py +0 -0
  214. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/registry.py +0 -0
  215. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/registry_entry.py +0 -0
  216. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/registry_report.py +0 -0
  217. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/slack.py +0 -0
  218. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py +0 -0
  219. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/config.py +0 -0
  220. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/fetcher/connector_cdk_version.py +0 -0
  221. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/hacks.py +0 -0
  222. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/jobs/registry.py +0 -0
  223. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/logging/publish_connector_lifecycle.py +0 -0
  224. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/logging/sentry.py +0 -0
  225. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/models/ci_report.py +0 -0
  226. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/models/metadata.py +0 -0
  227. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/ops/slack.py +0 -0
  228. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/resources/file_managers/local_file_manager.py +0 -0
  229. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/resources/gcp.py +0 -0
  230. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/resources/github.py +0 -0
  231. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/resources/local.py +0 -0
  232. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/sensors/gcs.py +0 -0
  233. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/sensors/github.py +0 -0
  234. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/sensors/registry.py +0 -0
  235. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/templates/base.html +0 -0
  236. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.html +0 -0
  237. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/templates/render.py +0 -0
  238. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/utils/blob_helpers.py +0 -0
  239. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/utils/dagster_helpers.py +0 -0
  240. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/orchestrator/utils/object_helpers.py +0 -0
  241. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/poetry.lock +0 -0
  242. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/__init__.py +0 -0
  243. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/conftest.py.disabled +0 -0
  244. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/fixtures/__init__.py +0 -0
  245. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/fixtures/cloud_registry.json +0 -0
  246. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/fixtures/oss_registry.json +0 -0
  247. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/test_connector_metrics.py +0 -0
  248. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/test_dagster_helpers.py +0 -0
  249. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/test_debug.py +0 -0
  250. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/test_partition_jobs.py +0 -0
  251. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/test_registry.py +0 -0
  252. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/orchestrator/tests/test_specs_secrets_mask.py +0 -0
  253. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/registry.py +0 -0
  254. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/registry_entry.py +0 -0
  255. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/registry_report.py +0 -0
  256. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/sentry.py +0 -0
  257. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/spec_cache.py +0 -0
  258. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/specs_secrets_mask.py +0 -0
  259. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/stale_metadata_report.py +0 -0
  260. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/templates/base.html +0 -0
  261. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/templates/connector_registry_locations.html +0 -0
  262. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_legacy/airbyte_ci/metadata_service/templates/render.py +0 -0
  263. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/_sentry.py +0 -0
  264. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/airbyte_repo/__init__.py +0 -0
  265. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/airbyte_repo/bump_version.py +0 -0
  266. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/airbyte_repo/changelog_fix.py +0 -0
  267. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/airbyte_repo/list_connectors.py +0 -0
  268. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/airbyte_repo/progressive_rollout.py +0 -0
  269. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/airbyte_repo/utils.py +0 -0
  270. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/__init__.py +0 -0
  271. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/_base.py +0 -0
  272. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/_shared.py +0 -0
  273. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/app.py +0 -0
  274. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/cloud.py +0 -0
  275. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/gh.py +0 -0
  276. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/local.py +0 -0
  277. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cli/registry.py +0 -0
  278. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cloud_admin/__init__.py +0 -0
  279. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cloud_admin/auth.py +0 -0
  280. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cloud_admin/connection_config.py +0 -0
  281. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/cloud_admin/models.py +0 -0
  282. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connection_config_retriever/__init__.py +0 -0
  283. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connection_config_retriever/audit_logging.py +0 -0
  284. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connection_config_retriever/retrieval.py +0 -0
  285. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connection_config_retriever/secrets_resolution.py +0 -0
  286. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_ops/__init__.py +0 -0
  287. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_ops/utils.py +0 -0
  288. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/README.md +0 -0
  289. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/__init__.py +0 -0
  290. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/__init__.py +0 -0
  291. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/assets.py +0 -0
  292. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/__init__.py +0 -0
  293. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/documentation.py +0 -0
  294. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/helpers.py +0 -0
  295. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/models.py +0 -0
  296. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/templates/documentation_headers_check_description.md.j2 +0 -0
  297. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/templates/section_content_description.md.j2 +0 -0
  298. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/documentation/templates/template.md.j2 +0 -0
  299. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/metadata.py +0 -0
  300. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/packaging.py +0 -0
  301. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/security.py +0 -0
  302. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/checks/version.py +0 -0
  303. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/cli.py +0 -0
  304. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/consts.py +0 -0
  305. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/models.py +0 -0
  306. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/templates/__init__.py +0 -0
  307. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/templates/qa_checks.md.j2 +0 -0
  308. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/connector_qa/utils.py +0 -0
  309. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/constants.py +0 -0
  310. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/docker_hub.py +0 -0
  311. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/gcp_auth.py +0 -0
  312. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/gcp_logs/__init__.py +0 -0
  313. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/gcp_logs/error_lookup.py +0 -0
  314. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/github_actions.py +0 -0
  315. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/github_api.py +0 -0
  316. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/__init__.py +0 -0
  317. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/_guidance.py +0 -0
  318. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/cloud_connector_versions.py +0 -0
  319. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/connector_analysis.py +0 -0
  320. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/connector_qa.py +0 -0
  321. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/gcp_logs.py +0 -0
  322. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/github_actions.py +0 -0
  323. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/github_repo_ops.py +0 -0
  324. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/metadata.py +0 -0
  325. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/prerelease.py +0 -0
  326. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/prompts.py +0 -0
  327. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/registry.py +0 -0
  328. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/regression_tests.py +0 -0
  329. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/mcp/server.py +0 -0
  330. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/metadata_validator.py +0 -0
  331. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/prod_db_access/__init__.py +0 -0
  332. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/prod_db_access/db_engine.py +0 -0
  333. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/prod_db_access/py.typed +0 -0
  334. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/py.typed +0 -0
  335. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/registry/__init__.py +0 -0
  336. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/registry/_gcs_util.py +0 -0
  337. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/registry/connector_stubs.py +0 -0
  338. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/registry/models.py +0 -0
  339. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/registry/publish.py +0 -0
  340. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/__init__.py +0 -0
  341. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/cdk_secrets.py +0 -0
  342. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/ci_output.py +0 -0
  343. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/commons/__init__.py +0 -0
  344. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/config.py +0 -0
  345. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/connection_fetcher.py +0 -0
  346. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/connection_secret_retriever.py +0 -0
  347. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/connector_runner.py +0 -0
  348. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/evaluation_modes.py +0 -0
  349. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/http_metrics.py +0 -0
  350. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/message_cache/__init__.py +0 -0
  351. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/message_cache/duckdb_cache.py +0 -0
  352. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/models.py +0 -0
  353. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/obfuscation.py +0 -0
  354. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/regression/__init__.py +0 -0
  355. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/regression/comparators.py +0 -0
  356. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/schema_generation.py +0 -0
  357. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/validation/__init__.py +0 -0
  358. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/validation/catalog_validators.py +0 -0
  359. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/regression_tests/validation/record_validators.py +0 -0
  360. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/src/airbyte_ops_mcp/telemetry.py +0 -0
  361. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/__init__.py +0 -0
  362. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_erd_generator/__init__.py +0 -0
  363. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_erd_generator/builder.py +0 -0
  364. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_erd_generator/test_dbml_assembler.py +0 -0
  365. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_erd_generator/test_relationships.py +0 -0
  366. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/conftest.py +0 -0
  367. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/test_migration_files/bad-header.md +0 -0
  368. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/test_migration_files/bad-title.md +0 -0
  369. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/test_migration_files/extra-header.md +0 -0
  370. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/test_migration_files/missing-entry.md +0 -0
  371. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/test_migration_files/out-of-order.md +0 -0
  372. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_ops/test_utils.py +0 -0
  373. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/__init__.py +0 -0
  374. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/conftest.py +0 -0
  375. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/integration_tests/__init__.py +0 -0
  376. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/integration_tests/test_documentation.py +0 -0
  377. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/__init__.py +0 -0
  378. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/__init__.py +0 -0
  379. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/data/docs/correct.md +0 -0
  380. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/data/docs/incorrect_not_all_structure.md +0 -0
  381. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/data/docs/invalid_links.md +0 -0
  382. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/test_assets.py +0 -0
  383. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/test_documentation.py +0 -0
  384. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/test_metadata.py +0 -0
  385. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/test_packaging.py +0 -0
  386. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/test_security.py +0 -0
  387. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_checks/test_version.py +0 -0
  388. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/connector_qa/unit_tests/test_models.py +0 -0
  389. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/__init__.py +0 -0
  390. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/conftest.py +0 -0
  391. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_actions/test_environments.py +0 -0
  392. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_bases.py +0 -0
  393. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_build_image/__init__.py +0 -0
  394. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_build_image/dummy_build_customization.py +0 -0
  395. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_build_image/test_manifest_only_connectors.py +0 -0
  396. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_build_image/test_python_connectors.py +0 -0
  397. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_build_image/test_steps/test_common.py +0 -0
  398. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/initial_files/changelog_header_no_newline.md +0 -0
  399. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/initial_files/changelog_header_no_separator.md +0 -0
  400. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/initial_files/no_changelog_header.md +0 -0
  401. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/initial_files/valid_changelog_at_end.md +0 -0
  402. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/initial_files/valid_changelog_in_middle.md +0 -0
  403. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/changelog_header_no_newline.md +0 -0
  404. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/changelog_header_no_separator.md +0 -0
  405. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/dupicate_version_date_valid_changelog_at_end.md +0 -0
  406. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/dupicate_version_date_valid_changelog_in_middle.md +0 -0
  407. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/dupicate_versions_valid_changelog_at_end.md +0 -0
  408. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/dupicate_versions_valid_changelog_in_middle.md +0 -0
  409. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/duplicate_entry_valid_changelog_at_end.md +0 -0
  410. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/duplicate_entry_valid_changelog_in_middle.md +0 -0
  411. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/existing_entries_valid_changelog_at_end.md +0 -0
  412. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/existing_entries_valid_changelog_in_middle.md +0 -0
  413. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/no_changelog_header.md +0 -0
  414. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/single_insert_valid_changelog_at_end.md +0 -0
  415. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog/result_files/single_insert_valid_changelog_in_middle.md +0 -0
  416. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_changelog.py +0 -0
  417. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_cli/__init__.py +0 -0
  418. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_cli/test_click_decorators.py +0 -0
  419. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_commands/__init__.py +0 -0
  420. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_commands/test_groups/__init__.py +0 -0
  421. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_commands/test_groups/test_connectors.py +0 -0
  422. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_dagger/__init__.py +0 -0
  423. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_dagger/test_actions/__init__.py +0 -0
  424. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_dagger/test_actions/test_python/__init__.py +0 -0
  425. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_dagger/test_actions/test_python/test_common.py +0 -0
  426. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_gradle.py +0 -0
  427. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_helpers/__init__.py +0 -0
  428. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_helpers/test_execution/__init__.py +0 -0
  429. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_helpers/test_execution/test_argument_parsing.py +0 -0
  430. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_helpers/test_execution/test_run_steps.py +0 -0
  431. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_helpers/test_pip.py +0 -0
  432. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_helpers/test_utils.py +0 -0
  433. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_models/__init__.py +0 -0
  434. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_models/test_click_pipeline_context.py +0 -0
  435. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_models/test_singleton.py +0 -0
  436. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_poetry/test_poetry_publish.py +0 -0
  437. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_publish.py +0 -0
  438. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_steps/__init__.py +0 -0
  439. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_steps/test_simple_docker_step.py +0 -0
  440. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_steps/test_version_check.py +0 -0
  441. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_tests/__init__.py +0 -0
  442. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_tests/test_common.py +0 -0
  443. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_tests/test_python_connectors.py +0 -0
  444. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/test_upgrade_java_cdk.py +0 -0
  445. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/legacy/airbyte_ci/pipelines/utils.py +0 -0
  446. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_airbyte_admin_mcp.py +0 -0
  447. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_bump_version.py +0 -0
  448. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_cli_registry.py +0 -0
  449. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_connector_stubs.py +0 -0
  450. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_list_connectors.py +0 -0
  451. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_prerelease.py +0 -0
  452. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/tests/test_sentry.py +0 -0
  453. {airbyte_internal_ops-0.10.0 → airbyte_internal_ops-0.10.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airbyte-internal-ops
3
- Version: 0.10.0
3
+ Version: 0.10.1
4
4
  Summary: MCP and API interfaces that let the agents do the admin work
5
5
  Author-email: Aaron Steers <aj@airbyte.io>
6
6
  Keywords: admin,airbyte,api,mcp
@@ -1768,3 +1768,73 @@ def finalize_connector_rollout(
1768
1768
  )
1769
1769
 
1770
1770
  return response.json()
1771
+
1772
+
1773
+ def get_actor_sync_info(
1774
+ rollout_id: str,
1775
+ config_api_root: str,
1776
+ client_id: str | None = None,
1777
+ client_secret: str | None = None,
1778
+ bearer_token: str | None = None,
1779
+ ) -> dict[str, Any]:
1780
+ """Get actor sync info for a connector rollout.
1781
+
1782
+ This function calls the platform API to get sync statistics for actors
1783
+ participating in a rollout. Unlike the SQL-based approach, this endpoint
1784
+ filters sync stats to only include syncs that actually used the RC version
1785
+ associated with the rollout.
1786
+
1787
+ Args:
1788
+ rollout_id: The rollout ID (UUID)
1789
+ config_api_root: The Config API root URL (e.g., CLOUD_CONFIG_API_ROOT)
1790
+ client_id: The Airbyte Cloud client ID (required if no bearer_token)
1791
+ client_secret: The Airbyte Cloud client secret (required if no bearer_token)
1792
+ bearer_token: Pre-existing bearer token (takes precedence over client credentials)
1793
+
1794
+ Returns:
1795
+ Dictionary containing:
1796
+ - data.actorSelectionInfo: Info about actor selection (numActors, numPinnedToConnectorRollout, etc.)
1797
+ - data.syncs: Dict mapping actor_id to sync stats (numConnections, numSucceeded, numFailed)
1798
+
1799
+ Raises:
1800
+ PyAirbyteInputError: If the API request fails or rollout not found
1801
+ """
1802
+ access_token = _get_access_token(client_id, client_secret, bearer_token)
1803
+
1804
+ endpoint = f"{config_api_root}/connector_rollout/get_actor_sync_info"
1805
+ payload = {"id": rollout_id}
1806
+
1807
+ response = requests.post(
1808
+ endpoint,
1809
+ json=payload,
1810
+ headers={
1811
+ "Authorization": f"Bearer {access_token}",
1812
+ "User-Agent": ops_constants.USER_AGENT,
1813
+ "Content-Type": "application/json",
1814
+ },
1815
+ timeout=60,
1816
+ )
1817
+
1818
+ if response.status_code == 404:
1819
+ raise PyAirbyteInputError(
1820
+ message=f"Rollout not found: {rollout_id}",
1821
+ context={
1822
+ "rollout_id": rollout_id,
1823
+ "endpoint": endpoint,
1824
+ "status_code": response.status_code,
1825
+ "response": response.text,
1826
+ },
1827
+ )
1828
+
1829
+ if response.status_code != 200:
1830
+ raise PyAirbyteInputError(
1831
+ message=f"Failed to get actor sync info: {response.status_code} {response.text}",
1832
+ context={
1833
+ "rollout_id": rollout_id,
1834
+ "endpoint": endpoint,
1835
+ "status_code": response.status_code,
1836
+ "response": response.text,
1837
+ },
1838
+ )
1839
+
1840
+ return response.json()
@@ -17,7 +17,7 @@ from airbyte import constants
17
17
  from airbyte.exceptions import PyAirbyteInputError
18
18
  from fastmcp import Context, FastMCP
19
19
  from fastmcp_extensions import get_mcp_config, mcp_tool, register_mcp_tools
20
- from pydantic import Field
20
+ from pydantic import BaseModel, Field
21
21
 
22
22
  from airbyte_ops_mcp.cloud_admin import api_client
23
23
  from airbyte_ops_mcp.cloud_admin.auth import (
@@ -770,6 +770,109 @@ def finalize_connector_rollout(
770
770
  )
771
771
 
772
772
 
773
+ class RolloutActorSelectionInfo(BaseModel):
774
+ """Actor selection info for a connector rollout."""
775
+
776
+ num_actors: int = Field(description="Total actors using this connector")
777
+ num_pinned_to_connector_rollout: int = Field(
778
+ description="Actors specifically pinned to this rollout"
779
+ )
780
+ num_actors_eligible_or_already_pinned: int = Field(
781
+ description="Actors eligible for pinning or already pinned"
782
+ )
783
+
784
+
785
+ class RolloutActorSyncStats(BaseModel):
786
+ """Per-actor sync stats for a rollout (only syncs using the RC version)."""
787
+
788
+ actor_id: str = Field(description="Actor UUID")
789
+ num_connections: int = Field(description="Number of connections using this actor")
790
+ num_succeeded: int = Field(
791
+ description="Number of successful syncs using the RC version"
792
+ )
793
+ num_failed: int = Field(description="Number of failed syncs using the RC version")
794
+
795
+
796
+ class RolloutMonitoringResult(BaseModel):
797
+ """Complete monitoring result for a rollout from the platform API.
798
+
799
+ This uses the platform API's /get_actor_sync_info endpoint which filters
800
+ sync stats to only include syncs that actually used the RC version
801
+ associated with the rollout.
802
+ """
803
+
804
+ rollout_id: str = Field(description="Rollout UUID")
805
+ actor_selection_info: RolloutActorSelectionInfo = Field(
806
+ description="Actor selection info for the rollout"
807
+ )
808
+ actor_sync_stats: list[RolloutActorSyncStats] = Field(
809
+ description="Per-actor sync stats for actors pinned to the rollout"
810
+ )
811
+
812
+
813
+ @mcp_tool(
814
+ read_only=True,
815
+ idempotent=True,
816
+ )
817
+ def query_prod_rollout_monitoring_stats(
818
+ rollout_id: Annotated[
819
+ str,
820
+ Field(description="Rollout UUID to get monitoring stats for"),
821
+ ],
822
+ *,
823
+ ctx: Context,
824
+ ) -> RolloutMonitoringResult:
825
+ """Get monitoring stats for a connector rollout.
826
+
827
+ Returns actor selection info and per-actor sync stats for actors
828
+ participating in the rollout. This uses the platform API's
829
+ /get_actor_sync_info endpoint which filters sync stats to only include
830
+ syncs that actually used the RC version associated with the rollout.
831
+
832
+ This is more accurate than SQL-based approaches which count all syncs
833
+ regardless of which connector version was used.
834
+ """
835
+ auth = _resolve_cloud_auth(ctx)
836
+
837
+ response = api_client.get_actor_sync_info(
838
+ rollout_id=rollout_id,
839
+ config_api_root=constants.CLOUD_CONFIG_API_ROOT,
840
+ client_id=auth.client_id,
841
+ client_secret=auth.client_secret,
842
+ bearer_token=auth.bearer_token,
843
+ )
844
+
845
+ data = response.get("data", {})
846
+ actor_selection_info_data = data.get("actorSelectionInfo", {})
847
+ syncs_data = data.get("syncs", {})
848
+
849
+ actor_selection_info = RolloutActorSelectionInfo(
850
+ num_actors=actor_selection_info_data.get("numActors", 0),
851
+ num_pinned_to_connector_rollout=actor_selection_info_data.get(
852
+ "numPinnedToConnectorRollout", 0
853
+ ),
854
+ num_actors_eligible_or_already_pinned=actor_selection_info_data.get(
855
+ "numActorsEligibleOrAlreadyPinned", 0
856
+ ),
857
+ )
858
+
859
+ actor_sync_stats = [
860
+ RolloutActorSyncStats(
861
+ actor_id=actor_id,
862
+ num_connections=sync_info.get("numConnections", 0),
863
+ num_succeeded=sync_info.get("numSucceeded", 0),
864
+ num_failed=sync_info.get("numFailed", 0),
865
+ )
866
+ for actor_id, sync_info in syncs_data.items()
867
+ ]
868
+
869
+ return RolloutMonitoringResult(
870
+ rollout_id=rollout_id,
871
+ actor_selection_info=actor_selection_info,
872
+ actor_sync_stats=actor_sync_stats,
873
+ )
874
+
875
+
773
876
  def register_connector_rollout_tools(app: FastMCP) -> None:
774
877
  """Register connector rollout tools with the FastMCP app.
775
878
 
@@ -1412,93 +1412,6 @@ def query_prod_connector_rollouts(
1412
1412
  return [_row_to_connector_rollout_info(row) for row in rows]
1413
1413
 
1414
1414
 
1415
- class RolloutMonitoringStats(BaseModel):
1416
- """Aggregate monitoring stats for a connector rollout."""
1417
-
1418
- rollout_id: str = Field(description="Rollout UUID")
1419
- actor_definition_id: str = Field(description="Connector definition UUID")
1420
- num_actors: int = Field(description="Total actors using this connector")
1421
- num_actors_pinned: int = Field(
1422
- description="Actors with any version pin (eligible or already pinned)"
1423
- )
1424
- num_pinned_to_rollout: int = Field(
1425
- description="Actors specifically pinned to this rollout"
1426
- )
1427
-
1428
-
1429
- class RolloutActorSyncStats(BaseModel):
1430
- """Per-actor sync stats for a rollout."""
1431
-
1432
- actor_id: str = Field(description="Actor UUID")
1433
- num_succeeded: int = Field(description="Number of successful syncs")
1434
- num_failed: int = Field(description="Number of failed syncs")
1435
- num_connections: int = Field(description="Number of connections using this actor")
1436
-
1437
-
1438
- class RolloutMonitoringResult(BaseModel):
1439
- """Complete monitoring result for a rollout."""
1440
-
1441
- aggregate_stats: RolloutMonitoringStats = Field(
1442
- description="Aggregate counts for the rollout"
1443
- )
1444
- actor_stats: list[RolloutActorSyncStats] = Field(
1445
- description="Per-actor sync stats for actors pinned to the rollout"
1446
- )
1447
-
1448
-
1449
- @mcp_tool(
1450
- read_only=True,
1451
- idempotent=True,
1452
- )
1453
- def query_prod_rollout_monitoring_stats(
1454
- rollout_id: Annotated[
1455
- str,
1456
- Field(description="Rollout UUID to get monitoring stats for"),
1457
- ],
1458
- days_back: Annotated[
1459
- int,
1460
- Field(description="Number of days to look back for sync stats (default: 7)"),
1461
- ] = 7,
1462
- ) -> RolloutMonitoringResult:
1463
- """Get monitoring stats for a connector rollout.
1464
-
1465
- Returns aggregate counts (total actors, pinned actors, rollout-pinned actors)
1466
- and per-actor sync stats (succeeded, failed, connections) for actors
1467
- participating in the rollout. This replaces the Retool rollout monitoring UI.
1468
- """
1469
- from airbyte_ops_mcp.prod_db_access.queries import (
1470
- query_rollout_actor_sync_stats,
1471
- query_rollout_monitoring_stats,
1472
- )
1473
-
1474
- agg_stats = query_rollout_monitoring_stats(rollout_id=rollout_id)
1475
- if agg_stats is None:
1476
- raise ValueError(f"Rollout not found: {rollout_id}")
1477
-
1478
- actor_stats = query_rollout_actor_sync_stats(
1479
- rollout_id=rollout_id, days_back=days_back
1480
- )
1481
-
1482
- return RolloutMonitoringResult(
1483
- aggregate_stats=RolloutMonitoringStats(
1484
- rollout_id=str(agg_stats["rollout_id"]),
1485
- actor_definition_id=str(agg_stats["actor_definition_id"]),
1486
- num_actors=agg_stats["num_actors"] or 0,
1487
- num_actors_pinned=agg_stats["num_actors_pinned"] or 0,
1488
- num_pinned_to_rollout=agg_stats["num_pinned_to_rollout"] or 0,
1489
- ),
1490
- actor_stats=[
1491
- RolloutActorSyncStats(
1492
- actor_id=str(row["actor_id"]),
1493
- num_succeeded=row["num_succeeded"] or 0,
1494
- num_failed=row["num_failed"] or 0,
1495
- num_connections=row["num_connections"] or 0,
1496
- )
1497
- for row in actor_stats
1498
- ],
1499
- )
1500
-
1501
-
1502
1415
  def register_prod_db_query_tools(app: FastMCP) -> None:
1503
1416
  """Register prod DB query tools with the FastMCP app."""
1504
1417
  register_mcp_tools(app, mcp_module=__name__)
@@ -42,8 +42,6 @@ from airbyte_ops_mcp.prod_db_access.sql import (
42
42
  SELECT_RECENT_SUCCESSFUL_SYNCS_FOR_SOURCE_CONNECTOR,
43
43
  SELECT_RECENT_SYNCS_FOR_DESTINATION_CONNECTOR,
44
44
  SELECT_RECENT_SYNCS_FOR_SOURCE_CONNECTOR,
45
- SELECT_ROLLOUT_ACTOR_SYNC_STATS,
46
- SELECT_ROLLOUT_AGGREGATE_STATS,
47
45
  SELECT_SOURCE_CONNECTION_STATS,
48
46
  SELECT_SUCCESSFUL_SYNCS_FOR_VERSION,
49
47
  SELECT_SYNC_RESULTS_FOR_VERSION,
@@ -701,62 +699,3 @@ def query_connector_rollouts(
701
699
  query_name="SELECT_ACTIVE_CONNECTOR_ROLLOUTS",
702
700
  gsm_client=gsm_client,
703
701
  )
704
-
705
-
706
- def query_rollout_monitoring_stats(
707
- rollout_id: str,
708
- *,
709
- gsm_client: secretmanager.SecretManagerServiceClient | None = None,
710
- ) -> dict[str, Any] | None:
711
- """Query aggregate monitoring stats for a rollout.
712
-
713
- Returns counts of total actors, actors with any pin, and actors pinned
714
- specifically to this rollout.
715
-
716
- Args:
717
- rollout_id: Rollout UUID to get stats for
718
- gsm_client: GCP Secret Manager client. If None, a new client will be instantiated.
719
-
720
- Returns:
721
- Dict with rollout_id, actor_definition_id, num_actors, num_actors_pinned,
722
- num_pinned_to_rollout, or None if rollout not found
723
- """
724
- rows = _run_sql_query(
725
- SELECT_ROLLOUT_AGGREGATE_STATS,
726
- parameters={"rollout_id": rollout_id},
727
- query_name="SELECT_ROLLOUT_AGGREGATE_STATS",
728
- gsm_client=gsm_client,
729
- )
730
- # The SQL query uses scalar subqueries that always return one row,
731
- # but with NULL values if the rollout doesn't exist
732
- if rows and rows[0].get("rollout_id") is not None:
733
- return rows[0]
734
- return None
735
-
736
-
737
- def query_rollout_actor_sync_stats(
738
- rollout_id: str,
739
- days_back: int = 7,
740
- *,
741
- gsm_client: secretmanager.SecretManagerServiceClient | None = None,
742
- ) -> list[dict[str, Any]]:
743
- """Query per-actor sync stats for actors pinned to a rollout.
744
-
745
- Returns succeeded/failed job counts and connection counts for each actor
746
- that is pinned to the specified rollout.
747
-
748
- Args:
749
- rollout_id: Rollout UUID to get actor stats for
750
- days_back: Number of days to look back for job stats (default: 7)
751
- gsm_client: GCP Secret Manager client. If None, a new client will be instantiated.
752
-
753
- Returns:
754
- List of dicts with actor_id, num_succeeded, num_failed, num_connections
755
- """
756
- cutoff_date = datetime.now(timezone.utc) - timedelta(days=days_back)
757
- return _run_sql_query(
758
- SELECT_ROLLOUT_ACTOR_SYNC_STATS,
759
- parameters={"rollout_id": rollout_id, "cutoff_date": cutoff_date},
760
- query_name="SELECT_ROLLOUT_ACTOR_SYNC_STATS",
761
- gsm_client=gsm_client,
762
- )
@@ -1217,94 +1217,3 @@ SELECT_ACTORS_PINNED_TO_ROLLOUT = sqlalchemy.text(
1217
1217
  scoped_configuration.created_at DESC
1218
1218
  """
1219
1219
  )
1220
-
1221
- # Get rollout monitoring stats: aggregate counts for a rollout
1222
- # Returns: total actors for connector, actors with any pin, actors pinned to this rollout
1223
- SELECT_ROLLOUT_AGGREGATE_STATS = sqlalchemy.text(
1224
- """
1225
- WITH rollout_info AS (
1226
- SELECT
1227
- cr.id AS rollout_id,
1228
- cr.actor_definition_id,
1229
- cr.release_candidate_version_id
1230
- FROM connector_rollout cr
1231
- WHERE cr.id = :rollout_id
1232
- ),
1233
- total_actors AS (
1234
- SELECT COUNT(*) AS num_actors
1235
- FROM actor
1236
- WHERE actor.actor_definition_id = (SELECT actor_definition_id FROM rollout_info)
1237
- AND actor.tombstone = false
1238
- ),
1239
- pinned_actors AS (
1240
- SELECT COUNT(DISTINCT scoped_configuration.scope_id) AS num_pinned
1241
- FROM scoped_configuration
1242
- JOIN actor ON scoped_configuration.scope_id = actor.id
1243
- WHERE scoped_configuration.key = 'connector_version'
1244
- AND scoped_configuration.scope_type = 'actor'
1245
- AND actor.actor_definition_id = (SELECT actor_definition_id FROM rollout_info)
1246
- AND actor.tombstone = false
1247
- ),
1248
- rollout_pinned_actors AS (
1249
- SELECT COUNT(DISTINCT scoped_configuration.scope_id) AS num_rollout_pinned
1250
- FROM scoped_configuration
1251
- WHERE scoped_configuration.key = 'connector_version'
1252
- AND scoped_configuration.scope_type = 'actor'
1253
- AND scoped_configuration.origin = :rollout_id
1254
- )
1255
- SELECT
1256
- (SELECT rollout_id FROM rollout_info) AS rollout_id,
1257
- (SELECT actor_definition_id FROM rollout_info) AS actor_definition_id,
1258
- (SELECT num_actors FROM total_actors) AS num_actors,
1259
- (SELECT num_pinned FROM pinned_actors) AS num_actors_pinned,
1260
- (SELECT num_rollout_pinned FROM rollout_pinned_actors) AS num_pinned_to_rollout
1261
- """
1262
- )
1263
-
1264
- # Get per-actor sync stats for actors pinned to a rollout
1265
- # Returns: actor_id, succeeded count, failed count, connection count
1266
- SELECT_ROLLOUT_ACTOR_SYNC_STATS = sqlalchemy.text(
1267
- """
1268
- WITH rollout_actors AS (
1269
- SELECT DISTINCT
1270
- scoped_configuration.scope_id AS actor_id
1271
- FROM scoped_configuration
1272
- WHERE scoped_configuration.key = 'connector_version'
1273
- AND scoped_configuration.scope_type = 'actor'
1274
- AND scoped_configuration.origin = :rollout_id
1275
- ),
1276
- actor_connections AS (
1277
- SELECT
1278
- ra.actor_id,
1279
- COUNT(DISTINCT c.id) AS num_connections
1280
- FROM rollout_actors ra
1281
- LEFT JOIN connection c
1282
- ON c.source_id = ra.actor_id OR c.destination_id = ra.actor_id
1283
- WHERE c.status != 'deprecated' OR c.status IS NULL
1284
- GROUP BY ra.actor_id
1285
- ),
1286
- actor_job_stats AS (
1287
- SELECT
1288
- ra.actor_id,
1289
- COUNT(CASE WHEN j.status = 'succeeded' THEN 1 END) AS num_succeeded,
1290
- COUNT(CASE WHEN j.status = 'failed' THEN 1 END) AS num_failed
1291
- FROM rollout_actors ra
1292
- LEFT JOIN connection c
1293
- ON c.source_id = ra.actor_id OR c.destination_id = ra.actor_id
1294
- LEFT JOIN jobs j
1295
- ON j.scope = c.id::text
1296
- AND j.config_type = 'sync'
1297
- AND j.created_at >= :cutoff_date
1298
- GROUP BY ra.actor_id
1299
- )
1300
- SELECT
1301
- ra.actor_id,
1302
- COALESCE(ajs.num_succeeded, 0) AS num_succeeded,
1303
- COALESCE(ajs.num_failed, 0) AS num_failed,
1304
- COALESCE(ac.num_connections, 0) AS num_connections
1305
- FROM rollout_actors ra
1306
- LEFT JOIN actor_job_stats ajs ON ra.actor_id = ajs.actor_id
1307
- LEFT JOIN actor_connections ac ON ra.actor_id = ac.actor_id
1308
- ORDER BY COALESCE(ajs.num_failed, 0) DESC, COALESCE(ajs.num_succeeded, 0) DESC
1309
- """
1310
- )
@@ -0,0 +1,181 @@
1
+ # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ """Unit tests for the connector rollout monitoring API-based tool."""
3
+
4
+ from unittest.mock import MagicMock, patch
5
+
6
+ import pytest
7
+
8
+ from airbyte_ops_mcp.cloud_admin.api_client import get_actor_sync_info
9
+ from airbyte_ops_mcp.mcp.connector_rollout import (
10
+ RolloutActorSelectionInfo,
11
+ RolloutActorSyncStats,
12
+ RolloutMonitoringResult,
13
+ query_prod_rollout_monitoring_stats,
14
+ )
15
+
16
+
17
+ @pytest.mark.unit
18
+ @pytest.mark.parametrize(
19
+ "api_response,expected_selection_info,expected_sync_stats",
20
+ [
21
+ pytest.param(
22
+ {
23
+ "data": {
24
+ "actorSelectionInfo": {
25
+ "numActors": 100,
26
+ "numPinnedToConnectorRollout": 10,
27
+ "numActorsEligibleOrAlreadyPinned": 50,
28
+ },
29
+ "syncs": {
30
+ "actor-1": {
31
+ "numConnections": 5,
32
+ "numSucceeded": 10,
33
+ "numFailed": 2,
34
+ },
35
+ "actor-2": {
36
+ "numConnections": 3,
37
+ "numSucceeded": 8,
38
+ "numFailed": 0,
39
+ },
40
+ },
41
+ }
42
+ },
43
+ RolloutActorSelectionInfo(
44
+ num_actors=100,
45
+ num_pinned_to_connector_rollout=10,
46
+ num_actors_eligible_or_already_pinned=50,
47
+ ),
48
+ [
49
+ RolloutActorSyncStats(
50
+ actor_id="actor-1",
51
+ num_connections=5,
52
+ num_succeeded=10,
53
+ num_failed=2,
54
+ ),
55
+ RolloutActorSyncStats(
56
+ actor_id="actor-2", num_connections=3, num_succeeded=8, num_failed=0
57
+ ),
58
+ ],
59
+ id="typical_response_with_multiple_actors",
60
+ ),
61
+ pytest.param(
62
+ {
63
+ "data": {
64
+ "actorSelectionInfo": {
65
+ "numActors": 0,
66
+ "numPinnedToConnectorRollout": 0,
67
+ "numActorsEligibleOrAlreadyPinned": 0,
68
+ },
69
+ "syncs": {},
70
+ }
71
+ },
72
+ RolloutActorSelectionInfo(
73
+ num_actors=0,
74
+ num_pinned_to_connector_rollout=0,
75
+ num_actors_eligible_or_already_pinned=0,
76
+ ),
77
+ [],
78
+ id="empty_rollout_no_actors",
79
+ ),
80
+ pytest.param(
81
+ {"data": {"actorSelectionInfo": {}, "syncs": {}}},
82
+ RolloutActorSelectionInfo(
83
+ num_actors=0,
84
+ num_pinned_to_connector_rollout=0,
85
+ num_actors_eligible_or_already_pinned=0,
86
+ ),
87
+ [],
88
+ id="missing_fields_defaults_to_zero",
89
+ ),
90
+ ],
91
+ )
92
+ def test_query_prod_rollout_monitoring_stats(
93
+ api_response: dict,
94
+ expected_selection_info: RolloutActorSelectionInfo,
95
+ expected_sync_stats: list[RolloutActorSyncStats],
96
+ ) -> None:
97
+ """Test query_prod_rollout_monitoring_stats transforms API response correctly."""
98
+ mock_ctx = MagicMock()
99
+ mock_ctx.request_context.lifespan_context = {}
100
+
101
+ with patch(
102
+ "airbyte_ops_mcp.mcp.connector_rollout._resolve_cloud_auth"
103
+ ) as mock_resolve_auth, patch(
104
+ "airbyte_ops_mcp.mcp.connector_rollout.api_client.get_actor_sync_info"
105
+ ) as mock_get_sync_info:
106
+ mock_resolve_auth.return_value = MagicMock(
107
+ bearer_token="test-token", client_id=None, client_secret=None
108
+ )
109
+ mock_get_sync_info.return_value = api_response
110
+
111
+ result = query_prod_rollout_monitoring_stats(
112
+ rollout_id="test-rollout-id", ctx=mock_ctx
113
+ )
114
+
115
+ assert isinstance(result, RolloutMonitoringResult)
116
+ assert result.rollout_id == "test-rollout-id"
117
+ assert result.actor_selection_info == expected_selection_info
118
+
119
+ assert len(result.actor_sync_stats) == len(expected_sync_stats)
120
+ for actual, expected in zip(
121
+ sorted(result.actor_sync_stats, key=lambda x: x.actor_id),
122
+ sorted(expected_sync_stats, key=lambda x: x.actor_id),
123
+ ):
124
+ assert actual == expected
125
+
126
+
127
+ @pytest.mark.unit
128
+ def test_get_actor_sync_info_api_call() -> None:
129
+ """Test get_actor_sync_info makes correct API call."""
130
+ with patch(
131
+ "airbyte_ops_mcp.cloud_admin.api_client._get_access_token"
132
+ ) as mock_get_token, patch(
133
+ "airbyte_ops_mcp.cloud_admin.api_client.requests.post"
134
+ ) as mock_post:
135
+ mock_get_token.return_value = "test-access-token"
136
+ mock_response = MagicMock()
137
+ mock_response.status_code = 200
138
+ mock_response.json.return_value = {
139
+ "data": {"actorSelectionInfo": {}, "syncs": {}}
140
+ }
141
+ mock_post.return_value = mock_response
142
+
143
+ result = get_actor_sync_info(
144
+ rollout_id="test-rollout-id",
145
+ config_api_root="https://api.test.com",
146
+ bearer_token="test-token",
147
+ )
148
+
149
+ mock_post.assert_called_once()
150
+ call_args = mock_post.call_args
151
+ assert (
152
+ call_args[0][0]
153
+ == "https://api.test.com/connector_rollout/get_actor_sync_info"
154
+ )
155
+ assert call_args[1]["json"] == {"id": "test-rollout-id"}
156
+ assert "Authorization" in call_args[1]["headers"]
157
+ assert result == {"data": {"actorSelectionInfo": {}, "syncs": {}}}
158
+
159
+
160
+ @pytest.mark.unit
161
+ def test_get_actor_sync_info_not_found() -> None:
162
+ """Test get_actor_sync_info raises error when rollout not found."""
163
+ from airbyte.exceptions import PyAirbyteInputError
164
+
165
+ with patch(
166
+ "airbyte_ops_mcp.cloud_admin.api_client._get_access_token"
167
+ ) as mock_get_token, patch(
168
+ "airbyte_ops_mcp.cloud_admin.api_client.requests.post"
169
+ ) as mock_post:
170
+ mock_get_token.return_value = "test-access-token"
171
+ mock_response = MagicMock()
172
+ mock_response.status_code = 404
173
+ mock_response.text = "Not found"
174
+ mock_post.return_value = mock_response
175
+
176
+ with pytest.raises(PyAirbyteInputError, match="Rollout not found"):
177
+ get_actor_sync_info(
178
+ rollout_id="nonexistent-rollout",
179
+ config_api_root="https://api.test.com",
180
+ bearer_token="test-token",
181
+ )