Skip to content

[Fix] Resolve scoped npm package paths when launching tools - #643

Closed
martintoelk wants to merge 3 commits into
PowerPlatformToolBox:devfrom
martintoelk:fix/scoped-npm-tool-loading
Closed

[Fix] Resolve scoped npm package paths when launching tools#643
martintoelk wants to merge 3 commits into
PowerPlatformToolBox:devfrom
martintoelk:fix/scoped-npm-tool-loading

Conversation

@martintoelk

@martintoelk martintoelk commented Aug 26, 2026

Copy link
Copy Markdown

Summary

Fixes the npm/debug tool launch path for scoped packages without a version suffix.

Type of change

  • New feature
  • Bug fix
  • Refactor (no functional change)
  • Documentation
  • Chore / maintenance (dependency update, build, config)
  • Test addition / improvement

Changes

  • Add a shared npm package directory-name resolver that preserves scoped names and strips only version/dist-tag suffixes.
  • Use it in BrowserviewProtocolManager.
  • Add regression coverage for scoped and unscoped packages with versions and dist-tags.

Architecture checklist

Packages (types & validation)

  • Not applicable — no changes to packages/

Code quality

  • npm run typecheck passes with 0 errors (warnings are acceptable)
  • npm run lint passes with 0 errors (warnings are acceptable)
  • npm run build completes successfully

Testing

  • npm run test:unit -- --runInBand passes for the main-process utility and BrowserView path change

Scenario tested:

The regression tests verify that unscoped names, scoped names, versions, and dist-tags resolve to the correct installed package directory name. Full unit tests pass (202 tests).

Breaking changes

  • No breaking changes

Reviewer notes

  • I have added appropriate unit and/or e2e tests for this change
  • I have resolved all GitHub Copilot review comments
  • I have followed the guidelines in CONTRIBUTING.md

Related context: #638

Power-Maverick and others added 3 commits July 27, 2026 11:57
…owerPlatformToolBox#612)

* fix: update version to 1.2.0 in package.json

