Add a Links Hub and Multi-agent Orchestration#470
Conversation
… human approval gate
…idebar with descriptions and icons
Bundle Size Report 📦
Bundle Analysis ReportsThe detailed bundle analysis reports are available in the workflow artifacts:
Download the artifacts from the workflow run to view interactive visualizations. Bundle size tracking is now active! This helps prevent bundle bloat. |
There was a problem hiding this comment.
Pull request overview
Adds a new “Links” hub to the Electron renderer sidebar to provide a curated set of external Power Platform resources, plus supporting IPC/preload plumbing for favicon fetching and some repo workflow/docs additions.
Changes:
- Adds a new Activity Bar entry + sidebar panel that renders grouped links from a JSON collection.
- Introduces a main-process favicon fetch proxy exposed via preload (
toolboxAPI.fetchFavicon) to work around renderer CSP for external images. - Adds new bookmark icons and a set of planning/agent-profile docs under
.github/.
Reviewed changes
Copilot reviewed 24 out of 26 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/renderer/index.html | Adds Activity Bar “links” button and new Links sidebar content container. |
| src/renderer/styles.scss | Adds styling for the Links hub list/group presentation. |
| src/renderer/modules/sidebarManagement.ts | Wires rendering on switching to (or re-expanding) the Links sidebar. |
| src/renderer/modules/importantLinksSidebarManagement.ts | New renderer module to render groups/items from JSON, enforce allowlist, and request favicons. |
| src/renderer/data/importantLinks.json | New curated link collection (groups + items). |
| src/renderer/constants/index.ts | Registers the new activity icon for theme switching. |
| src/renderer/icons/light/bookmark.svg | Adds new light theme bookmark icon. |
| src/renderer/icons/dark/bookmark.svg | Adds new dark theme bookmark icon. |
| src/common/ipc/channels.ts | Adds UTIL_CHANNELS.FETCH_FAVICON. |
| src/common/types/api.ts | Extends ToolboxAPI with fetchFavicon. |
| src/main/preload.ts | Exposes toolboxAPI.fetchFavicon to the renderer. |
| src/main/index.ts | Implements IPC handler for FETCH_FAVICON and hardens OPEN_EXTERNAL URL validation. |
| .vscode/tasks.json | Switches build task to pnpm and adds lint/typecheck tasks. |
| .github/plans/, .github/agents/ | Adds mesh-agent workflow docs and plan artifacts. |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Bundle Size Report 📦
Bundle Analysis ReportsThe detailed bundle analysis reports are available in the workflow artifacts:
Download the artifacts from the workflow run to view interactive visualizations. Bundle size tracking is now active! This helps prevent bundle bloat. |
|
@Power-Maverick I've opened a new pull request, #471, to work on those changes. Once the pull request is ready, I'll request review from you. |
|
@copilot open a new pull request to apply changes based on the unresolved comments in this thread except for this comment |
|
@Power-Maverick I've opened a new pull request, #472, to work on those changes. Once the pull request is ready, I'll request review from you. |
* 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>
Bundle Size Report 📦
Bundle Analysis ReportsThe detailed bundle analysis reports are available in the workflow artifacts:
Download the artifacts from the workflow run to view interactive visualizations. Bundle size tracking is now active! This helps prevent bundle bloat. |
* 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>
Bundle Size Report 📦
Bundle Analysis ReportsThe detailed bundle analysis reports are available in the workflow artifacts:
Download the artifacts from the workflow run to view interactive visualizations. Bundle size tracking is now active! This helps prevent bundle bloat. |
| return new Promise<string | null>((resolve) => { | ||
| const req = https.get(parsedUrl.toString(), { timeout: 5000 }, (res) => { | ||
| const status = res.statusCode ?? 0; | ||
| const contentType = res.headers["content-type"] ?? "image/png"; |
There was a problem hiding this comment.
In the favicon proxy handler, res.headers["content-type"] can be string | string[] | undefined (Node’s IncomingHttpHeaders). The current code assumes it’s always a string and later calls .split(";"), which will throw if it’s an array. Normalize it to a single string before use (e.g., take the first element when it’s an array) to avoid handler crashes.
| const contentType = res.headers["content-type"] ?? "image/png"; | |
| const rawContentType = res.headers["content-type"]; | |
| const contentType = Array.isArray(rawContentType) ? rawContentType[0] ?? "image/png" : rawContentType ?? "image/png"; |
| github.vscode-pull-request-github/doSearch, | ||
| github.vscode-pull-request-github/renderIssues, | ||
| github.vscode-pull-request-github/activePullRequest, | ||
| github.vscode-pull-request-github/openPullRequest, |
There was a problem hiding this comment.
The agent profile front matter uses a flow-style tools: sequence with a trailing comma after the last element. Trailing commas are not valid in standard YAML flow sequences and may cause the agent profile to fail parsing/loading. Please remove the trailing comma (or switch to a block-style YAML list) and keep the format consistent across all .agent.md files.
| github.vscode-pull-request-github/openPullRequest, | |
| github.vscode-pull-request-github/openPullRequest |
| const LINK_ICON_COLOR_CLASSES = ["link-icon-color-purple", "link-icon-color-blue", "link-icon-color-teal", "link-icon-color-green", "link-icon-color-orange"] as const; | ||
|
|
||
| function getFaviconApiUrl(url: string): string { | ||
| return `https://www.google.com/s2/favicons?domain=${url}&sz=64`; |
There was a problem hiding this comment.
getFaviconApiUrl() interpolates the URL directly into a query string without URL-encoding. If any curated link ever includes ?, &, #, or other reserved characters, the generated favicon request URL becomes malformed (or can change the request parameters). Encode the value (e.g., encodeURIComponent) when building the favicon API URL.
| return `https://www.google.com/s2/favicons?domain=${url}&sz=64`; | |
| const encodedDomain = encodeURIComponent(url); | |
| return `https://www.google.com/s2/favicons?domain=${encodedDomain}&sz=64`; |
Please fill in this template.