@datarecce/ui 0.1.30 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/dist/api.d.mts +1 -1
  2. package/dist/api.d.ts +1 -1
  3. package/dist/components.d.mts +1 -1
  4. package/dist/components.d.ts +1 -1
  5. package/dist/hooks.d.mts +1 -1
  6. package/dist/hooks.d.ts +1 -1
  7. package/dist/{index-BNUP2V_N.d.ts → index-B9lSPJTi.d.ts} +184 -2
  8. package/dist/index-B9lSPJTi.d.ts.map +1 -0
  9. package/dist/{index-DOPZuhD8.d.mts → index-IIXVIoOL.d.mts} +253 -71
  10. package/dist/index-IIXVIoOL.d.mts.map +1 -0
  11. package/dist/index.d.mts +2 -2
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +8 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +3 -2
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/styles.css +4 -0
  18. package/dist/theme.d.mts +2 -185
  19. package/dist/theme.d.ts +2 -185
  20. package/dist/types.d.mts +1 -1
  21. package/dist/types.d.ts +1 -1
  22. package/package.json +4 -2
  23. package/recce-source/.editorconfig +26 -0
  24. package/recce-source/.flake8 +37 -0
  25. package/recce-source/.github/ISSUE_TEMPLATE/bug_report.yml +67 -0
  26. package/recce-source/.github/ISSUE_TEMPLATE/custom.md +10 -0
  27. package/recce-source/.github/ISSUE_TEMPLATE/feature_request.yml +42 -0
  28. package/recce-source/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  29. package/recce-source/.github/copilot-instructions.md +331 -0
  30. package/recce-source/.github/instructions/backend-instructions.md +541 -0
  31. package/recce-source/.github/instructions/frontend-instructions.md +317 -0
  32. package/recce-source/.github/workflows/build-statics.yaml +72 -0
  33. package/recce-source/.github/workflows/bump.yaml +48 -0
  34. package/recce-source/.github/workflows/integration-tests-cloud.yaml +92 -0
  35. package/recce-source/.github/workflows/integration-tests-sqlmesh.yaml +33 -0
  36. package/recce-source/.github/workflows/integration-tests.yaml +52 -0
  37. package/recce-source/.github/workflows/nightly.yaml +246 -0
  38. package/recce-source/.github/workflows/release.yaml +196 -0
  39. package/recce-source/.github/workflows/tests-js.yaml +58 -0
  40. package/recce-source/.github/workflows/tests-python.yaml +128 -0
  41. package/recce-source/.pre-commit-config.yaml +26 -0
  42. package/recce-source/CLAUDE.md +483 -0
  43. package/recce-source/CODE_OF_CONDUCT.md +128 -0
  44. package/recce-source/CONTRIBUTING.md +107 -0
  45. package/recce-source/LICENSE +201 -0
  46. package/recce-source/Makefile +126 -0
  47. package/recce-source/README.md +182 -0
  48. package/recce-source/RECCE_CLOUD.md +81 -0
  49. package/recce-source/SECURITY.md +25 -0
  50. package/recce-source/docs/PACKAGING.md +340 -0
  51. package/recce-source/docs/README.md +1 -0
  52. package/recce-source/integration_tests/dbt/dbt_project.yml +26 -0
  53. package/recce-source/integration_tests/dbt/models/customers.sql +69 -0
  54. package/recce-source/integration_tests/dbt/models/docs.md +14 -0
  55. package/recce-source/integration_tests/dbt/models/orders.sql +56 -0
  56. package/recce-source/integration_tests/dbt/models/schema.yml +82 -0
  57. package/recce-source/integration_tests/dbt/models/staging/schema.yml +31 -0
  58. package/recce-source/integration_tests/dbt/models/staging/stg_customers.sql +22 -0
  59. package/recce-source/integration_tests/dbt/models/staging/stg_orders.sql +23 -0
  60. package/recce-source/integration_tests/dbt/models/staging/stg_payments.sql +25 -0
  61. package/recce-source/integration_tests/dbt/packages.yml +7 -0
  62. package/recce-source/integration_tests/dbt/profiles.yml +8 -0
  63. package/recce-source/integration_tests/dbt/seeds/raw_customers.csv +101 -0
  64. package/recce-source/integration_tests/dbt/seeds/raw_orders.csv +100 -0
  65. package/recce-source/integration_tests/dbt/seeds/raw_payments.csv +114 -0
  66. package/recce-source/integration_tests/dbt/seeds/raw_statuses.csv +5 -0
  67. package/recce-source/integration_tests/dbt/smoke_test.sh +72 -0
  68. package/recce-source/integration_tests/dbt/smoke_test_cloud.sh +71 -0
  69. package/recce-source/integration_tests/sqlmesh/__init__.py +0 -0
  70. package/recce-source/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +9 -0
  71. package/recce-source/integration_tests/sqlmesh/audits/items.sql +7 -0
  72. package/recce-source/integration_tests/sqlmesh/audits/order_items.sql +7 -0
  73. package/recce-source/integration_tests/sqlmesh/config.py +171 -0
  74. package/recce-source/integration_tests/sqlmesh/helper.py +20 -0
  75. package/recce-source/integration_tests/sqlmesh/hooks/__init__.py +0 -0
  76. package/recce-source/integration_tests/sqlmesh/macros/__init__.py +0 -0
  77. package/recce-source/integration_tests/sqlmesh/macros/macros.py +8 -0
  78. package/recce-source/integration_tests/sqlmesh/macros/macros.sql +8 -0
  79. package/recce-source/integration_tests/sqlmesh/macros/utils.py +11 -0
  80. package/recce-source/integration_tests/sqlmesh/metrics/metrics.sql +25 -0
  81. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +41 -0
  82. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +60 -0
  83. package/recce-source/integration_tests/sqlmesh/models/customers.sql +32 -0
  84. package/recce-source/integration_tests/sqlmesh/models/items.py +95 -0
  85. package/recce-source/integration_tests/sqlmesh/models/marketing.sql +15 -0
  86. package/recce-source/integration_tests/sqlmesh/models/order_items.py +95 -0
  87. package/recce-source/integration_tests/sqlmesh/models/orders.py +70 -0
  88. package/recce-source/integration_tests/sqlmesh/models/raw_marketing.py +62 -0
  89. package/recce-source/integration_tests/sqlmesh/models/top_waiters.sql +23 -0
  90. package/recce-source/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +29 -0
  91. package/recce-source/integration_tests/sqlmesh/models/waiter_names.sql +10 -0
  92. package/recce-source/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +29 -0
  93. package/recce-source/integration_tests/sqlmesh/models/waiters.py +62 -0
  94. package/recce-source/integration_tests/sqlmesh/prep_env.sh +16 -0
  95. package/recce-source/integration_tests/sqlmesh/schema.yaml +5 -0
  96. package/recce-source/integration_tests/sqlmesh/seeds/waiter_names.csv +11 -0
  97. package/recce-source/integration_tests/sqlmesh/test_server.sh +29 -0
  98. package/recce-source/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +63 -0
  99. package/recce-source/integration_tests/sqlmesh/tests/test_order_items.yaml +72 -0
  100. package/recce-source/js/.editorconfig +27 -0
  101. package/recce-source/js/.env.development +5 -0
  102. package/recce-source/js/.husky/pre-commit +29 -0
  103. package/recce-source/js/.nvmrc +1 -0
  104. package/recce-source/js/README.md +39 -0
  105. package/recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx +65 -0
  106. package/recce-source/js/app/(mainComponents)/NavBar.tsx +228 -0
  107. package/recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx +107 -0
  108. package/recce-source/js/app/(mainComponents)/TopBar.tsx +252 -0
  109. package/recce-source/js/app/@lineage/default.tsx +20 -0
  110. package/recce-source/js/app/@lineage/page.tsx +14 -0
  111. package/recce-source/js/app/MainLayout.tsx +170 -0
  112. package/recce-source/js/app/Providers.tsx +49 -0
  113. package/recce-source/js/app/checks/page.tsx +296 -0
  114. package/recce-source/js/app/error.tsx +93 -0
  115. package/recce-source/js/app/favicon.ico +0 -0
  116. package/recce-source/js/app/global-error.tsx +115 -0
  117. package/recce-source/js/app/global.css +82 -0
  118. package/recce-source/js/app/layout.tsx +48 -0
  119. package/recce-source/js/app/lineage/page.tsx +15 -0
  120. package/recce-source/js/app/page.tsx +12 -0
  121. package/recce-source/js/app/query/page.tsx +8 -0
  122. package/recce-source/js/biome.json +313 -0
  123. package/recce-source/js/jest.config.js +34 -0
  124. package/recce-source/js/jest.globals.d.ts +32 -0
  125. package/recce-source/js/jest.setup.js +91 -0
  126. package/recce-source/js/next.config.js +16 -0
  127. package/recce-source/js/package-lock.json +13843 -0
  128. package/recce-source/js/package.json +123 -0
  129. package/recce-source/js/pnpm-lock.yaml +9235 -0
  130. package/recce-source/js/pnpm-workspace.yaml +6 -0
  131. package/recce-source/js/postcss.config.js +5 -0
  132. package/recce-source/js/public/auth_callback.html +68 -0
  133. package/recce-source/js/public/imgs/feedback/thumbs-down.png +0 -0
  134. package/recce-source/js/public/imgs/feedback/thumbs-up.png +0 -0
  135. package/recce-source/js/public/imgs/reload-image.svg +4 -0
  136. package/recce-source/js/public/logo/recce-logo-white.png +0 -0
  137. package/recce-source/js/src/components/AuthModal/AuthModal.tsx +202 -0
  138. package/recce-source/js/src/components/app/AvatarDropdown.tsx +159 -0
  139. package/recce-source/js/src/components/app/EnvInfo.tsx +357 -0
  140. package/recce-source/js/src/components/app/Filename.tsx +388 -0
  141. package/recce-source/js/src/components/app/SetupConnectionPopover.tsx +91 -0
  142. package/recce-source/js/src/components/app/StateExporter.tsx +57 -0
  143. package/recce-source/js/src/components/app/StateImporter.tsx +198 -0
  144. package/recce-source/js/src/components/app/StateSharing.tsx +145 -0
  145. package/recce-source/js/src/components/app/StateSynchronizer.tsx +205 -0
  146. package/recce-source/js/src/components/charts/HistogramChart.tsx +291 -0
  147. package/recce-source/js/src/components/charts/SquareIcon.tsx +51 -0
  148. package/recce-source/js/src/components/charts/TopKSummaryList.tsx +457 -0
  149. package/recce-source/js/src/components/charts/chartTheme.ts +74 -0
  150. package/recce-source/js/src/components/check/CheckBreadcrumb.tsx +97 -0
  151. package/recce-source/js/src/components/check/CheckDescription.tsx +134 -0
  152. package/recce-source/js/src/components/check/CheckDetail.tsx +797 -0
  153. package/recce-source/js/src/components/check/CheckEmptyState.tsx +84 -0
  154. package/recce-source/js/src/components/check/CheckList.tsx +320 -0
  155. package/recce-source/js/src/components/check/LineageDiffView.tsx +32 -0
  156. package/recce-source/js/src/components/check/PresetCheckTemplateView.tsx +48 -0
  157. package/recce-source/js/src/components/check/SchemaDiffView.tsx +290 -0
  158. package/recce-source/js/src/components/check/check.ts +25 -0
  159. package/recce-source/js/src/components/check/timeline/CheckTimeline.tsx +163 -0
  160. package/recce-source/js/src/components/check/timeline/CommentInput.tsx +84 -0
  161. package/recce-source/js/src/components/check/timeline/TimelineEvent.tsx +468 -0
  162. package/recce-source/js/src/components/check/timeline/index.ts +12 -0
  163. package/recce-source/js/src/components/check/utils.ts +12 -0
  164. package/recce-source/js/src/components/data-grid/ScreenshotDataGrid.tsx +333 -0
  165. package/recce-source/js/src/components/data-grid/agGridStyles.css +55 -0
  166. package/recce-source/js/src/components/data-grid/agGridTheme.ts +43 -0
  167. package/recce-source/js/src/components/editor/CodeEditor.tsx +107 -0
  168. package/recce-source/js/src/components/editor/DiffEditor.tsx +162 -0
  169. package/recce-source/js/src/components/editor/index.ts +12 -0
  170. package/recce-source/js/src/components/errorboundary/ErrorBoundary.tsx +87 -0
  171. package/recce-source/js/src/components/histogram/HistogramDiffForm.tsx +147 -0
  172. package/recce-source/js/src/components/histogram/HistogramDiffResultView.tsx +63 -0
  173. package/recce-source/js/src/components/icons/index.tsx +142 -0
  174. package/recce-source/js/src/components/lineage/ActionControl.tsx +63 -0
  175. package/recce-source/js/src/components/lineage/ActionTag.tsx +141 -0
  176. package/recce-source/js/src/components/lineage/ChangeStatusLegend.tsx +46 -0
  177. package/recce-source/js/src/components/lineage/ColumnLevelLineageControl.tsx +327 -0
  178. package/recce-source/js/src/components/lineage/ColumnLevelLineageLegend.tsx +57 -0
  179. package/recce-source/js/src/components/lineage/GraphColumnNode.tsx +199 -0
  180. package/recce-source/js/src/components/lineage/GraphEdge.tsx +59 -0
  181. package/recce-source/js/src/components/lineage/GraphNode.tsx +555 -0
  182. package/recce-source/js/src/components/lineage/LineagePage.tsx +10 -0
  183. package/recce-source/js/src/components/lineage/LineageView.tsx +1384 -0
  184. package/recce-source/js/src/components/lineage/LineageViewContext.tsx +86 -0
  185. package/recce-source/js/src/components/lineage/LineageViewContextMenu.tsx +637 -0
  186. package/recce-source/js/src/components/lineage/LineageViewNotification.tsx +64 -0
  187. package/recce-source/js/src/components/lineage/LineageViewTopBar.tsx +596 -0
  188. package/recce-source/js/src/components/lineage/NodeSqlView.tsx +136 -0
  189. package/recce-source/js/src/components/lineage/NodeTag.tsx +278 -0
  190. package/recce-source/js/src/components/lineage/NodeView.tsx +642 -0
  191. package/recce-source/js/src/components/lineage/SandboxView.tsx +436 -0
  192. package/recce-source/js/src/components/lineage/ServerDisconnectedModalContent.tsx +105 -0
  193. package/recce-source/js/src/components/lineage/SetupConnectionBanner.tsx +52 -0
  194. package/recce-source/js/src/components/lineage/SingleEnvironmentQueryView.tsx +152 -0
  195. package/recce-source/js/src/components/lineage/graph.test.ts +31 -0
  196. package/recce-source/js/src/components/lineage/graph.ts +58 -0
  197. package/recce-source/js/src/components/lineage/lineage.test.ts +169 -0
  198. package/recce-source/js/src/components/lineage/lineage.ts +521 -0
  199. package/recce-source/js/src/components/lineage/styles.css +42 -0
  200. package/recce-source/js/src/components/lineage/styles.tsx +165 -0
  201. package/recce-source/js/src/components/lineage/useMultiNodesAction.ts +352 -0
  202. package/recce-source/js/src/components/lineage/useValueDiffAlertDialog.tsx +108 -0
  203. package/recce-source/js/src/components/onboarding-guide/Notification.tsx +62 -0
  204. package/recce-source/js/src/components/profile/ProfileDiffForm.tsx +134 -0
  205. package/recce-source/js/src/components/profile/ProfileDiffResultView.tsx +245 -0
  206. package/recce-source/js/src/components/query/ChangedOnlyCheckbox.tsx +29 -0
  207. package/recce-source/js/src/components/query/DiffText.tsx +120 -0
  208. package/recce-source/js/src/components/query/QueryDiffResultView.tsx +470 -0
  209. package/recce-source/js/src/components/query/QueryForm.tsx +80 -0
  210. package/recce-source/js/src/components/query/QueryPage.tsx +282 -0
  211. package/recce-source/js/src/components/query/QueryResultView.tsx +180 -0
  212. package/recce-source/js/src/components/query/SetupConnectionGuide.tsx +57 -0
  213. package/recce-source/js/src/components/query/SqlEditor.tsx +245 -0
  214. package/recce-source/js/src/components/query/ToggleSwitch.tsx +84 -0
  215. package/recce-source/js/src/components/query/styles.css +21 -0
  216. package/recce-source/js/src/components/routing/DirectUrlAccess.test.tsx +428 -0
  217. package/recce-source/js/src/components/routing/LineageStatePreservation.test.tsx +311 -0
  218. package/recce-source/js/src/components/routing/Navigation.test.tsx +256 -0
  219. package/recce-source/js/src/components/rowcount/RowCountDiffResultView.tsx +109 -0
  220. package/recce-source/js/src/components/rowcount/delta.ts +11 -0
  221. package/recce-source/js/src/components/run/RunList.tsx +303 -0
  222. package/recce-source/js/src/components/run/RunModal.tsx +191 -0
  223. package/recce-source/js/src/components/run/RunPage.tsx +26 -0
  224. package/recce-source/js/src/components/run/RunResultPane.tsx +454 -0
  225. package/recce-source/js/src/components/run/RunStatusAndDate.tsx +106 -0
  226. package/recce-source/js/src/components/run/RunToolbar.tsx +70 -0
  227. package/recce-source/js/src/components/run/RunView.tsx +196 -0
  228. package/recce-source/js/src/components/run/registry.ts +214 -0
  229. package/recce-source/js/src/components/run/types.ts +14 -0
  230. package/recce-source/js/src/components/schema/ColumnNameCell.test.tsx +169 -0
  231. package/recce-source/js/src/components/schema/ColumnNameCell.tsx +198 -0
  232. package/recce-source/js/src/components/schema/SchemaView.tsx +337 -0
  233. package/recce-source/js/src/components/schema/schemaDiff.ts +32 -0
  234. package/recce-source/js/src/components/schema/style.css +134 -0
  235. package/recce-source/js/src/components/screenshot/ScreenshotBox.tsx +39 -0
  236. package/recce-source/js/src/components/shared/HistoryToggle.tsx +35 -0
  237. package/recce-source/js/src/components/split/Split.tsx +40 -0
  238. package/recce-source/js/src/components/split/styles.css +24 -0
  239. package/recce-source/js/src/components/summary/ChangeSummary.tsx +264 -0
  240. package/recce-source/js/src/components/summary/SchemaSummary.tsx +123 -0
  241. package/recce-source/js/src/components/summary/SummaryView.tsx +29 -0
  242. package/recce-source/js/src/components/timeout/IdleTimeoutBadge.tsx +48 -0
  243. package/recce-source/js/src/components/top-k/TopKDiffForm.tsx +58 -0
  244. package/recce-source/js/src/components/top-k/TopKDiffResultView.tsx +73 -0
  245. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnGroupHeader.tsx +228 -0
  246. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnHeader.tsx +113 -0
  247. package/recce-source/js/src/components/ui/dataGrid/defaultRenderCell.tsx +72 -0
  248. package/recce-source/js/src/components/ui/dataGrid/index.ts +23 -0
  249. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.test.tsx +607 -0
  250. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.tsx +211 -0
  251. package/recce-source/js/src/components/ui/dataGrid/schemaCells.test.tsx +452 -0
  252. package/recce-source/js/src/components/ui/dataGrid/schemaCells.tsx +142 -0
  253. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.test.tsx +178 -0
  254. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.tsx +275 -0
  255. package/recce-source/js/src/components/ui/markdown/ExternalLinkConfirmDialog.tsx +134 -0
  256. package/recce-source/js/src/components/ui/markdown/MarkdownContent.tsx +364 -0
  257. package/recce-source/js/src/components/ui/mui/index.ts +13 -0
  258. package/recce-source/js/src/components/ui/mui-provider.tsx +67 -0
  259. package/recce-source/js/src/components/ui/mui-theme.ts +1039 -0
  260. package/recce-source/js/src/components/ui/mui-utils.ts +113 -0
  261. package/recce-source/js/src/components/ui/toaster.tsx +288 -0
  262. package/recce-source/js/src/components/valuediff/ValueDiffDetailResultView.tsx +217 -0
  263. package/recce-source/js/src/components/valuediff/ValueDiffForm.tsx +246 -0
  264. package/recce-source/js/src/components/valuediff/ValueDiffResultView.tsx +82 -0
  265. package/recce-source/js/src/components/valuediff/shared.ts +33 -0
  266. package/recce-source/js/src/constants/tooltipMessage.ts +3 -0
  267. package/recce-source/js/src/constants/urls.ts +1 -0
  268. package/recce-source/js/src/lib/UrlHash.ts +12 -0
  269. package/recce-source/js/src/lib/api/adhocQuery.ts +70 -0
  270. package/recce-source/js/src/lib/api/axiosClient.ts +9 -0
  271. package/recce-source/js/src/lib/api/cacheKeys.ts +13 -0
  272. package/recce-source/js/src/lib/api/checkEvents.ts +252 -0
  273. package/recce-source/js/src/lib/api/checks.ts +129 -0
  274. package/recce-source/js/src/lib/api/cll.ts +53 -0
  275. package/recce-source/js/src/lib/api/connectToCloud.ts +13 -0
  276. package/recce-source/js/src/lib/api/flag.ts +37 -0
  277. package/recce-source/js/src/lib/api/info.ts +198 -0
  278. package/recce-source/js/src/lib/api/instanceInfo.ts +25 -0
  279. package/recce-source/js/src/lib/api/keepAlive.ts +108 -0
  280. package/recce-source/js/src/lib/api/lineagecheck.ts +35 -0
  281. package/recce-source/js/src/lib/api/localStorageKeys.ts +7 -0
  282. package/recce-source/js/src/lib/api/models.ts +59 -0
  283. package/recce-source/js/src/lib/api/profile.ts +65 -0
  284. package/recce-source/js/src/lib/api/rowcount.ts +19 -0
  285. package/recce-source/js/src/lib/api/runs.ts +174 -0
  286. package/recce-source/js/src/lib/api/schemacheck.ts +31 -0
  287. package/recce-source/js/src/lib/api/select.ts +25 -0
  288. package/recce-source/js/src/lib/api/sessionStorageKeys.ts +8 -0
  289. package/recce-source/js/src/lib/api/state.ts +117 -0
  290. package/recce-source/js/src/lib/api/track.ts +281 -0
  291. package/recce-source/js/src/lib/api/types.ts +284 -0
  292. package/recce-source/js/src/lib/api/user.ts +42 -0
  293. package/recce-source/js/src/lib/api/valuediff.ts +46 -0
  294. package/recce-source/js/src/lib/api/version.ts +40 -0
  295. package/recce-source/js/src/lib/const.ts +9 -0
  296. package/recce-source/js/src/lib/dataGrid/crossFunctionConsistency.test.ts +626 -0
  297. package/recce-source/js/src/lib/dataGrid/dataGridFactory.test.ts +2140 -0
  298. package/recce-source/js/src/lib/dataGrid/dataGridFactory.ts +397 -0
  299. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.test.ts +132 -0
  300. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.ts +126 -0
  301. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.test.ts +1627 -0
  302. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.ts +140 -0
  303. package/recce-source/js/src/lib/dataGrid/generators/toDataGrid.ts +67 -0
  304. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.test.ts +142 -0
  305. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.ts +71 -0
  306. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.test.ts +258 -0
  307. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.ts +153 -0
  308. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.test.ts +951 -0
  309. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.ts +221 -0
  310. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.test.ts +395 -0
  311. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.ts +184 -0
  312. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.test.ts +884 -0
  313. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.ts +113 -0
  314. package/recce-source/js/src/lib/dataGrid/index.ts +51 -0
  315. package/recce-source/js/src/lib/dataGrid/propertyBased.test.ts +858 -0
  316. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.test.ts +482 -0
  317. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.ts +345 -0
  318. package/recce-source/js/src/lib/dataGrid/shared/dataTypeEdgeCases.test.ts +698 -0
  319. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.test.tsx +820 -0
  320. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.tsx +277 -0
  321. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.test.ts +785 -0
  322. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.ts +370 -0
  323. package/recce-source/js/src/lib/dataGrid/shared/index.ts +81 -0
  324. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.test.ts +909 -0
  325. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.ts +325 -0
  326. package/recce-source/js/src/lib/dataGrid/shared/simpleColumnBuilder.tsx +240 -0
  327. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.test.tsx +719 -0
  328. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.tsx +231 -0
  329. package/recce-source/js/src/lib/dataGrid/shared/validation.test.ts +559 -0
  330. package/recce-source/js/src/lib/dataGrid/shared/validation.ts +367 -0
  331. package/recce-source/js/src/lib/dataGrid/warehouseNamingConventions.test.ts +1117 -0
  332. package/recce-source/js/src/lib/formatSelect.ts +50 -0
  333. package/recce-source/js/src/lib/hooks/ApiConfigContext.tsx +181 -0
  334. package/recce-source/js/src/lib/hooks/IdleTimeoutContext.tsx +177 -0
  335. package/recce-source/js/src/lib/hooks/LineageGraphContext.tsx +512 -0
  336. package/recce-source/js/src/lib/hooks/RecceActionContext.tsx +269 -0
  337. package/recce-source/js/src/lib/hooks/RecceCheckContext.tsx +33 -0
  338. package/recce-source/js/src/lib/hooks/RecceContextProvider.tsx +54 -0
  339. package/recce-source/js/src/lib/hooks/RecceInstanceContext.tsx +129 -0
  340. package/recce-source/js/src/lib/hooks/RecceQueryContext.tsx +98 -0
  341. package/recce-source/js/src/lib/hooks/RecceShareStateContext.tsx +59 -0
  342. package/recce-source/js/src/lib/hooks/ScreenShot.tsx +399 -0
  343. package/recce-source/js/src/lib/hooks/useAppRouter.test.ts +211 -0
  344. package/recce-source/js/src/lib/hooks/useAppRouter.ts +200 -0
  345. package/recce-source/js/src/lib/hooks/useCheckEvents.ts +99 -0
  346. package/recce-source/js/src/lib/hooks/useCheckToast.tsx +14 -0
  347. package/recce-source/js/src/lib/hooks/useClipBoardToast.tsx +27 -0
  348. package/recce-source/js/src/lib/hooks/useCountdownToast.tsx +102 -0
  349. package/recce-source/js/src/lib/hooks/useFeedbackCollectionToast.tsx +130 -0
  350. package/recce-source/js/src/lib/hooks/useGuideToast.tsx +45 -0
  351. package/recce-source/js/src/lib/hooks/useIdleDetection.tsx +185 -0
  352. package/recce-source/js/src/lib/hooks/useModelColumns.tsx +113 -0
  353. package/recce-source/js/src/lib/hooks/useRecceInstanceInfo.tsx +13 -0
  354. package/recce-source/js/src/lib/hooks/useRecceServerFlag.tsx +13 -0
  355. package/recce-source/js/src/lib/hooks/useRun.tsx +89 -0
  356. package/recce-source/js/src/lib/hooks/useThemeColors.ts +115 -0
  357. package/recce-source/js/src/lib/mergeKeys.test.ts +89 -0
  358. package/recce-source/js/src/lib/mergeKeys.ts +86 -0
  359. package/recce-source/js/src/lib/result/ResultErrorFallback.tsx +9 -0
  360. package/recce-source/js/src/lib/utils/formatTime.ts +84 -0
  361. package/recce-source/js/src/lib/utils/urls.ts +16 -0
  362. package/recce-source/js/src/utils/DropdownValuesInput.tsx +297 -0
  363. package/recce-source/js/src/utils/formatters.tsx +237 -0
  364. package/recce-source/js/src/utils/transforms.ts +81 -0
  365. package/recce-source/js/tsconfig.json +47 -0
  366. package/recce-source/macros/README.md +8 -0
  367. package/recce-source/macros/recce_athena.sql +73 -0
  368. package/recce-source/pyproject.toml +109 -0
  369. package/recce-source/recce/VERSION +1 -0
  370. package/recce-source/recce/__init__.py +84 -0
  371. package/recce-source/recce/adapter/__init__.py +0 -0
  372. package/recce-source/recce/adapter/base.py +109 -0
  373. package/recce-source/recce/adapter/dbt_adapter/__init__.py +1699 -0
  374. package/recce-source/recce/adapter/dbt_adapter/dbt_version.py +42 -0
  375. package/recce-source/recce/adapter/sqlmesh_adapter.py +141 -0
  376. package/recce-source/recce/apis/__init__.py +0 -0
  377. package/recce-source/recce/apis/check_api.py +203 -0
  378. package/recce-source/recce/apis/check_events_api.py +353 -0
  379. package/recce-source/recce/apis/check_func.py +130 -0
  380. package/recce-source/recce/apis/run_api.py +130 -0
  381. package/recce-source/recce/apis/run_func.py +258 -0
  382. package/recce-source/recce/artifact.py +266 -0
  383. package/recce-source/recce/cli.py +1846 -0
  384. package/recce-source/recce/config.py +127 -0
  385. package/recce-source/recce/connect_to_cloud.py +138 -0
  386. package/recce-source/recce/core.py +334 -0
  387. package/recce-source/recce/diff.py +26 -0
  388. package/recce-source/recce/event/CONFIG +1 -0
  389. package/recce-source/recce/event/SENTRY_DNS +1 -0
  390. package/recce-source/recce/event/__init__.py +304 -0
  391. package/recce-source/recce/event/collector.py +184 -0
  392. package/recce-source/recce/event/track.py +158 -0
  393. package/recce-source/recce/exceptions.py +21 -0
  394. package/recce-source/recce/git.py +77 -0
  395. package/recce-source/recce/github.py +222 -0
  396. package/recce-source/recce/mcp_server.py +861 -0
  397. package/recce-source/recce/models/__init__.py +6 -0
  398. package/recce-source/recce/models/check.py +473 -0
  399. package/recce-source/recce/models/run.py +46 -0
  400. package/recce-source/recce/models/types.py +218 -0
  401. package/recce-source/recce/pull_request.py +124 -0
  402. package/recce-source/recce/run.py +390 -0
  403. package/recce-source/recce/server.py +877 -0
  404. package/recce-source/recce/state/__init__.py +31 -0
  405. package/recce-source/recce/state/cloud.py +644 -0
  406. package/recce-source/recce/state/const.py +26 -0
  407. package/recce-source/recce/state/local.py +56 -0
  408. package/recce-source/recce/state/state.py +119 -0
  409. package/recce-source/recce/state/state_loader.py +174 -0
  410. package/recce-source/recce/summary.py +575 -0
  411. package/recce-source/recce/tasks/__init__.py +23 -0
  412. package/recce-source/recce/tasks/core.py +134 -0
  413. package/recce-source/recce/tasks/dataframe.py +170 -0
  414. package/recce-source/recce/tasks/histogram.py +433 -0
  415. package/recce-source/recce/tasks/lineage.py +19 -0
  416. package/recce-source/recce/tasks/profile.py +298 -0
  417. package/recce-source/recce/tasks/query.py +450 -0
  418. package/recce-source/recce/tasks/rowcount.py +277 -0
  419. package/recce-source/recce/tasks/schema.py +65 -0
  420. package/recce-source/recce/tasks/top_k.py +172 -0
  421. package/recce-source/recce/tasks/utils.py +147 -0
  422. package/recce-source/recce/tasks/valuediff.py +497 -0
  423. package/recce-source/recce/util/__init__.py +4 -0
  424. package/recce-source/recce/util/api_token.py +80 -0
  425. package/recce-source/recce/util/breaking.py +330 -0
  426. package/recce-source/recce/util/cache.py +25 -0
  427. package/recce-source/recce/util/cll.py +355 -0
  428. package/recce-source/recce/util/cloud/__init__.py +15 -0
  429. package/recce-source/recce/util/cloud/base.py +115 -0
  430. package/recce-source/recce/util/cloud/check_events.py +190 -0
  431. package/recce-source/recce/util/cloud/checks.py +242 -0
  432. package/recce-source/recce/util/io.py +120 -0
  433. package/recce-source/recce/util/lineage.py +83 -0
  434. package/recce-source/recce/util/logger.py +25 -0
  435. package/recce-source/recce/util/onboarding_state.py +45 -0
  436. package/recce-source/recce/util/perf_tracking.py +85 -0
  437. package/recce-source/recce/util/pydantic_model.py +22 -0
  438. package/recce-source/recce/util/recce_cloud.py +454 -0
  439. package/recce-source/recce/util/singleton.py +18 -0
  440. package/recce-source/recce/util/startup_perf.py +121 -0
  441. package/recce-source/recce/yaml/__init__.py +58 -0
  442. package/recce-source/recce_cloud/README.md +780 -0
  443. package/recce-source/recce_cloud/VERSION +1 -0
  444. package/recce-source/recce_cloud/__init__.py +24 -0
  445. package/recce-source/recce_cloud/api/__init__.py +17 -0
  446. package/recce-source/recce_cloud/api/base.py +132 -0
  447. package/recce-source/recce_cloud/api/client.py +186 -0
  448. package/recce-source/recce_cloud/api/exceptions.py +26 -0
  449. package/recce-source/recce_cloud/api/factory.py +63 -0
  450. package/recce-source/recce_cloud/api/github.py +106 -0
  451. package/recce-source/recce_cloud/api/gitlab.py +111 -0
  452. package/recce-source/recce_cloud/artifact.py +57 -0
  453. package/recce-source/recce_cloud/ci_providers/__init__.py +9 -0
  454. package/recce-source/recce_cloud/ci_providers/base.py +82 -0
  455. package/recce-source/recce_cloud/ci_providers/detector.py +147 -0
  456. package/recce-source/recce_cloud/ci_providers/github_actions.py +136 -0
  457. package/recce-source/recce_cloud/ci_providers/gitlab_ci.py +130 -0
  458. package/recce-source/recce_cloud/cli.py +434 -0
  459. package/recce-source/recce_cloud/download.py +230 -0
  460. package/recce-source/recce_cloud/hatch_build.py +20 -0
  461. package/recce-source/recce_cloud/pyproject.toml +49 -0
  462. package/recce-source/recce_cloud/upload.py +214 -0
  463. package/recce-source/test.py +0 -0
  464. package/recce-source/tests/__init__.py +0 -0
  465. package/recce-source/tests/adapter/__init__.py +0 -0
  466. package/recce-source/tests/adapter/dbt_adapter/__init__.py +0 -0
  467. package/recce-source/tests/adapter/dbt_adapter/conftest.py +17 -0
  468. package/recce-source/tests/adapter/dbt_adapter/dbt_test_helper.py +298 -0
  469. package/recce-source/tests/adapter/dbt_adapter/test_dbt_adapter.py +25 -0
  470. package/recce-source/tests/adapter/dbt_adapter/test_dbt_cll.py +717 -0
  471. package/recce-source/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +4 -0
  472. package/recce-source/tests/adapter/dbt_adapter/test_proj/manifest.json +1 -0
  473. package/recce-source/tests/adapter/dbt_adapter/test_proj/package-lock.yml +8 -0
  474. package/recce-source/tests/adapter/dbt_adapter/test_proj/packages.yml +7 -0
  475. package/recce-source/tests/adapter/dbt_adapter/test_proj/profiles.yml +6 -0
  476. package/recce-source/tests/adapter/dbt_adapter/test_selector.py +205 -0
  477. package/recce-source/tests/apis/__init__.py +0 -0
  478. package/recce-source/tests/apis/row_count_diff.json +59 -0
  479. package/recce-source/tests/apis/test_check_events_api.py +615 -0
  480. package/recce-source/tests/apis/test_run_func.py +433 -0
  481. package/recce-source/tests/catalog.json +527 -0
  482. package/recce-source/tests/data/manifest/base/catalog.json +1 -0
  483. package/recce-source/tests/data/manifest/base/manifest.json +1 -0
  484. package/recce-source/tests/data/manifest/pr2/catalog.json +1 -0
  485. package/recce-source/tests/data/manifest/pr2/manifest.json +1 -0
  486. package/recce-source/tests/manifest.json +10655 -0
  487. package/recce-source/tests/models/__init__.py +0 -0
  488. package/recce-source/tests/models/test_check.py +731 -0
  489. package/recce-source/tests/models/test_run_models.py +295 -0
  490. package/recce-source/tests/recce_cloud/__init__.py +0 -0
  491. package/recce-source/tests/recce_cloud/test_ci_providers.py +351 -0
  492. package/recce-source/tests/recce_cloud/test_cli.py +735 -0
  493. package/recce-source/tests/recce_cloud/test_client.py +379 -0
  494. package/recce-source/tests/recce_cloud/test_platform_clients.py +483 -0
  495. package/recce-source/tests/recce_state.json +1 -0
  496. package/recce-source/tests/state/test_cloud.py +719 -0
  497. package/recce-source/tests/state/test_local.py +164 -0
  498. package/recce-source/tests/state/test_state_loader.py +211 -0
  499. package/recce-source/tests/tasks/__init__.py +0 -0
  500. package/recce-source/tests/tasks/conftest.py +4 -0
  501. package/recce-source/tests/tasks/test_histogram.py +129 -0
  502. package/recce-source/tests/tasks/test_lineage.py +55 -0
  503. package/recce-source/tests/tasks/test_preset_checks.py +64 -0
  504. package/recce-source/tests/tasks/test_profile.py +397 -0
  505. package/recce-source/tests/tasks/test_query.py +528 -0
  506. package/recce-source/tests/tasks/test_row_count.py +133 -0
  507. package/recce-source/tests/tasks/test_schema.py +122 -0
  508. package/recce-source/tests/tasks/test_top_k.py +77 -0
  509. package/recce-source/tests/tasks/test_utils.py +439 -0
  510. package/recce-source/tests/tasks/test_valuediff.py +361 -0
  511. package/recce-source/tests/test_cli.py +236 -0
  512. package/recce-source/tests/test_cli_mcp_optional.py +45 -0
  513. package/recce-source/tests/test_cloud_listing_cli.py +324 -0
  514. package/recce-source/tests/test_config.py +43 -0
  515. package/recce-source/tests/test_connect_to_cloud.py +82 -0
  516. package/recce-source/tests/test_core.py +174 -0
  517. package/recce-source/tests/test_dbt.py +36 -0
  518. package/recce-source/tests/test_mcp_server.py +505 -0
  519. package/recce-source/tests/test_pull_request.py +130 -0
  520. package/recce-source/tests/test_server.py +202 -0
  521. package/recce-source/tests/test_server_lifespan.py +138 -0
  522. package/recce-source/tests/test_summary.py +73 -0
  523. package/recce-source/tests/util/__init__.py +0 -0
  524. package/recce-source/tests/util/cloud/__init__.py +0 -0
  525. package/recce-source/tests/util/cloud/test_check_events.py +255 -0
  526. package/recce-source/tests/util/cloud/test_checks.py +204 -0
  527. package/recce-source/tests/util/test_api_token.py +119 -0
  528. package/recce-source/tests/util/test_breaking.py +1427 -0
  529. package/recce-source/tests/util/test_cll.py +706 -0
  530. package/recce-source/tests/util/test_lineage.py +122 -0
  531. package/recce-source/tests/util/test_onboarding_state.py +84 -0
  532. package/recce-source/tests/util/test_recce_cloud.py +231 -0
  533. package/recce-source/tox.ini +40 -0
  534. package/recce-source/uv.lock +3928 -0
  535. package/src/api/index.ts +32 -0
  536. package/src/components/index.ts +154 -0
  537. package/src/global.d.ts +14 -0
  538. package/src/hooks/index.ts +56 -0
  539. package/src/index.ts +17 -0
  540. package/src/lib/hooks/RouteConfigContext.ts +139 -0
  541. package/src/lib/hooks/useAppRouter.ts +240 -0
  542. package/src/mui-augmentation.d.ts +139 -0
  543. package/src/theme/index.ts +13 -0
  544. package/src/theme.ts +23 -0
  545. package/src/types/index.ts +23 -0
  546. package/dist/index-BNUP2V_N.d.ts.map +0 -1
  547. package/dist/index-DOPZuhD8.d.mts.map +0 -1
  548. package/dist/theme.d.mts.map +0 -1
  549. package/dist/theme.d.ts.map +0 -1
