Skip to content

feat: CLI: Mosaic dashboard - #408

Merged
ilyabo merged 16 commits into
mainfrom
cursor/mosaic-dashboard-ai-5417
Mar 22, 2026
Merged

ilyabo merged 16 commits into
mainfrom
cursor/mosaic-dashboard-ai-5417

Conversation

@ilyabo

@ilyabo ilyabo commented Feb 28, 2026 •

Copy link
Copy Markdown
Collaborator

Enable non-WASM DuckDB connectors for Mosaic and add an AI-assisted dashboard sheet type with a vgplot JSON editor to sqlrooms-cli-ui.

This allows sqlrooms-cli to use its WebSocketDuckDbConnector with Mosaic and provides a new interactive dashboard experience where the AI assistant can generate and refine vgplot specifications.


Open in Web Open in Cursor 

Summary by CodeRabbit

  • New Features

    • Dashboard sheet: JSON editor with schema-aware validation, live Mosaic-backed preview, Apply/Reset controls, consolidated error alerts, and "Ask assistant" helper; dashboard sheets persist and show a chart icon.
  • Improvements

    • Expanded connector support for previews/databases and enhanced Mosaic chart/preview capabilities and exports.
    • Minor UI tweaks to model form icons and more robust error-string handling.

@cursor

cursor Bot commented Feb 28, 2026

Copy link
Copy Markdown

Cursor Agent can help with this pull request. Just @cursor in comments and I'll start working on changes in this branch.
Learn more about Cursor Agents

@coderabbitai

coderabbitai Bot commented Feb 28, 2026 •

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new "dashboard" sheet type with a DashboardSheet React editor (vgplot JSON editor + live Mosaic preview), integrates dashboard state/commands/AI tools into the room store with persistence and VGPlot helpers, enables non‑Wasm DuckDB Mosaic connectors, and adds related exports and package deps.

Changes

Cohort / File(s) Summary
Dependencies
apps/sqlrooms-cli-ui/package.json
Added workspace deps @sqlrooms/monaco-editor, @sqlrooms/mosaic.
Dashboard UI
apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx
New React component: vgplot JSON editor, schema fetching/validation, apply/reset controls, Ask assistant button, and live Mosaic-powered preview with parsing/compile error handling.
Sheets integration & UI
apps/sqlrooms-cli-ui/src/components/SheetsPanel.tsx, packages/cells/src/components/SheetsTabBar.tsx, packages/cells/src/types.ts
Added 'dashboard' sheet type, tab icon (BarChart3), and SheetsPanel rendering for DashboardSheet; updated SheetType enum.
Store / Dashboard subsystem
apps/sqlrooms-cli-ui/src/store.ts
Introduced dashboard slice, default vgplot spec, persistence, commands (dashboard.create-sheet, dashboard.select-sheet, dashboard.set-vgplot, dashboard.get-vgplot), AI tool wrappers, parse/format helpers, and RoomState.dashboard API.
Mosaic internals
packages/mosaic/src/MosaicSlice.ts
Support for non‑Wasm DuckDB via createDuckDbMosaicConnector, conditional connector wiring, and simplified connection state.
Mosaic exports
packages/mosaic/src/index.ts
Re-exported astToDOM, astToESM, parseSpec from @uwdata/mosaic-spec and reordered some export blocks.
Utility
apps/sqlrooms-cli-ui/src/utils.ts
Added getErrorMessage(error: unknown): string helper.
Minor UI tweak
packages/ai-settings/src/components/AiModelsSettings.tsx
Reordered icon className positional utilities (no behavior change).

Sequence Diagram

sequenceDiagram
    autonumber
    actor User
    participant Editor as DashboardSheet
    participant Store as RoomStore
    participant Mosaic as MosaicRenderer
    participant AI as Assistant

    User->>Editor: Edit vgplot JSON / Ask assistant / Click Apply
    Editor->>Editor: parse & validate JSON, track dirty state
    Editor->>Store: dashboard.get-vgplot / dashboard.set-vgplot / dashboard.create-sheet
    Store->>Store: run command handlers, persist dashboard state
    Store-->>Editor: ack / vgplot payload / errors
    Editor->>Mosaic: parseSpec -> astToDOM -> render via VgPlotChart
    Mosaic-->>Editor: rendered DOM / compile errors
    Editor-->>User: preview / errors
    Editor->>AI: invoke dashboard tools (create/get/set)
    AI->>Store: execute dashboard commands
    Store-->>AI: results
    AI-->>Editor: suggested vgplot
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • dmitriy-kostianetskiy
  • mihajlo-stojkovic
  • lixun910

