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.
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/.gitignore +1 -3
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/PKG-INFO +38 -49
- recce_nightly-1.28.0.20251208/pyproject.toml +103 -0
- recce_nightly-1.28.0.20251208/recce/VERSION +1 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/check_api.py +20 -14
- recce_nightly-1.28.0.20251208/recce/apis/check_events_api.py +353 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/check_func.py +5 -5
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/cli.py +18 -28
- recce_nightly-1.28.0.20251208/recce/data/404.html +2 -0
- recce_nightly-1.28.0.20251208/recce/data/__next.@lineage.!KHNsb3Qp.__PAGE__.txt +7 -0
- recce_nightly-1.28.0.20251208/recce/data/__next.@lineage.!KHNsb3Qp.txt +4 -0
- recce_nightly-1.28.0.20251208/recce/data/__next.__PAGE__.txt +6 -0
- recce_nightly-1.28.0.20251208/recce/data/__next._full.txt +35 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/__next._head.txt +4 -4
- recce_nightly-1.28.0.20251208/recce/data/__next._index.txt +14 -0
- recce_nightly-1.28.0.20251208/recce/data/__next._tree.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/0489710f83376429.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/0d2c3b8c8eba1c62.js +2 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/11a2a2967dd70bfc.js +4 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/176e43f2d695c339.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/1cf016339b18d43c.js +11 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/20e6b06ab6f05dd0.js +2 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/305ac5b2525ffc64.js +2 -0
- 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
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/4149ea2824442ca7.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/47564ecaa69df934.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/5c4dfb0d09eaa401.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/620ef007f7c37991.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/6d8557f062aa4386.css +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/7af6b9e009c4950d.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/84b39e920d56185f.js +1 -0
- 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
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/923964f18c87d0f1.css +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/9c054b0600e24469.js +12 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/a52a26d8f55cf7b6.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/a7f990c720047721.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/a8dfac6ccae9e75f.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ab04baeee30276cb.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ab4525e48355a85e.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/b38427ccdc316e3d.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/cf15cb904925f808.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/d0f91117d77ff844.css +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/d42f134c322cba42.js +74 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/d917bc8d5a83f3ba.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/db3a7542d7e3920a.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/deeef6d77883a7dc.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/e3cbc8623fb2b320.js +34 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ebe8befeee9f808b.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/f2518281d70c5c02.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/f61ff1ff6b6a807d.js +12 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/f78dd13fdf964550.js +1 -0
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/ff4f7584a2ae9ff8.js +1 -0
- 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
- recce_nightly-1.28.0.20251208/recce/data/_next/static/chunks/turbopack-ffda7a361cccaf35.js +3 -0
- recce_nightly-1.28.0.20251208/recce/data/_not-found/__next._full.txt +24 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_not-found/__next._head.txt +4 -4
- recce_nightly-1.28.0.20251208/recce/data/_not-found/__next._index.txt +13 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_not-found/__next._not-found.__PAGE__.txt +2 -2
- recce_nightly-1.28.0.20251208/recce/data/_not-found/__next._not-found.txt +4 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_not-found/__next._tree.txt +6 -3
- recce_nightly-1.28.0.20251208/recce/data/_not-found.html +2 -0
- recce_nightly-1.28.0.20251208/recce/data/_not-found.txt +24 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next.@lineage.__DEFAULT__.txt +7 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next._full.txt +38 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next._head.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next._index.txt +14 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next._tree.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next.checks.__PAGE__.txt +10 -0
- recce_nightly-1.28.0.20251208/recce/data/checks/__next.checks.txt +4 -0
- recce_nightly-1.28.0.20251208/recce/data/checks.html +2 -0
- recce_nightly-1.28.0.20251208/recce/data/checks.txt +38 -0
- recce_nightly-1.28.0.20251208/recce/data/index.html +2 -0
- recce_nightly-1.28.0.20251208/recce/data/index.txt +35 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next.@lineage.__DEFAULT__.txt +7 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next._full.txt +38 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next._head.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next._index.txt +14 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next._tree.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next.lineage.__PAGE__.txt +10 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage/__next.lineage.txt +4 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage.html +2 -0
- recce_nightly-1.28.0.20251208/recce/data/lineage.txt +38 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next.@lineage.__DEFAULT__.txt +7 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next._full.txt +36 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next._head.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next._index.txt +14 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next._tree.txt +8 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next.query.__PAGE__.txt +9 -0
- recce_nightly-1.28.0.20251208/recce/data/query/__next.query.txt +4 -0
- recce_nightly-1.28.0.20251208/recce/data/query.html +2 -0
- recce_nightly-1.28.0.20251208/recce/data/query.txt +36 -0
- recce_nightly-1.28.0.20251208/recce/event/CONFIG.bak +1 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/mcp_server.py +22 -13
- recce_nightly-1.28.0.20251208/recce/models/check.py +473 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/models/run.py +3 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/models/types.py +3 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/run.py +14 -1
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/server.py +15 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/cloud.py +11 -1
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/state_loader.py +1 -1
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/summary.py +23 -3
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/dataframe.py +2 -3
- recce_nightly-1.28.0.20251208/recce/util/cloud/__init__.py +15 -0
- recce_nightly-1.28.0.20251208/recce/util/cloud/base.py +115 -0
- recce_nightly-1.28.0.20251208/recce/util/cloud/check_events.py +190 -0
- recce_nightly-1.28.0.20251208/recce/util/cloud/checks.py +242 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/recce_cloud.py +25 -0
- recce_nightly-1.25.0.20251118/.editorconfig +0 -26
- recce_nightly-1.25.0.20251118/.flake8 +0 -37
- recce_nightly-1.25.0.20251118/.github/ISSUE_TEMPLATE/bug_report.yml +0 -67
- recce_nightly-1.25.0.20251118/.github/ISSUE_TEMPLATE/custom.md +0 -10
- recce_nightly-1.25.0.20251118/.github/ISSUE_TEMPLATE/feature_request.yml +0 -42
- recce_nightly-1.25.0.20251118/.github/PULL_REQUEST_TEMPLATE.md +0 -21
- recce_nightly-1.25.0.20251118/.github/copilot-instructions.md +0 -331
- recce_nightly-1.25.0.20251118/.github/instructions/backend-instructions.md +0 -541
- recce_nightly-1.25.0.20251118/.github/instructions/frontend-instructions.md +0 -317
- recce_nightly-1.25.0.20251118/.github/workflows/build-statics.yaml +0 -65
- recce_nightly-1.25.0.20251118/.github/workflows/bump.yaml +0 -40
- recce_nightly-1.25.0.20251118/.github/workflows/integration-tests-cloud.yaml +0 -73
- recce_nightly-1.25.0.20251118/.github/workflows/integration-tests-sqlmesh.yaml +0 -33
- recce_nightly-1.25.0.20251118/.github/workflows/integration-tests.yaml +0 -56
- recce_nightly-1.25.0.20251118/.github/workflows/nightly.yaml +0 -214
- recce_nightly-1.25.0.20251118/.github/workflows/release.yaml +0 -143
- recce_nightly-1.25.0.20251118/.github/workflows/tests-js.yaml +0 -54
- recce_nightly-1.25.0.20251118/.github/workflows/tests-python.yaml +0 -103
- recce_nightly-1.25.0.20251118/.pre-commit-config.yaml +0 -25
- recce_nightly-1.25.0.20251118/CLAUDE.md +0 -343
- recce_nightly-1.25.0.20251118/CODE_OF_CONDUCT.md +0 -128
- recce_nightly-1.25.0.20251118/CONTRIBUTING.md +0 -107
- recce_nightly-1.25.0.20251118/Makefile +0 -135
- recce_nightly-1.25.0.20251118/RECCE_CLOUD.md +0 -81
- recce_nightly-1.25.0.20251118/SECURITY.md +0 -25
- recce_nightly-1.25.0.20251118/docs/PACKAGING.md +0 -340
- recce_nightly-1.25.0.20251118/docs/README.md +0 -1
- recce_nightly-1.25.0.20251118/integration_tests/dbt/.gitignore +0 -9
- recce_nightly-1.25.0.20251118/integration_tests/dbt/dbt_project.yml +0 -26
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/customers.sql +0 -69
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/docs.md +0 -14
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/orders.sql +0 -56
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/schema.yml +0 -82
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/schema.yml +0 -31
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/stg_customers.sql +0 -22
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/stg_orders.sql +0 -23
- recce_nightly-1.25.0.20251118/integration_tests/dbt/models/staging/stg_payments.sql +0 -25
- recce_nightly-1.25.0.20251118/integration_tests/dbt/packages.yml +0 -7
- recce_nightly-1.25.0.20251118/integration_tests/dbt/profiles.yml +0 -8
- recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_customers.csv +0 -101
- recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_orders.csv +0 -100
- recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_payments.csv +0 -114
- recce_nightly-1.25.0.20251118/integration_tests/dbt/seeds/raw_statuses.csv +0 -5
- recce_nightly-1.25.0.20251118/integration_tests/dbt/smoke_test.sh +0 -72
- recce_nightly-1.25.0.20251118/integration_tests/dbt/smoke_test_cloud.sh +0 -71
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/.gitignore +0 -3
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +0 -9
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/audits/items.sql +0 -7
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/audits/order_items.sql +0 -7
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/config.py +0 -171
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/data/.keep +0 -0
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/helper.py +0 -20
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/macros.py +0 -8
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/macros.sql +0 -8
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/macros/utils.py +0 -11
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/metrics/metrics.sql +0 -25
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +0 -41
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +0 -60
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/customers.sql +0 -32
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/items.py +0 -95
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/marketing.sql +0 -15
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/order_items.py +0 -95
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/orders.py +0 -70
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/raw_marketing.py +0 -62
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/top_waiters.sql +0 -23
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +0 -29
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiter_names.sql +0 -10
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +0 -29
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/models/waiters.py +0 -62
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/prep_env.sh +0 -16
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/recce.yml +0 -13
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/schema.yaml +0 -5
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/seeds/waiter_names.csv +0 -11
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/test_server.sh +0 -29
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +0 -63
- recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/tests/test_order_items.yaml +0 -72
- recce_nightly-1.25.0.20251118/js/.editorconfig +0 -27
- recce_nightly-1.25.0.20251118/js/.env.development +0 -5
- recce_nightly-1.25.0.20251118/js/.gitignore +0 -38
- recce_nightly-1.25.0.20251118/js/.husky/pre-commit +0 -32
- recce_nightly-1.25.0.20251118/js/.nvmrc +0 -1
- recce_nightly-1.25.0.20251118/js/README.md +0 -39
- recce_nightly-1.25.0.20251118/js/app/Providers.tsx +0 -25
- recce_nightly-1.25.0.20251118/js/app/global.css +0 -23
- recce_nightly-1.25.0.20251118/js/app/layout.tsx +0 -24
- recce_nightly-1.25.0.20251118/js/app/page.tsx +0 -579
- recce_nightly-1.25.0.20251118/js/biome.json +0 -313
- recce_nightly-1.25.0.20251118/js/jest.config.js +0 -15
- recce_nightly-1.25.0.20251118/js/jest.setup.js +0 -2
- recce_nightly-1.25.0.20251118/js/next.config.js +0 -13
- recce_nightly-1.25.0.20251118/js/package-lock.json +0 -13843
- recce_nightly-1.25.0.20251118/js/package.json +0 -104
- recce_nightly-1.25.0.20251118/js/pnpm-lock.yaml +0 -6974
- recce_nightly-1.25.0.20251118/js/pnpm-workspace.yaml +0 -6
- recce_nightly-1.25.0.20251118/js/postcss.config.js +0 -5
- recce_nightly-1.25.0.20251118/js/src/components/AuthModal/AuthModal.tsx +0 -211
- recce_nightly-1.25.0.20251118/js/src/components/app/AvatarDropdown.tsx +0 -128
- recce_nightly-1.25.0.20251118/js/src/components/app/EnvInfo.tsx +0 -276
- recce_nightly-1.25.0.20251118/js/src/components/app/Filename.tsx +0 -400
- recce_nightly-1.25.0.20251118/js/src/components/app/SetupConnectionPopover.tsx +0 -89
- recce_nightly-1.25.0.20251118/js/src/components/app/StateExporter.tsx +0 -52
- recce_nightly-1.25.0.20251118/js/src/components/app/StateImporter.tsx +0 -180
- recce_nightly-1.25.0.20251118/js/src/components/app/StateSharing.tsx +0 -127
- recce_nightly-1.25.0.20251118/js/src/components/app/StateSynchronizer.tsx +0 -194
- recce_nightly-1.25.0.20251118/js/src/components/charts/HistogramChart.tsx +0 -267
- recce_nightly-1.25.0.20251118/js/src/components/charts/SquareIcon.tsx +0 -19
- recce_nightly-1.25.0.20251118/js/src/components/charts/TopKSummaryList.tsx +0 -382
- recce_nightly-1.25.0.20251118/js/src/components/check/CheckBreadcrumb.tsx +0 -97
- recce_nightly-1.25.0.20251118/js/src/components/check/CheckDescription.tsx +0 -109
- recce_nightly-1.25.0.20251118/js/src/components/check/CheckDetail.tsx +0 -601
- recce_nightly-1.25.0.20251118/js/src/components/check/CheckEmptyState.tsx +0 -74
- recce_nightly-1.25.0.20251118/js/src/components/check/CheckList.tsx +0 -311
- recce_nightly-1.25.0.20251118/js/src/components/check/CheckPage.tsx +0 -184
- recce_nightly-1.25.0.20251118/js/src/components/check/LineageDiffView.tsx +0 -32
- recce_nightly-1.25.0.20251118/js/src/components/check/PresetCheckTemplateView.tsx +0 -51
- recce_nightly-1.25.0.20251118/js/src/components/check/SchemaDiffView.tsx +0 -245
- recce_nightly-1.25.0.20251118/js/src/components/check/check.ts +0 -25
- recce_nightly-1.25.0.20251118/js/src/components/data-grid/ScreenshotDataGrid.tsx +0 -45
- recce_nightly-1.25.0.20251118/js/src/components/errorboundary/ErrorBoundary.tsx +0 -65
- recce_nightly-1.25.0.20251118/js/src/components/histogram/HistogramDiffForm.tsx +0 -145
- recce_nightly-1.25.0.20251118/js/src/components/histogram/HistogramDiffResultView.tsx +0 -55
- recce_nightly-1.25.0.20251118/js/src/components/icons/index.tsx +0 -142
- recce_nightly-1.25.0.20251118/js/src/components/lineage/ActionControl.tsx +0 -61
- recce_nightly-1.25.0.20251118/js/src/components/lineage/ActionTag.tsx +0 -136
- recce_nightly-1.25.0.20251118/js/src/components/lineage/ChangeStatusLegend.tsx +0 -37
- recce_nightly-1.25.0.20251118/js/src/components/lineage/ColumnLevelLineageControl.tsx +0 -277
- recce_nightly-1.25.0.20251118/js/src/components/lineage/ColumnLevelLineageLegend.tsx +0 -48
- recce_nightly-1.25.0.20251118/js/src/components/lineage/GraphColumnNode.tsx +0 -193
- recce_nightly-1.25.0.20251118/js/src/components/lineage/GraphEdge.tsx +0 -59
- recce_nightly-1.25.0.20251118/js/src/components/lineage/GraphNode.tsx +0 -483
- recce_nightly-1.25.0.20251118/js/src/components/lineage/LineagePage.tsx +0 -10
- recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageView.tsx +0 -1260
- recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewContext.tsx +0 -86
- recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewContextMenu.tsx +0 -554
- recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewNotification.tsx +0 -56
- recce_nightly-1.25.0.20251118/js/src/components/lineage/LineageViewTopBar.tsx +0 -515
- recce_nightly-1.25.0.20251118/js/src/components/lineage/NodeSqlView.tsx +0 -154
- recce_nightly-1.25.0.20251118/js/src/components/lineage/NodeTag.tsx +0 -240
- recce_nightly-1.25.0.20251118/js/src/components/lineage/NodeView.tsx +0 -538
- recce_nightly-1.25.0.20251118/js/src/components/lineage/SandboxView.tsx +0 -426
- recce_nightly-1.25.0.20251118/js/src/components/lineage/SetupConnectionBanner.tsx +0 -39
- recce_nightly-1.25.0.20251118/js/src/components/lineage/SeverDisconnectedModalContent.tsx +0 -88
- recce_nightly-1.25.0.20251118/js/src/components/lineage/SingleEnvironmentQueryView.tsx +0 -135
- recce_nightly-1.25.0.20251118/js/src/components/lineage/graph.test.ts +0 -31
- recce_nightly-1.25.0.20251118/js/src/components/lineage/graph.ts +0 -58
- recce_nightly-1.25.0.20251118/js/src/components/lineage/lineage.test.ts +0 -169
- recce_nightly-1.25.0.20251118/js/src/components/lineage/lineage.ts +0 -521
- recce_nightly-1.25.0.20251118/js/src/components/lineage/styles.css +0 -9
- recce_nightly-1.25.0.20251118/js/src/components/lineage/styles.tsx +0 -149
- recce_nightly-1.25.0.20251118/js/src/components/lineage/useMultiNodesAction.ts +0 -314
- recce_nightly-1.25.0.20251118/js/src/components/lineage/useValueDiffAlertDialog.tsx +0 -90
- recce_nightly-1.25.0.20251118/js/src/components/onboarding-guide/Notification.tsx +0 -47
- recce_nightly-1.25.0.20251118/js/src/components/profile/ProfileDiffForm.tsx +0 -98
- recce_nightly-1.25.0.20251118/js/src/components/profile/ProfileDiffResultView.tsx +0 -216
- recce_nightly-1.25.0.20251118/js/src/components/query/ChangedOnlyCheckbox.tsx +0 -24
- recce_nightly-1.25.0.20251118/js/src/components/query/DiffText.tsx +0 -105
- recce_nightly-1.25.0.20251118/js/src/components/query/QueryDiffResultView.tsx +0 -430
- recce_nightly-1.25.0.20251118/js/src/components/query/QueryForm.tsx +0 -71
- recce_nightly-1.25.0.20251118/js/src/components/query/QueryPage.tsx +0 -263
- recce_nightly-1.25.0.20251118/js/src/components/query/QueryResultView.tsx +0 -357
- recce_nightly-1.25.0.20251118/js/src/components/query/SetupConnectionGuide.tsx +0 -45
- recce_nightly-1.25.0.20251118/js/src/components/query/SqlEditor.tsx +0 -266
- recce_nightly-1.25.0.20251118/js/src/components/query/ToggleSwitch.tsx +0 -79
- recce_nightly-1.25.0.20251118/js/src/components/query/querydiff.test.ts +0 -252
- recce_nightly-1.25.0.20251118/js/src/components/query/querydiff.tsx +0 -739
- recce_nightly-1.25.0.20251118/js/src/components/query/styles.css +0 -59
- recce_nightly-1.25.0.20251118/js/src/components/rowcount/RowCountDiffResultView.tsx +0 -177
- recce_nightly-1.25.0.20251118/js/src/components/rowcount/delta.ts +0 -11
- recce_nightly-1.25.0.20251118/js/src/components/run/RunList.tsx +0 -268
- recce_nightly-1.25.0.20251118/js/src/components/run/RunModal.tsx +0 -158
- recce_nightly-1.25.0.20251118/js/src/components/run/RunPage.tsx +0 -24
- recce_nightly-1.25.0.20251118/js/src/components/run/RunResultPane.tsx +0 -418
- recce_nightly-1.25.0.20251118/js/src/components/run/RunStatusAndDate.tsx +0 -90
- recce_nightly-1.25.0.20251118/js/src/components/run/RunToolbar.tsx +0 -40
- recce_nightly-1.25.0.20251118/js/src/components/run/RunView.tsx +0 -161
- recce_nightly-1.25.0.20251118/js/src/components/run/registry.ts +0 -214
- recce_nightly-1.25.0.20251118/js/src/components/run/types.ts +0 -14
- recce_nightly-1.25.0.20251118/js/src/components/schema/ColumnNameCell.tsx +0 -158
- recce_nightly-1.25.0.20251118/js/src/components/schema/SchemaView.tsx +0 -265
- recce_nightly-1.25.0.20251118/js/src/components/schema/schema.test.ts +0 -118
- recce_nightly-1.25.0.20251118/js/src/components/schema/schema.tsx +0 -201
- recce_nightly-1.25.0.20251118/js/src/components/schema/schemaDiff.ts +0 -32
- recce_nightly-1.25.0.20251118/js/src/components/schema/style.css +0 -82
- recce_nightly-1.25.0.20251118/js/src/components/screenshot/ScreenshotBox.tsx +0 -32
- recce_nightly-1.25.0.20251118/js/src/components/shared/HistoryToggle.tsx +0 -32
- recce_nightly-1.25.0.20251118/js/src/components/split/Split.tsx +0 -40
- recce_nightly-1.25.0.20251118/js/src/components/split/styles.css +0 -19
- recce_nightly-1.25.0.20251118/js/src/components/summary/ChangeSummary.tsx +0 -233
- recce_nightly-1.25.0.20251118/js/src/components/summary/SchemaSummary.tsx +0 -118
- recce_nightly-1.25.0.20251118/js/src/components/summary/SummaryView.tsx +0 -24
- recce_nightly-1.25.0.20251118/js/src/components/top-k/TopKDiffForm.tsx +0 -57
- recce_nightly-1.25.0.20251118/js/src/components/top-k/TopKDiffResultView.tsx +0 -61
- recce_nightly-1.25.0.20251118/js/src/components/ui/color-mode.tsx +0 -108
- recce_nightly-1.25.0.20251118/js/src/components/ui/provider.tsx +0 -16
- recce_nightly-1.25.0.20251118/js/src/components/ui/theme.ts +0 -222
- recce_nightly-1.25.0.20251118/js/src/components/ui/toaster.tsx +0 -43
- recce_nightly-1.25.0.20251118/js/src/components/ui/tooltip.tsx +0 -46
- recce_nightly-1.25.0.20251118/js/src/components/valuediff/ValueDiffDetailResultView.tsx +0 -195
- recce_nightly-1.25.0.20251118/js/src/components/valuediff/ValueDiffForm.tsx +0 -144
- recce_nightly-1.25.0.20251118/js/src/components/valuediff/ValueDiffResultView.tsx +0 -217
- recce_nightly-1.25.0.20251118/js/src/components/valuediff/shared.ts +0 -39
- recce_nightly-1.25.0.20251118/js/src/components/valuediff/valuediff.tsx +0 -521
- recce_nightly-1.25.0.20251118/js/src/constants/tooltipMessage.ts +0 -3
- recce_nightly-1.25.0.20251118/js/src/constants/urls.ts +0 -1
- recce_nightly-1.25.0.20251118/js/src/lib/UrlHash.ts +0 -12
- recce_nightly-1.25.0.20251118/js/src/lib/api/adhocQuery.ts +0 -65
- recce_nightly-1.25.0.20251118/js/src/lib/api/axiosClient.ts +0 -9
- recce_nightly-1.25.0.20251118/js/src/lib/api/cacheKeys.ts +0 -12
- recce_nightly-1.25.0.20251118/js/src/lib/api/checks.ts +0 -107
- recce_nightly-1.25.0.20251118/js/src/lib/api/cll.ts +0 -50
- recce_nightly-1.25.0.20251118/js/src/lib/api/connectToCloud.ts +0 -10
- recce_nightly-1.25.0.20251118/js/src/lib/api/flag.ts +0 -34
- recce_nightly-1.25.0.20251118/js/src/lib/api/info.ts +0 -197
- recce_nightly-1.25.0.20251118/js/src/lib/api/instanceInfo.ts +0 -22
- recce_nightly-1.25.0.20251118/js/src/lib/api/lineagecheck.ts +0 -34
- recce_nightly-1.25.0.20251118/js/src/lib/api/localStorageKeys.ts +0 -7
- recce_nightly-1.25.0.20251118/js/src/lib/api/models.ts +0 -54
- recce_nightly-1.25.0.20251118/js/src/lib/api/profile.ts +0 -62
- recce_nightly-1.25.0.20251118/js/src/lib/api/rowcount.ts +0 -16
- recce_nightly-1.25.0.20251118/js/src/lib/api/runs.ts +0 -159
- recce_nightly-1.25.0.20251118/js/src/lib/api/schemacheck.ts +0 -30
- recce_nightly-1.25.0.20251118/js/src/lib/api/select.ts +0 -22
- recce_nightly-1.25.0.20251118/js/src/lib/api/sessionStorageKeys.ts +0 -8
- recce_nightly-1.25.0.20251118/js/src/lib/api/state.ts +0 -114
- recce_nightly-1.25.0.20251118/js/src/lib/api/track.ts +0 -131
- recce_nightly-1.25.0.20251118/js/src/lib/api/types.ts +0 -297
- recce_nightly-1.25.0.20251118/js/src/lib/api/user.ts +0 -42
- recce_nightly-1.25.0.20251118/js/src/lib/api/valuediff.ts +0 -42
- recce_nightly-1.25.0.20251118/js/src/lib/api/version.ts +0 -33
- recce_nightly-1.25.0.20251118/js/src/lib/const.ts +0 -9
- recce_nightly-1.25.0.20251118/js/src/lib/formatSelect.ts +0 -50
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/LineageGraphContext.tsx +0 -447
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceActionContext.tsx +0 -257
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceCheckContext.tsx +0 -33
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceContextProvider.tsx +0 -34
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceInstanceContext.tsx +0 -124
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceQueryContext.tsx +0 -98
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/RecceShareStateContext.tsx +0 -57
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/ScreenShot.tsx +0 -357
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useCheckToast.tsx +0 -14
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useClipBoardToast.tsx +0 -27
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useCountdownToast.tsx +0 -102
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useFeedbackCollectionToast.tsx +0 -124
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useGuideToast.tsx +0 -45
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useHashLocation.ts +0 -19
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useModelColumns.tsx +0 -113
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useRecceInstanceInfo.tsx +0 -10
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useRecceServerFlag.tsx +0 -10
- recce_nightly-1.25.0.20251118/js/src/lib/hooks/useRun.tsx +0 -87
- recce_nightly-1.25.0.20251118/js/src/lib/mergeKeys.test.ts +0 -89
- recce_nightly-1.25.0.20251118/js/src/lib/mergeKeys.ts +0 -86
- recce_nightly-1.25.0.20251118/js/src/lib/utils/urls.ts +0 -16
- recce_nightly-1.25.0.20251118/js/src/utils/DropdownValuesInput.tsx +0 -235
- recce_nightly-1.25.0.20251118/js/src/utils/formatters.tsx +0 -237
- recce_nightly-1.25.0.20251118/js/src/utils/transforms.ts +0 -72
- recce_nightly-1.25.0.20251118/js/theme/components/Checkbox.ts +0 -108
- recce_nightly-1.25.0.20251118/js/theme/components/Tooltip.ts +0 -9
- recce_nightly-1.25.0.20251118/js/tsconfig.json +0 -37
- recce_nightly-1.25.0.20251118/macros/README.md +0 -8
- recce_nightly-1.25.0.20251118/macros/recce_athena.sql +0 -73
- recce_nightly-1.25.0.20251118/pyproject.toml +0 -15
- recce_nightly-1.25.0.20251118/recce/VERSION +0 -1
- recce_nightly-1.25.0.20251118/recce/adapter/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/recce/apis/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/recce/data/404.html +0 -1
- recce_nightly-1.25.0.20251118/recce/data/__next.__PAGE__.txt +0 -10
- recce_nightly-1.25.0.20251118/recce/data/__next._full.txt +0 -23
- recce_nightly-1.25.0.20251118/recce/data/__next._index.txt +0 -8
- recce_nightly-1.25.0.20251118/recce/data/__next._tree.txt +0 -5
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/00696804343358a8.js +0 -110
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/02b996c7f6a29a06.js +0 -4
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/19c10d219a6a21ff.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/2df9ec28a061971d.js +0 -11
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/3098c987393bda15.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/399e8d91a7e45073.js +0 -2
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/4d0186f631230245.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/71f88fcc615bf282.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/7875b534b7e90557.js +0 -11
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/80d2a95eaf1201ea.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/9979c6109bbbee35.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/99d638224186c118.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/d003eb36240e92f3.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/d3167cdfec4fc351.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/fcc53a88741a52f9.js +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_next/static/chunks/turbopack-b1920d28cfb1f28d.js +0 -3
- recce_nightly-1.25.0.20251118/recce/data/_not-found/__next._full.txt +0 -17
- recce_nightly-1.25.0.20251118/recce/data/_not-found/__next._index.txt +0 -8
- recce_nightly-1.25.0.20251118/recce/data/_not-found/__next._not-found.txt +0 -4
- recce_nightly-1.25.0.20251118/recce/data/_not-found.html +0 -1
- recce_nightly-1.25.0.20251118/recce/data/_not-found.txt +0 -17
- recce_nightly-1.25.0.20251118/recce/data/auth_callback.html +0 -68
- recce_nightly-1.25.0.20251118/recce/data/favicon.ico +0 -0
- recce_nightly-1.25.0.20251118/recce/data/imgs/feedback/thumbs-down.png +0 -0
- recce_nightly-1.25.0.20251118/recce/data/imgs/feedback/thumbs-up.png +0 -0
- recce_nightly-1.25.0.20251118/recce/data/imgs/reload-image.svg +0 -4
- recce_nightly-1.25.0.20251118/recce/data/index.html +0 -1
- recce_nightly-1.25.0.20251118/recce/data/index.txt +0 -23
- recce_nightly-1.25.0.20251118/recce/data/logo/recce-logo-white.png +0 -0
- recce_nightly-1.25.0.20251118/recce/models/check.py +0 -55
- recce_nightly-1.25.0.20251118/recce_cloud/README.md +0 -479
- recce_nightly-1.25.0.20251118/recce_cloud/__init__.py +0 -24
- recce_nightly-1.25.0.20251118/recce_cloud/api/__init__.py +0 -17
- recce_nightly-1.25.0.20251118/recce_cloud/api/base.py +0 -111
- recce_nightly-1.25.0.20251118/recce_cloud/api/client.py +0 -150
- recce_nightly-1.25.0.20251118/recce_cloud/api/exceptions.py +0 -26
- recce_nightly-1.25.0.20251118/recce_cloud/api/factory.py +0 -63
- recce_nightly-1.25.0.20251118/recce_cloud/api/github.py +0 -76
- recce_nightly-1.25.0.20251118/recce_cloud/api/gitlab.py +0 -82
- recce_nightly-1.25.0.20251118/recce_cloud/artifact.py +0 -57
- recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/__init__.py +0 -9
- recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/base.py +0 -82
- recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/detector.py +0 -147
- recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/github_actions.py +0 -136
- recce_nightly-1.25.0.20251118/recce_cloud/ci_providers/gitlab_ci.py +0 -130
- recce_nightly-1.25.0.20251118/recce_cloud/cli.py +0 -245
- recce_nightly-1.25.0.20251118/recce_cloud/upload.py +0 -214
- recce_nightly-1.25.0.20251118/recce_nightly.egg-info/PKG-INFO +0 -201
- recce_nightly-1.25.0.20251118/recce_nightly.egg-info/SOURCES.txt +0 -484
- recce_nightly-1.25.0.20251118/recce_nightly.egg-info/dependency_links.txt +0 -1
- recce_nightly-1.25.0.20251118/recce_nightly.egg-info/entry_points.txt +0 -2
- recce_nightly-1.25.0.20251118/recce_nightly.egg-info/requires.txt +0 -42
- recce_nightly-1.25.0.20251118/recce_nightly.egg-info/top_level.txt +0 -3
- recce_nightly-1.25.0.20251118/setup.cfg +0 -4
- recce_nightly-1.25.0.20251118/setup.py +0 -88
- recce_nightly-1.25.0.20251118/setup_cloud.py +0 -63
- recce_nightly-1.25.0.20251118/test.py +0 -0
- recce_nightly-1.25.0.20251118/tests/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/tests/adapter/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/conftest.py +0 -17
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -298
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -25
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -717
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/.gitignore +0 -5
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +0 -4
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/manifest.json +0 -1
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/package-lock.yml +0 -8
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/packages.yml +0 -7
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_proj/profiles.yml +0 -6
- recce_nightly-1.25.0.20251118/tests/adapter/dbt_adapter/test_selector.py +0 -202
- recce_nightly-1.25.0.20251118/tests/apis/row_count_diff.json +0 -59
- recce_nightly-1.25.0.20251118/tests/apis/test_run_func.py +0 -21
- recce_nightly-1.25.0.20251118/tests/catalog.json +0 -527
- recce_nightly-1.25.0.20251118/tests/data/config/recce.yml +0 -11
- recce_nightly-1.25.0.20251118/tests/data/manifest/base/catalog.json +0 -1
- recce_nightly-1.25.0.20251118/tests/data/manifest/base/manifest.json +0 -1
- recce_nightly-1.25.0.20251118/tests/data/manifest/pr2/catalog.json +0 -1
- recce_nightly-1.25.0.20251118/tests/data/manifest/pr2/manifest.json +0 -1
- recce_nightly-1.25.0.20251118/tests/manifest.json +0 -10655
- recce_nightly-1.25.0.20251118/tests/models/test_run_models.py +0 -295
- recce_nightly-1.25.0.20251118/tests/recce_cloud/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/tests/recce_cloud/test_ci_providers.py +0 -351
- recce_nightly-1.25.0.20251118/tests/recce_cloud/test_cli.py +0 -372
- recce_nightly-1.25.0.20251118/tests/recce_cloud/test_client.py +0 -273
- recce_nightly-1.25.0.20251118/tests/recce_cloud/test_platform_clients.py +0 -333
- recce_nightly-1.25.0.20251118/tests/recce_state.json +0 -1
- recce_nightly-1.25.0.20251118/tests/state/test_cloud.py +0 -719
- recce_nightly-1.25.0.20251118/tests/state/test_local.py +0 -164
- recce_nightly-1.25.0.20251118/tests/state/test_state_loader.py +0 -211
- recce_nightly-1.25.0.20251118/tests/tasks/__init__.py +0 -0
- recce_nightly-1.25.0.20251118/tests/tasks/conftest.py +0 -4
- recce_nightly-1.25.0.20251118/tests/tasks/test_histogram.py +0 -129
- recce_nightly-1.25.0.20251118/tests/tasks/test_lineage.py +0 -55
- recce_nightly-1.25.0.20251118/tests/tasks/test_preset_checks.py +0 -64
- recce_nightly-1.25.0.20251118/tests/tasks/test_profile.py +0 -397
- recce_nightly-1.25.0.20251118/tests/tasks/test_query.py +0 -151
- recce_nightly-1.25.0.20251118/tests/tasks/test_row_count.py +0 -135
- recce_nightly-1.25.0.20251118/tests/tasks/test_schema.py +0 -122
- recce_nightly-1.25.0.20251118/tests/tasks/test_top_k.py +0 -77
- recce_nightly-1.25.0.20251118/tests/tasks/test_valuediff.py +0 -85
- recce_nightly-1.25.0.20251118/tests/test_cli.py +0 -236
- recce_nightly-1.25.0.20251118/tests/test_cli_mcp_optional.py +0 -45
- recce_nightly-1.25.0.20251118/tests/test_cloud_listing_cli.py +0 -324
- recce_nightly-1.25.0.20251118/tests/test_config.py +0 -43
- recce_nightly-1.25.0.20251118/tests/test_connect_to_cloud.py +0 -82
- recce_nightly-1.25.0.20251118/tests/test_core.py +0 -174
- recce_nightly-1.25.0.20251118/tests/test_dbt.py +0 -36
- recce_nightly-1.25.0.20251118/tests/test_mcp_server.py +0 -332
- recce_nightly-1.25.0.20251118/tests/test_pull_request.py +0 -130
- recce_nightly-1.25.0.20251118/tests/test_server.py +0 -104
- recce_nightly-1.25.0.20251118/tests/test_summary.py +0 -73
- recce_nightly-1.25.0.20251118/tests/util/test_api_token.py +0 -119
- recce_nightly-1.25.0.20251118/tests/util/test_breaking.py +0 -1427
- recce_nightly-1.25.0.20251118/tests/util/test_cll.py +0 -706
- recce_nightly-1.25.0.20251118/tests/util/test_lineage.py +0 -122
- recce_nightly-1.25.0.20251118/tests/util/test_onboarding_state.py +0 -84
- recce_nightly-1.25.0.20251118/tests/util/test_recce_cloud.py +0 -231
- recce_nightly-1.25.0.20251118/tox.ini +0 -39
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/LICENSE +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/README.md +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118/integration_tests/sqlmesh → recce_nightly-1.28.0.20251208/recce/adapter}/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/base.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/dbt_adapter/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/adapter/sqlmesh_adapter.py +0 -0
- {recce_nightly-1.25.0.20251118/integration_tests/sqlmesh/hooks → recce_nightly-1.28.0.20251208/recce/apis}/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/run_api.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/apis/run_func.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/artifact.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/config.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/connect_to_cloud.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/core.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/chunks/a6dad97d9634a72d.js +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/data/_next/static/media/reload-image.7aa931c7.svg +0 -0
- {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
- {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
- {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
- {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/auth_callback.html +0 -0
- {recce_nightly-1.25.0.20251118/js/app → recce_nightly-1.28.0.20251208/recce/data}/favicon.ico +0 -0
- {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/imgs/feedback/thumbs-down.png +0 -0
- {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/imgs/feedback/thumbs-up.png +0 -0
- {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/imgs/reload-image.svg +0 -0
- {recce_nightly-1.25.0.20251118/js/public → recce_nightly-1.28.0.20251208/recce/data}/logo/recce-logo-white.png +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/diff.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/CONFIG +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/SENTRY_DNS +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/collector.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/event/track.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/exceptions.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/git.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/github.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/models/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/pull_request.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/const.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/local.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/state/state.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/core.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/histogram.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/lineage.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/profile.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/query.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/rowcount.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/schema.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/top_k.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/tasks/valuediff.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/__init__.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/api_token.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/breaking.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/cache.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/cll.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/io.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/lineage.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/logger.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/onboarding_state.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/perf_tracking.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/pydantic_model.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/util/singleton.py +0 -0
- {recce_nightly-1.25.0.20251118 → recce_nightly-1.28.0.20251208}/recce/yaml/__init__.py +0 -0
|
@@ -1,74 +1,63 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: recce-nightly
|
|
3
|
-
Version: 1.
|
|
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:
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
Requires-Dist:
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist: isort>=6.0.1; extra ==
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist: pre-commit>=4.2.0; extra ==
|
|
54
|
-
Requires-Dist: pytest-
|
|
55
|
-
Requires-Dist: pytest-cov; extra ==
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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().
|
|
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 =
|
|
89
|
+
new_check = CheckDAO().create(check)
|
|
90
|
+
run.check_id = new_check.check_id
|
|
91
91
|
|
|
92
|
-
return
|
|
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
|
|
108
|
+
new_check = CheckDAO().create(check)
|
|
109
|
+
return new_check
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
def purge_preset_checks():
|