@@ -0,0 +1,317 @@
1
+ ---
2
+ applyTo: "js/**/*.ts,js/**/*.tsx,js/**/*.js,js/**/*.jsx,js/**/*.json,js/**/*.mjs"
3
+ ---
4
+
5
+ # Frontend Build Instructions (js/ Directory)
6
+
7
+ ## Critical Frontend Build Requirements
8
+
9
+ **MANDATORY BUILD PROCESS - Frontend changes are NOT visible until this is run:**
10
+ ```bash
11
+ cd js
12
+ pnpm run build
13
+ # This process:
14
+ # 1. Cleans ../recce/data/ directory
15
+ # 2. Builds Next.js to js/out/
16
+ # 3. Moves js/out/ to ../recce/data/
17
+ # YOU MUST restart 'recce server' after this completes
18
+ ```
19
+
20
+ **When to rebuild:**
21
+ - After ANY TypeScript/React/CSS changes in js/ directory
22
+ - Before testing changes with `recce server`
23
+ - Before committing frontend changes
24
+ - If changes don't appear in the browser (common mistake)
25
+
26
+ ## Package Manager - MUST use pnpm
27
+
28
+ ```bash
29
+ # CORRECT - Always use pnpm (version 10)
30
+ pnpm install
31
+ pnpm dev
32
+ pnpm run build
33
+ pnpm lint
34
+
35
+ # WRONG - Never use npm or yarn
36
+ npm install # ❌ Will break dependencies
37
+ yarn install # ❌ Will break dependencies
38
+ ```
39
+
40
+ **If pnpm not installed:**
41
+ ```bash
42
+ npm install -g corepack@latest
43
+ corepack enable
44
+ corepack install
45
+ ```
46
+
47
+ ## Development Workflow
48
+
49
+ **1. Install dependencies (first time or after package.json changes):**
50
+ ```bash
51
+ cd js
52
+ pnpm install --frozen-lockfile # Use frozen-lockfile in CI/CD
53
+ ```
54
+
55
+ **2. Development server (for live coding):**
56
+ ```bash
57
+ cd js
58
+ pnpm dev
59
+ # Runs on http://localhost:3000 with Turbopack
60
+ # Python backend should run separately on http://localhost:8000
61
+ ```
62
+
63
+ **3. Linting and formatting (run before committing):**
64
+ ```bash
65
+ cd js
66
+ pnpm lint # Check for issues (Biome)
67
+ pnpm lint:fix # Auto-fix issues (Biome)
68
+ pnpm type:check # TypeScript compiler check
69
+ ```
70
+
71
+ **4. Build for production:**
72
+ ```bash
73
+ cd js
74
+ pnpm run build
75
+ # MUST do this after frontend changes
76
+ # Then restart: cd .. && recce server
77
+ ```
78
+
79
+ **5. Clean build artifacts:**
80
+ ```bash
81
+ cd js
82
+ pnpm run clean
83
+ # Removes ../recce/data/ directory
84
+ ```
85
+
86
+ ## Tech Stack
87
+
88
+ - **Node.js >=20** - JavaScript runtime (required)
89
+ - **pnpm 10** - Package manager (NOT npm or yarn)
90
+ - **Next.js 16** - React framework with App Router
91
+ - **React 19.2** - UI library with new JSX transform
92
+ - **React DOM 19.2** - React renderer
93
+ - **TypeScript 5.9** - Type safety
94
+ - **Chakra UI 3** - Component library
95
+ - **Biome 2.3** - Fast linter and formatter (replaces ESLint + Prettier)
96
+ - **Turbopack** - Fast dev server bundler
97
+ - **Tailwind CSS 4** - Utility-first CSS
98
+
99
+ ## File Structure (js/ directory)
100
+
101
+ ```
102
+ js/
103
+ ├── package.json # Dependencies (Node >=20 required)
104
+ ├── tsconfig.json # TypeScript config
105
+ ├── next.config.mjs # Next.js config (output: 'export')
106
+ ├── biome.json # Biome linter & formatter config
107
+ ├── src/
108
+ │ ├── app/ # Next.js App Router pages
109
+ │ │ ├── layout.tsx # Root layout
110
+ │ │ └── page.tsx # Home page
111
+ │ ├── lib/
112
+ │ │ ├── api/ # API client functions (axios)
113
+ │ │ └── hooks/ # Custom React hooks
114
+ │ ├── components/ # React components
115
+ │ │ ├── lineage/ # DAG/lineage visualization
116
+ │ │ ├── check/ # Check management UI
117
+ │ │ └── run/ # Run execution UI
118
+ │ ├── constants/ # App constants
119
+ │ └── utils/ # Utility functions
120
+ ├── .husky/ # Git hooks (pre-commit)
121
+ ├── .next/ # Next.js build cache (gitignored)
122
+ └── out/ # Build output (moved to ../recce/data/)
123
+ ```
124
+
125
+ ## Configuration Files
126
+
127
+ **package.json:**
128
+ - Requires Node.js >=20
129
+ - Uses pnpm@10.22.0 as package manager
130
+ - Key scripts:
131
+ - `dev`: Start development server with Turbopack
132
+ - `build`: Clean, build Next.js, move to ../recce/data
133
+ - `lint`: Run Biome checks (error level only)
134
+ - `lint:fix`: Run Biome with auto-fix
135
+ - `lint:staged`: Run Biome on staged files only
136
+ - `type:check`: TypeScript compilation check
137
+ - `clean`: Remove ../recce/data/
138
+
139
+ **tsconfig.json:**
140
+ - Target: ESNext
141
+ - Module: esnext, bundler resolution
142
+ - Strict mode enabled
143
+ - Path aliases: `@/*` → `./src/*`, `@theme/*` → `./theme/*`
144
+
145
+ **next.config.mjs:**
146
+ - Output mode: `export` (static site generation)
147
+ - Exports to `./out` directory
148
+ - Build script moves to `../recce/data/`
149
+
150
+ **biome.json:**
151
+ - Schema: https://biomejs.dev/schemas/2.3.5/schema.json
152
+ - VCS integration: Git with useIgnoreFile enabled
153
+ - Formatter: Space indentation, double quotes for JavaScript
154
+ - Linter: Custom rule configuration (not using recommended preset)
155
+ - Key rules enforced:
156
+ - `noExplicitAny`: Disallow explicit `any` types
157
+ - `useExhaustiveDependencies`: Enforce React Hook dependencies
158
+ - `useHookAtTopLevel`: React Hooks must be at top level
159
+ - `noUnusedVariables`: No unused variables
160
+ - Many more correctness, style, and suspicious pattern checks
161
+ - Includes: All files except `.next/`, `.swc/`, `node_modules/`, `out/`, etc.
162
+ - CSS parser: Tailwind directives enabled
163
+
164
+ ## Code Style
165
+
166
+ **Enforced by Biome:**
167
+ - Double quotes for strings (JavaScript/TypeScript)
168
+ - Space indentation (configured in biome.json)
169
+ - React 19 JSX transform (no React import needed)
170
+ - Comprehensive linting for:
171
+ - Complexity issues (useless code, optional chains)
172
+ - Correctness errors (undefined variables, unreachable code)
173
+ - Style consistency (array types, type definitions)
174
+ - Suspicious patterns (explicit any, duplicate keys, debugger statements)
175
+
176
+ **Git Hooks (.husky/):**
177
+ - Pre-commit: Runs `pnpm lint:staged` and `pnpm type:check` on staged files
178
+ - Only triggers for TypeScript/JavaScript files in js/ directory
179
+ - Uses Biome's `--staged` flag for efficient checking
180
+
181
+ ## Testing
182
+
183
+ **Test Framework:**
184
+ - Jest 30 with jsdom environment
185
+ - React Testing Library 16.3
186
+ - Setup file: `jest.setup.js` (imports @testing-library/jest-dom)
187
+
188
+ **Run tests:**
189
+ ```bash
190
+ cd js
191
+ pnpm test # Watch mode
192
+ ```
193
+
194
+ ## API Integration
195
+
196
+ **Backend API:** `http://localhost:8000/api`
197
+
198
+ **Key API endpoints:**
199
+ - `/api/checks` - Check CRUD operations
200
+ - `/api/runs` - Run execution and polling
201
+ - `/api/lineage` - DAG data for visualization
202
+ - `/api/models` - Model metadata
203
+
204
+ **API Client:** Located in `src/lib/api/`, uses axios with error handling
205
+
206
+ ## Build Output
207
+
208
+ **Where frontend is served from:**
209
+ - Development: `http://localhost:3000` (pnpm dev)
210
+ - Production: `../recce/data/` (served by Python FastAPI server)
211
+
212
+ **Build process details:**
213
+ 1. `pnpm run clean` removes old `../recce/data/`
214
+ 2. `next build` creates static site in `./out/`
215
+ 3. Script moves `./out/` to `../recce/data/`
216
+ 4. Python package includes `recce/data/**` in package_data
217
+
218
+ ## CI/CD - Frontend Validation
219
+
220
+ **GitHub Actions workflow:** `.github/workflows/tests-js.yaml`
221
+
222
+ **What it checks:**
223
+ 1. Node.js 24 setup
224
+ 2. pnpm 10 installation
225
+ 3. Dependency install with frozen lockfile
226
+ 4. Biome linting (`pnpm lint`)
227
+ 5. Production build (`pnpm run build`)
228
+
229
+ **To replicate CI locally:**
230
+ ```bash
231
+ cd js
232
+ pnpm install --frozen-lockfile
233
+ pnpm lint
234
+ pnpm run build
235
+ ```
236
+
237
+ ## Common Errors & Fixes
238
+
239
+ **Error: Changes not appearing in browser**
240
+ - **Cause:** Forgot to rebuild after frontend changes
241
+ - **Fix:** `cd js && pnpm run build` then restart `recce server`
242
+
243
+ **Error: `pnpm: command not found`**
244
+ - **Cause:** pnpm not installed
245
+ - **Fix:** `npm install -g corepack@latest && corepack enable`
246
+
247
+ **Error: Build fails with Node version error**
248
+ - **Cause:** Node.js version too old
249
+ - **Fix:** Upgrade to Node.js 20 or later (`node --version` to check)
250
+
251
+ **Error: Biome lint failures**
252
+ - **Cause:** Code doesn't meet Biome rules
253
+ - **Fix:** Run `pnpm lint:fix` to auto-fix, then manually fix remaining issues
254
+
255
+ **Error: Type errors during build**
256
+ - **Cause:** TypeScript compilation errors
257
+ - **Fix:** Run `pnpm type:check` to see detailed error messages, fix type issues
258
+
259
+ **Error: Dependencies out of sync**
260
+ - **Cause:** package.json changed but not reinstalled
261
+ - **Fix:** `cd js && pnpm install`
262
+
263
+ **Error: Import resolution issues**
264
+ - **Cause:** TypeScript path aliases not configured
265
+ - **Fix:** Check `tsconfig.json` paths configuration
266
+
267
+ ## Migration Notes: ESLint → Biome
268
+
269
+ **What changed:**
270
+ - Replaced ESLint + Prettier with Biome for faster, unified tooling
271
+ - Configuration moved from `eslint.config.mjs` to `biome.json`
272
+ - Commands remain the same (`pnpm lint`, `pnpm lint:fix`) but now run Biome
273
+ - Biome provides both linting AND formatting in one tool
274
+ - Significantly faster than ESLint (written in Rust vs JavaScript)
275
+
276
+ **Key differences:**
277
+ - Biome uses `biome.json` instead of `.eslintrc` or `eslint.config.mjs`
278
+ - Biome rules are organized into categories: complexity, correctness, style, suspicious
279
+ - Biome has opinionated defaults but allows customization
280
+ - No separate Prettier config needed - formatting is built-in
281
+ - Git hooks updated to use `biome check --staged`
282
+
283
+ ## Critical Reminders
284
+
285
+ 1. **Always run `pnpm run build` after frontend changes** - Most common mistake
286
+ 2. **Never edit `../recce/data/` directly** - It's auto-generated
287
+ 3. **Use pnpm, not npm/yarn** - Different package managers have incompatibilities
288
+ 4. **Restart `recce server` after builds** - Server doesn't hot-reload static files
289
+ 5. **Run `pnpm lint` before committing** - CI will fail if Biome checks fail
290
+ 6. **Check `pnpm type:check` for type errors** - Catches issues early
291
+ 7. **Use `pnpm lint:fix` for auto-fixable issues** - Saves time on formatting
292
+
293
+ ## Quick Reference Commands
294
+
295
+ ```bash
296
+ # Install dependencies
297
+ cd js && pnpm install
298
+
299
+ # Development
300
+ cd js && pnpm dev
301
+
302
+ # Lint, fix, & type check
303
+ cd js && pnpm lint # Check with Biome
304
+ cd js && pnpm lint:fix # Auto-fix with Biome
305
+ cd js && pnpm type:check # TypeScript check
306
+
307
+ # Build for production
308
+ cd js && pnpm run build
309
+
310
+ # After build, test with Python server
311
+ cd .. && recce server
312
+
313
+ # Clean build artifacts
314
+ cd js && pnpm run clean
315
+ ```
316
+
317
+ **Trust these instructions.** The frontend build process has specific requirements that differ from typical React apps because the output must integrate with the Python package. Only search for additional information if these instructions are incomplete or incorrect.
@@ -0,0 +1,72 @@
1
+ name: [ DEPRECATED ] Node.js - Build & Auto-Commit to CLI data/report/**
2
+ # This workflow is deprecated. Please use the Nightly Build workflow instead. Remove this file after migration is complete on February 1, 2026.
3
+
4
+ on:
5
+ pull_request:
6
+ types:
7
+ - closed
8
+ # Trigger when PR is closed
9
+ paths:
10
+ - "js/**"
11
+ # Trigger when diffs detected in js sources
12
+ branches:
13
+ - main
14
+ - release/**
15
+ # Only PR target are `main` or `release/**` branches
16
+ # Trigger manually
17
+ workflow_dispatch:
18
+
19
+ jobs:
20
+ if_merged_build:
21
+ if: github.event.pull_request.merged == true || github.event_name == 'workflow_dispatch'
22
+ runs-on: ubuntu-latest
23
+
24
+ permissions:
25
+ # Give the default GITHUB_TOKEN write permission to commit and push the changed files back to the repository.
26
+ contents: write
27
+
28
+ defaults:
29
+ run:
30
+ shell: bash
31
+ working-directory: ./js
32
+
33
+ steps:
34
+ - uses: actions/create-github-app-token@v2
35
+ id: app-token
36
+ with:
37
+ app-id: 2343362 # App ID of Recce Action Bot
38
+ private-key: ${{ secrets.RECCE_ACTION_BOT_PRIVATE_KEY }}
39
+ owner: ${{ github.repository_owner }}
40
+ - uses: actions/checkout@v6
41
+ with:
42
+ token: ${{ steps.app-token.outputs.token }}
43
+
44
+ - name: Use Node.js ${{ matrix.node-version }}
45
+ uses: actions/setup-node@v3
46
+ with:
47
+ node-version: 24
48
+
49
+ - uses: pnpm/action-setup@v4
50
+ with:
51
+ version: 10
52
+
53
+ - name: Install dependencies
54
+ working-directory: ./js
55
+ run: |
56
+ pnpm install --frozen-lockfile
57
+ pip install pre-commit
58
+
59
+
60
+ - name: Build Apps
61
+ run: pnpm run build
62
+
63
+ - name: Pull Remote Changes (before AC)
64
+ run: git pull origin ${{ github.base_ref || github.ref_name }}
65
+
66
+ - uses: stefanzweifel/git-auto-commit-action@v4
67
+ with:
68
+ commit_message: AUTO-COMMIT - build js statics to recce data/
69
+ branch: ${{ github.base_ref || github.ref_name }}
70
+ token: ${{ steps.app-token.outputs.token }}
71
+ # push_options: --force
72
+ # Auto-commits to target merge branch
@@ -0,0 +1,48 @@
1
+ name: Bump Recce Version
2
+ on:
3
+ push:
4
+ tags: 'v*'
5
+
6
+ jobs:
7
+ build:
8
+ name: Bump Recce Version
9
+ runs-on: ubuntu-latest
10
+
11
+ permissions:
12
+ contents: write
13
+
14
+ steps:
15
+ - uses: actions/create-github-app-token@v2
16
+ id: app-token
17
+ with:
18
+ app-id: 2343362 # App ID of Recce Action Bot
19
+ private-key: ${{ secrets.RECCE_ACTION_BOT_PRIVATE_KEY }}
20
+ owner: ${{ github.repository_owner }}
21
+ - name: Checkout
22
+ uses: actions/checkout@v6
23
+ with:
24
+ ref: main
25
+ token: ${{ steps.app-token.outputs.token }}
26
+
27
+ - name: Bump version
28
+ id: bump_version
29
+ run: |
30
+ dev=$(cat ./recce/VERSION | awk -F '[.]' '{print $2}')
31
+ release=$(echo ${GITHUB_REF:11} | awk -F '[.]' '{print $2}')
32
+ diff=$((dev - release))
33
+ echo "version_diff=${diff}" >> $GITHUB_OUTPUT
34
+
35
+ if [ $diff -eq 0 ]; then
36
+ new_version=$(( dev + 1 ))
37
+ echo "1.${new_version}.0.dev0" > ./recce/VERSION
38
+ echo "1.${new_version}.0.dev0" > ./recce_cloud/VERSION
39
+ echo "bump_version=1.${new_version}.0" >> $GITHUB_OUTPUT
40
+ fi
41
+
42
+ - name: Commit bump version
43
+ if: steps.bump_version.outputs.version_diff == 0
44
+ uses: stefanzweifel/git-auto-commit-action@v4
45
+ with:
46
+ commit_message: "AUTO-COMMIT - Bump version to ${{ steps.bump_version.outputs.bump_version }}.dev0"
47
+ branch: main
48
+ token: ${{ steps.app-token.outputs.token }}
@@ -0,0 +1,92 @@
1
+ name: Run Cloud Smoke Test (DBT)
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths-ignore:
8
+ - "js/**"
9
+ - "recce/data/**"
10
+ pull_request:
11
+ branches:
12
+ - main
13
+ paths-ignore:
14
+ - "js/**"
15
+ - "recce/data/**"
16
+
17
+ # Explicitly limit permissions for pull_request_target
18
+ permissions:
19
+ contents: read
20
+ pull-requests: read
21
+
22
+ jobs:
23
+ # First job: Check if the PR author has write permission
24
+ # This job runs in the privileged context but doesn't checkout untrusted code
25
+ authorize:
26
+ runs-on: ubuntu-latest
27
+ outputs:
28
+ authorized: ${{ steps.check.outputs.authorized }}
29
+ steps:
30
+ - name: Check if PR author has write permission
31
+ id: check
32
+ run: |
33
+ if [[ "${{ github.event_name }}" == "push" ]]; then
34
+ echo "authorized=true" >> $GITHUB_OUTPUT
35
+ exit 0
36
+ fi
37
+
38
+ PERMISSION=$(gh api repos/${{ github.repository }}/collaborators/${{ github.triggering_actor }}/permission --jq '.permission' 2>/dev/null || echo "none")
39
+ if [[ "$PERMISSION" == "write" || "$PERMISSION" == "admin" ]]; then
40
+ echo "authorized=true" >> $GITHUB_OUTPUT
41
+ else
42
+ echo "authorized=false" >> $GITHUB_OUTPUT
43
+ echo "::warning::Cloud smoke test skipped for forked repository. This test will be migrated to a separate workflow for external contributors."
44
+ fi
45
+ env:
46
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47
+
48
+ # Second job: Run the actual tests only if authorized
49
+ smoke-test-cloud:
50
+ needs: authorize
51
+ if: needs.authorize.outputs.authorized == 'true'
52
+ concurrency:
53
+ group: smoke-test-cloud
54
+ cancel-in-progress: false
55
+ runs-on: ubuntu-latest
56
+ strategy:
57
+ max-parallel: 1
58
+ matrix:
59
+ include:
60
+ - python-version: "3.11"
61
+ dbt-version: "1.8"
62
+ - python-version: "3.13"
63
+ dbt-version: "latest"
64
+ steps:
65
+ # Safe checkout: only proceeds after authorization check passes
66
+ # codeql[js/actions/pull-request-target] - Authorization verified in previous job
67
+ - uses: actions/checkout@v4
68
+ with:
69
+ persist-credentials: false
70
+
71
+ - name: Install uv
72
+ uses: astral-sh/setup-uv@v4
73
+ with:
74
+ version: "latest"
75
+
76
+ - name: Install Recce and dbt
77
+ run: |
78
+ uv venv
79
+ uv sync --no-dev --python ${{ matrix.python-version }}
80
+ if [ "${{ matrix.dbt-version }}" == "latest" ]; then
81
+ uv pip install dbt-core dbt-duckdb
82
+ else
83
+ uv pip install dbt-core~=${{ matrix.dbt-version }}.0 dbt-duckdb~=${{ matrix.dbt-version }}.0
84
+ fi
85
+
86
+ - name: Run smoke test - dbt
87
+ run: |
88
+ source .venv/bin/activate
89
+ ./integration_tests/dbt/smoke_test_cloud.sh
90
+ env:
91
+ GITHUB_TOKEN: ${{ secrets.RECCE_CLOUD_TOKEN }}
92
+ RECCE_STATE_PASSWORD: ${{ vars.RECCE_STATE_PASSWORD }}
@@ -0,0 +1,33 @@
1
+ name: Run Smoke Test (SQLMesh)
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ smoke-test:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v4
19
+ with:
20
+ version: "latest"
21
+
22
+ - name: Install Recce and SQLMesh
23
+ run: |
24
+ uv sync --no-dev --python 3.11
25
+ uv pip install sqlmesh
26
+
27
+ - name: Run sqlmesh
28
+ run: |
29
+ ./integration_tests/sqlmesh/prep_env.sh
30
+
31
+ - name: Run smoke test
32
+ run: |
33
+ ./integration_tests/sqlmesh/test_server.sh
@@ -0,0 +1,52 @@
1
+ name: Run Smoke Test (DBT)
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths-ignore:
8
+ - "js/**"
9
+ - "recce/data/**"
10
+ pull_request:
11
+ branches:
12
+ - main
13
+ paths-ignore:
14
+ - "js/**"
15
+ - "recce/data/**"
16
+
17
+ jobs:
18
+ smoke-test:
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ include:
23
+ - python-version: "3.9"
24
+ dbt-version: "1.6"
25
+ - python-version: "3.11"
26
+ dbt-version: "1.7"
27
+ - python-version: "3.12"
28
+ dbt-version: "1.8"
29
+ - python-version: "3.13"
30
+ dbt-version: "latest"
31
+ steps:
32
+ - uses: actions/checkout@v4
33
+
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@v4
36
+ with:
37
+ version: "latest"
38
+
39
+ - name: Install Recce and dbt
40
+ run: |
41
+ uv venv
42
+ uv sync --no-dev --python ${{ matrix.python-version }}
43
+ if [ "${{ matrix.dbt-version }}" == "latest" ]; then
44
+ uv pip install dbt-core dbt-duckdb
45
+ else
46
+ uv pip install dbt-core~=${{ matrix.dbt-version }}.0 dbt-duckdb~=${{ matrix.dbt-version }}.0
47
+ fi
48
+
49
+ - name: Run smoke test - dbt
50
+ run: |
51
+ source .venv/bin/activate
52
+ ./integration_tests/dbt/smoke_test.sh