[Release] v1.2.5 - #630
Conversation
…rove category and environment colour UX (#476) * Initial plan * fix(ui): fix dual-connection tab colours, swap test/uat env defaults, add category colour reuse in modals Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/36215f3c-c4f5-4b8d-b69c-38a10596f30b * fix(ui): replace category datalist with styled select dropdown; show -- when no category selected Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/e63c4fea-b3f3-4128-a5e4-31201aeca998 * feat(ui): env color defaults, category reset visibility, sidebar category color swatch Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/04495a30-b495-4fa9-8788-86465ede19cb * feat(ui): hide category color section when no category (default) is selected Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/afe2255f-00cc-455e-99a4-9ff8d1b4a95e --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
* Initial plan * Replace blocking About dialog with custom modal BrowserWindow The About dialog previously used dialog.showMessageBoxSync which is not modal relative to the main app window and can be hidden behind it. Now it sends a SHOW_ABOUT IPC event to the renderer which shows a custom BrowserWindow-based modal (same pattern as the update dialog) with version info, environment details, and a copy-to-clipboard button. Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/51cb116a-9705-4972-8e3b-242f5767550e * Show success notification after copying About info to clipboard Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5b424552-b2fb-4bce-adb3-1893b210285a * Guard showAboutDialog against destroyed/loading webContents; remove unused GET_ABOUT_INFO IPC Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a4e390e5-c47b-4e65-b9a4-6e47ed1385d3 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
…ers (#481) * Initial plan * Add appearance settings for category/environment color show/hide and border thickness Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/193f644f-df36-4d4c-8ed0-96b7a0f482c9 * Move hardcoded appearance defaults into named constants Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/f393659c-9ed8-4b82-a91b-e94a799801a8 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
* Initial plan * Add 'Restore Session on Startup' setting to skip reopening tools on app start Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/8ec8d9a2-6b1a-4686-879a-b04708e4cbe8 * Fix build error, add tool name to connection modals, fix missing braces from merge Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/3d6bb8bf-f335-43ee-9634-7e61be7db8fc * fix: silently re-authenticate connections on session restore, show modal on failure Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/24765ec3-ad59-4605-a741-566555503b34 * feat: add unsaved changes detection and close guard for settings tab feat: made settings button sticky * fix pr review comment - #482 (comment) * fix: apply unresolved reviewer feedback - shared escapeHtml, await closeOtherTabs Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/fb9f6281-aee9-4813-b322-1751c3a0844b --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>
…View and align UI with modal windows (#491) * Initial plan * Fix global search overlay appearing behind tool BrowserView Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/98496443-e99d-461f-9385-da0c10cd5dc5 * UI: Add modal-style header with close button to global search Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/263a78e7-da1f-4f02-9ab5-5b5d92d93119 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
…force-close with auto-update (#501) * Initial plan * fix: guard webContents.isDestroyed() to prevent crash on force-close during auto-update Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/58b630b9-e75d-4941-9bae-5a32113756eb Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
…se-backed links (#499) * feat: rename Important Links to Community Resources, make links dynamic via Supabase community_links table Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/3e132f84-fa7c-40ca-801c-b1d29fae727b Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * fix: address code review - remove unnecessary type assertion and simplify Supabase row cast Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/3e132f84-fa7c-40ca-801c-b1d29fae727b Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * fix: remove group_sort_order column - group ordering handled by the app Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/e2dc53c8-11c9-4527-8170-7a70b191705b Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Update src/main/managers/toolRegistryManager.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/main/managers/toolRegistryManager.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat: add import connection source modal (XTB vs PPTB) with XTB export hint Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/007d517e-6939-4a4e-9019-cb7badde489d Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * feat: add custom modal popup for import connection source with copy path functionality --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>
Copy the global-search overlay pattern (semi-transparent backdrop + backdrop-filter blur) to all BrowserWindow-backed modals. - modalWindowManager: modal windows now fill the full main-window bounds so the overlay covers the entire app; injects --modal-panel-width and --modal-panel-height CSS vars so each panel keeps its intended size - sharedStyles: add .modal-overlay rule (fixed inset-0, rgba(0,0,0,0.5) background, backdrop-filter blur(4px), flex-centered); update .modal-panel to CSS-var sizing with border-radius and max constraints - All 10 modal view.ts files: wrap panel div in <div class="modal-overlay"> - Custom-panel modals (about, troubleshooting, updateNotification, toolDetail): inject .modal-overlay CSS inline and update panel class to CSS-var dimensions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Revert the full-size window and CSS-var sizing modals remainchanges content-sized and centered as before. Only copy the visual background styling from the global-search overlay: - modalWindowManager: body gets background: rgba(0,0,0,0.5) and backdrop-filter: blur(4px) so the modal window shows the dark blurred backdrop behind the panel (through Electron transparent window) - Remove .modal-overlay wrapper divs and CSS var sizing from all modals - Restore .modal-panel to width/height: 100% in sharedStyles Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The backdrop-filter on a child BrowserWindow cannot blur the parent window's content (different OS-level windows). Instead, inject the overlay directly into the main the same approach therenderer global-search overlay uses. - index.html: add #modal-backdrop div (hidden by default) - styles.scss: .modal-backdrop mirrors the global-search overlay styles (position fixed, inset 0, rgba(0,0,0,0.5), backdrop-filter blur(4px)) - browserWindowModals.ts: listen to MODAL_WINDOW_OPENED/CLOSED events and toggle the backdrop div visibility - modalWindowManager.ts: revert body background to transparent (backdrop is now handled in the main renderer, not the modal window itself) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Show backdrop synchronously in showBrowserWindowModal() before awaiting the modal window, eliminating the timing gap where the modal appears before the dark overlay - Use display: flex for .modal-backdrop (matching .global-search-overlay) and update all JS toggle calls to use flex instead of block Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… and developer notes
* Initial plan * Fix tool detail page icon to be theme-aware (dark/light mode) Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1d192ffc-640c-4a9e-9d8f-96251f98fd16 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Address review feedback: consolidate CSS and add theme-change handler for detail tab fallback icon Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/d7760afb-4ed5-4874-97a5-1bc4275d4dbc Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
…filters are active (#509) * Initial plan * feat: add visual indicator dot on filter button when filters are active Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/66184e84-c43b-4345-8093-4b9e767369f7 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * feat: add one-click clear button for active dropdown filters on filter icon Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/2f611815-65e8-44d8-b84c-47eb20959bb2 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * style: reuse search-filter-btn styles for filter-clear-btn, remove duplicate CSS Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/23c5d071-ba7f-43a5-9964-6170812cf4c0 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Update src/renderer/index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/renderer/index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/renderer/index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
… notification banner (#511) * Initial plan * Pre-filter marketplace to new tools only when clicking homepage banner Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/fd0d5ced-b91b-4e39-8812-cc2c8c36b293 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>
Bumps the npm_and_yarn group with 1 update in the / directory: [handlebars](https://github.com/handlebars-lang/handlebars.js). Updates `handlebars` from 4.7.8 to 4.7.9 - [Release notes](https://github.com/handlebars-lang/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md) - [Commits](handlebars-lang/handlebars.js@v4.7.8...v4.7.9) --- updated-dependencies: - dependency-name: handlebars dependency-version: 4.7.9 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…#513) Bumps the npm_and_yarn group with 1 update in the / directory: [lodash](https://github.com/lodash/lodash). Updates `lodash` from 4.17.21 to 4.18.1 - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.21...4.18.1) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.18.1 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the npm_and_yarn group with 1 update in the / directory: [@xmldom/xmldom](https://github.com/xmldom/xmldom). Updates `@xmldom/xmldom` from 0.8.11 to 0.8.12 - [Release notes](https://github.com/xmldom/xmldom/releases) - [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md) - [Commits](xmldom/xmldom@0.8.11...0.8.12) --- updated-dependencies: - dependency-name: "@xmldom/xmldom" dependency-version: 0.8.12 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Fix: Tool detail page icon not adapting to dark/light theme (#510) * Initial plan * Fix tool detail page icon to be theme-aware (dark/light mode) Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1d192ffc-640c-4a9e-9d8f-96251f98fd16 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Address review feedback: consolidate CSS and add theme-change handler for detail tab fallback icon Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/d7760afb-4ed5-4874-97a5-1bc4275d4dbc Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * fix: improve empty state handling in sidebar tools by updating hint display (#516) * feat: Add visual indicator and one-click clear to filter button when filters are active (#509) * Initial plan * feat: add visual indicator dot on filter button when filters are active Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/66184e84-c43b-4345-8093-4b9e767369f7 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * feat: add one-click clear button for active dropdown filters on filter icon Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/2f611815-65e8-44d8-b84c-47eb20959bb2 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * style: reuse search-filter-btn styles for filter-clear-btn, remove duplicate CSS Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/23c5d071-ba7f-43a5-9964-6170812cf4c0 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Update src/renderer/index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/renderer/index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/renderer/index.html Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Pre-filter marketplace to "new tools only" when clicking the homepage notification banner (#511) * Initial plan * Pre-filter marketplace to new tools only when clicking homepage banner Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/fd0d5ced-b91b-4e39-8812-cc2c8c36b293 Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com> * chore(deps): bump handlebars (#512) Bumps the npm_and_yarn group with 1 update in the / directory: [handlebars](https://github.com/handlebars-lang/handlebars.js). Updates `handlebars` from 4.7.8 to 4.7.9 - [Release notes](https://github.com/handlebars-lang/handlebars.js/releases) - [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md) - [Commits](handlebars-lang/handlebars.js@v4.7.8...v4.7.9) --- updated-dependencies: - dependency-name: handlebars dependency-version: 4.7.9 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump lodash in the npm_and_yarn group across 1 directory (#513) Bumps the npm_and_yarn group with 1 update in the / directory: [lodash](https://github.com/lodash/lodash). Updates `lodash` from 4.17.21 to 4.18.1 - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.21...4.18.1) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.18.1 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump @xmldom/xmldom (#514) Bumps the npm_and_yarn group with 1 update in the / directory: [@xmldom/xmldom](https://github.com/xmldom/xmldom). Updates `@xmldom/xmldom` from 0.8.11 to 0.8.12 - [Release notes](https://github.com/xmldom/xmldom/releases) - [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md) - [Commits](xmldom/xmldom@0.8.11...0.8.12) --- updated-dependencies: - dependency-name: "@xmldom/xmldom" dependency-version: 0.8.12 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
) * Initial plan * Fix logError to preserve error stack when an Error object is passed Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * Fix logError to preserve error stack when an Error object is passed Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 70 out of 76 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (7)
src/renderer/modals/cspException/controller.ts:33
- Avoid using console.warn in shipped modal controller script. This repo’s logging standard is to avoid console.* in production code; here it will run in the modal BrowserWindow and could leak noisy output.
vite.config.ts:34 - Vite config currently logs environment-status messages via console.log/warn. This adds noise to builds/CI and conflicts with the repo guideline to avoid console.* in production code (even though this is build-time code). Consider removing these logs and relying on runtime validation / explicit errors where needed.
src/main/managers/headlessToolInvocationManager.ts:199 - Failure path calls notifyJobChanged() immediately after appendLog(). appendLog() already notifies, so this doubles job-change notifications unnecessarily.
this.jobs.set(jobId, failed);
this.appendLog(jobId, "error", failed.error);
this.notifyJobChanged(jobId);
}
src/common/logger.ts:7
- This change routes all app logging through sentryHelper, but sentryHelper currently writes to console.* (e.g. src/common/sentryHelper.ts:343, 412-462). The repo’s logging standard explicitly forbids console.* in production code, so this effectively reintroduces console logging across the app.
* All application logging flows through this module. Log calls are forwarded to
* sentryHelper which routes them through Sentry structured logging (when a DSN is
* configured) and always mirrors output to the console.
*
src/main/managers/headlessToolInvocationManager.ts:182
- runJob() calls notifyJobChanged() immediately after appendLog(). Since appendLog() already calls notifyJobChanged(), this results in duplicate job-change notifications (extra IPC/UI refresh).
This issue also appears on line 196 of the same file.
this.jobs.set(jobId, completed);
this.appendLog(jobId, "info", "completed");
this.notifyJobChanged(jobId);
src/renderer/modals/sentryConsent/view.ts:91
- The Privacy Policy link uses target="_blank" without rel="noopener noreferrer". Adding rel avoids potential window.opener issues when opening external pages.
src/main/index.ts:495 - Duplicate ipcMain.removeHandler calls for GET_JOB_STATUS and CLEAR_LOGS are present twice, which is redundant and makes handler cleanup harder to maintain.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
* Initial plan * fix: open consent review in full view Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> * refactor: enhance consent review UI and improve summary statistics display --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 69 out of 75 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (10)
src/main/managers/headlessToolInvocationManager.ts:198
- runJob() calls notifyJobChanged() immediately after appendLog(), but appendLog() already notifies. This results in duplicate update events for the same transition (failed).
this.appendLog(jobId, "error", failed.error);
this.notifyJobChanged(jobId);
src/renderer/modals/cspException/controller.ts:33
- Avoid console.* in production code paths (project logging guidelines). This modal controller script should fail silently when modalBridge is unavailable rather than emitting console warnings.
src/common/sentryHelper.ts:414 - Project guidelines prohibit console.* in production code. logInfo() currently mirrors to console unconditionally; gate this to development-only (or remove) to avoid production console output.
// eslint-disable-next-line no-console
console.info("[INFO]", message, data || "");
src/common/sentryHelper.ts:430
- Project guidelines prohibit console.* in production code. logWarn() currently mirrors to console unconditionally; gate this to development-only (or remove) to avoid production console output.
// eslint-disable-next-line no-console
console.warn("[WARN]", message, data || "");
src/common/sentryHelper.ts:446
- Project guidelines prohibit console.* in production code. logError() currently mirrors to console unconditionally; gate this to development-only (or remove) to avoid production console output.
// eslint-disable-next-line no-console
console.error("[ERROR]", message, data || "");
src/common/sentryHelper.ts:462
- Project guidelines prohibit console.* in production code. logFatal() currently mirrors to console unconditionally; gate this to development-only (or remove) to avoid production console output.
// eslint-disable-next-line no-console
console.error("[FATAL]", message, data || "");
src/main/index.ts:495
- Duplicate ipcMain.removeHandler calls for GET_JOB_STATUS and CLEAR_LOGS. This is redundant and makes it harder to reason about teardown coverage.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
src/main/managers/settingsManager.ts:109
- normalizeMarketplaceSources() defaults
enabledbased onsource.type, buttypeis being normalized on the same object literal. If an entry omitstypeandenabled, this will default tofalseeven for the built-in marketplace (until later logic patches it), and can also mis-default other entries. Default should be derived from the normalized type/id.
enabled: typeof source.enabled === "boolean" ? source.enabled : source.type === "builtin" ? true : false,
src/main/managers/headlessToolInvocationManager.ts:182
- runJob() calls notifyJobChanged() immediately after appendLog(), but appendLog() already notifies. This results in duplicate update events for the same transition (completed).
This issue also appears on line 197 of the same file.
this.appendLog(jobId, "info", "completed");
this.notifyJobChanged(jobId);
src/common/sentryHelper.ts:343
- Project guidelines prohibit console.* in production code. logCheckpoint() currently writes to console unconditionally; this should be gated to development-only (or removed) so production runs don't emit console output.
This issue also appears in the following locations of the same file:
- line 413
- line 429
- line 445
- line 461
export function logCheckpoint(checkpoint: string, data?: Record<string, unknown>): void {
// eslint-disable-next-line no-console
console.log("[Checkpoint]", checkpoint, data ? JSON.stringify(data, null, 2) : "");
…orm API (#636) * Initial plan * Fix: Replace window.confirm() with inline overlay for PP API consent to prevent Electron modal focus loss Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 69 out of 75 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (5)
Previously missed (5) — in code that hasn't changed since the last review.
src/renderer/modals/cspException/controller.ts:33
- This controller script uses
console.warn(...). The repo’s logging approach appears to be moving to the centralized logger/Sentry helper, and this exact console warning is duplicated across multiple modal controllers. Consider removing the console call (or routing through the centralized logging path) to keep production output consistent.
src/main/index.ts:495 - Duplicate ipcMain.removeHandler calls for GET_JOB_STATUS and CLEAR_LOGS are redundant and make teardown harder to reason about. Remove the duplicate lines so each channel is only removed once.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_CLIENT_CONFIG_STATUSES);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
src/main/managers/settingsManager.ts:109
- normalizeMarketplaceSources() computes a fallback
typefor sources, but theenableddefault is based onsource.type(the pre-normalized value). Iftypeis omitted in stored settings, this can incorrectly defaultenabledto false (including for the built-in source when a private source exists). Defaultenabledbased on the effective type.
enabled: typeof source.enabled === "boolean" ? source.enabled : source.type === "builtin" ? true : false,
src/main/managers/settingsManager.ts:335
- CSP consent records persisted from older versions will not have the new
seenOptionalfield, but getCspConsents() returns the raw store value. BecauseCspConsentRecord.seenOptionalis now required, this can break consumers that iterate all consents (e.g. consent review UI) on upgrade. Consider normalizing/migrating consents on read (fallbackseenOptionaltooptional).
grantCspConsent(toolId: string, requiredDomains: string[] = [], approvedOptionalDomains: string[] = [], seenOptionalDomains: string[] = []): void {
const cspConsents = this.store.get("cspConsents") || {};
cspConsents[toolId] = { allowed: true, required: requiredDomains, optional: approvedOptionalDomains, seenOptional: seenOptionalDomains };
this.store.set("cspConsents", cspConsents);
src/main/managers/headlessToolInvocationManager.ts:182
- runJob() calls appendLog(...), which already calls notifyJobChanged(). The extra notifyJobChanged() calls after appendLog() will double-fire job update events (and likely double IPC updates) for completed/failed jobs. Drop the redundant notifications so each state change only emits once.
this.jobs.set(jobId, completed);
this.appendLog(jobId, "info", "completed");
this.notifyJobChanged(jobId);
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 71 out of 77 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (4)
Previously missed (4) — in code that hasn't changed since the last review.
src/main/index.ts:496
- Duplicate ipcMain.removeHandler calls for MCP_SERVER_CHANNELS.GET_JOB_STATUS and MCP_SERVER_CHANNELS.CLEAR_LOGS. This is redundant and makes it easier for the handler list to drift over time.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_CLIENT_CONFIG_STATUSES);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
src/renderer/modules/cspExceptionModal.ts:99
- openCspConsentManagementModal is documented to return null when cancelled, but closing the modal currently rejects the promise. In the consent review flow this gets caught as an error and triggers a "Consent Update Failed" notification even though the user just dismissed the dialog.
src/main/managers/headlessToolInvocationManager.ts:184 - runJob() calls appendLog(), which already notifies listeners via notifyJobChanged(), but then also calls notifyJobChanged() again in both the completed and failed paths. This can cause redundant renderer refreshes/IPC updates for every job completion/failure.
this.jobs.set(jobId, completed);
this.appendLog(jobId, "info", "completed");
this.notifyJobChanged(jobId);
} catch (error) {
const failed = this.jobs.get(jobId);
src/common/logger.ts:6
- The header comment states logs are "always" mirrored to the console, and logger.ts forwards everything to sentryHelper where logInfo/logWarn/logError/logCheckpoint call console.* even in production. This conflicts with the repo guideline to avoid console.* in production code; consider mirroring only in development or routing entirely through Sentry.
* All application logging flows through this module. Log calls are forwarded to
* sentryHelper which routes them through Sentry structured logging (when a DSN is
* configured) and always mirrors output to the console.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 82 out of 88 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (5)
Previously missed (5) — in code that hasn't changed since the last review.
src/renderer/modals/cspException/controller.ts:32
- console.warn is used in the injected modal controller script. This repo’s guidelines prohibit console.* usage in production code; this same pattern exists in several modal controllers and should be replaced/removed consistently.
src/main/index.ts:495 - Duplicate ipcMain.removeHandler calls for MCP_SERVER_CHANNELS.GET_JOB_STATUS and MCP_SERVER_CHANNELS.CLEAR_LOGS are present back-to-back. This is redundant and makes the teardown list harder to maintain.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
src/renderer/modals/mcpInvocationDetails/view.ts:74
- Status mapping does not account for AgentInvocationLogEntry.outcome === "in-progress" (it currently falls back to "pending"). This causes active invocations to display the wrong status badge when no HeadlessJobDetails are available.
src/main/managers/headlessToolInvocationManager.ts:182 - runJob() triggers duplicate job-change notifications on completion/failure: appendLog() already calls notifyJobChanged(), but runJob() calls notifyJobChanged() again immediately afterward. This can cause double UI refresh/events per state change.
src/renderer/modules/cspExceptionModal.ts:99 - openCspConsentManagementModal() rejects the promise when the modal is closed via the window close button. Callers (e.g. consent review action handler) treat cancel as a non-error and will currently show an error notification/log for a user cancel. The JSDoc also says it returns null when cancelled.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 82 out of 88 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (6)
Previously missed (5) — in code that hasn't changed since the last review.
src/renderer/modals/cspException/controller.ts:32
- This controller script uses console.warn in production code. Repo logging guidance says to avoid console.* and route logs through Sentry/central logging instead; the same console.warn pattern appears in multiple modal controllers.
src/main/index.ts:495 - Duplicate ipcMain.removeHandler calls for MCP job-status/log channels are present. This is redundant and makes the teardown list harder to audit.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_CLIENT_CONFIG_STATUSES);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
src/main/managers/settingsManager.ts:110
- normalizeMarketplaceSources() infers a default source.type, but the default-enabled logic still checks source.type (the original value). If a stored source is missing type, this can incorrectly default enabled=false even when the inferred type is "builtin" (and can unexpectedly disable the built-in marketplace when a private source exists).
src/renderer/modals/sentryConsent/view.ts:91 - External link opens with target="_blank" but is missing rel="noopener noreferrer", which can allow reverse-tabnabbing. The same pattern also exists in other renderer HTML generation (e.g. src/renderer/modules/initialization.ts:698).
src/main/managers/headlessToolInvocationManager.ts:182 - runJob() calls appendLog(), which already notifies listeners via notifyJobChanged(). The extra notifyJobChanged(jobId) here causes duplicate job-updated events for the completion transition.
This issue also appears on line 196 of the same file.
src/main/managers/headlessToolInvocationManager.ts:198
- runJob() calls appendLog(), which already notifies listeners via notifyJobChanged(). The extra notifyJobChanged(jobId) here causes duplicate job-updated events for the failure transition.
…SentryEnvironment
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 83 out of 89 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (3)
Previously missed (3) — in code that hasn't changed since the last review.
src/main/index.ts:495
ipcMain.removeHandleris called twice forMCP_SERVER_CHANNELS.GET_JOB_STATUSandMCP_SERVER_CHANNELS.CLEAR_LOGS, which is redundant and makes it easier to introduce mismatches when this list changes.
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_CLIENT_CONFIG_STATUSES);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.GET_JOB_STATUS);
ipcMain.removeHandler(MCP_SERVER_CHANNELS.CLEAR_LOGS);
src/main/managers/headlessToolInvocationManager.ts:198
appendLog()already callsnotifyJobChanged(), so the explicitnotifyJobChanged(jobId)afterappendLog()causes duplicate “job updated” notifications on both the completed and failed paths.
src/renderer/modals/sentryConsent/view.ts:91- Links opened with
target="_blank"should includerel="noopener noreferrer"to prevent reverse-tabnabbing and ensure the new page cannot accesswindow.opener. The repo already uses this pattern elsewhere (e.g.src/renderer/modals/cspException/view.ts:512).
Summary
This pull request introduces several improvements and new features to the desktop app, including enhanced headless tool logging, private marketplace configuration documentation, and dependency updates. It also refines the release workflow for Windows installers.
Type of change
Changes
New Features & Documentation
PRIVATE_MARKETPLACE_CONFIGURATION.mdguide explaining how to configure and host a private marketplace, including Azure Blob Storage integration and packaging instructions.context.logger, which are stored with the job and surfaced in the MCP Server UI. The documentation describes how to use this logger and how logs are displayed live in the server page. [1] [2]Build & Release Workflow Improvements
.github/workflows/nightly-release.ymland.github/workflows/prod-release.ymlto ensure the "Package installers from signed directory" step runs after generatingapp-update.ymland before signing with Azure Trusted Signing. This fixes the step ordering for Windows builds. [1] [2] [3] [4]Dependency Updates
@sentry/electronas a new dependency for error tracking. [1] [2]playwrightinpackage.jsonfor consistency. [1] [2]1.2.5inpackage.json.pnpm-lock.yamlwith new dependencies, including OpenTelemetry packages and APM JS Collab utilities. [1] [2]Architecture checklist
Packages (
types&validation)packages/If you did change a package:
@pptb/types(types): type definitions updated and version bumped inpackages/types/package.json@pptb/validate(validation): validation rules updated and version bumped inpackages/validation/package.jsonCode quality
pnpm run typecheckpasses with 0 errors (warnings are acceptable)pnpm run lintpasses with 0 errors (warnings are acceptable)pnpm run buildcompletes successfullyTesting
pnpm run test:unitpasses (for changes tosrc/main/,src/common/, orsrc/renderer/utilities)pnpm run test:e2epasses (for UI / navigation / end-to-end flows)pnpm run dev)Scenario tested:
Screenshots / recordings
Breaking changes
Reviewer notes