Skip to content

release: merge dev → master (normalization, auto-gain, explorer, tidal, player fixes)#301

Open
Radexito wants to merge 281 commits into
masterfrom
dev
Open

release: merge dev → master (normalization, auto-gain, explorer, tidal, player fixes)#301
Radexito wants to merge 281 commits into
masterfrom
dev

Conversation

@Radexito

@Radexito Radexito commented Apr 25, 2026

Copy link
Copy Markdown
Owner

Merge order

Before merging this PR, the following must be merged into dev first:

  1. PR fix(#200): correct first-time setup step counter; tidal is optional #237 (fix/200-deps-progress) — tidal optional step counter
  2. PR fix(#232): export memory cues to PCOB2 in DAT and EXT ANLZ files #234 (fix/232-memory-cue-export) — after PR fix(anlz): EXT PCOB2 must stay empty — memory cues belong in PCO2 slot 2 #319 (fix/232-memory-cue-export_test) is hardware-verified and merged into it
  3. PR fix(pdb): correct auto-gain reference constants from native capture analysis #320 (fix/299-auto-gain-constants) — corrected CDJ auto-gain reference constants

Summary


Test Flight Checklist

Normalization — Playback

  • Import a track; enable normalization in Settings (target LUFS set)
  • Play track — volume is adjusted non-destructively (GainNode); no audio clipping on loud tracks
  • Disable normalization — playback returns to unity gain
  • Positive gain (quiet track) works uncapped via GainNode + limiter

Normalization — USB Export

  • Export a playlist to USB with normalization enabled
  • Verify exported audio file has correct perceived loudness (louder than source if source was quiet)
  • Check exported file bitrate matches source (not downgraded to 128 kbps)
  • Export with normalization disabled — file is a stream-copy (no re-encode)

CDJ Auto-Gain (PDB) — requires PR #320 merged first

  • Export a track to USB on branch fix/299-auto-gain-constants; load on CDJ-3000
  • CDJ trim knob starts at position matching the track's replay-gain value
  • Quiet track (+5 dB gain) shows trim boosted; loud track (−3 dB) shows trim attenuated

ANLZ Memory Cues — requires PR #319 hardware-verified and PR #234 merged first

  • Add memory cues to a track in DjManager; export to USB
  • Load on CDJ — memory cues appear at correct positions, track display (waveform, BPM, key) intact
  • Hot cues are unaffected
  • Multiple memory cues on same track all appear

First-Run Overlay (PR #317)

  • Fresh install — step counter shows [1/3][2/3][3/3] for FFmpeg, analyzer, yt-dlp
  • tidal-dl-ng shows as [optional], not [4/4]
  • Download speed and ETA visible per step
  • All deps present on relaunch — message is "Dependencies up to date."

File Explorer

  • Open Explorer tab; navigate folder tree
  • Right-click a file — context menu: Play, Add to Library, Analyze, Delete
  • Star a folder — it appears in Favourites sidebar
  • Click Analyze folder — progress shown; tracks updated live when done
  • Broken-link badge shown for tracks whose source file is missing
  • +Library dialog shows same count as Analyze dialog

Player Pipeline

  • Play a track; seek — no PIPELINE_ERROR_READ in console
  • Reach end of queue with Repeat All — wraps to first track instead of stopping
  • Open app cold; play immediately — no black screen / AudioContext crash
  • Waveform reloads automatically after background analysis completes

Settings — Dependency Versions

  • Open Settings; all installed tools show correct version numbers
  • Click "Clear All Data"; reopen Settings — versions still shown correctly (probes real binaries, not cache)
  • Tidal shows "not installed" only if tdn binary is truly absent

Tidal — Deferred Install

  • Fresh install (or clear all data) — first-run progress does not install tidal-dl-ng
  • Open Tidal tab — tidal-dl-ng installs on demand (progress shown)
  • After install, tdn binary lives under DjManager's userData/bin/, not ~/.local/bin/
  • Tidal download completes successfully after deferred install

Dependency Bumps

  • App starts without JS errors after electron / better-sqlite3 / vite / react bumps
  • USB export still works (better-sqlite3 12.9.0)
  • Renderer builds cleanly (vite 8.0.9)

🤖 Generated with Claude Code

Radexito and others added 30 commits April 3, 2026 01:31
…123)

When a yt-dlp download is in progress, sidebar navigation items other
than the YT-DLP tab are greyed out and clicks are ignored. A tooltip
explains why. The YT-DLP tab shows a ⏳ indicator while downloading.

Changes:
- DownloadView: accepts onDownloadingChange callback, calls it true on
  download start and false on completion (both async resolve and the
  progress-event null signal)
- App.jsx: tracks isDownloading state, passes onDownloadingChange to
  DownloadView and isDownloading to Sidebar
- Sidebar.jsx: accepts isDownloading prop; disables non-download menu
  items and applies .menu-item--disabled style when active
- Sidebar.css: styles for disabled menu item and downloading indicator

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Create DownloadContext.jsx with DownloadProvider + useDownload hook
  (mirrors PlayerContext pattern)
- Move all DownloadView state into context so it survives tab switches
- Move IPC subscriptions (onYtDlpProgress, onYtDlpTrackUpdate) into
  provider so events are captured even when the tab is not visible
- Always render <DownloadView> in App.jsx (toggled via display:none)
  so component state is never reset when navigating away
- Sidebar reads ytDlpSidebarProgress from context and shows a
  progress bar matching the normalize bar style
- Remove isDownloading prop / navigation-blocking from Sidebar
- Wrap DownloadView.test and Sidebar.test in DownloadProvider

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- DownloadContext: compute sidebar total from trackStatuses.length
  (pre-populated from selection) rather than trusting overallTotal
  from early IPC events which arrive as 1 before yt-dlp outputs
  the playlist item counter line
- MusicLibrary: add descriptive hover title to grayed-out rows
  (analyzed=0) explaining the track is being analyzed/processed

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix handleItemsRendered destructuring: was { visibleStopIndex } but
  List fires { startIndex, stopIndex } — scroll-to-load never triggered
- Remove pointer-events: none from .row--analyzing so browser can show
  the title tooltip on hover for grayed-out tracks

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pass --ignore-errors to yt-dlp so deleted/restricted/private videos
are skipped rather than causing the entire download to fail.

- Exit code 1 is now treated as partial success if any files downloaded
- Parse stderr for 'ERROR: [youtube] <id>: ...' lines and fire
  onTrackUnavailable callback per failed video
- main.js sends 'unavailable' track update to renderer
- DownloadView marks matching tracks as failed with the error reason

Closes #152

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Resolve (not reject) when all tracks fail with unavailability errors
  since onTrackUnavailable callbacks already reported each failure
- Add title attribute to track status icons so hovering shows the
  error reason (e.g. 'Video unavailable. This video is not available')
- Show friendly message 'All tracks were unavailable' instead of raw
  yt-dlp stderr when every track in the table is marked failed

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…list metadata

- Add isEntryUnavailable() / describeUnavailability() helpers in ytDlpManager
  to detect private/deleted/restricted videos from availability field and
  placeholder titles ([Private video], [Deleted video], etc.)
- Flag entries with unavailable:true + unavailableReason in fetchPlaylistInfo
- In selection screen: unavailable tracks show strikethrough title + red badge
  with reason, checkbox disabled, item grayed out and non-interactive
- Track count shows '· N unavailable' in red next to available count
- Subtitle updated: '12 tracks found (4 unavailable) — select what to download'
- select-all / selected counter only count available entries
- Pre-selection on load excludes both duplicates and unavailable entries
- playlist-items arg comparison uses available count not total count

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…display

- Update unavailablePattern regex to match both ERROR: and WARNING: lines
  (yt-dlp with --ignore-errors may downgrade ERROR to WARNING)
- Add keyword-based fallback: if stderr contains 'Video unavailable',
  'Private video', etc. and regex found nothing, still treat as unavailable
- Pass unavailableCount through resolve() → main.js → renderer result
- Result banner: 0-track ok result shows red '✗ All N tracks were unavailable'
  instead of confusing '✓ 0 tracks added'
- Partial success shows '✓ X tracks added · N unavailable (skipped)' in red
- Remove now-redundant all-failed special case from error block

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…on screen

- After fetchPlaylistInfo, run parallel oEmbed availability checks for all
  YouTube playlist entries (6 concurrent, 6s timeout per request)
  GET https://www.youtube.com/oembed?url=...&format=json
  200=available, 401=private, 403=restricted, 404=deleted/unavailable
- Mutates entries in-place with unavailable:true + unavailableReason
- Network errors are ignored — entry stays available, yt-dlp handles it
- Selection screen: unavailable entries are filtered out entirely (not shown)
- A note at the bottom of the list shows '4 videos unavailable — not shown'
- CSS: .dl-select-unavailable-note for the footer note

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…hen unavailable entries exist

- Auto-normalise URL on load: prepend https:// if no protocol present
  so bare URLs like 'www.youtube.com/...' are accepted; input updates to
  show the normalised form
- Critical bug: when user selects all available tracks and unavailable
  entries exist, playlistItems was null → yt-dlp downloaded the full
  playlist including unavailable ones. Now always pass --playlist-items
  when unavailableCount > 0, regardless of selection ratio.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Change URL input type from 'url' to 'text' to prevent HTML5
  validation blocking www.* URLs before JS normalization can run
- Add native right-click context menu (cut/copy/paste/undo/redo/
  select all) for editable inputs and copy for text selections via
  mainWindow.webContents context-menu event

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
oEmbed returns HTTP 200 for geo-restricted and content-match-removed
videos, causing them to appear as selectable in the playlist UI even
though they fail during download.

Replace with YouTube's InnerTube player API (ANDROID client) which
returns playabilityStatus.status for all unavailability types:
- UNPLAYABLE: geo-restricted, content match removed
- LOGIN_REQUIRED: private, age-gated
- ERROR: deleted / non-existent

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ANDROID client bypasses YouTube's geo/content restrictions so videos
that are unavailable for normal users returned OK. Switch to two
conservative clients:
- WEB: matches yt-dlp primary scraper behavior
- TVHTML5_SIMPLY_EMBEDDED_PLAYER: catches restricted-on-web videos

Any non-OK status from either client marks the track as unavailable.
Added per-video status logging for easier debugging.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
TVHTML5_SIMPLY_EMBEDDED_PLAYER returns UNPLAYABLE for any video that
has embedding disabled (most videos) — causing all 77 to be flagged.

Use only the WEB client with the correct yt-dlp version string.
HTTP non-200 responses (auth/quota) are treated as 'assume available'
rather than falling through to another client.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
InnerTube without auth cookies is unreliable — WEB client returns
UNPLAYABLE for all videos, ANDROID client returns OK for all.

Use yt-dlp --print availability per video (4 concurrent) — the exact
same mechanism as the actual download, so no false positives/negatives.
Timeout 15s per video; on error/timeout assumes available (safe default).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each check is network-bound (waiting for YouTube), not CPU-bound,
so 16 parallel yt-dlp processes reduces 77-video check time by ~4x.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Subscribe to onYtDlpProgress in Sidebar and display a progress bar
in the fixed-bottom-section alongside import/normalize/export progress.
Blue bar (#5865f2) with track message and overall count (N/M).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- checkYouTubeAvailability now accepts onProgress callback
- fetchPlaylistInfo forwards onCheckProgress option
- main.js sends 'ytdlp-check-progress' IPC events during check; sends null when done
- preload.js exposes onYtDlpCheckProgress
- DownloadView shows 'Checking N/M...' in Load button during availability check
- renderer test setup mocks onYtDlpCheckProgress

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove --progress-template (it outputs 'Unknown' for unknown-size audio
  streams, breaking the [\d.]+% regex and stalling the sidebar at 'Starting
  download...')
- Add --no-colors to prevent ANSI escape codes in output
- Handle unknown-size progress lines: '[download] 5.20MiB at 1.20MiB/s'
- Throttle IPC progress events to max 1 per 200ms to prevent React from
  dropping rapid updates
- Clean up msg formatting: strip '[download]' prefix from displayed text

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Native yt-dlp progress output uses carriage returns (\r) to overwrite
the terminal line. Splitting by \n alone means all progress updates
arrive as one unparsed chunk — the sidebar stays at 'Starting download'.
Split on /[\r\n]+/ so each progress line is processed individually.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When yt-dlp (Python) stdout/stderr is piped, Python uses fully-buffered
I/O — all progress lines arrive as one batch after the track finishes.
PYTHONUNBUFFERED=1 forces line-buffered output so progress events arrive
in real-time. Also reduce throttle from 200ms to 100ms.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
For playlists, fold the progress message (e.g. '42.5% of 3.81MiB at
1.20MiB/s') as a subtitle under the Overall bar instead of a redundant
second bar. For single-track downloads, keep the Download percentage bar.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Parsing [download] X% from stderr is unreliable when piped (non-TTY).
Instead, add a second --print hook that fires before each track download
starts and outputs a controlled TRACK_MARKER:<idx>/<total>:<title> line
to stdout. This updates overallCurrent/Total and the track title in the
sidebar reliably, independent of percentage buffering issues.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…status

- check-duplicate-urls now returns [{url, trackId}] instead of just [url]
- New IPC: get-playlist-source-urls(playlistId) returns tracks in a playlist
  for 'already in playlist' detection
- handleTargetPlaylistChange updates playlistMemberUrls when user picks a
  different target playlist (live re-check)
- Selection screen 3-state checkboxes:
  - ☑ checked  = download (not in library)
  - ⊟ indeterminate = link to playlist (in library, not yet in target playlist)
  - ☐ unchecked = skip
  - disabled (greyed) = already in the target playlist (badge: '✓ in playlist')
- handleDownload splits entries into downloadEntries and linkEntries;
  link entries are added via add-tracks-to-playlist IPC after download
- Sidebar shows 'Checking tracks N/M…' progress bar during ytdlp-fetch-info
  availability pre-check phase (subscribes to ytdlp-check-progress)
- Fix TRACK_MARKER format: removed %(playlist_index)s (gave original playlist
  position instead of sequential order); now uses own trackStartCount counter
  so sidebar always shows '1/4, 2/4…' not '70/4'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add ✕ Cancel button next to Load when fetching=true so user can abort
- Auto-reset fetching state when user switches away from the tab
  (detected via style.display='none' change on the view)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
fix: prevent navigating away from YT-DLP tab during active download
Resolved conflicts in DownloadView.jsx:
- Block 1: moved all state/IPC to DownloadContext; kept view-local
  refs, handleCancelFetch, and style-watch useEffect
- Block 2: kept linkEntries/allDisplayEntries split logic
- Block 3: kept link-to-playlist post-download logic;
  renamed setHistory → setDownloadHistory to match PR #144

Added useEffect to DownloadView imports (missing after merge).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…able

- Remove style-watch useEffect from DownloadView that was resetting
  fetching/checkProgress state on tab switch (breaks DownloadContext fix)
- Remove unused useEffect import from DownloadView
- Wrap YT-DLP check-progress and download-progress sidebar bars in
  <button> so clicking them navigates to the YT-DLP tab
- Add .ytdlp-progress-clickable CSS for button reset + hover highlight

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dependabot Bot and others added 30 commits April 27, 2026 21:28
Bumps the electron group with 1 update: [electron](https://github.com/electron/electron).


Updates `electron` from 41.2.1 to 41.3.0
- [Release notes](https://github.com/electron/electron/releases)
- [Commits](electron/electron@v41.2.1...v41.3.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 41.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: electron
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.0 to 4.1.5.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the build-tools group with 1 update: [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest).


Updates `vitest` from 4.1.4 to 4.1.5
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.4 to 4.1.5.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.1.2 to 4.1.5.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [jsdom](https://github.com/jsdom/jsdom) from 29.0.1 to 29.1.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Commits](jsdom/jsdom@v29.0.1...v29.1.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 29.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…d ETA

- Extract DepsOverlay component with per-step status icons (pending/active/done)
- Show bytes downloaded / total, live download speed, and ETA per step
- ensureDeps emits rich payload: stepId, stepIndex, stepTotal, bytesPerSec, etaSec
- Add retry-deps IPC handler so the overlay Retry button re-runs ensureDeps
- Move sendDepsProgress to module scope in main.js for retry handler access
- Remove inline overlay from App.jsx/App.css; now fully in DepsOverlay.jsx/css

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat(deps): rework first-run setup overlay with step list, speed, and ETA
Full schema reverse-engineered from native Rekordbox exports via Frida
hook on sqlite3_key (reverse-engineering/capture_key.py). Covers all
tables: content, artist, album, genre, label, key, color, playlist,
cue, history, hotCueBankList, menuItem, category, sort, myTag.

Key finding: per-track manual gain slider is NOT in exportLibrary.db —
it lives only in master.db on the PC. CDJ auto-gain comes entirely from
Unnamed7/Unnamed8 in export.pdb.

Refs #299, #300

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docs(protocol): document exportLibrary.db schema and SQLCipher key
Full schema reverse-engineered from native Rekordbox exports via Frida
hook on sqlite3_key (reverse-engineering/capture_key.py). Covers all
tables: content, artist, album, genre, label, key, color, playlist,
cue, history, hotCueBankList, menuItem, category, sort, myTag.

Key finding: per-track manual gain slider is NOT in exportLibrary.db —
it lives only in master.db on the PC. CDJ auto-gain comes entirely from
Unnamed7/Unnamed8 in export.pdb.

Refs #299, #300

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docs(protocol): document exportLibrary.db schema and SQLCipher key
…ing-captures

feat(re): add Rekordbox binary capture guide and analysis scripts
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.5 to 4.1.6.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.6/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
… updates (#330)

Bumps the build-tools group with 3 updates in the / directory: [eslint](https://github.com/eslint/eslint), [lint-staged](https://github.com/lint-staged/lint-staged) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest).


Updates `eslint` from 10.2.1 to 10.3.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.2.1...v10.3.0)

Updates `lint-staged` from 16.4.0 to 17.0.4
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](lint-staged/lint-staged@v16.4.0...v17.0.4)

Updates `vitest` from 4.1.5 to 4.1.6
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.6/packages/vitest)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: lint-staged
  dependency-version: 17.0.4
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: build-tools
- dependency-name: vitest
  dependency-version: 4.1.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.5 to 4.1.6.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.6/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the react group in /renderer with 2 updates: [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom).


Updates `react` from 19.2.5 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react)

Updates `react-dom` from 19.2.5 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react-dom)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: react
- dependency-name: react-dom
  dependency-version: 19.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: react
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [jsdom](https://github.com/jsdom/jsdom) from 29.1.0 to 29.1.1.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Commits](jsdom/jsdom@v29.1.0...v29.1.1)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 29.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the electron group with 1 update: [electron](https://github.com/electron/electron).


Updates `electron` from 41.3.0 to 41.5.0
- [Release notes](https://github.com/electron/electron/releases)
- [Commits](electron/electron@v41.3.0...v41.5.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 41.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: electron
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [wait-on](https://github.com/jeffbski/wait-on) from 9.0.4 to 9.0.10.
- [Release notes](https://github.com/jeffbski/wait-on/releases)
- [Commits](jeffbski/wait-on@v9.0.4...v9.0.10)

---
updated-dependencies:
- dependency-name: wait-on
  dependency-version: 9.0.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [globals](https://github.com/sindresorhus/globals) from 17.4.0 to 17.6.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](sindresorhus/globals@v17.4.0...v17.6.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [eslint](https://github.com/eslint/eslint) from 10.2.1 to 10.4.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.2.1...v10.4.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [globals](https://github.com/sindresorhus/globals) from 17.5.0 to 17.6.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](sindresorhus/globals@v17.5.0...v17.6.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
… updates (#348)

Bumps the build-tools group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [concurrently](https://github.com/open-cli-tools/concurrently) | `9.2.1` | `10.0.3` |
| [eslint](https://github.com/eslint/eslint) | `10.3.0` | `10.5.0` |
| [lint-staged](https://github.com/lint-staged/lint-staged) | `17.0.4` | `17.0.7` |
| [prettier](https://github.com/prettier/prettier) | `3.8.3` | `3.8.4` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.6` | `4.1.9` |



Updates `concurrently` from 9.2.1 to 10.0.3
- [Release notes](https://github.com/open-cli-tools/concurrently/releases)
- [Commits](open-cli-tools/concurrently@v9.2.1...v10.0.3)

Updates `eslint` from 10.3.0 to 10.5.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.3.0...v10.5.0)

Updates `lint-staged` from 17.0.4 to 17.0.7
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](lint-staged/lint-staged@v17.0.4...v17.0.7)

Updates `prettier` from 3.8.3 to 3.8.4
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](prettier/prettier@3.8.3...3.8.4)

Updates `vitest` from 4.1.6 to 4.1.9
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/HEAD/packages/vitest)

---
updated-dependencies:
- dependency-name: concurrently
  dependency-version: 10.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: build-tools
- dependency-name: eslint
  dependency-version: 10.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-tools
- dependency-name: lint-staged
  dependency-version: 17.0.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: prettier
  dependency-version: 3.8.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-tools
- dependency-name: vitest
  dependency-version: 4.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…345)

Bumps the react group with 3 updates in the /renderer directory: [react](https://github.com/facebook/react/tree/HEAD/packages/react), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) and [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom).


Updates `react` from 19.2.6 to 19.2.7
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.7/packages/react)

Updates `@types/react` from 19.2.14 to 19.2.16
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 19.2.6 to 19.2.7
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.7/packages/react-dom)

Updates `@types/react` from 19.2.14 to 19.2.16
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: react
- dependency-name: "@types/react"
  dependency-version: 19.2.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: react
- dependency-name: react-dom
  dependency-version: 19.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: react
- dependency-name: "@types/react"
  dependency-version: 19.2.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: react
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.10 to 8.0.14.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.14/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.1.6 to 4.1.7.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.7/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) from 12.9.0 to 12.10.0.
- [Release notes](https://github.com/WiseLibs/better-sqlite3/releases)
- [Commits](WiseLibs/better-sqlite3@v12.9.0...v12.10.0)

---
updated-dependencies:
- dependency-name: better-sqlite3
  dependency-version: 12.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.58.2 to 1.60.0.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.58.2...v1.60.0)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.60.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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.

1 participant