v0.21.0 ships a TypeError at require time:
(0, import_provider_utils6.createProviderToolFactoryWithOutputSchema)
is not a function
Cause: PR #158 added @ai-sdk/xai, @ai-sdk/mistral, @ai-sdk/deepseek.
All three pull @ai-sdk/provider-utils@4, while core ai@5 is pinned to
@ai-sdk/provider-utils@3. pnpm hoisting + electron-builder's asar pack
pick the wrong version at runtime and the app refuses to open.
Fix: drop the three SDK packages. All three services expose
OpenAI-compatible endpoints, so route them through createOpenAI with
the matching base URL — same pattern GLM and Ollama already use. User-
facing provider list is unchanged.
Also extract the provider switch into ai-providers.ts so it can be
unit-tested without pulling in Electron, and:
- ai-providers.test.ts smoke-tests createProviderClient for every
AIProvider. Catches any future require-time crash from an @ai-sdk
package.
- ai-deps.test.ts walks node_modules/@ai-sdk and asserts every package
agrees on the provider-utils major version. This is the invariant
that #158 violated; the suite now fails fast if it breaks again.
CI guardrails:
- New ci.yml runs typecheck + tests on every push/PR to main. There
was no PR check before, which is how #158 landed green.
- build.yml and build-artifacts.yml gate all platform builds behind
a new `verify` job running the same checks, so a broken main can
never produce a release artifact.
- Artifact workflow now uses --frozen-lockfile like the release one.
* feat(notebooks): add shared types for notebooks and cells
* feat(notebooks): add SQLite storage layer with full CRUD
Implements NotebookStorage class backed by better-sqlite3 with WAL mode,
foreign-key cascading deletes, and full CRUD for notebooks and cells.
* feat(notebooks): add IPC handlers for notebook CRUD
* feat(notebooks): add preload bridge for notebook IPC
* feat(notebooks): add NotebookTab type and createNotebookTab action
Adds 'notebook' to TabType union, NotebookTab interface, notebookId to
PersistedTab, createNotebookTab action with deduplication, persistence
handling, and notebook type guards in tab-query-editor.tsx.
* feat(notebooks): add Zustand store for notebook state management
* feat(notebooks): add NotebookEditor component and wire into TabContainer
* feat(notebooks): add sidebar section for browsing and creating notebooks
* feat(notebooks): add export functions for .dpnb and Markdown formats
* feat(notebooks): add NotebookCell component and dependencies
Add react-markdown and remark-gfm for markdown cell rendering.
NotebookCell handles SQL execution, markdown rendering, result
pinning, and keyboard shortcuts.
* fix: address review feedback for SQL notebooks
- Wrap JSON.parse in try/catch for corrupt pinned_result data
- Fix IPC type mismatches: update/duplicate/updateCell return actual data
- Remove non-functional Run All button from notebook editor
- Replace confirm() dialog with immediate delete + toast notification
- Remove dead notebook placeholder branch in tab-query-editor
- Remove duplicate react-markdown/remark-gfm from root package.json
* chore: lock files
* docs(notebooks): add feature docs, demo runbook, and nav entry
- SQL Notebooks feature documentation page for docs site
- Demo runbook .dpnb file for ACME SaaS health checks
- Add sql-notebooks to features navigation
* content(notebooks): add release notes, social posts, and 3 blog posts
- Release notes for v0.20.0 (SQL Notebooks)
- Social media posts (Twitter, Reddit, Dev.to)
- Blog 11: Feature announcement
- Blog 12: Storage architecture deep dive
- Blog 13: Lazy-loading Monaco in notebook cells
* content(notebooks): add Threads posts and posting strategy
4 Threads posts: launch carousel thread, technical behind-the-scenes,
runbook showcase, and conversation starter. Includes posting cadence
and format tips.
* docs(notebooks): add demo recording script
* feat(video): add release video and demo video for SQL Notebooks
- ReleaseVideo020: 24s release announcement (4 feature scenes)
- NotebookDemo: 45s feature walkthrough with animated notebook mockup
showing cells typing in, queries executing, results sliding in,
keyboard navigation, and export formats
* feat(video): add new background music for notebook videos
Screen Saver by Kevin MacLeod (CC BY 4.0) as primary track,
Equatorial Complex as alternative. Both compositions updated
to use the new track.
* fix: apply CodeRabbit auto-fixes
Fixed 5 file(s) based on 5 unresolved review comments.
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
---------
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
* docs(plan): add docs site revamp design
Root-causes the slow layout transitions on docs.datapeek.dev
(Framer Motion 500ms fade, sidebar tree re-sent per nav, version
lag) and plans phased fix: triage, version bumps, MDX brittleness,
prerender, brand polish, follow-up distinctive design pass.
* docs(plan): add docs site revamp implementation plan
Phased tasks covering Framer Motion / tree-reload removal,
version bumps (Fumadocs 16.7, TanStack 1.168), remark plugins
for resilient MDX parsing, CI types:check gate, prerender, and
typography polish. Validation checklist at the end.
* perf(docs): remove page fade-in and move tree to parent route
Framer Motion wrapper added a 500ms fade on every nav and the
sidebar tree was re-sent and re-transformed per navigation. Move
the tree to a new /docs parent layout route with staleTime:Infinity
and drop the motion wrapper + CSS fade-in on main.
Navigating /docs/* now feels instant.
* chore(docs): bump fumadocs to 16.7 / 14.2 and switch to useContent
fumadocs-ui/core 16.2.1 -> 16.7.x and fumadocs-mdx 14.0.4 -> 14.2.x.
fumadocs-mdx 14.2 tightened ClientLoader typings so getComponent()
returns FC<never> by default. Switch to clientLoader.useContent()
which is the canonical Fumadocs-on-TanStack pattern anyway — cleaner
and handles Suspense internally.
* chore(docs): bump tanstack router/start to 1.168/1.167
Bumps @tanstack/react-router to ^1.168.10, @tanstack/react-start to
^1.167.16, and @tanstack/react-router-devtools to ^1.166.11. Catches
~34 minor versions of hydration, loader, scroll restoration, and
routing fixes. No source changes required - existing createFileRoute,
createServerFn, inputValidator, and createRouter APIs remain compatible.
* fix(docs): harden MDX parsing and add types:check CI gate
Add remark-gfm + remark-smartypants to fumadocs MDX config so
prose containing numeric operators, comparisons, and angle
brackets parses cleanly without author discipline. The workaround
from 60282cd (backtick-wrapping operators) is no longer strictly
needed, though we leave existing wrappers in place.
Add .github/workflows/docs-types.yml that runs pnpm --filter docs
types:check on every PR touching apps/docs. This parses every MDX
file and fails the build if anything regresses — catches the kind
of issue that hit prod in 60282cd.
* docs(plan): capture post-revamp perf baseline and defer prerender
Prerender attempted but blocked by a race between tanstack-start-
plugin-core and nitro@3.0.1-alpha.1 in the preview-server handoff
(fetches the first route before the nitro child process has bound
to its port). Runtime is fine — only the prerender crawl fails.
Documented the deferral in the baseline file.
Baseline measurements taken against the non-prerendered production
build for future regression comparisons.
* style(docs): tighten typography scale and body rhythm
Smaller h1/h2/h3 (1.875/1.25/1.0625 rem) and body line-height 1.6
match the 'dense but scannable' principle in CLAUDE.md and bring
the docs closer to Linear/Raycast density without sacrificing
readability.
* docs(plan): mark docs revamp validation checklist and note follow-ups
Code-level items verified, visual items flagged for human check.
Honest on the LCP number: 7.8s under Lighthouse mobile throttling
does not meet the 1.5s target, though TBT is 0ms and server latency
is ~20ms so perceived perf is far better than the mobile score.
Broken-internal-links check dropped from Phase 2 — noted as
follow-up.
* fix(docs): scope prose link color so landing hero CTA is readable
The global \`a { color: var(--dp-accent) }\` rule was leaking into
\`routes/index.tsx\` and overriding the landing page CTA's inline
\`text-[#0a0a0b]\` class. Because the CTA background is also
var(--dp-accent), the button text was invisible-on-itself.
Scope the rule to \`article a\` so it only styles MDX prose
content (docs pages wrap in <article> via DocsPage; landing uses
<main> via HomeLayout). Sidebar, TOC, and navbar links already
have their own scoped rules and are unaffected.
This bug was pre-existing (introduced in 04268973, 2025-11-30) but
surfaced during the docs revamp visual review.
* fix(docs): resolve type checking errors and commit routeTree.gen.ts
* fix(docs): resolve hydration crash and broken navigation
- Moved server-only `source.getPage()` calls from client-side `head()` into server-side `loader()`.
- Passed extracted metadata (title, description, breadcrumbs) to `head()` via `loaderData`.
- Relocated structured data injection to React component tree to fix hydration mismatches.
- Removed blocking third-party scripts from root route.
* chore(docs): remove playwright dep and dead getOrganizationStructuredData code
- Remove playwright from devDependencies (only used for one-off verification)
- Remove unused getOrganizationStructuredData import from __root.tsx
- Remove dead getOrganizationStructuredData function from seo.ts (zero callers)
---------
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
- Add Remotion release video for v0.19.0 with 5 feature scenes:
Web SQL Client, Table Editor UX, Smart Filter Bar,
Local-First Storage, and Shared UI Package
- Fix electron-builder Windows build by moving @data-peek/ui
to devDependencies (it's renderer-only, bundled by Vite)
- Fix unused onCopy prop in smart-filter-bar causing TS error
# Vercel Speed Insights Installation
Successfully installed and configured Vercel Speed Insights for the data-peek webapp project.
## Changes Made
### 1. Package Installation
- Added `@vercel/speed-insights` version ^2.0.0 to dependencies in `apps/webapp/package.json`
- Updated `pnpm-lock.yaml` with the new dependency and its transitive dependencies
### 2. Component Integration
- Modified `apps/webapp/src/app/layout.tsx`:
- Imported `SpeedInsights` component from `@vercel/speed-insights/next`
- Added `<SpeedInsights />` component inside the `<body>` tag, alongside the existing `<Analytics />` component
## Implementation Details
The implementation follows the official Vercel Speed Insights quickstart documentation for Next.js App Router (v13.5+):
- Used the correct Next.js-specific import path: `@vercel/speed-insights/next`
- Placed the component in the root layout file at `app/layout.tsx`
- Added the component inside the `<body>` tag as recommended
## Framework
This project uses Next.js 16.0.7 with the App Router architecture, so the implementation uses the App Router-specific instructions from the official documentation.
## Next Steps
To enable Speed Insights:
1. Deploy the application to Vercel
2. Navigate to the Vercel dashboard
3. Select Speed Insights from the sidebar
4. Choose the project and click Enable
5. After deployment, the Speed Insights script will be automatically injected at `/_vercel/speed-insights/*`
6. Once users visit the site, performance metrics will appear in the Vercel dashboard
## Notes
- The existing `@vercel/analytics` package was already installed, so this addition complements the existing analytics setup
- The pre-existing build errors in the codebase are unrelated to this change - they stem from missing dependencies in the shared `packages/ui` package
- The SpeedInsights component is zero-bundle-size on the client and only loads the tracking script when needed
Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
Clerk components were rendering dark text on dark background, making
sign-in, user button, and other auth UI invisible. Added @clerk/themes
dark base theme with matching color variables.
# Vercel Web Analytics Installation Report
## Summary
Successfully installed and configured Vercel Web Analytics for the data-peek webapp project following the latest official Vercel documentation.
## Changes Made
### 1. Package Installation
- Installed `@vercel/analytics` version 2.0.1 using pnpm
- Updated `apps/webapp/package.json` to include the new dependency
### 2. Code Integration
Modified `apps/webapp/src/app/layout.tsx`:
- Added import: `import { Analytics } from '@vercel/analytics/next'`
- Added `<Analytics />` component inside the `<body>` tag, after the main content providers
### 3. Framework-Specific Implementation
- Used Next.js App Router approach as documented in Vercel's quickstart guide
- Placed Analytics component in the root layout file (`app/layout.tsx`)
- Component placed within `<body>` tag to ensure proper tracking across all pages
## Implementation Details
The Analytics component was added to the root layout following Next.js App Router best practices:
- Import from `@vercel/analytics/next` for Next.js-specific integration
- Placed after the main application content to avoid interfering with the existing ClerkProvider, Providers, and NuqsAdapter wrapper hierarchy
- This ensures analytics tracking is initialized for all pages in the application
## Files Modified
1. `apps/webapp/package.json` - Added @vercel/analytics dependency
2. `apps/webapp/src/app/layout.tsx` - Added Analytics import and component
3. `pnpm-lock.yaml` - Updated lockfile with new dependencies
## Next Steps for Deployment
To enable analytics on Vercel:
1. Enable Web Analytics in the Vercel dashboard (Analytics section)
2. Deploy the application using `vercel deploy`
3. Verify tracking via browser Network tab (look for analytics requests)
## Notes
- The project had pre-existing build issues unrelated to this change (missing @radix-ui dependencies in the UI package)
- The Analytics implementation itself is correct and follows official Vercel documentation
- Analytics will automatically start collecting data once deployed to Vercel with the feature enabled in the dashboard
Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
* feat(webapp): add MSSQL support, query editing, command palette, and SQL formatting
Co-authored-by: Rohith <gillarohith1@gmail.com>
* chore(webapp): remove MSSQL support and related code to drop database
Co-authored-by: Rohith <gillarohith1@gmail.com>
* fix(webapp): address review feedback for edit mode and query cancel
- Cache pg_backend_pid at connect time so cancelQuery works during in-flight queries
- Cache CONNECTION_ID at connect time for the same reason in MySQL adapter
- Use parameterized query for SET statement_timeout in Postgres adapter
- Parse SQL to extract table/schema context for edit mode instead of empty placeholders
- Add MSSQL bracket identifier quoting to escapeId in edit store
- Remove unused Trash2 and useQueryStore imports from edit-toolbar
---------
Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
Co-authored-by: Rohith <gillarohith1@gmail.com>
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
Copy 9 remaining components (alert-dialog, chart, checkbox, collapsible,
command, context-menu, progress, sidebar, switch) to packages/ui and
update all 92 desktop files to import from @data-peek/ui instead of
local @/components/ui/* paths.
## Vercel Web Analytics Installation
Successfully installed and configured Vercel Web Analytics for the data-peek documentation site.
### Implementation Details
**Framework Identified:** TanStack Start (React-based framework with Nitro)
**Changes Made:**
1. **Package Installation**
- Added `@vercel/analytics` (v2.0.1) to `apps/docs/package.json`
- Package installed using pnpm as per project's package manager
- Updated `pnpm-lock.yaml` to reflect new dependency
2. **Analytics Configuration**
- Modified `apps/docs/src/routes/__root.tsx`:
- Added import: `import { Analytics } from "@vercel/analytics/react"`
- Added `<Analytics />` component to the RootDocument body, placed before the `<Scripts />` component
**Implementation Approach:**
Following the official Vercel Analytics documentation (fetched from https://vercel.com/docs/analytics/quickstart), I:
- Used the React-specific package `@vercel/analytics/react`
- Added the `<Analytics />` component to the root layout where it can track all page views
- Positioned it before the `<Scripts />` component in the body to ensure proper initialization
- The component automatically detects the environment (production/development) via NODE_ENV
- In production (when deployed to Vercel), the analytics will be active; in development, it will use debug mode
**Build Verification:**
✅ Build completed successfully (`pnpm run build`)
✅ No TypeScript errors related to the Analytics integration
✅ Package installed without conflicts
✅ Existing functionality preserved
**Next Steps for Deployment:**
To enable analytics data collection, the project owner needs to:
1. Visit the Vercel dashboard for this project
2. Navigate to the Analytics section
3. Click "Enable" to activate Web Analytics
4. Deploy the updated code to Vercel
Once deployed and enabled in the dashboard, analytics will automatically track page views and web vitals.
Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
## Vercel Web Analytics Installation
Successfully installed and configured Vercel Web Analytics for the Next.js App Router project.
### Changes Made
**Modified Files:**
- `apps/web/package.json` - Added `@vercel/analytics` (v2.0.1) dependency
- `apps/web/src/app/layout.tsx` - Added Analytics component import and rendering
- `pnpm-lock.yaml` - Updated with new dependency
### Implementation Details
1. **Fetched Latest Documentation**: Retrieved the most up-to-date installation instructions from https://vercel.com/docs/analytics/quickstart
2. **Package Installation**: Added `@vercel/analytics@^2.0.1` to the project dependencies using pnpm
3. **Analytics Configuration**: Following the official Next.js App Router setup instructions:
- Imported `Analytics` component from `@vercel/analytics/next`
- Added `<Analytics />` component to the root layout at the end of the `<body>` tag
- Preserved all existing code structure and styling
4. **Framework Identification**: Confirmed this is a Next.js 16.0.7 App Router project (layout.tsx in app directory)
### Verification
- TypeScript type checking passed successfully (no type errors)
- Changes follow the official Vercel documentation pattern exactly
- The Analytics component is placed correctly in the root layout for global tracking
- All imports are properly added
- Lock file (pnpm-lock.yaml) updated with the new dependency
### Notes
- The Analytics component will automatically track page views and web vitals when the app is deployed
- No additional configuration is required - the component works out of the box
- The existing analytics scripts (Clarity, SimpleAnalytics, etc.) remain unchanged
- Pre-existing build warnings/errors (DodoPayments API key, Clerk publishable key) are unrelated to this implementation and exist in the codebase
Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
Remotion composition for the v0.17.0 stability release covering
identifier quoting, enum array parsing, and stability fixes.
Includes royalty-free ambient background music from Mixkit.
* feat: add Remotion video app and fix build errors
Add apps/video/ (@data-peek/video) — a Remotion app for generating
launch and demo videos. Includes a 30s v0.16.0 launch video composition
with animated feature showcases matching the brand identity.
Fix TypeScript build errors: duplicate variable declarations in
database adapters, missing crypto import in pg-notification-listener,
and inconsistent useEffect return paths in renderer components.
* fix: add missing nanoid dependency to desktop package
nanoid was imported in masking-store.ts but not declared in
package.json, causing CI build failures on Mac and Linux where
hoisting doesn't resolve it.
* fix: correct video duration and masking badge positioning
- Bump durationInFrames from 900 to 941 to match actual timeline
(intro 120 + 6 features × 117 + transition 9 + outro 110)
- Add position: relative to DataMasking card so the absolute
"masked" badge renders in the correct location
* docs: add design spec for 6 new features
Column Statistics, Data Masking, CSV Import, Data Generator,
DB Notifications, and Connection Health Monitor.
* docs: update spec with review fixes
Resolve all 15 review issues: naming conflicts, preload layer,
batch insert interface, guard clauses, confirmation dialogs, etc.
* docs: add implementation plan for 6 features
Fix critical issues from review: adapter connection pattern,
preload event subscription pattern, tab interface definitions,
ColumnStatsRequest type, and implementation notes.
* feat: add column statistics panel (Tasks 1.1-1.8)
Implement the Column Statistics feature allowing users to right-click a
column header and view min/max/nulls/distinct/histogram in a right sidebar
panel. Supports PostgreSQL (full implementation with median + histogram),
MySQL (CASE WHEN histogram, no median), and MSSQL (NTILE histogram +
PERCENTILE_CONT median). Includes shared types, IPC handler, Zustand
store, stats panel UI, and DataTable integration via onColumnStatsClick.
* feat: add Data Masking feature (renderer-only)
Adds blur-based data masking so users can hide sensitive columns during
demos, screenshots, and pair programming. Entirely renderer-only — no
IPC or main process changes.
- masking-store: Zustand store with manual per-tab masking, auto-mask
rules (email/password/ssn/token etc.), hover-to-peek, and persist
middleware for rules/settings only (runtime maskedColumns not persisted)
- masking-toolbar: dropdown UI for toggling auto-mask, managing rules,
adding custom regex patterns, and unmasking all columns for a tab
- data-table: accepts optional tabId, shows lock icon on masked headers,
adds Mask/Unmask to column dropdown, applies blur(5px) + userSelect:none
to masked cells with alt-hover peek support
- editable-data-table: same masking UX; masked cells block editing
- tab-query-editor: wires tabId into DataTable, renders MaskingToolbar
near Export, intercepts exports when masked columns are present and
shows an AlertDialog to confirm exporting with [MASKED] values
* feat(csv-import): implement CSV import feature (Tasks 3.1-3.5)
- Add shared types: CsvColumnMapping, CsvImportOptions, CsvImportRequest,
CsvImportProgress, CsvImportResult, BatchInsertOptions, BatchInsertResult
- Install papaparse for CSV parsing in renderer
- Create batch-insert.ts: parameterized INSERT with per-dialect placeholder
syntax (pg: $1/$2, mysql: ?, mssql: @p1/@p2), ON CONFLICT handling, and
cancellation support
- Add import-handlers.ts IPC handler for db:import-csv and db:import-cancel;
progress events pushed via event.sender.send('db:import-progress')
- Add import-store.ts Zustand store with 5-step wizard state, type inference
for new tables (integer/numeric/timestamp/boolean/text), and auto-mapping
- Create csv-import-dialog.tsx Sheet dialog: file drop zone, target selection,
column mapping, options (batch size/conflict/truncate/transaction), and
progress/result step
- Add "Import CSV" to schema explorer table context menu (both virtualized
and non-virtualized paths)
* feat: add Data Generator feature (Tasks 4.1-4.5)
Adds schema-aware fake data generation using @faker-js/faker. Users can
open a data-generator tab from the schema explorer context menu on any
table, configure per-column generators (faker, random-int/float/bool/date,
uuid, auto-increment, fk-reference, fixed, null), preview 5 sample rows,
and insert up to 10 000 rows in configurable batches with live progress.
- packages/shared: GeneratorType, ColumnGenerator, DataGenConfig,
DataGenProgress, DataGenResult types
- main: data-generator.ts engine with heuristics + faker dispatch
- main: data-gen-handlers.ts IPC for generate, cancel, preview
- preload + preload d.ts: generateData, cancelGenerate, generatePreview,
onGenerateProgress on window.api.db
- stores: DataGeneratorTab type added to tab-store; data-gen-store for
per-tab generator state and actions
- renderer: data-generator.tsx UI; schema-explorer "Generate Data" menu
item; tab-query-editor dispatch for data-generator tab type
* feat: add PostgreSQL LISTEN/NOTIFY dashboard (Chunk 5)
Implements a full LISTEN/NOTIFY panel for PostgreSQL connections:
- Shared types: PgNotificationEvent, PgNotificationChannel, PgNotificationStats
- Main process: dedicated pg.Client listener per connection with SSH tunnel
support, auto-reconnect with exponential backoff, and SQLite event history
(capped at 10k events per connection)
- IPC handlers under pg-notify: prefix; cleanup on app quit
- Preload: pgNotify namespace exposing subscribe/unsubscribe/send/getChannels/
getHistory/clearHistory/onEvent
- Store: usePgNotificationStore with rolling 60s stats and in-memory event cap
- Tab type: pg-notifications added to TabType union with deduplication
- UI: channel subscription bar, scrollable event log with JSON highlighting,
collapsible send panel and stats; PostgreSQL-only guard
- Sidebar: Notifications entry visible only for PostgreSQL connections
* feat(shared): add health monitor types (Task 6.1)
Add ActiveQuery, TableSizeInfo, CacheStats, LockInfo, and
DatabaseSizeInfo types to the shared package for IPC contract.
* feat(adapters): implement health monitor queries (Task 6.2)
Add getActiveQueries, getTableSizes, getCacheStats, getLocks, and
killQuery to DatabaseAdapter interface with implementations for
PostgreSQL, MySQL, MSSQL, and SQLite stub.
* feat(ipc): add health monitor IPC handlers (Task 6.3)
Register IPC handlers for db:active-queries, db:table-sizes,
db:cache-stats, db:locks, and db:kill-query channels.
* feat(preload): expose health monitor API to renderer (Task 6.4)
Add health namespace to preload bridge with activeQueries, tableSizes,
cacheStats, locks, and killQuery methods plus type declarations.
* feat(store): add health monitor Zustand store (Task 6.5)
Create useHealthStore with polling, fetch actions for all health
metrics, and kill query support.
* feat(ui): add health monitor dashboard tab (Task 6.6)
Add HealthMonitor component with 4-panel dashboard: active queries
with kill support, table sizes with sorting, cache hit ratios with
color coding, and lock/blocking detection. Integrate into tab system
and sidebar navigation.
* chore: apply prettier formatting
* fix: resolve empty block statement lint errors
* fix: add column stats to editable table and fix masking infinite loop
Column statistics dropdown now available in table preview (editable)
mode. Fixed MaskingToolbar infinite re-render caused by creating a new
empty array reference on every store snapshot.
* docs: update README, features, roadmap, and marketing site for 6 new features
Add Column Statistics, Data Masking, CSV Import, Data Generator,
Connection Health Monitor, and PostgreSQL Notifications to all
documentation and the marketing website features grid.
* Apply suggestions from code review
Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
---------
Co-authored-by: tembo[bot] <208362400+tembo[bot]@users.noreply.github.com>
* fix: virtualize data tables to eliminate typing lag in Monaco editor
- Add TanStack Virtual row virtualization for datasets > 50 rows
- Measure header column widths and sync to virtualized rows using ResizeObserver
- Fix result switching in table-preview tabs by adding key prop and using active result columns
- Reduce DOM nodes from ~15,000 to ~1,000 for 500-row datasets
- Eliminates 5+ second typing delay caused by React reconciliation overhead
Closes#71
* fix: show all query result rows instead of limiting to page size
Previously, when running raw queries (including multi-statement queries),
results were incorrectly limited to the page size (e.g., 500 rows) instead
of showing all returned rows with client-side pagination.
The issue was that table-preview tabs with multi-statement queries used
paginatedRows which slices data to pageSize before passing to the component.
Now:
- EditableDataTable is only used for single-statement table-preview tabs
- DataTable with getAllRows() is used for query tabs and multi-statement
queries, passing all rows and letting TanStack Table handle pagination
* chore: fix dates
* chore: fix blog posts stuff
* style: Reformat SVG path definitions and MDXComponents type for improved readability.
* a11y: add ARIA attributes to virtualized table rows
- Add role="rowgroup" and aria-rowcount to virtualized container
- Add role="row" and aria-rowindex to each virtualized row
- Add role="cell" to each virtualized cell
- Enables screen readers to navigate virtualized tables correctly
- Replace setTimeout-based scheduling with node-cron for precise timing
- Add "New Schedule" button to empty state in sidebar
- Add cron expression validation before scheduling
- Remove comment dividers per style preference
* feat(web): add blog with MDX support and sitemap integration
- Add blog infrastructure using next-mdx-remote for MDX rendering
- Create blog listing page at /blog with terminal-inspired design
- Add dynamic blog post pages at /blog/[slug]
- Convert existing notes to blog posts (AI assistant, performance analyzer)
- Update sitemap to dynamically include blog posts
- Add Blog link to header and footer navigation
- Style blog content with terminal-themed code blocks and typography
* chore: update a few design changes.
* feat: introduce terminal-style headers for blog post cards and update MDX code block circle colors
* feat: Remove two blog posts and an AI implementation note, update blog infrastructure, and add a reading progress component.
* fix: escape MDX-incompatible characters in blog post
Replace `<1000` and `>10000` with plain text to avoid MDX interpreting
them as JSX tags.
- Add ScheduledQuery and ScheduledQueryRun types to shared package
- Create scheduler service in main process with cron-parser for scheduling
- Add IPC handlers for scheduled queries CRUD operations
- Update preload to expose scheduled queries API
- Create Zustand store for scheduled queries state management
- Add UI components:
- ScheduledQueriesDialog for listing and managing schedules
- ScheduledQueryFormDialog for creating/editing schedules
- ScheduledQueryRunsDialog for viewing run history
- ScheduledQueries sidebar component
- Support schedule presets (every minute, hourly, daily, etc.) and custom cron
- Include desktop notifications on completion/error
- Store run history with configurable retention
- Add blog infrastructure using next-mdx-remote for MDX rendering
- Create blog listing page at /blog with terminal-inspired design
- Add dynamic blog post pages at /blog/[slug]
- Convert existing notes to blog posts (AI assistant, performance analyzer)
- Update sitemap to dynamically include blog posts
- Add Blog link to header and footer navigation
- Style blog content with terminal-themed code blocks and typography
* feat: add SQLite database support
Implement SQLite adapter using better-sqlite3 library:
- Create SQLiteAdapter class implementing DatabaseAdapter interface
- Support all database operations: query, queryMultiple, execute, executeTransaction
- Implement schema discovery using SQLite PRAGMAs (table_info, foreign_key_list, index_list)
- Add SQLite type normalization (INTEGER, TEXT, REAL, BLOB affinities)
- Support EXPLAIN QUERY PLAN for query analysis
- Add comprehensive unit tests for SQLite adapter
- Update query-tracker to handle SQLite (synchronous, non-cancellable)
- Enhance AI service with SQLite-specific SQL guidelines
Note: SQLite uses 'main' as the default schema and doesn't support
sequences or custom types - these methods return empty arrays.
* feat: add SQLite to connection dialog UI
- Add SQLiteIcon component to database-icons.tsx
- Add SQLite button to database type selector (now 4-column grid)
- Show SQLite-specific form with only database file path input
- Hide host, port, user, password fields for SQLite
- Disable SSH/SSL options when SQLite is selected
- Update validation to only require database path for SQLite
* feat: add libSQL/Turso adapter for remote SQLite connections
- Add LibSQLAdapter for connecting to Turso and libSQL databases
- Update db-adapter to route libsql mode connections to LibSQLAdapter
- Extend connection dialog UI with libsql mode selection
- Add libsql-client dependency
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: simplify SQLite to local file-only, remove libSQL/Turso temporarily
Remove @libsql/client dependency due to native module bundling issues
with electron-vite. SQLite now only supports local file-based databases.
Changes:
- Remove @libsql/client from package.json
- Delete libsql-adapter.ts
- Update db-adapter.ts to remove libSQL routing
- Simplify connection dialog to only show file path input for SQLite
- Add "coming soon" note for Turso/libSQL support
- Simplify SQLiteMode type to just "local"
Turso/libSQL support will be re-added once native module bundling
issues are resolved.
---------
Fixes Linux build by moving @data-peek/shared from dependencies to
devDependencies. The shared package is bundled by Vite via the @shared
alias, so it's not needed at runtime. Also excludes .turbo directories
from the build.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>