Poem

🐰 I nibble JSON, stitch plots with care,
Monaco paints lines, Mosaic sculpts the air,
Commands hum softly, AI lends a paw,
Dashboards wake up from a rabbit's awe—
Hop, preview, render: behold the flair! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.09% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: CLI: Mosaic dashboard' clearly summarizes the main change: adding Mosaic dashboard functionality to the CLI application.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/mosaic-dashboard-ai-5417

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can suggest fixes for GitHub Check annotations.

Configure the reviews.tools.github-checks setting to adjust the time to wait for GitHub Checks to complete.

@ilyabo ilyabo changed the title Mosaic dashboard ai feat: CLI: Mosaic dashboard Mar 1, 2026
@ilyabo
ilyabo marked this pull request as ready for review March 1, 2026 09:53

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (4)
apps/sqlrooms-cli-ui/src/store.ts (1)

219-222: Minor code duplication with DashboardSheet.tsx.

The getErrorMessage helper is duplicated between this file and DashboardSheet.tsx (lines 21-26). Consider extracting it to a shared utility module to maintain DRY principles.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/store.ts` around lines 219 - 222, The
getErrorMessage function is duplicated in store.ts and DashboardSheet.tsx;
extract it into a shared utility module (e.g., create a new file exporting
getErrorMessage) and replace both local implementations with an import. Update
references to use the exported getErrorMessage function in store.ts and
DashboardSheet.tsx, ensure the utility exports the same signature
(getErrorMessage(error: unknown): string) and run type checks to confirm no
breaking imports.
packages/mosaic/src/MosaicSlice.ts (1)

349-376: Consider documenting the performance implications of the JSON fallback.

The adapter correctly falls back to JSON for both json and arrow query types when using non-WASM connectors. The comment explains the compatibility reason, but users should be aware that this may have performance implications for large datasets compared to native Arrow format.

The as any type assertions are acceptable here given the adapter pattern, but consider adding a brief JSDoc comment on createDuckDbMosaicConnector noting this trade-off.

📝 Suggested documentation
+/**
+ * Creates a Mosaic-compatible connector from a generic DuckDbConnector.
+ * Note: For non-WASM connectors, Arrow queries are materialized as JSON
+ * for compatibility, which may impact performance with large datasets.
+ */
 function createDuckDbMosaicConnector(connector: DuckDbConnector): Connector {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/mosaic/src/MosaicSlice.ts` around lines 349 - 376, Add a concise
JSDoc to createDuckDbMosaicConnector explaining that when the connector cannot
return native Arrow tables it falls back to JSON for both 'json' and 'arrow'
query types, that this materialization (using connector.queryJson and
Array.from) can have performance/memory implications for large datasets compared
to native Arrow, and that the use of `as any` in the Connector['query'] return
is an intentional adapter trade-off; include the JSDoc directly above the
createDuckDbMosaicConnector function and reference the query fallback behavior
so readers see the trade-off when inspecting that function.
apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx (2)

131-148: Effect dependency may cause unexpected behavior.

The effect depends on [schema], but the intent is to load the schema once when it's not available. Since setSchema is called inside the effect and schema is in the dependency array, this could theoretically cause issues if the schema object reference changes for other reasons. However, the early return on if (schema) return; mitigates this.