* handle entity collection bound action/function correctly (#445)

* correctly handle dates in function parameters (formatFunctionParameter) (#446)

* fix: update preflight job condition to correctly handle pull request events

* feat: enhance preflight checks with detailed failure comments for release notes and version validation

* feat: enhance preflight checks with detailed error reporting for version validation and release notes

* chore: update release notes for version 1.2.0 with new highlights, fixes, and developer changes

* fix: update version to 1.2.1 in package.json and 1.2.1-beta.0 in packages/package.json

* fix: adjust loading overlay window settings to avoid conflicts with system modals. fix for [Bug]: Update is above all windows, not just toolbox
Fixes #447

* fix: enable protocol handling in development mode with environment variable check (#452)

* Add search clear buttons to sidebar search inputs #442 (#451)

* Remove alwaysOnTop property from loading overlay and update auto-update notification modal to prevent covering system dialogs

* Add search clear buttons to sidebar search inputs

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Add clear buttons to search inputs in select connection modals

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Implement "What's New" feature with auto-update notification (#453)

* feat: implement "What's New" feature with auto-update notifications and markdown rendering

* feat: enhance "What's New" feature to support insider version detection and update URLs accordingly

* Fix: Inject PPTB_UPDATES_ORIGIN into renderer CSP at build time (#454)

* Initial plan

* fix: make CSP reflect configured PPTB_UPDATES_ORIGIN at build time via Vite transformIndexHtml

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>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* refactor: replace duplicate escapeHtml in markdown.ts with shared import from toolIconResolver (#457)

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Feature/tab context menu (#456)

* feat: add native context menu support with IPC integration for tabs

* fix: format grantCspConsent function for improved readability

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Bugfix

* Bugfix context menu position

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* feat: Allow sharing of connection files (import/export) (#444)

* Initial plan

* feat: add connection import/export with warning for incomplete credentials

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: update color adjustment method for connection warning in light theme

* fix: improve import/export UI layout, fix theme-aware icons, add export by category

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: always show category export button and make it theme-aware

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: address unresolved code review comments (error normalization, UUID, accessibility)

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>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix: Wrong BrowserView dimensions and connection prompt after force-reload (#461)

* Initial plan

* Fix refresh issue: correct BrowserView dimensions and restore session with saved connections

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Fix closeAllToolViews to also close terminals and revoke filesystem access per instance

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>

* Settings opens as a tab with VSCode-style UI; adds Settings to View menu (#464)

* Initial plan

* Change settings to open as a tab and add Settings option in View menu

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Redesign settings tab: VSCode-style UI, fix tab label to show 'Settings' only, scrollable content

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refactor: reorganize settings management and remove unused navigation elements

* Rename loadSidebarSettings/saveSidebarSettings to loadSettings/saveSettings

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>

* feat: Import connections from XrmToolBox XML files (#463)

* Initial plan

* feat: import connections from XrmToolBox XML files

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: import crypto from node built-in in connectionsManager to fix ReferenceError in main process

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <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 Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* feat: Support US Government cloud (GCC High / DoD) Dataverse URLs (#469)

* Initial plan

* feat: support US Gov cloud (GCC High/DoD) URLs for Dataverse connections

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refactor: extract isValidDataverseUrl helper with hostname-only, anchored, case-insensitive validation

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>

* Add a Links Hub and Multi-agent Orchestration (#470)

* wip/feat: implement multi-agent workflow setup with defined roles and human approval gate

* feat: implement mesh collaboration and risk-based checkpointing for agent workflows

* feat: enhance chat output contracts for agents to improve communication and clarity

* feat: add important links sidebar with curated resources and strict URL validation

* feat: enhance important links sidebar with display host and improved styling

* feat: add favicon fetching functionality and update important links sidebar with descriptions and icons

* Update src/main/index.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix: Rename `getFaviconApiUrl` parameter from `host` to `url` (#471)

* Initial plan

* fix: update getFaviconApiUrl parameter name from host to url

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: Links Hub favicon handler security, XSS, and rendering bugs (#472)

* Initial plan

* fix: address unresolved PR review comments on Links Hub favicon handler and sidebar

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: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* fix: deprecate showLoading and hideLoading methods in toolboxAPI (#475)

* minor change to clarify usage of metadata api functions (#474)

* Fix dual-connection tab colour split, swap Test/UAT env defaults, improve 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>

* Replace blocking About dialog with custom modal BrowserWindow (#477)

* 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>

* Add appearance settings for category color and environment color borders (#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>

* fix: enhance dual connection handling in tool management (#483)

* Add option to disable session restore on startup (#482)

* 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 - https://github.com/PowerPlatformToolBox/desktop-app/pull/482#discussion_r2970765680

* 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>

* fix: improve connection import handling and clean up logger imports (#495)

* Fix: Global search command palette renders behind active tool BrowserView 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>

* Fix: TypeError "Object has been destroyed" in emitModalClosed during 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>

* Rename "Important Links" to "Community Resources" with dynamic Supabase-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: source selection modal for connection import (XTB vs PPTB) (#500)

* 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>

* fix: update DevTools opening mode to detach for main and tool windows

* feat: add backdrop overlay to all modal windows

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>

* fix: apply only background/blur styling to modal windows

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>

* fix: render modal backdrop overlay in main renderer window

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>

* fix: show modal backdrop immediately with correct display value

- 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>

* chore: update release notes for version 1.2.1 with highlights, fixes, and developer notes

* fix: improve formatting and organization of changelog entries for clarity

* 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](https://github.com/handlebars-lang/handlebars.js/compare/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](https://github.com/lodash/lodash/compare/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](https://github.com/xmldom/xmldom/compare/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>

* introduce merge pr workflow

* fix: update version to 1.2.2 in package.json

* fix: update version from 1.2.1-beta.0 to 1.2.1 in package.json

* fix: update version to 1.2.2-beta.0 in package.json

* Update src/renderer/modules/browserWindowModals.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/updateNotification/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/troubleshooting/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/toolDetail/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/about/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Initial plan

* Fix Windows assembly signing: sign app binaries before packaging into installers

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1c00549d-1aa5-4784-be1b-0fc190cf013e

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Initial plan

* feat: add system tray icon so app is accessible when window is closed on macOS

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a7d2908f-d101-49f9-a3b6-ddcfcd5fb9f0

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* chore: clean up code structure and remove unused code blocks

* Delete .DS_Store

* fix: update icon paths from assets/ to icons/

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/387e28e6-3a31-4d4f-96ee-5c14bb7b515f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: support separate icons for stable and insider release channels

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a833a978-e0b2-44f6-9555-11afb1fda407

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* ci: update release workflows for stable/insider channel separation

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/6169cb36-5558-430f-a318-03d813393ba8

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Refactor code structure for improved readability and maintainability

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: track isQuitting flag so tray Quit fully exits app on macOS

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/128b27c8-deee-4c1f-b225-37ad33f4a61c

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: restrict pptb:// protocol registration to stable channel only

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a8b5c445-f78d-4413-9740-a79c5df277d8

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: cross-platform package scripts and single-instance lock for insider builds

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/511a31fa-b819-45c7-87b8-063c46adf051

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Fix unpacked dir path and --dir flag for Windows signing steps

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/41781746-20f4-4a83-949e-dec4147c6056

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat(pptb-validate): add pptb.config.json invocation validation with semver enforcement

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/f5d8d8b6-bbf6-473f-a251-979e002c64a3

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat(inter-tool-launch): implement all 7 parts of Inter-Tool Launch Context

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/06819ca7-d6e6-42b6-ab39-1eff21e59a5f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: address code review comments (explicit null check, blank line, .gitignore)

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/06819ca7-d6e6-42b6-ab39-1eff21e59a5f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* docs: add plan-inter-tool-launch-context.md with accurate v3 reflecting all 7 implemented parts

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/16f5bfb7-7f3f-4b6c-9829-843603515c18

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: rename PptbConfig→PPTBConfig and validatePptbConfig→validatePPTBConfig for consistent casing

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/f894c5cf-a937-472f-a7ee-823d77dc6687

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* [Feature]: Send version, platflorm etc automagically to feedback
Fixes #528

Co-authored-by: Copilot <copilot@github.com>

* fix: improve feedback URL fallback and separate instanceId/toolId fields

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/c7033bef-3d6b-497a-9254-6fc4196b1145

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* [Bug]: Color/Size of update available not clear
Fixes #524

* fix: apply PR review feedback - update badge icon and checkbox accent color

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/ef1aad69-82ba-4d9b-afce-07c091abc7c7

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* fix: update tool update badge styling and replace image with text indicator

Co-authored-by: Copilot <copilot@github.com>

* fix: address review feedback - remove unused var, add ARIA attrs, fix doc comment, remove dev mock

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/82a20789-a4d1-4ba9-b4a0-1ccd6012a19d

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* Potential fix for code scanning alert no. 21: Workflow does not contain permissions

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update .github/workflows/merge-prs.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update .github/workflows/merge-prs.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* update based on copilot review

* formatting

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* update to fix copilot suggestions

* Add concurrency to merge PRs workflow

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update merge-prs.yml

* Update workflow to combine PRs with new permissions

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* [Feature]: Send version, platflorm etc automagically to feedback for tools
Fixes #528

* Configure concurrency for PR merge workflow

Add concurrency settings to manage PR merging.

* added support for url's ending in `mcas.ms`
ref: #525

* fixed notification z-index issue
ref: #527

* Initial plan

* fix: address PR 531 review feedback in feedback URL diagnostics

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5a454d32-db47-4c80-a1c1-5c492b04ecf5

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* [Bug]: Color/Size of update available not clear
Fixes #524

* chore: refactored file and code

* Initial plan

* fix inter-tool launch and invocation error handling

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refine non-blocking inter-tool launch flow

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* harden invocation failure cleanup logging

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* clarify fire-and-forget invocation launch handling

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* bump version to 1.2.2-beta.1 in package.json

* remove deprecated loading screen API and associated handlers

* fix: address review feedback - remove stale comment, unused LoadingOverlayWindowManager, and deprecated UtilsAPI methods

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/9533b0ba-911a-4e4b-ac3a-2dfdf994bfd1

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Initial plan

* Initial plan

* feat: sync zoom level between main window and all open tool BrowserViews

- Add applyZoomLevelToAllTools() to ToolWindowManager to apply zoom to all tool views
- Apply main window's zoom level to newly launched tool BrowserViews
- Replace role-based zoom menu items with custom handlers that sync zoom to tools
- Rename Window menu 'Zoom' to 'Maximize Window' to avoid confusion with content zoom
- Use 0.5 zoom level steps (~10% per step) matching Electron default behaviour

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/67f9177d-fcba-4d85-8aa2-4d16d45a7816

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: allow tools to open mailto: links with user consent

- Add 'mailto' to CspExceptions type so tools can declare they use mailto links
- Handle mailto: navigation events in toolWindowManager to open via shell.openExternal when consent was granted
- Set setWindowOpenHandler to intercept window.open('mailto:...') calls
- Update CSP exception consent modal to display mailto entries as 'Email links (mailto:)'
- Use dynamic modal title/description based on whether the permission is mailto-only, mixed, or web-only

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1d13b2f4-4369-4693-ba94-a27242b3979f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refactor: address code review - extract helper, add URL validation, fix comments

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1d13b2f4-4369-4693-ba94-a27242b3979f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: correct zoom-in accelerator and re-fit BrowserView bounds after zoom

- Change Zoom In accelerator from Command/Ctrl+= to Command/Ctrl+Shift+=
  so pressing the physical + key (Shift+=) triggers zoom in, matching the
  symmetry of Zoom Out (Command/Ctrl+-) and user expectation
- Scale renderer-reported CSS pixel bounds by zoom factor in boundsResponseListener
  so BrowserView.setBounds() receives correct logical pixel values after zoom
- Call scheduleBoundsUpdate() in applyZoomLevelToAllTools() to re-fit the
  active tool BrowserView to its panel immediately after every zoom change

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/fec4ad6f-b603-4629-a308-40ef888ded44

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: update zoom in accelerator keys and improve window menu structure

* fix: improve parse-failure log message with scheme context (no PII)

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/46b0bf4b-fc34-43c9-bb8e-62ca2cde6d6b

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: avoid full-url lowercase in mailto scheme checks

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/9f34ff3e-f284-4e0d-af0c-746cd60450e9

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: enable mock updates in development environment

* feat: enhance protocol handler to support single-instance lock for stable builds only and add insider tag to About modal

* docs: add Inter-Tool Invocation documentation

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a0a2ae7a-e1e0-451a-acbc-cd18a2266a85

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* docs: fix markdown escaping in parameter table

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a0a2ae7a-e1e0-451a-acbc-cd18a2266a85

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: Open URLs in external browser using connection's browser profile (#547)

* chore: update package version to 1.2.2 and release notes for consistency

* feat: enhance DataverseConnection interface with optional fields for category and timestamps (#553)

* feat: Inter-Tool Launch Context v2 — capabilities, auto-close, FXS inherit, one-at-a-time, banner, noReturn + multi-connection prompt + capability registry (#552)

* feat: Inter-Tool Launch Context v2 (capabilities, auto-close, banner, FXS inherit, one-at-a-time)

* fix: remove duplicate doc content; replace O(n) activeCallees scan with O(1) reverse map

* feat: noReturn banner warning, multi-connection auto-prompt for invocation, FXS Send To scenario docs

* fix: remove unsafe type cast, add logWarn in catch block for connection prompt

* refactor: remove registerSendToAction, suppress banner when noReturn: true

* fix: update stale JSDoc for noReturn parameter

* refactor: drop calleeToCallerMap, remove calleeInstanceId from banner state

* fix: guard RETURN_INVOCATION_DATA fallback against non-pending active tool

* feat: capability tag registry — fixed list, Supabase config, validation, auto-complete types

* fix: add sync comments between capability lists, prevent Supabase retry spam on failure

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* docs: reorganize Table of Contents in INTER_TOOL_INVOCATION.md for improved navigation

* fix: open callee tool in its own tab during inter-tool invocation

When a tool (e.g. Data Migrator) calls invocation.launchTool() the IPC call
went directly to the main process, creating the callee BrowserView but never
notifying the renderer. This caused the callee to appear in the same tab as
the caller, and the invocation banner to be unreliable.

Changes:
- channels.ts: add CALLEE_TOOL_OPENED / CALLEE_TOOL_CLOSED IPC events
- toolWindowManager.ts: send CALLEE_TOOL_OPENED after successful callee
  launch; send CALLEE_TOOL_CLOSED after auto-close via resolveInvocation()
- preload.ts: expose onCalleeToolOpened / onCalleeToolClosed listeners
- api.ts: add the two new methods to ToolboxAPI interface
- toolManagement.ts: add initializeCalleeToolListeners() — creates a tab
  for the callee on CALLEE_TOOL_OPENED and removes it / switches back to
  the caller on CALLEE_TOOL_CLOSED
- initialization.ts: wire up initializeCalleeToolListeners()

* refactor: use Tool type instead of any casts in callee tab listener

* fix: move invocation banner into content-wrapper and update text labels

* fix: offset BrowserView bounds by banner height to prevent tool content overlap

* Initial plan

* feat: harden tool terminal execution

* feat: tighten terminal command allowlist

* refactor: finalize terminal safeguards

* fix: finalize secure terminal restrictions

* refactor: switch terminal security from allowlist to blocklist

* feat: add startShellProcess with shell selection and sentinel-based command execution

* fix: address code review — cmd flags, pwsh exit code capture, sentinel default, shell injection guard

* fix: log warning when sentinel exit code is malformed

* fix: pass raw command string to shell stdin so && and other operators work correctly

* fix(terminal): filter sentinel echo lines from stdout display

When PowerShell (and other shells) run in interactive mode with stdin
piped, they echo the commands written to stdin back to stdout. This
caused the internal sentinel command used for exit-code detection to
appear verbatim in the terminal UI.

Fix: buffer stdout by line while a command is executing and drop any
line that matches the per-shell-type sentinel echo pattern before
emitting output to the display. Remaining buffered data is flushed
(with the same filter applied) when the pending command is resolved
or fails.

* refactor(terminal): extract flushStdoutBuffer helper to remove duplication

* refactor(terminal): reorganize imports and improve logging for stdout processing

* fix(styles): adjust button alignment and layout in settings and tool item sections

* Initial plan

* feat: support beta/pre-release npm packages (#382)

* fix(version): update version to 1.2.3 in package.json

* fix(version): update version to 1.2.3-beta.0 in package.json

* Enhance terminal blocking

* Added capabilities to npm and locally loaded tools

* fix: version scope is sanitized from npm install

* moved out of beta into stable

* 1.2.3 Release Notes

* Update RELEASE_NOTES.md

* fixed the icon path and check status badge in readme

* fixed the issue with npm install

* fixed the uninstall issue for npm and local loaded tools

* Revert "Merge branch 'main' into dev"

This reverts commit 0adb1549748dfc7fd002e7624094a6c7fac7d2c2, reversing
changes made to 3c1c898a872added66d75c3eebecf1569731e669.

* Added common validate package for both types and web; incremented the versions as well

* issue fixed for double encryption (#574)

* Enable Power Platform API access (#575)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added enabled for pp api for all type and removed filtering; but added tag

* Added enabledForPPAPI to the connection

* renamed dataverse connection to connection and minor ui fixes

* types package updated

* fix the placement of PP-API types

* Added PP API scopes to Connection (#580)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added enabled for pp api for all type and removed filtering; but added tag

* Added enabledForPPAPI to the connection

* renamed dataverse connection to connection and minor ui fixes

* types package updated

* fix the placement of PP-API types

* Added scopes to the Connection for Power Platform API

* MCP-enabled agent assisted process (#581)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added agentInvokable to tool manifest plus schema converter helper function

* mcp server with auth created and connection tested

* wip: agent tool registry

* fix: name passed to the mcp client

* wired up the agent call with launch invocation

* working mcp sync

* some styling fixes

* Reformat the language on the connection selection modals

* update the pptb config and associated plumbing plus some minor fixes

* types and some minor edits

* doc updates, comment updates and minor tweaks

* enabled tray menu for MCP and moved all dispersed items into one tab called MCP Server with MCP icon

* Add MCP Headless for fully unattended flow (#582)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added agentInvokable to tool manifest plus schema converter helper function

* mcp server with auth created and connection tested

* wip: agent tool registry

* fix: name passed to the mcp client

* wired up the agent call with launch invocation

* working mcp sync

* some styling fixes

* Reformat the language on the connection selection modals

* update the pptb config and associated plumbing plus some minor fixes

* types and some minor edits

* doc updates, comment updates and minor tweaks

* enabled tray menu for MCP and moved all dispersed items into one tab called MCP Server with MCP icon

* init headless mcp - cli

* headless invocation wiring

* Headless CLI invoked and response provided

* add buttons to quickly setup mcp for Claude Desktop and VSCode

* Enhanced Terminal Hardening Rules plus added Test Suites (#583)

* feat: add Jest unit tests and Playwright e2e test suite

- Install jest, ts-jest, @types/jest, ts-node, @playwright/test
- Add jest.config.ts, playwright.config.ts, tsconfig.test.json
- Add manual mocks for electron and electron-store
- Add unit tests: SettingsManager (29 tests), InstallIdManager (5 tests),
  EncryptionManager (11 tests), ConnectionsManager (20 tests),
  cspUtils (4 tests), toolSourceIcon (6 tests) — 76 total
- Add e2e fixtures, app.spec.ts and navigation.spec.ts
- Add GitHub Actions test.yml workflow (runs on PRs to dev and main)
- Add test/test:unit/test:unit:watch/test:unit:coverage/test:e2e/test:e2e:ui scripts

* fix(tests): use inline test.skip condition in navigation e2e tests

* docs: standardize E2E test terminology and improve README formatting

* docs: standardize E2E test terminology in test workflow

* fix(e2e): wait for index.html URL before asserting on window state

* fix(ci): explicitly install Electron binary in e2e workflow

* more hardening terminal commands

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* feat: Add notification history panel with bell icon in footer (#585)

* Initial plan

* feat: add notification history bell button in footer (#364)

* Add Playwright e2e tests for notification history bell button

* Fix: remove force:true from outside-click test, use activity-bar as click target

* fix: notification panel hidden attribute overridden by CSS flex display

* fix: move initNotificationHistoryPanel early and shrink BrowserView when panel is open

* refactor: extract named constants for notification panel margin and min tool width

* refactor: use BrowserWindow with alwaysOnTop for notification history, merge into notifications.ts

* fix: extract named constants and clarify IPC args indexing in notification history manager

* fix the alignment issue

* Added proper copy and clear all functions

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>

* Removed the incorrect filter and updated the wording on connection selection modal for PP API (#586)

* Removed the incorrect filter and updated the wording for PP API

* fix the test script

* [Feature] side by side toolview (#588)

* implemented correct split functionality

* added test cases plus update the PR template

* added ElicitRequest to MCP

* [Feature] Add preview feature flagging, gate MCP Server behind it, move MCP icon to activity bar footer (#589)

* Add preview feature flagging and move MCP button to activity bar footer

* Rename mcpBtn to mcpButton for consistency

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* Added MCP to preview feature and added preview feature enablement in settings

* Implement headless mode support for tools, adding globals for toolboxAPI, dataverseAPI, and powerplatformAPI in Node.js environment. Update MCP server to handle headless invocations with connection management and logging. Enhance type definitions for headless API access and ensure compatibility with existing tools.

* fix: remove unused getPowerPlatformManager variable in headlessToolRuntime.ts

* feat: implement preview feature management and settings integration

* refactor: remove Power Platform API preview feature references from connection modals and management

* feat: add consent confirmation for Power Platform API access in connection modals

* Resolving bug [Bug]: Uninstall local debugged tool deletes local folder
Fixes #578

* Initial plan

* fix: color success and error modal feedback correctly

* fix: show modal success messages in green

* fix: hide/show Power Platform API based on auth type in connection modals

* #591, #561 fix: update Dataverse hostname pattern to include new regions and improve URL validation

* feat: implement app registration configuration and update connection modals

* feat: add start and stop functionality for MCP server and based on that status app either quits or runs in background

* fix: update PR checklist & bundle-size to handle forked PRs errors

* fix: resolving issue with second instance invocation creating two instances of the app

* feat: add 'Copy Script & Add/Save' functionality and update connection modals for app registration

* chore: update MCP Server label and description for clarity on agentic AI capabilities

* feat: add MCP headless to related UI elements

* fix: add validation for app-update.yml existence and enhance auto-update error handling

* fix: update PR title validation to include 'Release' type

* fix: correct PR title validation message to include proper formatting for types

* release v1.2.4 prep

* Initial plan

* fix: make notification panel and toast respect the selected app theme

Both NotificationWindowManager and NotificationHistoryWindowManager now
accept a SettingsManager instance and expose a private isDarkTheme()
helper that reads the user's theme setting via resolveTheme().

generateHTML() (toast popup) and generateHistoryHTML() (bell panel) now
produce light or dark colour schemes based on the resolved theme instead
of being hard-coded to the dark palette, fixing the bug where the
notification UI always rendered dark even when the app was set to light
theme.

* fix: enhance preflight check comments and handling for PRs

* some improvements to the workflows and updating the release notes

* fix: update .gitignore to include test-results directory and remove obsolete .last-run.json file

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: reorder comments for clarity in connection button handling

* fix: update paths for types package version validation in workflows

* fix: move app-update.yml validation to the correct job in release workflows

* fix: add step to generate app-update.yml metadata for Windows in release workflows

* [Fix] Bundle app-update.yml into Windows installers so auto-update works (#611)

* Initial plan

* Generate app-update.yml before packaging Windows installers

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: David Rivard <38399134+drivardxrm@users.noreply.github.com>
Co-authored-by: Lars Hildebrandt <info@larshildebrandt.de>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Lars Hildebrandt <lars.hildebrandt@tuleva.de>
Co-authored-by: Oliver Flint <oliverflint@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: darkwheel <christoph@raidl.de>
Co-authored-by: LinkeD365 <carl.cookson@gmail.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>
Co-authored-by: darkwheel <37546897+darkwheel@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Matt Berg <25282996+MattBerg11@users.noreply.github.com>
* fix: deprecate showLoading and hideLoading methods in toolboxAPI (#475)

* minor change to clarify usage of metadata api functions (#474)

* Fix dual-connection tab colour split, swap Test/UAT env defaults, improve 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>

* Replace blocking About dialog with custom modal BrowserWindow (#477)

* 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>

* Add appearance settings for category color and environment color borders (#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>

* fix: enhance dual connection handling in tool management (#483)

* Add option to disable session restore on startup (#482)

* 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 - https://github.com/PowerPlatformToolBox/desktop-app/pull/482#discussion_r2970765680

* 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>

* fix: improve connection import handling and clean up logger imports (#495)

* Fix: Global search command palette renders behind active tool BrowserView 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>

* Fix: TypeError "Object has been destroyed" in emitModalClosed during 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>

* Rename "Important Links" to "Community Resources" with dynamic Supabase-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: source selection modal for connection import (XTB vs PPTB) (#500)

* 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>

* fix: update DevTools opening mode to detach for main and tool windows

* feat: add backdrop overlay to all modal windows

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>

* fix: apply only background/blur styling to modal windows

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>

* fix: render modal backdrop overlay in main renderer window

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>

* fix: show modal backdrop immediately with correct display value

- 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>

* chore: update release notes for version 1.2.1 with highlights, fixes, and developer notes

* fix: improve formatting and organization of changelog entries for clarity

* 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](https://github.com/handlebars-lang/handlebars.js/compare/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](https://github.com/lodash/lodash/compare/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](https://github.com/xmldom/xmldom/compare/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>

* introduce merge pr workflow

* fix: update version to 1.2.2 in package.json

* fix: update version from 1.2.1-beta.0 to 1.2.1 in package.json

* fix: update version to 1.2.2-beta.0 in package.json

* Update src/renderer/modules/browserWindowModals.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/updateNotification/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/troubleshooting/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/toolDetail/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/renderer/modals/about/view.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Initial plan

* Fix Windows assembly signing: sign app binaries before packaging into installers

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1c00549d-1aa5-4784-be1b-0fc190cf013e

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Initial plan

* feat: add system tray icon so app is accessible when window is closed on macOS

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a7d2908f-d101-49f9-a3b6-ddcfcd5fb9f0

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* chore: clean up code structure and remove unused code blocks

* Delete .DS_Store

* fix: update icon paths from assets/ to icons/

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/387e28e6-3a31-4d4f-96ee-5c14bb7b515f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: support separate icons for stable and insider release channels

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a833a978-e0b2-44f6-9555-11afb1fda407

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* ci: update release workflows for stable/insider channel separation

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/6169cb36-5558-430f-a318-03d813393ba8

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Refactor code structure for improved readability and maintainability

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: track isQuitting flag so tray Quit fully exits app on macOS

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/128b27c8-deee-4c1f-b225-37ad33f4a61c

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: restrict pptb:// protocol registration to stable channel only

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a8b5c445-f78d-4413-9740-a79c5df277d8

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: cross-platform package scripts and single-instance lock for insider builds

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/511a31fa-b819-45c7-87b8-063c46adf051

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Fix unpacked dir path and --dir flag for Windows signing steps

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/41781746-20f4-4a83-949e-dec4147c6056

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat(pptb-validate): add pptb.config.json invocation validation with semver enforcement

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/f5d8d8b6-bbf6-473f-a251-979e002c64a3

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat(inter-tool-launch): implement all 7 parts of Inter-Tool Launch Context

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/06819ca7-d6e6-42b6-ab39-1eff21e59a5f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: address code review comments (explicit null check, blank line, .gitignore)

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/06819ca7-d6e6-42b6-ab39-1eff21e59a5f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* docs: add plan-inter-tool-launch-context.md with accurate v3 reflecting all 7 implemented parts

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/16f5bfb7-7f3f-4b6c-9829-843603515c18

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: rename PptbConfig→PPTBConfig and validatePptbConfig→validatePPTBConfig for consistent casing

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/f894c5cf-a937-472f-a7ee-823d77dc6687

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* [Feature]: Send version, platflorm etc automagically to feedback
Fixes #528

Co-authored-by: Copilot <copilot@github.com>

* fix: improve feedback URL fallback and separate instanceId/toolId fields

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/c7033bef-3d6b-497a-9254-6fc4196b1145

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* [Bug]: Color/Size of update available not clear
Fixes #524

* fix: apply PR review feedback - update badge icon and checkbox accent color

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/ef1aad69-82ba-4d9b-afce-07c091abc7c7

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* fix: update tool update badge styling and replace image with text indicator

Co-authored-by: Copilot <copilot@github.com>

* fix: address review feedback - remove unused var, add ARIA attrs, fix doc comment, remove dev mock

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/82a20789-a4d1-4ba9-b4a0-1ccd6012a19d

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* Potential fix for code scanning alert no. 21: Workflow does not contain permissions

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update .github/workflows/merge-prs.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update .github/workflows/merge-prs.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* update based on copilot review

* formatting

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* update to fix copilot suggestions

* Add concurrency to merge PRs workflow

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update merge-prs.yml

* Update workflow to combine PRs with new permissions

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* [Feature]: Send version, platflorm etc automagically to feedback for tools
Fixes #528

* Configure concurrency for PR merge workflow

Add concurrency settings to manage PR merging.

* added support for url's ending in `mcas.ms`
ref: #525

* fixed notification z-index issue
ref: #527

* Initial plan

* fix: address PR 531 review feedback in feedback URL diagnostics

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5a454d32-db47-4c80-a1c1-5c492b04ecf5

Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>

* [Bug]: Color/Size of update available not clear
Fixes #524

* chore: refactored file and code

* Initial plan

* fix inter-tool launch and invocation error handling

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refine non-blocking inter-tool launch flow

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* harden invocation failure cleanup logging

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* clarify fire-and-forget invocation launch handling

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/5d2d33f6-43a4-484c-b967-cafc9ab27295

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* bump version to 1.2.2-beta.1 in package.json

* remove deprecated loading screen API and associated handlers

* fix: address review feedback - remove stale comment, unused LoadingOverlayWindowManager, and deprecated UtilsAPI methods

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/9533b0ba-911a-4e4b-ac3a-2dfdf994bfd1

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Initial plan

* Initial plan

* feat: sync zoom level between main window and all open tool BrowserViews

- Add applyZoomLevelToAllTools() to ToolWindowManager to apply zoom to all tool views
- Apply main window's zoom level to newly launched tool BrowserViews
- Replace role-based zoom menu items with custom handlers that sync zoom to tools
- Rename Window menu 'Zoom' to 'Maximize Window' to avoid confusion with content zoom
- Use 0.5 zoom level steps (~10% per step) matching Electron default behaviour

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/67f9177d-fcba-4d85-8aa2-4d16d45a7816

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: allow tools to open mailto: links with user consent

- Add 'mailto' to CspExceptions type so tools can declare they use mailto links
- Handle mailto: navigation events in toolWindowManager to open via shell.openExternal when consent was granted
- Set setWindowOpenHandler to intercept window.open('mailto:...') calls
- Update CSP exception consent modal to display mailto entries as 'Email links (mailto:)'
- Use dynamic modal title/description based on whether the permission is mailto-only, mixed, or web-only

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1d13b2f4-4369-4693-ba94-a27242b3979f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refactor: address code review - extract helper, add URL validation, fix comments

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/1d13b2f4-4369-4693-ba94-a27242b3979f

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: correct zoom-in accelerator and re-fit BrowserView bounds after zoom

- Change Zoom In accelerator from Command/Ctrl+= to Command/Ctrl+Shift+=
  so pressing the physical + key (Shift+=) triggers zoom in, matching the
  symmetry of Zoom Out (Command/Ctrl+-) and user expectation
- Scale renderer-reported CSS pixel bounds by zoom factor in boundsResponseListener
  so BrowserView.setBounds() receives correct logical pixel values after zoom
- Call scheduleBoundsUpdate() in applyZoomLevelToAllTools() to re-fit the
  active tool BrowserView to its panel immediately after every zoom change

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/fec4ad6f-b603-4629-a308-40ef888ded44

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: update zoom in accelerator keys and improve window menu structure

* fix: improve parse-failure log message with scheme context (no PII)

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/46b0bf4b-fc34-43c9-bb8e-62ca2cde6d6b

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: avoid full-url lowercase in mailto scheme checks

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/9f34ff3e-f284-4e0d-af0c-746cd60450e9

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: enable mock updates in development environment

* feat: enhance protocol handler to support single-instance lock for stable builds only and add insider tag to About modal

* docs: add Inter-Tool Invocation documentation

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a0a2ae7a-e1e0-451a-acbc-cd18a2266a85

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* docs: fix markdown escaping in parameter table

Agent-Logs-Url: https://github.com/PowerPlatformToolBox/desktop-app/sessions/a0a2ae7a-e1e0-451a-acbc-cd18a2266a85

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: Open URLs in external browser using connection's browser profile (#547)

* chore: update package version to 1.2.2 and release notes for consistency

* feat: enhance DataverseConnection interface with optional fields for category and timestamps (#553)

* feat: Inter-Tool Launch Context v2 — capabilities, auto-close, FXS inherit, one-at-a-time, banner, noReturn + multi-connection prompt + capability registry (#552)

* feat: Inter-Tool Launch Context v2 (capabilities, auto-close, banner, FXS inherit, one-at-a-time)

* fix: remove duplicate doc content; replace O(n) activeCallees scan with O(1) reverse map

* feat: noReturn banner warning, multi-connection auto-prompt for invocation, FXS Send To scenario docs

* fix: remove unsafe type cast, add logWarn in catch block for connection prompt

* refactor: remove registerSendToAction, suppress banner when noReturn: true

* fix: update stale JSDoc for noReturn parameter

* refactor: drop calleeToCallerMap, remove calleeInstanceId from banner state

* fix: guard RETURN_INVOCATION_DATA fallback against non-pending active tool

* feat: capability tag registry — fixed list, Supabase config, validation, auto-complete types

* fix: add sync comments between capability lists, prevent Supabase retry spam on failure

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* docs: reorganize Table of Contents in INTER_TOOL_INVOCATION.md for improved navigation

* fix: open callee tool in its own tab during inter-tool invocation

When a tool (e.g. Data Migrator) calls invocation.launchTool() the IPC call
went directly to the main process, creating the callee BrowserView but never
notifying the renderer. This caused the callee to appear in the same tab as
the caller, and the invocation banner to be unreliable.

Changes:
- channels.ts: add CALLEE_TOOL_OPENED / CALLEE_TOOL_CLOSED IPC events
- toolWindowManager.ts: send CALLEE_TOOL_OPENED after successful callee
  launch; send CALLEE_TOOL_CLOSED after auto-close via resolveInvocation()
- preload.ts: expose onCalleeToolOpened / onCalleeToolClosed listeners
- api.ts: add the two new methods to ToolboxAPI interface
- toolManagement.ts: add initializeCalleeToolListeners() — creates a tab
  for the callee on CALLEE_TOOL_OPENED and removes it / switches back to
  the caller on CALLEE_TOOL_CLOSED
- initialization.ts: wire up initializeCalleeToolListeners()

* refactor: use Tool type instead of any casts in callee tab listener

* fix: move invocation banner into content-wrapper and update text labels

* fix: offset BrowserView bounds by banner height to prevent tool content overlap

* Initial plan

* feat: harden tool terminal execution

* feat: tighten terminal command allowlist

* refactor: finalize terminal safeguards

* fix: finalize secure terminal restrictions

* refactor: switch terminal security from allowlist to blocklist

* feat: add startShellProcess with shell selection and sentinel-based command execution

* fix: address code review — cmd flags, pwsh exit code capture, sentinel default, shell injection guard

* fix: log warning when sentinel exit code is malformed

* fix: pass raw command string to shell stdin so && and other operators work correctly

* fix(terminal): filter sentinel echo lines from stdout display

When PowerShell (and other shells) run in interactive mode with stdin
piped, they echo the commands written to stdin back to stdout. This
caused the internal sentinel command used for exit-code detection to
appear verbatim in the terminal UI.

Fix: buffer stdout by line while a command is executing and drop any
line that matches the per-shell-type sentinel echo pattern before
emitting output to the display. Remaining buffered data is flushed
(with the same filter applied) when the pending command is resolved
or fails.

* refactor(terminal): extract flushStdoutBuffer helper to remove duplication

* refactor(terminal): reorganize imports and improve logging for stdout processing

* fix(styles): adjust button alignment and layout in settings and tool item sections

* Initial plan

* feat: support beta/pre-release npm packages (#382)

* fix(version): update version to 1.2.3 in package.json

* fix(version): update version to 1.2.3-beta.0 in package.json

* Enhance terminal blocking

* Added capabilities to npm and locally loaded tools

* fix: version scope is sanitized from npm install

* moved out of beta into stable

* 1.2.3 Release Notes

* Update RELEASE_NOTES.md

* fixed the icon path and check status badge in readme

* fixed the issue with npm install

* fixed the uninstall issue for npm and local loaded tools

* Revert "Merge branch 'main' into dev"

This reverts commit 0adb1549748dfc7fd002e7624094a6c7fac7d2c2, reversing
changes made to 3c1c898a872added66d75c3eebecf1569731e669.

* Added common validate package for both types and web; incremented the versions as well

* issue fixed for double encryption (#574)

* Enable Power Platform API access (#575)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added enabled for pp api for all type and removed filtering; but added tag

* Added enabledForPPAPI to the connection

* renamed dataverse connection to connection and minor ui fixes

* types package updated

* fix the placement of PP-API types

* Added PP API scopes to Connection (#580)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added enabled for pp api for all type and removed filtering; but added tag

* Added enabledForPPAPI to the connection

* renamed dataverse connection to connection and minor ui fixes

* types package updated

* fix the placement of PP-API types

* Added scopes to the Connection for Power Platform API

* MCP-enabled agent assisted process (#581)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added agentInvokable to tool manifest plus schema converter helper function

* mcp server with auth created and connection tested

* wip: agent tool registry

* fix: name passed to the mcp client

* wired up the agent call with launch invocation

* working mcp sync

* some styling fixes

* Reformat the language on the connection selection modals

* update the pptb config and associated plumbing plus some minor fixes

* types and some minor edits

* doc updates, comment updates and minor tweaks

* enabled tray menu for MCP and moved all dispersed items into one tab called MCP Server with MCP icon

* Add MCP Headless for fully unattended flow (#582)

* incomplete - wip

* Updated package definition and readme; expose to mainworld using toolPreloadBridge

* upgraded the version to 1.2.4 for both app and packages

* ignore Kilo AI files

* wip on pp-api-access

* working pp api code

* removed debug code

* Added agentInvokable to tool manifest plus schema converter helper function

* mcp server with auth created and connection tested

* wip: agent tool registry

* fix: name passed to the mcp client

* wired up the agent call with launch invocation

* working mcp sync

* some styling fixes

* Reformat the language on the connection selection modals

* update the pptb config and associated plumbing plus some minor fixes

* types and some minor edits

* doc updates, comment updates and minor tweaks

* enabled tray menu for MCP and moved all dispersed items into one tab called MCP Server with MCP icon

* init headless mcp - cli

* headless invocation wiring

* Headless CLI invoked and response provided

* add buttons to quickly setup mcp for Claude Desktop and VSCode

* Enhanced Terminal Hardening Rules plus added Test Suites (#583)

* feat: add Jest unit tests and Playwright e2e test suite

- Install jest, ts-jest, @types/jest, ts-node, @playwright/test
- Add jest.config.ts, playwright.config.ts, tsconfig.test.json
- Add manual mocks for electron and electron-store
- Add unit tests: SettingsManager (29 tests), InstallIdManager (5 tests),
  EncryptionManager (11 tests), ConnectionsManager (20 tests),
  cspUtils (4 tests), toolSourceIcon (6 tests) — 76 total
- Add e2e fixtures, app.spec.ts and navigation.spec.ts
- Add GitHub Actions test.yml workflow (runs on PRs to dev and main)
- Add test/test:unit/test:unit:watch/test:unit:coverage/test:e2e/test:e2e:ui scripts

* fix(tests): use inline test.skip condition in navigation e2e tests

* docs: standardize E2E test terminology and improve README formatting

* docs: standardize E2E test terminology in test workflow

* fix(e2e): wait for index.html URL before asserting on window state

* fix(ci): explicitly install Electron binary in e2e workflow

* more hardening terminal commands

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* feat: Add notification history panel with bell icon in footer (#585)

* Initial plan

* feat: add notification history bell button in footer (#364)

* Add Playwright e2e tests for notification history bell button

* Fix: remove force:true from outside-click test, use activity-bar as click target

* fix: notification panel hidden attribute overridden by CSS flex display

* fix: move initNotificationHistoryPanel early and shrink BrowserView when panel is open

* refactor: extract named constants for notification panel margin and min tool width

* refactor: use BrowserWindow with alwaysOnTop for notification history, merge into notifications.ts

* fix: extract named constants and clarify IPC args indexing in notification history manager

* fix the alignment issue

* Added proper copy and clear all functions

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>

* Removed the incorrect filter and updated the wording on connection selection modal for PP API (#586)

* Removed the incorrect filter and updated the wording for PP API

* fix the test script

* [Feature] side by side toolview (#588)

* implemented correct split functionality

* added test cases plus update the PR template

* added ElicitRequest to MCP

* [Feature] Add preview feature flagging, gate MCP Server behind it, move MCP icon to activity bar footer (#589)

* Add preview feature flagging and move MCP button to activity bar footer

* Rename mcpBtn to mcpButton for consistency

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* Added MCP to preview feature and added preview feature enablement in settings

* Implement headless mode support for tools, adding globals for toolboxAPI, dataverseAPI, and powerplatformAPI in Node.js environment. Update MCP server to handle headless invocations with connection management and logging. Enhance type definitions for headless API access and ensure compatibility with existing tools.

* fix: remove unused getPowerPlatformManager variable in headlessToolRuntime.ts

* feat: implement preview feature management and settings integration

* refactor: remove Power Platform API preview feature references from connection modals and management

* feat: add consent confirmation for Power Platform API access in connection modals

* Resolving bug [Bug]: Uninstall local debugged tool deletes local folder
Fixes #578

* Initial plan

* fix: color success and error modal feedback correctly

* fix: show modal success messages in green

* fix: hide/show Power Platform API based on auth type in connection modals

* #591, #561 fix: update Dataverse hostname pattern to include new regions and improve URL validation

* feat: implement app registration configuration and update connection modals

* feat: add start and stop functionality for MCP server and based on that status app either quits or runs in background

* fix: update PR checklist & bundle-size to handle forked PRs errors

* fix: resolving issue with second instance invocation creating two instances of the app

* feat: add 'Copy Script & Add/Save' functionality and update connection modals for app registration

* chore: update MCP Server label and description for clarity on agentic AI capabilities

* feat: add MCP headless to related UI elements

* fix: add validation for app-update.yml existence and enhance auto-update error handling

* fix: update PR title validation to include 'Release' type

* fix: correct PR title validation message to include proper formatting for types

* release v1.2.4 prep

* Initial plan

* fix: make notification panel and toast respect the selected app theme

Both NotificationWindowManager and NotificationHistoryWindowManager now
accept a SettingsManager instance and expose a private isDarkTheme()
helper that reads the user's theme setting via resolveTheme().

generateHTML() (toast popup) and generateHistoryHTML() (bell panel) now
produce light or dark colour schemes based on the resolved theme instead
of being hard-coded to the dark palette, fixing the bug where the
notification UI always rendered dark even when the app was set to light
theme.

* fix: enhance preflight check comments and handling for PRs

* some improvements to the workflows and updating the release notes

* fix: update .gitignore to include test-results directory and remove obsolete .last-run.json file

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: reorder comments for clarity in connection button handling

* fix: update paths for types package version validation in workflows

* fix: move app-update.yml validation to the correct job in release workflows

* fix: add step to generate app-update.yml metadata for Windows in release workflows

* [Fix] Bundle app-update.yml into Windows installers so auto-update works (#611)

* Initial plan

* Generate app-update.yml before packaging Windows installers

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* Fixed the issue when Supabase creds are missing; ensureing mock data loads

* chore: bump version to 1.2.5 in package.json

* [Feature] Re-trigger CSP consent when tool adds new permissions since last approval (#613)

* Initial plan

* feat: re-trigger CSP consent when tool adds new permissions since last approval

- Add `seenOptional` field to `CspConsentRecord` to track all optional
  domains presented at consent time (approved or declined). This enables
  accurate detection of truly new optional permissions versus domains the
  user previously saw and chose not to approve.
- Update `grantCspConsent` in `settingsManager.ts` to accept and persist
  `seenOptionalDomains` as 4th parameter.
- Propagate the new parameter through the IPC handler in `index.ts` and
  the renderer-facing preload in `preload.ts`.
- Add `CspReconsentContext` interface to `view.ts` (also re-exported from
  `cspExceptionModal.ts`). When supplied, the CSP modal renders in
  re-consent mode: new required/optional permissions appear under
  "New Required" / "New Optional" sections (with checkboxes), while
  previously approved domains are shown as an informational read-only
  "Previously Approved" section with reduced opacity.
- Update `openCspExceptionModal` to accept an optional `CspReconsentContext`
  and pass it through to the view builder.
- In `toolManagement.ts`, after confirming an existing consent record exists
  for a tool, compute the current required and optional domains and compare
  against `required` and `seenOptional` in the stored record. If any new
  domains are found, open the re-consent modal. On accept, the consent
  record is updated by merging new domains into the existing sets. On
  decline, the old consent record is left unchanged and the tool launch is
  cancelled with a notification.
- Add 3 unit tests for the new `seenOptional` behaviour in
  `settingsManager.test.ts`.

* fix: add seenOptionalDomains param to grantCspConsent type in api.ts

* feat: enhance modal layout and styling for CSP exception view

* feat(csp): implement CSP consent management and review functionality

- Add utility functions for normalizing CSP domains and calculating consent deltas.
- Create a sidebar and tab interface for reviewing and managing CSP consent for marketplace-installed tools.
- Introduce new SVG icons for consent management UI.
- Implement unit tests for CSP consent utilities to ensure correct behavior.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Power-Maverick <danish.naglekar@hotmail.com>

* [Feature] Enable Private Marketplace (#616)

* feat: add support for multiple marketplace sources and enhance settings management

* feat: enhance private marketplace settings UI with improved layout and styling

* feat: enhance marketplace source normalization to allow empty URL for built-in source

* feat: add authors field to private marketplace tool entries for improved UI display

* [Feature] Private marketplace: Restart app modal (#618)

* feat: add support for multiple marketplace sources and enhance settings management

* feat: enhance private marketplace settings UI with improved layout and styling

* feat: enhance marketplace source normalization to allow empty URL for built-in source

* feat: add authors field to private marketplace tool entries for improved UI display

* feat: add private marketplace support with UI filters and app restart functionality

* feat: update restart notification message for marketplace source changes

* [Feature] Implement Sentry telemetry for Electron main and renderer with PII scrubbing (#622)

* feat: implement Sentry for Electron main and renderer with PII scrubbing

- Add @sentry/electron@7.16.0 dependency
- Create src/common/sentry.ts with getSentryConfig(), PII scrubbing
  utilities (scrubPii, scrubPiiFromObject, scrubSentryEvent) covering
  emails, auth tokens, GUIDs, Dynamics URLs, and IPv4 addresses
- Create src/common/sentryHelper.ts with structured log functions
  (logTrace, logDebug, logInfo, logWarn, logError, logFatal,
  logCheckpoint), addBreadcrumb, captureException, captureMessage,
  setSentryMachineId, wrapAsyncOperation, and initializeSentryHelper
- Update src/common/logger.ts to route through sentryHelper
- Add SENTRY_DSN build-time injection to vite.config.ts
- Initialize Sentry at module top in src/main/index.ts using
  @sentry/electron/main with nodeContextIntegration,
  localVariablesIntegration and beforeSend PII hook; set install ID
  as Sentry machine ID after app.whenReady()
- Initialize Sentry at module top in src/renderer/modules/initialization.ts
  using @sentry/electron/renderer with browserTracingIntegration and
  beforeSend PII hook; tag each event with process = 'renderer'

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: enhance PII scrubbing with additional patterns for file paths and tokens

* Implement Sentry consent flow

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Prepare validation environment

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Finish telemetry consent validation

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: update Sentry consent modal text for clarity and improve user understanding

* Prevent late main Sentry init on consent update

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Update telemetry consent modal messaging

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* Clarify restart scope in telemetry consent modal

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: update Sentry consent modal styling and content for improved clarity

* fix: implement function to dismiss Sentry telemetry consent modal if present in e2e tests

* feat: add Sentry Electron integration and update OpenTelemetry dependencies

---------

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>

* [Fix] Capture download and MAU analytics errors in Sentry (#623)

* Initial plan

* fix: capture analytics tracking errors in Sentry via captureException

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: use update/insert instead of upsert to prevent overwriting downloads and MAU columns

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* refactor: replace read-modify-write analytics with atomic Supabase RPCs

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* fix: properly convert Supabase RPC errors to Error instances for legible logging

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] Update telemetry consent messaging for clarity and adjust modal height

* [Fix] Add repository links in installed tool details and context menu (#626)

* feat: add repository links for installed tool details and menu

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: add repository links in installed tool details and menu

Co-authored-by: Power-Maverick <36135520+Power-Maverick@users.noreply.github.com>

* feat: implement rating formatting utility and update tool analytics display

* fix: update consent modal test to check for correct error information

---------

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>

* [Fix] Update connection modal to include 'Configure App' button and adjust related functionality (#628)

* [Feature] MCP tools headless execution (#629)

* [Feature] Add option to keep MCP server running on tool open/reopen

* feat(mcp): enhance headless job management and logging

- Introduced HeadlessJobLogEntry and HeadlessJobDetails interfaces for better job logging.
- Added MCP_HEADLESS_JOB_UPDATED event to notify job status changes.
- Implemented clearLogs functionality in both AgentInvocationAPI and McpServerAPI.
- Enhanced ToolBoxApp to handle job status updates and clear logs.
- Updated HeadlessToolInvocationManager to manage job logs and notify changes.
- Improved agentInvocationLogger to read from multiple log files.
- Added UI components for displaying job invocation details and clearing logs.
- Implemented tests for McpServerManager's headless auth resolution.

* feat(mcp): add client configuration status retrieval and enhance job management

* fix: remove unnecessary line breaks in log rendering and test files

* refactor: remove MCP preview UI checks and simplify related logic

* feat(mcp): refactor client config path retrieval into a separate function

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* [Fix] Update 'Copy Script' messaging in Configure App notes for clarity

* [Fix] Preserve error stack in logError when passed an Error object (#631)

* 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>

* [Fix] Open Consent Review directly in full view (#633)

* 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>

* [Fix] issue with selecting Environment URL after enabling Power Platform 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>

* [Fix] Bump package versions for @pptb/types to 1.2.5 and @pptb/validate to 1.0.1

* Release note updated and fixed some issues with the agents

* Fix header formatting in release notes for consistency

* [Fix] Enhance Sentry environment detection and add unit tests for getSentryEnvironment

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Oliver Flint <oliverflint@gmail.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: darkwheel <christoph@raidl.de>
Co-authored-by: LinkeD365 <carl.cookson@gmail.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: LinkeD365 <43988771+LinkeD365@users.noreply.github.com>
Co-authored-by: darkwheel <37546897+darkwheel@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Matt Berg <25282996+MattBerg11@users.noreply.github.com>
Co-authored-by: Lars Hildebrandt <lars.hildebrandt@tuleva.de>
@martintoelk

Copy link
Copy Markdown
Author

Closing this PR at the contributor's request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants