recce-nightly 1.25.0.20251118__tar.gz → 1.28.0.20251208__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.

Potentially problematic release.


This version of recce-nightly might be problematic. Click here for more details.

Files changed (571) hide show
  1. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/.gitignore +1 -3
  2. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/PKG-INFO +38 -49
  3. recce_nightly-1.28.0.20251208/pyproject.toml +103 -0
  4. recce_nightly-1.28.0.20251208/recce/VERSION +1 -0
  5. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/check_api.py +20 -14
  6. recce_nightly-1.28.0.20251208/recce/apis/check_events_api.py +353 -0
  7. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/check_func.py +5 -5
  8. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/cli.py +18 -28
  9. recce_nightly-1.28.0.20251208/recce/data/404.html +2 -0
  10. recce_nightly-1.28.0.20251208/recce/data/__next.@lineage.!KHNsb3Qp.__PAGE__.txt +7 -0
  11. recce_nightly-1.28.0.20251208/recce/data/__next.@lineage.!KHNsb3Qp.txt +4 -0
  12. recce_nightly-1.28.0.20251208/recce/data/__next.__PAGE__.txt +6 -0
  13. recce_nightly-1.28.0.20251208/recce/data/__next._full.txt +35 -0
  14. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/__next._head.txt +4 -4
  15. recce_nightly-1.28.0.20251208/recce/data/__next._index.txt +14 -0
  16. recce_nightly-1.28.0.20251208/recce/data/__next._tree.txt +8 -0
  17. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/0489710f83376429.js +1 -0
  18. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/0d2c3b8c8eba1c62.js +2 -0
  19. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/11a2a2967dd70bfc.js +4 -0
  20. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/176e43f2d695c339.js +1 -0
  21. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/1cf016339b18d43c.js +11 -0
  22. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/20e6b06ab6f05dd0.js +2 -0
  23. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/305ac5b2525ffc64.js +2 -0
  24. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/f40141db1bdb46f0.css → recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/40369ff1dc5b7b50.css +0 -3
  25. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/4149ea2824442ca7.js +1 -0
  26. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/47564ecaa69df934.js +1 -0
  27. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/5c4dfb0d09eaa401.js +1 -0
  28. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/620ef007f7c37991.js +1 -0
  29. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/6d8557f062aa4386.css +1 -0
  30. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/7af6b9e009c4950d.js +1 -0
  31. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/84b39e920d56185f.js +1 -0
  32. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/e124bccf574a3361.css → recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/8feaa72f5cf4b1dc.css +1 -1
  33. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/923964f18c87d0f1.css +1 -0
  34. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/9c054b0600e24469.js +12 -0
  35. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/a52a26d8f55cf7b6.js +1 -0
  36. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/a7f990c720047721.js +1 -0
  37. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/a8dfac6ccae9e75f.js +1 -0
  38. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ab04baeee30276cb.js +1 -0
  39. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ab4525e48355a85e.js +1 -0
  40. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/b38427ccdc316e3d.js +1 -0
  41. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/cf15cb904925f808.js +1 -0
  42. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/d0f91117d77ff844.css +1 -0
  43. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/d42f134c322cba42.js +74 -0
  44. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/d917bc8d5a83f3ba.js +1 -0
  45. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/db3a7542d7e3920a.js +1 -0
  46. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/deeef6d77883a7dc.js +1 -0
  47. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/e3cbc8623fb2b320.js +34 -0
  48. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ebe8befeee9f808b.js +1 -0
  49. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/f2518281d70c5c02.js +1 -0
  50. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/f61ff1ff6b6a807d.js +12 -0
  51. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/f78dd13fdf964550.js +1 -0
  52. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ff4f7584a2ae9ff8.js +1 -0
  53. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/393dc43e483f717a.css → recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ffe5529fff9d6fe6.css +1 -1
  54. recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/turbopack-ffda7a361cccaf35.js +3 -0
  55. recce_nightly-1.28.0.20251208/recce/data/_not-found/__next._full.txt +24 -0
  56. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_not-found/__next._head.txt +4 -4
  57. recce_nightly-1.28.0.20251208/recce/data/_not-found/__next._index.txt +13 -0
  58. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_not-found/__next._not-found.__PAGE__.txt +2 -2
  59. recce_nightly-1.28.0.20251208/recce/data/_not-found/__next._not-found.txt +4 -0
  60. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_not-found/__next._tree.txt +6 -3
  61. recce_nightly-1.28.0.20251208/recce/data/_not-found.html +2 -0
  62. recce_nightly-1.28.0.20251208/recce/data/_not-found.txt +24 -0
  63. recce_nightly-1.28.0.20251208/recce/data/checks/__next.@lineage.__DEFAULT__.txt +7 -0
  64. recce_nightly-1.28.0.20251208/recce/data/checks/__next._full.txt +38 -0
  65. recce_nightly-1.28.0.20251208/recce/data/checks/__next._head.txt +8 -0
  66. recce_nightly-1.28.0.20251208/recce/data/checks/__next._index.txt +14 -0
  67. recce_nightly-1.28.0.20251208/recce/data/checks/__next._tree.txt +8 -0
  68. recce_nightly-1.28.0.20251208/recce/data/checks/__next.checks.__PAGE__.txt +10 -0
  69. recce_nightly-1.28.0.20251208/recce/data/checks/__next.checks.txt +4 -0
  70. recce_nightly-1.28.0.20251208/recce/data/checks.html +2 -0
  71. recce_nightly-1.28.0.20251208/recce/data/checks.txt +38 -0
  72. recce_nightly-1.28.0.20251208/recce/data/index.html +2 -0
  73. recce_nightly-1.28.0.20251208/recce/data/index.txt +35 -0
  74. recce_nightly-1.28.0.20251208/recce/data/lineage/__next.@lineage.__DEFAULT__.txt +7 -0
  75. recce_nightly-1.28.0.20251208/recce/data/lineage/__next._full.txt +38 -0
  76. recce_nightly-1.28.0.20251208/recce/data/lineage/__next._head.txt +8 -0
  77. recce_nightly-1.28.0.20251208/recce/data/lineage/__next._index.txt +14 -0
  78. recce_nightly-1.28.0.20251208/recce/data/lineage/__next._tree.txt +8 -0
  79. recce_nightly-1.28.0.20251208/recce/data/lineage/__next.lineage.__PAGE__.txt +10 -0
  80. recce_nightly-1.28.0.20251208/recce/data/lineage/__next.lineage.txt +4 -0
  81. recce_nightly-1.28.0.20251208/recce/data/lineage.html +2 -0
  82. recce_nightly-1.28.0.20251208/recce/data/lineage.txt +38 -0
  83. recce_nightly-1.28.0.20251208/recce/data/query/__next.@lineage.__DEFAULT__.txt +7 -0
  84. recce_nightly-1.28.0.20251208/recce/data/query/__next._full.txt +36 -0
  85. recce_nightly-1.28.0.20251208/recce/data/query/__next._head.txt +8 -0
  86. recce_nightly-1.28.0.20251208/recce/data/query/__next._index.txt +14 -0
  87. recce_nightly-1.28.0.20251208/recce/data/query/__next._tree.txt +8 -0
  88. recce_nightly-1.28.0.20251208/recce/data/query/__next.query.__PAGE__.txt +9 -0
  89. recce_nightly-1.28.0.20251208/recce/data/query/__next.query.txt +4 -0
  90. recce_nightly-1.28.0.20251208/recce/data/query.html +2 -0
  91. recce_nightly-1.28.0.20251208/recce/data/query.txt +36 -0
  92. recce_nightly-1.28.0.20251208/recce/event/CONFIG.bak +1 -0
  93. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/mcp_server.py +22 -13
  94. recce_nightly-1.28.0.20251208/recce/models/check.py +473 -0
  95. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/models/run.py +3 -0
  96. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/models/types.py +3 -0
  97. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/run.py +14 -1
  98. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/server.py +15 -0
  99. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/cloud.py +11 -1
  100. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/state_loader.py +1 -1
  101. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/summary.py +23 -3
  102. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/dataframe.py +2 -3
  103. recce_nightly-1.28.0.20251208/recce/util/cloud/__init__.py +15 -0
  104. recce_nightly-1.28.0.20251208/recce/util/cloud/base.py +115 -0
  105. recce_nightly-1.28.0.20251208/recce/util/cloud/check_events.py +190 -0
  106. recce_nightly-1.28.0.20251208/recce/util/cloud/checks.py +242 -0
  107. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/recce_cloud.py +25 -0
  108. recce_nightly-1.25.0.20251118/.editorconfig +0 -26
  109. recce_nightly-1.25.0.20251118/.flake8 +0 -37
  110. recce_nightly-1.25.0.20251118/.github/ISSUE_TEMPLATE/bug_report.yml +0 -67
  111. recce_nightly-1.25.0.20251118/.github/ISSUE_TEMPLATE/custom.md +0 -10
  112. recce_nightly-1.25.0.20251118/.github/ISSUE_TEMPLATE/feature_request.yml +0 -42
  113. recce_nightly-1.25.0.20251118/.github/PULL_REQUEST_TEMPLATE.md +0 -21
  114. recce_nightly-1.25.0.20251118/.github/copilot-instructions.md +0 -331
  115. recce_nightly-1.25.0.20251118/.github/instructions/backend-instructions.md +0 -541
  116. recce_nightly-1.25.0.20251118/.github/instructions/frontend-instructions.md +0 -317
  117. recce_nightly-1.25.0.20251118/.github/workflows/build-statics.yaml +0 -65
  118. recce_nightly-1.25.0.20251118/.github/workflows/bump.yaml +0 -40
  119. recce_nightly-1.25.0.20251118/.github/workflows/integration-tests-cloud.yaml +0 -73
  120. recce_nightly-1.25.0.20251118/.github/workflows/integration-tests-sqlmesh.yaml +0 -33
  121. recce_nightly-1.25.0.20251118/.github/workflows/integration-tests.yaml +0 -56
  122. recce_nightly-1.25.0.20251118/.github/workflows/nightly.yaml +0 -214
  123. recce_nightly-1.25.0.20251118/.github/workflows/release.yaml +0 -143
  124. recce_nightly-1.25.0.20251118/.github/workflows/tests-js.yaml +0 -54
  125. recce_nightly-1.25.0.20251118/.github/workflows/tests-python.yaml +0 -103
  126. recce_nightly-1.25.0.20251118/.pre-commit-config.yaml +0 -25
  127. recce_nightly-1.25.0.20251118/CLAUDE.md +0 -343
  128. recce_nightly-1.25.0.20251118/CODE_OF_CONDUCT.md +0 -128
  129. recce_nightly-1.25.0.20251118/CONTRIBUTING.md +0 -107
  130. recce_nightly-1.25.0.20251118/Makefile +0 -135
  131. recce_nightly-1.25.0.20251118/RECCE_CLOUD.md +0 -81
  132. recce_nightly-1.25.0.20251118/SECURITY.md +0 -25
  133. recce_nightly-1.25.0.20251118/docs/PACKAGING.md +0 -340
  134. recce_nightly-1.25.0.20251118/docs/README.md +0 -1
  135. recce_nightly-1.25.0.20251118/integration_tests/dbt/.gitignore +0 -9
  136. recce_nightly-1.25.0.20251118/integration_tests/dbt/dbt_project.yml +0 -26
  137. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/customers.sql +0 -69
  138. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/docs.md +0 -14
  139. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/orders.sql +0 -56
  140. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/schema.yml +0 -82
  141. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/schema.yml +0 -31
  142. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/stg_customers.sql +0 -22
  143. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/stg_orders.sql +0 -23
  144. recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/stg_payments.sql +0 -25
  145. recce_nightly-1.25.0.20251118/integration_tests/dbt/packages.yml +0 -7
  146. recce_nightly-1.25.0.20251118/integration_tests/dbt/profiles.yml +0 -8
  147. recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_customers.csv +0 -101
  148. recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_orders.csv +0 -100
  149. recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_payments.csv +0 -114
  150. recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_statuses.csv +0 -5
  151. recce_nightly-1.25.0.20251118/integration_tests/dbt/smoke_test.sh +0 -72
  152. recce_nightly-1.25.0.20251118/integration_tests/dbt/smoke_test_cloud.sh +0 -71
  153. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/.gitignore +0 -3
  154. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +0 -9
  155. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/audits/items.sql +0 -7
  156. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/audits/order_items.sql +0 -7
  157. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/config.py +0 -171
  158. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/data/.keep +0 -0
  159. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/helper.py +0 -20
  160. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/__init__.py +0 -0
  161. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/macros.py +0 -8
  162. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/macros.sql +0 -8
  163. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/utils.py +0 -11
  164. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/metrics/metrics.sql +0 -25
  165. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +0 -41
  166. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +0 -60
  167. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/customers.sql +0 -32
  168. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/items.py +0 -95
  169. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/marketing.sql +0 -15
  170. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/order_items.py +0 -95
  171. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/orders.py +0 -70
  172. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/raw_marketing.py +0 -62
  173. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/top_waiters.sql +0 -23
  174. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +0 -29
  175. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiter_names.sql +0 -10
  176. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +0 -29
  177. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiters.py +0 -62
  178. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/prep_env.sh +0 -16
  179. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/recce.yml +0 -13
  180. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/schema.yaml +0 -5
  181. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/seeds/waiter_names.csv +0 -11
  182. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/test_server.sh +0 -29
  183. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +0 -63
  184. recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/tests/test_order_items.yaml +0 -72
  185. recce_nightly-1.25.0.20251118/js/.editorconfig +0 -27
  186. recce_nightly-1.25.0.20251118/js/.env.development +0 -5
  187. recce_nightly-1.25.0.20251118/js/.gitignore +0 -38
  188. recce_nightly-1.25.0.20251118/js/.husky/pre-commit +0 -32
  189. recce_nightly-1.25.0.20251118/js/.nvmrc +0 -1
  190. recce_nightly-1.25.0.20251118/js/README.md +0 -39
  191. recce_nightly-1.25.0.20251118/js/app/Providers.tsx +0 -25
  192. recce_nightly-1.25.0.20251118/js/app/global.css +0 -23
  193. recce_nightly-1.25.0.20251118/js/app/layout.tsx +0 -24
  194. recce_nightly-1.25.0.20251118/js/app/page.tsx +0 -579
  195. recce_nightly-1.25.0.20251118/js/biome.json +0 -313
  196. recce_nightly-1.25.0.20251118/js/jest.config.js +0 -15
  197. recce_nightly-1.25.0.20251118/js/jest.setup.js +0 -2
  198. recce_nightly-1.25.0.20251118/js/next.config.js +0 -13
  199. recce_nightly-1.25.0.20251118/js/package-lock.json +0 -13843
  200. recce_nightly-1.25.0.20251118/js/package.json +0 -104
  201. recce_nightly-1.25.0.20251118/js/pnpm-lock.yaml +0 -6974
  202. recce_nightly-1.25.0.20251118/js/pnpm-workspace.yaml +0 -6
  203. recce_nightly-1.25.0.20251118/js/postcss.config.js +0 -5
  204. recce_nightly-1.25.0.20251118/js/src/components/AuthModal/AuthModal.tsx +0 -211
  205. recce_nightly-1.25.0.20251118/js/src/components/app/AvatarDropdown.tsx +0 -128
  206. recce_nightly-1.25.0.20251118/js/src/components/app/EnvInfo.tsx +0 -276
  207. recce_nightly-1.25.0.20251118/js/src/components/app/Filename.tsx +0 -400
  208. recce_nightly-1.25.0.20251118/js/src/components/app/SetupConnectionPopover.tsx +0 -89
  209. recce_nightly-1.25.0.20251118/js/src/components/app/StateExporter.tsx +0 -52
  210. recce_nightly-1.25.0.20251118/js/src/components/app/StateImporter.tsx +0 -180
  211. recce_nightly-1.25.0.20251118/js/src/components/app/StateSharing.tsx +0 -127
  212. recce_nightly-1.25.0.20251118/js/src/components/app/StateSynchronizer.tsx +0 -194
  213. recce_nightly-1.25.0.20251118/js/src/components/charts/HistogramChart.tsx +0 -267
  214. recce_nightly-1.25.0.20251118/js/src/components/charts/SquareIcon.tsx +0 -19
  215. recce_nightly-1.25.0.20251118/js/src/components/charts/TopKSummaryList.tsx +0 -382
  216. recce_nightly-1.25.0.20251118/js/src/components/check/CheckBreadcrumb.tsx +0 -97
  217. recce_nightly-1.25.0.20251118/js/src/components/check/CheckDescription.tsx +0 -109
  218. recce_nightly-1.25.0.20251118/js/src/components/check/CheckDetail.tsx +0 -601
  219. recce_nightly-1.25.0.20251118/js/src/components/check/CheckEmptyState.tsx +0 -74
  220. recce_nightly-1.25.0.20251118/js/src/components/check/CheckList.tsx +0 -311
  221. recce_nightly-1.25.0.20251118/js/src/components/check/CheckPage.tsx +0 -184
  222. recce_nightly-1.25.0.20251118/js/src/components/check/LineageDiffView.tsx +0 -32
  223. recce_nightly-1.25.0.20251118/js/src/components/check/PresetCheckTemplateView.tsx +0 -51
  224. recce_nightly-1.25.0.20251118/js/src/components/check/SchemaDiffView.tsx +0 -245
  225. recce_nightly-1.25.0.20251118/js/src/components/check/check.ts +0 -25
  226. recce_nightly-1.25.0.20251118/js/src/components/data-grid/ScreenshotDataGrid.tsx +0 -45
  227. recce_nightly-1.25.0.20251118/js/src/components/errorboundary/ErrorBoundary.tsx +0 -65
  228. recce_nightly-1.25.0.20251118/js/src/components/histogram/HistogramDiffForm.tsx +0 -145
  229. recce_nightly-1.25.0.20251118/js/src/components/histogram/HistogramDiffResultView.tsx +0 -55
  230. recce_nightly-1.25.0.20251118/js/src/components/icons/index.tsx +0 -142
  231. recce_nightly-1.25.0.20251118/js/src/components/lineage/ActionControl.tsx +0 -61
  232. recce_nightly-1.25.0.20251118/js/src/components/lineage/ActionTag.tsx +0 -136
  233. recce_nightly-1.25.0.20251118/js/src/components/lineage/ChangeStatusLegend.tsx +0 -37
  234. recce_nightly-1.25.0.20251118/js/src/components/lineage/ColumnLevelLineageControl.tsx +0 -277
  235. recce_nightly-1.25.0.20251118/js/src/components/lineage/ColumnLevelLineageLegend.tsx +0 -48
  236. recce_nightly-1.25.0.20251118/js/src/components/lineage/GraphColumnNode.tsx +0 -193
  237. recce_nightly-1.25.0.20251118/js/src/components/lineage/GraphEdge.tsx +0 -59
  238. recce_nightly-1.25.0.20251118/js/src/components/lineage/GraphNode.tsx +0 -483
  239. recce_nightly-1.25.0.20251118/js/src/components/lineage/LineagePage.tsx +0 -10
  240. recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageView.tsx +0 -1260
  241. recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewContext.tsx +0 -86
  242. recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewContextMenu.tsx +0 -554
  243. recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewNotification.tsx +0 -56
  244. recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewTopBar.tsx +0 -515
  245. recce_nightly-1.25.0.20251118/js/src/components/lineage/NodeSqlView.tsx +0 -154
  246. recce_nightly-1.25.0.20251118/js/src/components/lineage/NodeTag.tsx +0 -240
  247. recce_nightly-1.25.0.20251118/js/src/components/lineage/NodeView.tsx +0 -538
  248. recce_nightly-1.25.0.20251118/js/src/components/lineage/SandboxView.tsx +0 -426
  249. recce_nightly-1.25.0.20251118/js/src/components/lineage/SetupConnectionBanner.tsx +0 -39
  250. recce_nightly-1.25.0.20251118/js/src/components/lineage/SeverDisconnectedModalContent.tsx +0 -88
  251. recce_nightly-1.25.0.20251118/js/src/components/lineage/SingleEnvironmentQueryView.tsx +0 -135
  252. recce_nightly-1.25.0.20251118/js/src/components/lineage/graph.test.ts +0 -31
  253. recce_nightly-1.25.0.20251118/js/src/components/lineage/graph.ts +0 -58
  254. recce_nightly-1.25.0.20251118/js/src/components/lineage/lineage.test.ts +0 -169
  255. recce_nightly-1.25.0.20251118/js/src/components/lineage/lineage.ts +0 -521
  256. recce_nightly-1.25.0.20251118/js/src/components/lineage/styles.css +0 -9
  257. recce_nightly-1.25.0.20251118/js/src/components/lineage/styles.tsx +0 -149
  258. recce_nightly-1.25.0.20251118/js/src/components/lineage/useMultiNodesAction.ts +0 -314
  259. recce_nightly-1.25.0.20251118/js/src/components/lineage/useValueDiffAlertDialog.tsx +0 -90
  260. recce_nightly-1.25.0.20251118/js/src/components/onboarding-guide/Notification.tsx +0 -47
  261. recce_nightly-1.25.0.20251118/js/src/components/profile/ProfileDiffForm.tsx +0 -98
  262. recce_nightly-1.25.0.20251118/js/src/components/profile/ProfileDiffResultView.tsx +0 -216
  263. recce_nightly-1.25.0.20251118/js/src/components/query/ChangedOnlyCheckbox.tsx +0 -24
  264. recce_nightly-1.25.0.20251118/js/src/components/query/DiffText.tsx +0 -105
  265. recce_nightly-1.25.0.20251118/js/src/components/query/QueryDiffResultView.tsx +0 -430
  266. recce_nightly-1.25.0.20251118/js/src/components/query/QueryForm.tsx +0 -71
  267. recce_nightly-1.25.0.20251118/js/src/components/query/QueryPage.tsx +0 -263
  268. recce_nightly-1.25.0.20251118/js/src/components/query/QueryResultView.tsx +0 -357
  269. recce_nightly-1.25.0.20251118/js/src/components/query/SetupConnectionGuide.tsx +0 -45
  270. recce_nightly-1.25.0.20251118/js/src/components/query/SqlEditor.tsx +0 -266
  271. recce_nightly-1.25.0.20251118/js/src/components/query/ToggleSwitch.tsx +0 -79
  272. recce_nightly-1.25.0.20251118/js/src/components/query/querydiff.test.ts +0 -252
  273. recce_nightly-1.25.0.20251118/js/src/components/query/querydiff.tsx +0 -739
  274. recce_nightly-1.25.0.20251118/js/src/components/query/styles.css +0 -59
  275. recce_nightly-1.25.0.20251118/js/src/components/rowcount/RowCountDiffResultView.tsx +0 -177
  276. recce_nightly-1.25.0.20251118/js/src/components/rowcount/delta.ts +0 -11
  277. recce_nightly-1.25.0.20251118/js/src/components/run/RunList.tsx +0 -268
  278. recce_nightly-1.25.0.20251118/js/src/components/run/RunModal.tsx +0 -158
  279. recce_nightly-1.25.0.20251118/js/src/components/run/RunPage.tsx +0 -24
  280. recce_nightly-1.25.0.20251118/js/src/components/run/RunResultPane.tsx +0 -418
  281. recce_nightly-1.25.0.20251118/js/src/components/run/RunStatusAndDate.tsx +0 -90
  282. recce_nightly-1.25.0.20251118/js/src/components/run/RunToolbar.tsx +0 -40
  283. recce_nightly-1.25.0.20251118/js/src/components/run/RunView.tsx +0 -161
  284. recce_nightly-1.25.0.20251118/js/src/components/run/registry.ts +0 -214
  285. recce_nightly-1.25.0.20251118/js/src/components/run/types.ts +0 -14
  286. recce_nightly-1.25.0.20251118/js/src/components/schema/ColumnNameCell.tsx +0 -158
  287. recce_nightly-1.25.0.20251118/js/src/components/schema/SchemaView.tsx +0 -265
  288. recce_nightly-1.25.0.20251118/js/src/components/schema/schema.test.ts +0 -118
  289. recce_nightly-1.25.0.20251118/js/src/components/schema/schema.tsx +0 -201
  290. recce_nightly-1.25.0.20251118/js/src/components/schema/schemaDiff.ts +0 -32
  291. recce_nightly-1.25.0.20251118/js/src/components/schema/style.css +0 -82
  292. recce_nightly-1.25.0.20251118/js/src/components/screenshot/ScreenshotBox.tsx +0 -32
  293. recce_nightly-1.25.0.20251118/js/src/components/shared/HistoryToggle.tsx +0 -32
  294. recce_nightly-1.25.0.20251118/js/src/components/split/Split.tsx +0 -40
  295. recce_nightly-1.25.0.20251118/js/src/components/split/styles.css +0 -19
  296. recce_nightly-1.25.0.20251118/js/src/components/summary/ChangeSummary.tsx +0 -233
  297. recce_nightly-1.25.0.20251118/js/src/components/summary/SchemaSummary.tsx +0 -118
  298. recce_nightly-1.25.0.20251118/js/src/components/summary/SummaryView.tsx +0 -24
  299. recce_nightly-1.25.0.20251118/js/src/components/top-k/TopKDiffForm.tsx +0 -57
  300. recce_nightly-1.25.0.20251118/js/src/components/top-k/TopKDiffResultView.tsx +0 -61
  301. recce_nightly-1.25.0.20251118/js/src/components/ui/color-mode.tsx +0 -108
  302. recce_nightly-1.25.0.20251118/js/src/components/ui/provider.tsx +0 -16
  303. recce_nightly-1.25.0.20251118/js/src/components/ui/theme.ts +0 -222
  304. recce_nightly-1.25.0.20251118/js/src/components/ui/toaster.tsx +0 -43
  305. recce_nightly-1.25.0.20251118/js/src/components/ui/tooltip.tsx +0 -46
  306. recce_nightly-1.25.0.20251118/js/src/components/valuediff/ValueDiffDetailResultView.tsx +0 -195
  307. recce_nightly-1.25.0.20251118/js/src/components/valuediff/ValueDiffForm.tsx +0 -144
  308. recce_nightly-1.25.0.20251118/js/src/components/valuediff/ValueDiffResultView.tsx +0 -217
  309. recce_nightly-1.25.0.20251118/js/src/components/valuediff/shared.ts +0 -39
  310. recce_nightly-1.25.0.20251118/js/src/components/valuediff/valuediff.tsx +0 -521
  311. recce_nightly-1.25.0.20251118/js/src/constants/tooltipMessage.ts +0 -3
  312. recce_nightly-1.25.0.20251118/js/src/constants/urls.ts +0 -1
  313. recce_nightly-1.25.0.20251118/js/src/lib/UrlHash.ts +0 -12
  314. recce_nightly-1.25.0.20251118/js/src/lib/api/adhocQuery.ts +0 -65
  315. recce_nightly-1.25.0.20251118/js/src/lib/api/axiosClient.ts +0 -9
  316. recce_nightly-1.25.0.20251118/js/src/lib/api/cacheKeys.ts +0 -12
  317. recce_nightly-1.25.0.20251118/js/src/lib/api/checks.ts +0 -107
  318. recce_nightly-1.25.0.20251118/js/src/lib/api/cll.ts +0 -50
  319. recce_nightly-1.25.0.20251118/js/src/lib/api/connectToCloud.ts +0 -10
  320. recce_nightly-1.25.0.20251118/js/src/lib/api/flag.ts +0 -34
  321. recce_nightly-1.25.0.20251118/js/src/lib/api/info.ts +0 -197
  322. recce_nightly-1.25.0.20251118/js/src/lib/api/instanceInfo.ts +0 -22
  323. recce_nightly-1.25.0.20251118/js/src/lib/api/lineagecheck.ts +0 -34
  324. recce_nightly-1.25.0.20251118/js/src/lib/api/localStorageKeys.ts +0 -7
  325. recce_nightly-1.25.0.20251118/js/src/lib/api/models.ts +0 -54
  326. recce_nightly-1.25.0.20251118/js/src/lib/api/profile.ts +0 -62
  327. recce_nightly-1.25.0.20251118/js/src/lib/api/rowcount.ts +0 -16
  328. recce_nightly-1.25.0.20251118/js/src/lib/api/runs.ts +0 -159
  329. recce_nightly-1.25.0.20251118/js/src/lib/api/schemacheck.ts +0 -30
  330. recce_nightly-1.25.0.20251118/js/src/lib/api/select.ts +0 -22
  331. recce_nightly-1.25.0.20251118/js/src/lib/api/sessionStorageKeys.ts +0 -8
  332. recce_nightly-1.25.0.20251118/js/src/lib/api/state.ts +0 -114
  333. recce_nightly-1.25.0.20251118/js/src/lib/api/track.ts +0 -131
  334. recce_nightly-1.25.0.20251118/js/src/lib/api/types.ts +0 -297
  335. recce_nightly-1.25.0.20251118/js/src/lib/api/user.ts +0 -42
  336. recce_nightly-1.25.0.20251118/js/src/lib/api/valuediff.ts +0 -42
  337. recce_nightly-1.25.0.20251118/js/src/lib/api/version.ts +0 -33
  338. recce_nightly-1.25.0.20251118/js/src/lib/const.ts +0 -9
  339. recce_nightly-1.25.0.20251118/js/src/lib/formatSelect.ts +0 -50
  340. recce_nightly-1.25.0.20251118/js/src/lib/hooks/LineageGraphContext.tsx +0 -447
  341. recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceActionContext.tsx +0 -257
  342. recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceCheckContext.tsx +0 -33
  343. recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceContextProvider.tsx +0 -34
  344. recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceInstanceContext.tsx +0 -124
  345. recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceQueryContext.tsx +0 -98
  346. recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceShareStateContext.tsx +0 -57
  347. recce_nightly-1.25.0.20251118/js/src/lib/hooks/ScreenShot.tsx +0 -357
  348. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useCheckToast.tsx +0 -14
  349. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useClipBoardToast.tsx +0 -27
  350. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useCountdownToast.tsx +0 -102
  351. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useFeedbackCollectionToast.tsx +0 -124
  352. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useGuideToast.tsx +0 -45
  353. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useHashLocation.ts +0 -19
  354. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useModelColumns.tsx +0 -113
  355. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useRecceInstanceInfo.tsx +0 -10
  356. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useRecceServerFlag.tsx +0 -10
  357. recce_nightly-1.25.0.20251118/js/src/lib/hooks/useRun.tsx +0 -87
  358. recce_nightly-1.25.0.20251118/js/src/lib/mergeKeys.test.ts +0 -89
  359. recce_nightly-1.25.0.20251118/js/src/lib/mergeKeys.ts +0 -86
  360. recce_nightly-1.25.0.20251118/js/src/lib/utils/urls.ts +0 -16
  361. recce_nightly-1.25.0.20251118/js/src/utils/DropdownValuesInput.tsx +0 -235
  362. recce_nightly-1.25.0.20251118/js/src/utils/formatters.tsx +0 -237
  363. recce_nightly-1.25.0.20251118/js/src/utils/transforms.ts +0 -72
  364. recce_nightly-1.25.0.20251118/js/theme/components/Checkbox.ts +0 -108
  365. recce_nightly-1.25.0.20251118/js/theme/components/Tooltip.ts +0 -9
  366. recce_nightly-1.25.0.20251118/js/tsconfig.json +0 -37
  367. recce_nightly-1.25.0.20251118/macros/README.md +0 -8
  368. recce_nightly-1.25.0.20251118/macros/recce_athena.sql +0 -73
  369. recce_nightly-1.25.0.20251118/pyproject.toml +0 -15
  370. recce_nightly-1.25.0.20251118/recce/VERSION +0 -1
  371. recce_nightly-1.25.0.20251118/recce/adapter/__init__.py +0 -0
  372. recce_nightly-1.25.0.20251118/recce/apis/__init__.py +0 -0
  373. recce_nightly-1.25.0.20251118/recce/data/404.html +0 -1
  374. recce_nightly-1.25.0.20251118/recce/data/__next.__PAGE__.txt +0 -10
  375. recce_nightly-1.25.0.20251118/recce/data/__next._full.txt +0 -23
  376. recce_nightly-1.25.0.20251118/recce/data/__next._index.txt +0 -8
  377. recce_nightly-1.25.0.20251118/recce/data/__next._tree.txt +0 -5
  378. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/00696804343358a8.js +0 -110
  379. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/02b996c7f6a29a06.js +0 -4
  380. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/19c10d219a6a21ff.js +0 -1
  381. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/2df9ec28a061971d.js +0 -11
  382. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/3098c987393bda15.js +0 -1
  383. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/399e8d91a7e45073.js +0 -2
  384. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/4d0186f631230245.js +0 -1
  385. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/71f88fcc615bf282.js +0 -1
  386. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/7875b534b7e90557.js +0 -11
  387. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/80d2a95eaf1201ea.js +0 -1
  388. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/9979c6109bbbee35.js +0 -1
  389. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/99d638224186c118.js +0 -1
  390. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/d003eb36240e92f3.js +0 -1
  391. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/d3167cdfec4fc351.js +0 -1
  392. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/fcc53a88741a52f9.js +0 -1
  393. recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/turbopack-b1920d28cfb1f28d.js +0 -3
  394. recce_nightly-1.25.0.20251118/recce/data/_not-found/__next._full.txt +0 -17
  395. recce_nightly-1.25.0.20251118/recce/data/_not-found/__next._index.txt +0 -8
  396. recce_nightly-1.25.0.20251118/recce/data/_not-found/__next._not-found.txt +0 -4
  397. recce_nightly-1.25.0.20251118/recce/data/_not-found.html +0 -1
  398. recce_nightly-1.25.0.20251118/recce/data/_not-found.txt +0 -17
  399. recce_nightly-1.25.0.20251118/recce/data/auth_callback.html +0 -68
  400. recce_nightly-1.25.0.20251118/recce/data/favicon.ico +0 -0
  401. recce_nightly-1.25.0.20251118/recce/data/imgs/feedback/thumbs-down.png +0 -0
  402. recce_nightly-1.25.0.20251118/recce/data/imgs/feedback/thumbs-up.png +0 -0
  403. recce_nightly-1.25.0.20251118/recce/data/imgs/reload-image.svg +0 -4
  404. recce_nightly-1.25.0.20251118/recce/data/index.html +0 -1
  405. recce_nightly-1.25.0.20251118/recce/data/index.txt +0 -23
  406. recce_nightly-1.25.0.20251118/recce/data/logo/recce-logo-white.png +0 -0
  407. recce_nightly-1.25.0.20251118/recce/models/check.py +0 -55
  408. recce_nightly-1.25.0.20251118/recce_cloud/README.md +0 -479
  409. recce_nightly-1.25.0.20251118/recce_cloud/__init__.py +0 -24
  410. recce_nightly-1.25.0.20251118/recce_cloud/api/__init__.py +0 -17
  411. recce_nightly-1.25.0.20251118/recce_cloud/api/base.py +0 -111
  412. recce_nightly-1.25.0.20251118/recce_cloud/api/client.py +0 -150
  413. recce_nightly-1.25.0.20251118/recce_cloud/api/exceptions.py +0 -26
  414. recce_nightly-1.25.0.20251118/recce_cloud/api/factory.py +0 -63
  415. recce_nightly-1.25.0.20251118/recce_cloud/api/github.py +0 -76
  416. recce_nightly-1.25.0.20251118/recce_cloud/api/gitlab.py +0 -82
  417. recce_nightly-1.25.0.20251118/recce_cloud/artifact.py +0 -57
  418. recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/__init__.py +0 -9
  419. recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/base.py +0 -82
  420. recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/detector.py +0 -147
  421. recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/github_actions.py +0 -136
  422. recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/gitlab_ci.py +0 -130
  423. recce_nightly-1.25.0.20251118/recce_cloud/cli.py +0 -245
  424. recce_nightly-1.25.0.20251118/recce_cloud/upload.py +0 -214
  425. recce_nightly-1.25.0.20251118/recce_nightly.egg-info/PKG-INFO +0 -201
  426. recce_nightly-1.25.0.20251118/recce_nightly.egg-info/SOURCES.txt +0 -484
  427. recce_nightly-1.25.0.20251118/recce_nightly.egg-info/dependency_links.txt +0 -1
  428. recce_nightly-1.25.0.20251118/recce_nightly.egg-info/entry_points.txt +0 -2
  429. recce_nightly-1.25.0.20251118/recce_nightly.egg-info/requires.txt +0 -42
  430. recce_nightly-1.25.0.20251118/recce_nightly.egg-info/top_level.txt +0 -3
  431. recce_nightly-1.25.0.20251118/setup.cfg +0 -4
  432. recce_nightly-1.25.0.20251118/setup.py +0 -88
  433. recce_nightly-1.25.0.20251118/setup_cloud.py +0 -63
  434. recce_nightly-1.25.0.20251118/test.py +0 -0
  435. recce_nightly-1.25.0.20251118/tests/__init__.py +0 -0
  436. recce_nightly-1.25.0.20251118/tests/adapter/__init__.py +0 -0
  437. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/__init__.py +0 -0
  438. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/conftest.py +0 -17
  439. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -298
  440. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -25
  441. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -717
  442. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/.gitignore +0 -5
  443. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +0 -4
  444. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/manifest.json +0 -1
  445. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/package-lock.yml +0 -8
  446. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/packages.yml +0 -7
  447. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/profiles.yml +0 -6
  448. recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_selector.py +0 -202
  449. recce_nightly-1.25.0.20251118/tests/apis/row_count_diff.json +0 -59
  450. recce_nightly-1.25.0.20251118/tests/apis/test_run_func.py +0 -21
  451. recce_nightly-1.25.0.20251118/tests/catalog.json +0 -527
  452. recce_nightly-1.25.0.20251118/tests/data/config/recce.yml +0 -11
  453. recce_nightly-1.25.0.20251118/tests/data/manifest/base/catalog.json +0 -1
  454. recce_nightly-1.25.0.20251118/tests/data/manifest/base/manifest.json +0 -1
  455. recce_nightly-1.25.0.20251118/tests/data/manifest/pr2/catalog.json +0 -1
  456. recce_nightly-1.25.0.20251118/tests/data/manifest/pr2/manifest.json +0 -1
  457. recce_nightly-1.25.0.20251118/tests/manifest.json +0 -10655
  458. recce_nightly-1.25.0.20251118/tests/models/test_run_models.py +0 -295
  459. recce_nightly-1.25.0.20251118/tests/recce_cloud/__init__.py +0 -0
  460. recce_nightly-1.25.0.20251118/tests/recce_cloud/test_ci_providers.py +0 -351
  461. recce_nightly-1.25.0.20251118/tests/recce_cloud/test_cli.py +0 -372
  462. recce_nightly-1.25.0.20251118/tests/recce_cloud/test_client.py +0 -273
  463. recce_nightly-1.25.0.20251118/tests/recce_cloud/test_platform_clients.py +0 -333
  464. recce_nightly-1.25.0.20251118/tests/recce_state.json +0 -1
  465. recce_nightly-1.25.0.20251118/tests/state/test_cloud.py +0 -719
  466. recce_nightly-1.25.0.20251118/tests/state/test_local.py +0 -164
  467. recce_nightly-1.25.0.20251118/tests/state/test_state_loader.py +0 -211
  468. recce_nightly-1.25.0.20251118/tests/tasks/__init__.py +0 -0
  469. recce_nightly-1.25.0.20251118/tests/tasks/conftest.py +0 -4
  470. recce_nightly-1.25.0.20251118/tests/tasks/test_histogram.py +0 -129
  471. recce_nightly-1.25.0.20251118/tests/tasks/test_lineage.py +0 -55
  472. recce_nightly-1.25.0.20251118/tests/tasks/test_preset_checks.py +0 -64
  473. recce_nightly-1.25.0.20251118/tests/tasks/test_profile.py +0 -397
  474. recce_nightly-1.25.0.20251118/tests/tasks/test_query.py +0 -151
  475. recce_nightly-1.25.0.20251118/tests/tasks/test_row_count.py +0 -135
  476. recce_nightly-1.25.0.20251118/tests/tasks/test_schema.py +0 -122
  477. recce_nightly-1.25.0.20251118/tests/tasks/test_top_k.py +0 -77
  478. recce_nightly-1.25.0.20251118/tests/tasks/test_valuediff.py +0 -85
  479. recce_nightly-1.25.0.20251118/tests/test_cli.py +0 -236
  480. recce_nightly-1.25.0.20251118/tests/test_cli_mcp_optional.py +0 -45
  481. recce_nightly-1.25.0.20251118/tests/test_cloud_listing_cli.py +0 -324
  482. recce_nightly-1.25.0.20251118/tests/test_config.py +0 -43
  483. recce_nightly-1.25.0.20251118/tests/test_connect_to_cloud.py +0 -82
  484. recce_nightly-1.25.0.20251118/tests/test_core.py +0 -174
  485. recce_nightly-1.25.0.20251118/tests/test_dbt.py +0 -36
  486. recce_nightly-1.25.0.20251118/tests/test_mcp_server.py +0 -332
  487. recce_nightly-1.25.0.20251118/tests/test_pull_request.py +0 -130
  488. recce_nightly-1.25.0.20251118/tests/test_server.py +0 -104
  489. recce_nightly-1.25.0.20251118/tests/test_summary.py +0 -73
  490. recce_nightly-1.25.0.20251118/tests/util/test_api_token.py +0 -119
  491. recce_nightly-1.25.0.20251118/tests/util/test_breaking.py +0 -1427
  492. recce_nightly-1.25.0.20251118/tests/util/test_cll.py +0 -706
  493. recce_nightly-1.25.0.20251118/tests/util/test_lineage.py +0 -122
  494. recce_nightly-1.25.0.20251118/tests/util/test_onboarding_state.py +0 -84
  495. recce_nightly-1.25.0.20251118/tests/util/test_recce_cloud.py +0 -231
  496. recce_nightly-1.25.0.20251118/tox.ini +0 -39
  497. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/LICENSE +0 -0
  498. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/README.md +0 -0
  499. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/__init__.py +0 -0
  500. {recce_nightly-1.25.0.20251118/integration_tests/sqlmesh → recce_nightly-1.28.0.20251208/recce/adapter}/__init__.py +0 -0
  501. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/base.py +0 -0
  502. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/dbt_adapter/__init__.py +0 -0
  503. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
  504. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/sqlmesh_adapter.py +0 -0
  505. {recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/hooks → recce_nightly-1.28.0.20251208/recce/apis}/__init__.py +0 -0
  506. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/run_api.py +0 -0
  507. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/run_func.py +0 -0
  508. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/artifact.py +0 -0
  509. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/config.py +0 -0
  510. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/connect_to_cloud.py +0 -0
  511. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/core.py +0 -0
  512. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/chunks/a6dad97d9634a72d.js +0 -0
  513. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
  514. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
  515. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.f9d58125.woff +0 -0
  516. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
  517. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.a4fa76b5.woff +0 -0
  518. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
  519. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-latin-800-normal.d5761935.woff +0 -0
  520. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
  521. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.b671449b.woff +0 -0
  522. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.9f7b8541.woff +0 -0
  523. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
  524. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/reload-image.7aa931c7.svg +0 -0
  525. {recce_nightly-1.25.0.20251118/recce/data/_next/static/gIS4zIcPD_5Df8RLpMGPx → recce_nightly-1.28.0.20251208/recce/data/_next/static/vSqwDa77se-B9vgwcHKDr}/_buildManifest.js +0 -0
  526. {recce_nightly-1.25.0.20251118/recce/data/_next/static/gIS4zIcPD_5Df8RLpMGPx → recce_nightly-1.28.0.20251208/recce/data/_next/static/vSqwDa77se-B9vgwcHKDr}/_clientMiddlewareManifest.json +0 -0
  527. {recce_nightly-1.25.0.20251118/recce/data/_next/static/gIS4zIcPD_5Df8RLpMGPx → recce_nightly-1.28.0.20251208/recce/data/_next/static/vSqwDa77se-B9vgwcHKDr}/_ssgManifest.js +0 -0
  528. {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/auth_callback.html +0 -0
  529. {recce_nightly-1.25.0.20251118/js/app → recce_nightly-1.28.0.20251208/recce/data}/favicon.ico +0 -0
  530. {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/imgs/feedback/thumbs-down.png +0 -0
  531. {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/imgs/feedback/thumbs-up.png +0 -0
  532. {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/imgs/reload-image.svg +0 -0
  533. {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/logo/recce-logo-white.png +0 -0
  534. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/diff.py +0 -0
  535. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/CONFIG +0 -0
  536. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/SENTRY_DNS +0 -0
  537. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/__init__.py +0 -0
  538. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/collector.py +0 -0
  539. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/track.py +0 -0
  540. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/exceptions.py +0 -0
  541. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/git.py +0 -0
  542. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/github.py +0 -0
  543. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/models/__init__.py +0 -0
  544. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/pull_request.py +0 -0
  545. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/__init__.py +0 -0
  546. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/const.py +0 -0
  547. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/local.py +0 -0
  548. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/state.py +0 -0
  549. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/__init__.py +0 -0
  550. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/core.py +0 -0
  551. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/histogram.py +0 -0
  552. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/lineage.py +0 -0
  553. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/profile.py +0 -0
  554. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/query.py +0 -0
  555. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/rowcount.py +0 -0
  556. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/schema.py +0 -0
  557. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/top_k.py +0 -0
  558. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/valuediff.py +0 -0
  559. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/__init__.py +0 -0
  560. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/api_token.py +0 -0
  561. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/breaking.py +0 -0
  562. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/cache.py +0 -0
  563. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/cll.py +0 -0
  564. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/io.py +0 -0
  565. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/lineage.py +0 -0
  566. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/logger.py +0 -0
  567. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/onboarding_state.py +0 -0
  568. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/perf_tracking.py +0 -0
  569. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/pydantic_model.py +0 -0
  570. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/singleton.py +0 -0
  571. {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/yaml/__init__.py +0 -0
@@ -1,4 +1,5 @@
1
1
  venv
2
+ .venv
2
3
  .idea/
3
4
  *.egg-info/
4
5
  __pycache__/
@@ -16,6 +17,3 @@ build
16
17
  .DS_Store
17
18
 
18
19
  recce.yml
19
-
20
- # Generated VERSION file for recce-cloud package
21
- recce_cloud/VERSION
@@ -1,74 +1,63 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 1.25.0.20251118
3
+ Version: 1.28.0.20251208
4
4
  Summary: Environment diff tool for dbt
5
- Home-page: https://github.com/InfuseAI/recce
6
- Author: InfuseAI Dev Team
7
- Author-email: dev@infuseai.io
8
5
  Project-URL: Bug Tracker, https://github.com/InfuseAI/recce/issues
6
+ Project-URL: Homepage, https://github.com/InfuseAI/recce
7
+ Author-email: InfuseAI Dev Team <dev@infuseai.io>
8
+ License: Apache-2.0
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Operating System :: OS Independent
9
13
  Classifier: Programming Language :: Python :: 3.9
10
14
  Classifier: Programming Language :: Python :: 3.10
11
15
  Classifier: Programming Language :: Python :: 3.11
12
16
  Classifier: Programming Language :: Python :: 3.12
13
17
  Classifier: Programming Language :: Python :: 3.13
14
- Classifier: License :: OSI Approved :: Apache Software License
15
- Classifier: Operating System :: OS Independent
16
- Classifier: Development Status :: 4 - Beta
17
18
  Requires-Python: >=3.9
18
- Description-Content-Type: text/markdown
19
- License-File: LICENSE
20
19
  Requires-Dist: boto3
21
- Requires-Dist: requests>=2.28.1
22
- Requires-Dist: ruamel.yaml>=0.18.6
23
20
  Requires-Dist: click>=7.1
24
21
  Requires-Dist: deepdiff<9.0,>=7.0
25
- Requires-Dist: portalocker
26
22
  Requires-Dist: fastapi
23
+ Requires-Dist: gitpython
27
24
  Requires-Dist: itsdangerous
28
- Requires-Dist: uvicorn
29
- Requires-Dist: pydantic
30
25
  Requires-Dist: jinja2
26
+ Requires-Dist: packaging
27
+ Requires-Dist: portalocker
28
+ Requires-Dist: py-markdown-table
29
+ Requires-Dist: pydantic
30
+ Requires-Dist: pygithub
31
+ Requires-Dist: python-dateutil
32
+ Requires-Dist: python-multipart
33
+ Requires-Dist: pytz
31
34
  Requires-Dist: requests>=2.28.1
32
35
  Requires-Dist: rich>=12.0.0
36
+ Requires-Dist: ruamel-yaml>=0.18.6
33
37
  Requires-Dist: sentry-sdk
38
+ Requires-Dist: sqlglot<28.0,>=27.29.0
39
+ Requires-Dist: uvicorn
34
40
  Requires-Dist: watchdog
35
41
  Requires-Dist: websockets
36
- Requires-Dist: py-markdown-table
37
- Requires-Dist: python-dateutil
38
- Requires-Dist: python-multipart
39
- Requires-Dist: GitPython
40
- Requires-Dist: PyGithub
41
- Requires-Dist: sqlglot<29
42
- Requires-Dist: pytz
43
- Requires-Dist: packaging
44
- Provides-Extra: mcp
45
- Requires-Dist: mcp>=1.0.0; extra == "mcp"
46
42
  Provides-Extra: dev
47
- Requires-Dist: pytest>=4.6; extra == "dev"
48
- Requires-Dist: pytest-asyncio; extra == "dev"
49
- Requires-Dist: pytest-flake8; extra == "dev"
50
- Requires-Dist: black>=25.1.0; extra == "dev"
51
- Requires-Dist: isort>=6.0.1; extra == "dev"
52
- Requires-Dist: flake8>=7.2.0; extra == "dev"
53
- Requires-Dist: pre-commit>=4.2.0; extra == "dev"
54
- Requires-Dist: pytest-mypy; extra == "dev"
55
- Requires-Dist: pytest-cov; extra == "dev"
56
- Requires-Dist: twine; extra == "dev"
57
- Requires-Dist: tox; extra == "dev"
58
- Requires-Dist: pandas; extra == "dev"
59
- Requires-Dist: httpx; extra == "dev"
60
- Dynamic: author
61
- Dynamic: author-email
62
- Dynamic: classifier
63
- Dynamic: description
64
- Dynamic: description-content-type
65
- Dynamic: home-page
66
- Dynamic: license-file
67
- Dynamic: project-url
68
- Dynamic: provides-extra
69
- Dynamic: requires-dist
70
- Dynamic: requires-python
71
- Dynamic: summary
43
+ Requires-Dist: black>=25.1.0; extra == 'dev'
44
+ Requires-Dist: dbt-duckdb; extra == 'dev'
45
+ Requires-Dist: flake8>=7.2.0; extra == 'dev'
46
+ Requires-Dist: httpx; extra == 'dev'
47
+ Requires-Dist: isort>=6.0.1; extra == 'dev'
48
+ Requires-Dist: pandas; extra == 'dev'
49
+ Requires-Dist: pre-commit>=4.2.0; extra == 'dev'
50
+ Requires-Dist: pytest-asyncio<1.0,>=0.23; extra == 'dev'
51
+ Requires-Dist: pytest-cov; extra == 'dev'
52
+ Requires-Dist: pytest-flake8; extra == 'dev'
53
+ Requires-Dist: pytest-mypy; extra == 'dev'
54
+ Requires-Dist: pytest>=4.6; extra == 'dev'
55
+ Requires-Dist: tox; extra == 'dev'
56
+ Requires-Dist: tox-uv; extra == 'dev'
57
+ Requires-Dist: twine; extra == 'dev'
58
+ Provides-Extra: mcp
59
+ Requires-Dist: mcp>=1.0.0; (python_version >= '3.10') and extra == 'mcp'
60
+ Description-Content-Type: text/markdown
72
61
 
73
62
  <p align="center">
74
63
  <a href="https://reccehq.com">
@@ -0,0 +1,103 @@
1
+ [project]
2
+ name = "recce-nightly"
3
+ dynamic = ["version"]
4
+ description = "Environment diff tool for dbt"
5
+ readme = "README.md"
6
+ authors = [{name = "InfuseAI Dev Team", email = "dev@infuseai.io"}]
7
+ requires-python = ">=3.9"
8
+ license = {text = "Apache-2.0"}
9
+
10
+ dependencies = [
11
+ "boto3",
12
+ "requests>=2.28.1",
13
+ "ruamel.yaml>=0.18.6",
14
+ "click>=7.1",
15
+ "deepdiff>=7.0,<9.0",
16
+ "portalocker",
17
+ "fastapi",
18
+ "itsdangerous",
19
+ "uvicorn",
20
+ "pydantic",
21
+ "jinja2",
22
+ "rich>=12.0.0",
23
+ "sentry-sdk",
24
+ "watchdog",
25
+ "websockets",
26
+ "py-markdown-table",
27
+ "python-dateutil",
28
+ "python-multipart",
29
+ "GitPython",
30
+ "PyGithub",
31
+ "sqlglot>=27.29.0,<28.0",
32
+ "pytz",
33
+ "packaging",
34
+ ]
35
+
36
+ classifiers = [
37
+ "Programming Language :: Python :: 3.9",
38
+ "Programming Language :: Python :: 3.10",
39
+ "Programming Language :: Python :: 3.11",
40
+ "Programming Language :: Python :: 3.12",
41
+ "Programming Language :: Python :: 3.13",
42
+ "License :: OSI Approved :: Apache Software License",
43
+ "Operating System :: OS Independent",
44
+ "Development Status :: 4 - Beta",
45
+ ]
46
+
47
+ [project.optional-dependencies]
48
+ mcp = ["mcp>=1.0.0; python_version >= '3.10'"]
49
+ dev = [
50
+ "pytest>=4.6",
51
+ "pytest-asyncio>=0.23,<1.0",
52
+ "pytest-flake8",
53
+ "black>=25.1.0",
54
+ "isort>=6.0.1",
55
+ "flake8>=7.2.0",
56
+ "pre-commit>=4.2.0",
57
+ "pytest-mypy",
58
+ "pytest-cov",
59
+ "twine",
60
+ "tox",
61
+ "tox-uv",
62
+ "pandas",
63
+ "httpx",
64
+ "dbt-duckdb",
65
+ ]
66
+
67
+ [project.scripts]
68
+ recce = "recce.cli:cli"
69
+
70
+ [project.urls]
71
+ "Bug Tracker" = "https://github.com/InfuseAI/recce/issues"
72
+ "Homepage" = "https://github.com/InfuseAI/recce"
73
+
74
+ [build-system]
75
+ requires = ["hatchling"]
76
+ build-backend = "hatchling.build"
77
+
78
+ [tool.hatch.version]
79
+ path = "recce/VERSION"
80
+ pattern = "(?P<version>.+)"
81
+
82
+ [tool.hatch.build.targets.sdist]
83
+ include = [
84
+ "/recce",
85
+ ]
86
+
87
+ [tool.hatch.build.targets.wheel]
88
+ packages = ["recce"]
89
+
90
+ [tool.uv.workspace]
91
+ members = ["recce_cloud"]
92
+
93
+ [tool.black]
94
+ line-length = 120
95
+
96
+ [tool.isort]
97
+ profile = "black"
98
+
99
+ [tool.pytest.ini_options]
100
+ markers = [
101
+ "asyncio: mark test as an async test (used by pytest-asyncio)",
102
+ ]
103
+ asyncio_default_fixture_loop_scope = "function"
@@ -0,0 +1 @@
1
+ 1.28.0.20251208
@@ -1,4 +1,3 @@
1
- from datetime import datetime, timezone
2
1
  from typing import Optional
3
2
  from uuid import UUID
4
3
 
@@ -153,22 +152,10 @@ class PatchCheckIn(BaseModel):
153
152
 
154
153
  @check_router.patch("/checks/{check_id}", status_code=200, response_model=CheckOut, response_model_exclude_none=True)
155
154
  async def update_check_handler(check_id: UUID, patch: PatchCheckIn, background_tasks: BackgroundTasks):
156
- check = CheckDAO().find_check_by_id(check_id)
155
+ check = CheckDAO().update_check_by_id(check_id, patch)
157
156
  if check is None:
158
157
  raise HTTPException(status_code=404, detail="Not Found")
159
158
 
160
- if patch.name is not None:
161
- check.name = patch.name
162
- if patch.description is not None:
163
- check.description = patch.description
164
- if patch.params is not None:
165
- check.params = patch.params
166
- if patch.view_options is not None:
167
- check.view_options = patch.view_options
168
- if patch.is_checked is not None:
169
- check.is_checked = patch.is_checked
170
- check.updated_at = datetime.now(timezone.utc).replace(microsecond=0)
171
-
172
159
  background_tasks.add_task(export_persistent_state)
173
160
  return CheckOut.from_check(check)
174
161
 
@@ -195,3 +182,22 @@ async def reorder_handler(order: ReorderChecksIn):
195
182
  CheckDAO().reorder(order.source, order.destination)
196
183
  except RecceException as e:
197
184
  raise HTTPException(status_code=400, detail=e.message)
185
+
186
+
187
+ @check_router.post("/checks/{check_id}/mark-as-preset", status_code=204)
188
+ async def mark_as_preset_check_handler(check_id: UUID, background_tasks: BackgroundTasks):
189
+ """
190
+ Mark an existing check as a preset check (cloud users only).
191
+
192
+ This creates a preset check from the specified check.
193
+ Only available for users with cloud mode enabled.
194
+
195
+ Returns:
196
+ 204 No Content: Successfully marked check as preset
197
+ 400 Bad Request: Error with detail message (e.g., not in cloud mode, check not found)
198
+ """
199
+ try:
200
+ CheckDAO().mark_as_preset_check(check_id)
201
+ background_tasks.add_task(export_persistent_state)
202
+ except RecceException as e:
203
+ raise HTTPException(status_code=400, detail=e.message)
@@ -0,0 +1,353 @@
1
+ """
2
+ Check Events API endpoints.
3
+
4
+ This module provides REST endpoints for check events (timeline/conversation),
5
+ proxying requests to Recce Cloud. This feature is only available for cloud users.
6
+ """
7
+
8
+ import logging
9
+ from typing import List, Optional
10
+ from uuid import UUID
11
+
12
+ from fastapi import APIRouter, HTTPException
13
+ from pydantic import BaseModel
14
+
15
+ from recce.core import default_context
16
+ from recce.event import get_recce_api_token
17
+ from recce.exceptions import RecceException
18
+ from recce.util.cloud.check_events import CheckEventsCloud
19
+ from recce.util.recce_cloud import RecceCloud, RecceCloudException
20
+
21
+ logger = logging.getLogger("uvicorn")
22
+
23
+ check_events_router = APIRouter(tags=["check_events"])
24
+
25
+
26
+ # ============================================================================
27
+ # Helper Functions
28
+ # ============================================================================
29
+
30
+
31
+ def _is_cloud_user() -> bool:
32
+ """Check if the current user is connected to Recce Cloud."""
33
+ ctx = default_context()
34
+ if ctx is None or ctx.state_loader is None:
35
+ return False
36
+ return hasattr(ctx.state_loader, "session_id") and ctx.state_loader.session_id is not None
37
+
38
+
39
+ def _get_session_info() -> tuple:
40
+ """
41
+ Get organization ID, project ID, and session ID from state loader.
42
+
43
+ Returns:
44
+ tuple: (org_id, project_id, session_id)
45
+
46
+ Raises:
47
+ HTTPException: If not in cloud mode or session info unavailable
48
+ """
49
+ if not _is_cloud_user():
50
+ raise HTTPException(
51
+ status_code=400,
52
+ detail="Check events are only available when connected to Recce Cloud.",
53
+ )
54
+
55
+ ctx = default_context()
56
+ state_loader = ctx.state_loader
57
+
58
+ session_id = state_loader.session_id
59
+
60
+ # Check if org_id and project_id are cached
61
+ if hasattr(state_loader, "org_id") and hasattr(state_loader, "project_id"):
62
+ return state_loader.org_id, state_loader.project_id, session_id
63
+
64
+ # Fetch from cloud API
65
+ api_token = get_recce_api_token() or state_loader.token
66
+ if not api_token:
67
+ raise HTTPException(
68
+ status_code=401,
69
+ detail="Cannot access Recce Cloud: no API token available.",
70
+ )
71
+
72
+ try:
73
+ recce_cloud = RecceCloud(api_token)
74
+ session = recce_cloud.get_session(session_id)
75
+
76
+ org_id = session.get("org_id")
77
+ project_id = session.get("project_id")
78
+
79
+ if not org_id or not project_id:
80
+ raise HTTPException(
81
+ status_code=400,
82
+ detail=f"Session {session_id} does not belong to a valid organization or project.",
83
+ )
84
+
85
+ # Cache for future use
86
+ state_loader.org_id = org_id
87
+ state_loader.project_id = project_id
88
+
89
+ return org_id, project_id, session_id
90
+
91
+ except RecceCloudException as e:
92
+ logger.error(f"Failed to get session info: {e}")
93
+ raise HTTPException(status_code=e.status_code, detail=str(e.reason))
94
+
95
+
96
+ def _get_events_client() -> CheckEventsCloud:
97
+ """
98
+ Get the CheckEventsCloud client.
99
+
100
+ Returns:
101
+ CheckEventsCloud: Cloud client for event operations
102
+
103
+ Raises:
104
+ HTTPException: If client cannot be initialized
105
+ """
106
+ ctx = default_context()
107
+ api_token = get_recce_api_token() or ctx.state_loader.token
108
+
109
+ if not api_token:
110
+ raise HTTPException(
111
+ status_code=401,
112
+ detail="Cannot access Recce Cloud: no API token available.",
113
+ )
114
+
115
+ return CheckEventsCloud(api_token)
116
+
117
+
118
+ # ============================================================================
119
+ # Pydantic Models
120
+ # ============================================================================
121
+
122
+
123
+ class CheckEventActorOut(BaseModel):
124
+ """Actor who performed the event."""
125
+
126
+ type: str # "user", "recce_ai", "preset_system"
127
+ user_id: Optional[int] = None
128
+ login: Optional[str] = None
129
+ fullname: Optional[str] = None
130
+
131
+
132
+ class CheckEventOut(BaseModel):
133
+ """Check event response model."""
134
+
135
+ id: str
136
+ check_id: str
137
+ event_type: str
138
+ actor: CheckEventActorOut
139
+ content: Optional[str] = None
140
+ old_value: Optional[str] = None
141
+ new_value: Optional[str] = None
142
+ is_edited: bool = False
143
+ is_deleted: bool = False
144
+ created_at: str
145
+ updated_at: str
146
+
147
+
148
+ class CreateCommentIn(BaseModel):
149
+ """Request body for creating a comment."""
150
+
151
+ content: str
152
+
153
+
154
+ class UpdateCommentIn(BaseModel):
155
+ """Request body for updating a comment."""
156
+
157
+ content: str
158
+
159
+
160
+ # ============================================================================
161
+ # API Endpoints
162
+ # ============================================================================
163
+
164
+
165
+ @check_events_router.get(
166
+ "/checks/{check_id}/events",
167
+ status_code=200,
168
+ response_model=List[CheckEventOut],
169
+ )
170
+ async def list_check_events(check_id: UUID):
171
+ """
172
+ List all events for a check in chronological order.
173
+
174
+ This endpoint returns all events (comments, state changes, etc.) for the
175
+ specified check. Events are returned in chronological order (oldest first).
176
+
177
+ Args:
178
+ check_id: The check ID
179
+
180
+ Returns:
181
+ List of CheckEventOut objects
182
+
183
+ Raises:
184
+ 400: Not connected to Recce Cloud
185
+ 401: No API token available
186
+ 404: Check not found
187
+ """
188
+ try:
189
+ org_id, project_id, session_id = _get_session_info()
190
+ client = _get_events_client()
191
+
192
+ events = client.list_events(org_id, project_id, session_id, str(check_id))
193
+ return events
194
+
195
+ except RecceCloudException as e:
196
+ logger.error(f"Failed to list check events: {e}")
197
+ raise HTTPException(status_code=e.status_code, detail=str(e.reason))
198
+ except RecceException as e:
199
+ logger.error(f"Failed to list check events: {e}")
200
+ raise HTTPException(status_code=400, detail=str(e))
201
+
202
+
203
+ @check_events_router.get(
204
+ "/checks/{check_id}/events/{event_id}",
205
+ status_code=200,
206
+ response_model=CheckEventOut,
207
+ )
208
+ async def get_check_event(check_id: UUID, event_id: UUID):
209
+ """
210
+ Get a specific event by ID.
211
+
212
+ Args:
213
+ check_id: The check ID
214
+ event_id: The event ID
215
+
216
+ Returns:
217
+ CheckEventOut object
218
+
219
+ Raises:
220
+ 400: Not connected to Recce Cloud
221
+ 401: No API token available
222
+ 404: Event not found
223
+ """
224
+ try:
225
+ org_id, project_id, session_id = _get_session_info()
226
+ client = _get_events_client()
227
+
228
+ event = client.get_event(org_id, project_id, session_id, str(check_id), str(event_id))
229
+ return event
230
+
231
+ except RecceCloudException as e:
232
+ logger.error(f"Failed to get check event: {e}")
233
+ raise HTTPException(status_code=e.status_code, detail=str(e.reason))
234
+ except RecceException as e:
235
+ logger.error(f"Failed to get check event: {e}")
236
+ raise HTTPException(status_code=400, detail=str(e))
237
+
238
+
239
+ @check_events_router.post(
240
+ "/checks/{check_id}/events",
241
+ status_code=201,
242
+ response_model=CheckEventOut,
243
+ )
244
+ async def create_comment(check_id: UUID, body: CreateCommentIn):
245
+ """
246
+ Create a new comment on a check.
247
+
248
+ Args:
249
+ check_id: The check ID
250
+ body: Request body containing comment content
251
+
252
+ Returns:
253
+ Created CheckEventOut object
254
+
255
+ Raises:
256
+ 400: Not connected to Recce Cloud or invalid content
257
+ 401: No API token available
258
+ 404: Check not found
259
+ """
260
+ if not body.content or not body.content.strip():
261
+ raise HTTPException(status_code=400, detail="Comment content cannot be empty.")
262
+
263
+ try:
264
+ org_id, project_id, session_id = _get_session_info()
265
+ client = _get_events_client()
266
+
267
+ event = client.create_comment(org_id, project_id, session_id, str(check_id), body.content)
268
+ return event
269
+
270
+ except RecceCloudException as e:
271
+ logger.error(f"Failed to create comment: {e}")
272
+ raise HTTPException(status_code=e.status_code, detail=str(e.reason))
273
+ except RecceException as e:
274
+ logger.error(f"Failed to create comment: {e}")
275
+ raise HTTPException(status_code=400, detail=str(e))
276
+
277
+
278
+ @check_events_router.patch(
279
+ "/checks/{check_id}/events/{event_id}",
280
+ status_code=200,
281
+ response_model=CheckEventOut,
282
+ )
283
+ async def update_comment(check_id: UUID, event_id: UUID, body: UpdateCommentIn):
284
+ """
285
+ Update an existing comment.
286
+
287
+ Only the author or an admin can update a comment.
288
+
289
+ Args:
290
+ check_id: The check ID
291
+ event_id: The event ID of the comment to update
292
+ body: Request body containing new comment content
293
+
294
+ Returns:
295
+ Updated CheckEventOut object
296
+
297
+ Raises:
298
+ 400: Not connected to Recce Cloud or invalid content
299
+ 401: No API token available
300
+ 403: Not authorized to update this comment
301
+ 404: Comment not found
302
+ """
303
+ if not body.content or not body.content.strip():
304
+ raise HTTPException(status_code=400, detail="Comment content cannot be empty.")
305
+
306
+ try:
307
+ org_id, project_id, session_id = _get_session_info()
308
+ client = _get_events_client()
309
+
310
+ event = client.update_comment(org_id, project_id, session_id, str(check_id), str(event_id), body.content)
311
+ return event
312
+
313
+ except RecceCloudException as e:
314
+ logger.error(f"Failed to update comment: {e}")
315
+ raise HTTPException(status_code=e.status_code, detail=str(e.reason))
316
+ except RecceException as e:
317
+ logger.error(f"Failed to update comment: {e}")
318
+ raise HTTPException(status_code=400, detail=str(e))
319
+
320
+
321
+ @check_events_router.delete(
322
+ "/checks/{check_id}/events/{event_id}",
323
+ status_code=204,
324
+ )
325
+ async def delete_comment(check_id: UUID, event_id: UUID):
326
+ """
327
+ Delete a comment (soft delete).
328
+
329
+ Only the author or an admin can delete a comment. The comment will be
330
+ marked as deleted but remain in the timeline with a "Comment deleted" indicator.
331
+
332
+ Args:
333
+ check_id: The check ID
334
+ event_id: The event ID of the comment to delete
335
+
336
+ Raises:
337
+ 400: Not connected to Recce Cloud
338
+ 401: No API token available
339
+ 403: Not authorized to delete this comment
340
+ 404: Comment not found
341
+ """
342
+ try:
343
+ org_id, project_id, session_id = _get_session_info()
344
+ client = _get_events_client()
345
+
346
+ client.delete_comment(org_id, project_id, session_id, str(check_id), str(event_id))
347
+
348
+ except RecceCloudException as e:
349
+ logger.error(f"Failed to delete comment: {e}")
350
+ raise HTTPException(status_code=e.status_code, detail=str(e.reason))
351
+ except RecceException as e:
352
+ logger.error(f"Failed to delete comment: {e}")
353
+ raise HTTPException(status_code=400, detail=str(e))
@@ -86,10 +86,10 @@ def create_check_from_run(
86
86
  is_preset=is_preset,
87
87
  is_checked=is_checked,
88
88
  )
89
- CheckDAO().create(check)
90
- run.check_id = check.check_id
89
+ new_check = CheckDAO().create(check)
90
+ run.check_id = new_check.check_id
91
91
 
92
- return check
92
+ return new_check
93
93
 
94
94
 
95
95
  def create_check_without_run(
@@ -105,8 +105,8 @@ def create_check_without_run(
105
105
  is_preset=is_preset,
106
106
  is_checked=is_checked,
107
107
  )
108
- CheckDAO().create(check)
109
- return check
108
+ new_check = CheckDAO().create(check)
109
+ return new_check
110
110
 
111
111
 
112
112
  def purge_preset_checks():