A clearer approach would be to use an empty dependency array with a separate loading flag, but the current implementation is functionally correct due to the early return guard.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx` around lines 131 -
148, The effect currently depends on [schema] which is confusing; change it to
run once on mount by replacing the dependency array with [] and keep the
cancellation guard to avoid state updates after unmount. Specifically, update
the useEffect that calls loadVgplotSchema so it no longer lists schema in
dependencies, retain the cancelled boolean (or use a ref like isMounted) and
continue to call setSchema(loadedSchema) and
setSchemaError(getErrorMessage(error)) only when not cancelled; remove the
initial if (schema) return; guard since the effect will only run once.

12-13: Module-level mutable state for schema caching.

The singleton caching pattern works for browser-only usage but may cause issues with SSR or testing scenarios where module state persists across tests. Consider whether this is acceptable for your use case.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx` around lines 12 - 13,
The module-level mutable variables vgplotSchemaCache and vgplotSchemaPromise
create a global singleton that can leak across SSR requests and tests; refactor
so the cache is not stored at module scope—either move the cache into
component-level state/ref (e.g., a useRef/useState inside the DashboardSheet
hook/component) or inject a cache provider passed into the loader hook so each
request/test can supply an isolated cache; alternatively, guard assignments with
a browser-only check (typeof window !== 'undefined') or add an explicit
reset/clear function used by tests—update all usages that read/write
vgplotSchemaCache and vgplotSchemaPromise to use the new per-instance cache API.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx`:
- Around line 131-148: The effect currently depends on [schema] which is
confusing; change it to run once on mount by replacing the dependency array with
[] and keep the cancellation guard to avoid state updates after unmount.
Specifically, update the useEffect that calls loadVgplotSchema so it no longer
lists schema in dependencies, retain the cancelled boolean (or use a ref like
isMounted) and continue to call setSchema(loadedSchema) and
setSchemaError(getErrorMessage(error)) only when not cancelled; remove the
initial if (schema) return; guard since the effect will only run once.
- Around line 12-13: The module-level mutable variables vgplotSchemaCache and
vgplotSchemaPromise create a global singleton that can leak across SSR requests
and tests; refactor so the cache is not stored at module scope—either move the
cache into component-level state/ref (e.g., a useRef/useState inside the
DashboardSheet hook/component) or inject a cache provider passed into the loader
hook so each request/test can supply an isolated cache; alternatively, guard
assignments with a browser-only check (typeof window !== 'undefined') or add an
explicit reset/clear function used by tests—update all usages that read/write
vgplotSchemaCache and vgplotSchemaPromise to use the new per-instance cache API.

In `@apps/sqlrooms-cli-ui/src/store.ts`:
- Around line 219-222: The getErrorMessage function is duplicated in store.ts
and DashboardSheet.tsx; extract it into a shared utility module (e.g., create a
new file exporting getErrorMessage) and replace both local implementations with
an import. Update references to use the exported getErrorMessage function in
store.ts and DashboardSheet.tsx, ensure the utility exports the same signature
(getErrorMessage(error: unknown): string) and run type checks to confirm no
breaking imports.

In `@packages/mosaic/src/MosaicSlice.ts`:
- Around line 349-376: Add a concise JSDoc to createDuckDbMosaicConnector
explaining that when the connector cannot return native Arrow tables it falls
back to JSON for both 'json' and 'arrow' query types, that this materialization
(using connector.queryJson and Array.from) can have performance/memory
implications for large datasets compared to native Arrow, and that the use of
`as any` in the Connector['query'] return is an intentional adapter trade-off;
include the JSDoc directly above the createDuckDbMosaicConnector function and
reference the query fallback behavior so readers see the trade-off when
inspecting that function.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1ccbe61 and 9521ee7.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (8)
  • apps/sqlrooms-cli-ui/package.json
  • apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx
  • apps/sqlrooms-cli-ui/src/components/SheetsPanel.tsx
  • apps/sqlrooms-cli-ui/src/store.ts
  • packages/cells/src/components/SheetsTabBar.tsx
  • packages/cells/src/types.ts
  • packages/mosaic/src/MosaicSlice.ts
  • packages/mosaic/src/index.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/sqlrooms-cli-ui/src/store.ts`:
- Around line 774-781: The object passed to createAiSlice contains duplicate
toolRenderers keys so the first definition is silently overwritten; remove the
redundant toolRenderers block (or merge them if different) and keep a single
property that spreads createDefaultAiToolRenderers() and sets chart:
VegaChartToolResult so createAiSlice uses the intended renderer configuration.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7d5eacf7-5888-46c8-87b5-d8e7412f0952

📥 Commits

Reviewing files that changed from the base of the PR and between fccd29c and c03e411.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • apps/sqlrooms-cli-ui/src/store.ts
  • packages/ai-settings/src/components/AiModelsSettings.tsx
  • packages/cells/src/types.ts
  • packages/mosaic/src/MosaicSlice.ts
  • packages/mosaic/src/index.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/ai-settings/src/components/AiModelsSettings.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/cells/src/types.ts
  • packages/mosaic/src/index.ts
  • packages/mosaic/src/MosaicSlice.ts

Comment thread apps/sqlrooms-cli-ui/src/store.ts Outdated
Signed-off-by: Ilya Boyandin <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
apps/sqlrooms-cli-ui/src/store.ts (1)

770-777: ⚠️ Potential issue | 🟠 Major

Remove the duplicate toolRenderers key.

The second object literal overwrites the first one, leaving dead code and a Biome noDuplicateObjectKeys error in this TS file.

As per coding guidelines, **/*.{js,ts,jsx,tsx}: Maintain lint baseline with warnings only; zero errors is the expected state.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/store.ts` around lines 770 - 777, There are two
duplicate object keys named toolRenderers in the same object literal causing the
latter to overwrite the former and trigger a noDuplicateObjectKeys lint error;
remove the duplicate entry and ensure a single toolRenderers property merges
defaults with the chart renderer (use createDefaultAiToolRenderers() spread plus
chart: VegaChartToolResult) so only one toolRenderers exists in the object in
store.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx`:
- Around line 129-132: Effect currently overwrites both editorValue and
lastAppliedValue whenever persistedSpec changes; change it so switching sheets
(currentSheetId change) still resets both, but when persistedSpec updates while
the editor is open only update state if the editor is clean: check editorValue
=== lastAppliedValue before calling setEditorValue or setLastAppliedValue,
otherwise skip the update so in-progress edits aren’t clobbered (this preserves
Reset behavior). Locate the useEffect that references setEditorValue,
setLastAppliedValue, persistedSpec and currentSheetId and implement the
conditional update described above.

In `@packages/mosaic/src/MosaicSlice.ts`:
- Around line 387-394: The 'arrow' branch in MosaicSlice currently calls
connector.queryJson(...) and returns JSON rows (via Array.from(...)) which
breaks callers expecting a flechette Table with .toColumns(); update the branch
so that when queryType === 'arrow' you return a proper flechette Table (the same
shape produced for ArrowQueryRequest) — either call the connector method that
returns a flechette Table (e.g., Connector.query(...) for ArrowQueryRequest) or
convert the JSON rows into a flechette Table before returning; alternatively, if
you intend to return JSON, explicitly change the queryType mapping so the branch
is not labeled 'arrow' (and update callers accordingly).

---

Duplicate comments:
In `@apps/sqlrooms-cli-ui/src/store.ts`:
- Around line 770-777: There are two duplicate object keys named toolRenderers
in the same object literal causing the latter to overwrite the former and
trigger a noDuplicateObjectKeys lint error; remove the duplicate entry and
ensure a single toolRenderers property merges defaults with the chart renderer
(use createDefaultAiToolRenderers() spread plus chart: VegaChartToolResult) so
only one toolRenderers exists in the object in store.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fee43d98-3ec7-4180-aa82-aab52f27c86f

📥 Commits

Reviewing files that changed from the base of the PR and between c03e411 and bf4f931.

📒 Files selected for processing (4)
  • apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx
  • apps/sqlrooms-cli-ui/src/store.ts
  • apps/sqlrooms-cli-ui/src/utils.ts
  • packages/mosaic/src/MosaicSlice.ts

Comment thread apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx
Comment thread packages/mosaic/src/MosaicSlice.ts Outdated
Signed-off-by: Ilya Boyandin <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx (1)

196-225: Debounce the live preview compile loop.

This effect recompiles the preview on every valid keystroke. The cancelled flag only suppresses stale setStates, so the underlying work still runs in the background and can pile up quickly on larger specs. A short debounce before compiling would make typing much smoother.

⚙️ Small debounce around preview compilation
   const parsedAppliedSpec = React.useMemo(
     () => parseVgplotSpec(lastAppliedValue),
     [lastAppliedValue],
   );
   const previewSpec = parsedEditorSpec.parsed ?? parsedAppliedSpec.parsed;
+  const [debouncedPreviewSpec, setDebouncedPreviewSpec] =
+    React.useState<Spec | null>(previewSpec);
+
+  React.useEffect(() => {
+    const timeoutId = window.setTimeout(() => {
+      setDebouncedPreviewSpec(previewSpec);
+    }, 250);
+    return () => window.clearTimeout(timeoutId);
+  }, [previewSpec]);
+
   const previewError = parsedEditorSpec.error;
   const isDirty = editorValue !== lastAppliedValue;
   const canApply = Boolean(
     currentSheetId && parsedEditorSpec.formatted && isDirty,
   );
@@
-  React.useEffect(() => {
-    if (mosaicConnection.status !== 'ready' || !previewSpec) {
+  React.useEffect(() => {
+    if (mosaicConnection.status !== 'ready' || !debouncedPreviewSpec) {
       setCompiledPlot(null);
       setPlotCompileError(null);
       setIsCompilingPlot(false);
       return;
     }
@@
-        const ast = await parseSpec(previewSpec);
+        const ast = await parseSpec(debouncedPreviewSpec);
         const instantiated = await astToDOM(ast);
         if (cancelled) return;
         setCompiledPlot(instantiated.element);
@@
-  }, [mosaicConnection.status, previewSpec]);
+  }, [mosaicConnection.status, debouncedPreviewSpec]);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx` around lines 196 -
225, The effect in DashboardSheet.tsx (the React.useEffect watching
mosaicConnection.status and previewSpec) launches parseSpec/astToDOM on every
keystroke; add a short debounce (e.g., 200–400ms) so compilation only runs after
typing pauses: use a timer stored in a ref (or local timeout var) and
clearTimeout on subsequent effect runs/cleanup, start the async compile only
from the debounced callback, keep the existing cancelled flag semantics to avoid
stale setState, and ensure setIsCompilingPlot is set true when the debounced
compile starts and reset in the finally block; reference the useEffect,
previewSpec, parseSpec, astToDOM, setCompiledPlot, setPlotCompileError,
setIsCompilingPlot, and cancelled symbols when making the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/sqlrooms-cli-ui/src/store.ts`:
- Around line 406-428: When a sheetId is passed to the read path (execute),
validate it the same way the write paths do instead of silently proceeding and
returning vgplot: undefined; if the provided sheetId is not a dashboard sheet
return success: false and an error. Concretely, in execute use the same guard
used by dashboard.select-sheet and dashboard.set-vgplot (e.g. call the
dashboard-type check used there — the is/ensureSheetDashboard guard or
equivalent helper) to reject invalid or non-dashboard sheetIds before calling
getSheetVgplot; mirror this change for the other read block at the 453-483
region so both read flows return an error for invalid sheetIds rather than
success with vgplot: undefined.

---

Nitpick comments:
In `@apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx`:
- Around line 196-225: The effect in DashboardSheet.tsx (the React.useEffect
watching mosaicConnection.status and previewSpec) launches parseSpec/astToDOM on
every keystroke; add a short debounce (e.g., 200–400ms) so compilation only runs
after typing pauses: use a timer stored in a ref (or local timeout var) and
clearTimeout on subsequent effect runs/cleanup, start the async compile only
from the debounced callback, keep the existing cancelled flag semantics to avoid
stale setState, and ensure setIsCompilingPlot is set true when the debounced
compile starts and reset in the finally block; reference the useEffect,
previewSpec, parseSpec, astToDOM, setCompiledPlot, setPlotCompileError,
setIsCompilingPlot, and cancelled symbols when making the change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: dacbda1b-7b13-41a5-84e3-c57024fffee6

📥 Commits

Reviewing files that changed from the base of the PR and between bf4f931 and b2b231b.

📒 Files selected for processing (3)
  • apps/sqlrooms-cli-ui/src/components/DashboardSheet.tsx
  • apps/sqlrooms-cli-ui/src/store.ts
  • packages/mosaic/src/MosaicSlice.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/mosaic/src/MosaicSlice.ts

Comment thread apps/sqlrooms-cli-ui/src/store.ts Outdated
ilyabo added 7 commits March 21, 2026 22:56
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
@ilyabo
ilyabo merged commit aeb614c into main Mar 22, 2026
3 checks passed
@ilyabo
ilyabo deleted the cursor/mosaic-dashboard-ai-5417 branch March 22, 2026 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants