Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## 0.10.21 (Preview)

### Changed
- **Switched NuGet feed from dotnet-eng to dotnet-tools** — the AITools.BinlogMcp package is now published on the `dotnet-tools` feed. All install, update, and version resolution commands updated automatically.

## 0.10.20 (Preview)

### Fixed
Expand All @@ -8,7 +13,7 @@
## 0.10.19 (Preview)

### Changed
- **Switched MCP server to AITools.BinlogMcp** — the extension now uses [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/AITools.BinlogMcp) from the dotnet-eng feed instead of BinlogInsights.Mcp from nuget.org. The new package is auto-installed on first use. Existing BinlogInsights.Mcp installations are automatically migrated — the extension installs the new tool and prompts to uninstall the old one.
- **Switched MCP server to AITools.BinlogMcp** — the extension now uses [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/AITools.BinlogMcp) from the dotnet-tools feed instead of BinlogInsights.Mcp from nuget.org. The new package is auto-installed on first use. Existing BinlogInsights.Mcp installations are automatically migrated — the extension installs the new tool and prompts to uninstall the old one.
- **Consistent project count** — the overview and tree view now show the same deduplicated project count instead of the raw evaluation count
- **Search with text format** — search results from the new MCP's text format are parsed correctly for the tree view

Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Analyze MSBuild binary logs (`.binlog`) with **GitHub Copilot Chat** and **MCP t
@binlog /perf
```

The [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/AITools.BinlogMcp) server (28 analysis tools) is auto-installed on first use.
The [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/AITools.BinlogMcp) server (28 analysis tools) is auto-installed on first use.

## What You Get

Expand Down Expand Up @@ -52,12 +52,12 @@ The [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotn

## Troubleshooting: MCP Server Installation

The extension auto-installs [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/AITools.BinlogMcp) via `dotnet tool install -g`. In corporate environments with restricted NuGet feeds, this may fail. Here are the workarounds:
The extension auto-installs [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/AITools.BinlogMcp) via `dotnet tool install -g`. In corporate environments with restricted NuGet feeds, this may fail. Here are the workarounds:

### 1. Install with explicit feed source

```bash
dotnet tool install -g AITools.BinlogMcp --prerelease --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json
dotnet tool install -g AITools.BinlogMcp --prerelease --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json
```

### 2. Diagnose NuGet issues
Expand All @@ -67,9 +67,9 @@ dotnet nuget list source
```

Common problems:
- **dotnet-eng feed not configured** — the tool is published on the dotnet-eng Azure DevOps feed
- **dotnet-tools feed not configured** — the tool is published on the dotnet-tools Azure DevOps feed
- **Authenticated feed requires credentials** — may block access to the feed
- **Package source mapping** excludes the dotnet-eng feed for this package
- **Package source mapping** excludes the dotnet-tools feed for this package

### 3. Verify installation

Expand All @@ -81,7 +81,7 @@ binlog-mcp --help
## Related Projects

- [MSBuild Structured Log Viewer](https://github.com/KirillOsenkov/MSBuildStructuredLog) — WPF viewer with secrets redaction
- [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/AITools.BinlogMcp) — MCP server for binlog analysis
- [AITools.BinlogMcp](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-tools/NuGet/AITools.BinlogMcp) — MCP server for binlog analysis
- [MSBuild Binary Log docs](https://learn.microsoft.com/en-us/visualstudio/msbuild/obtaining-build-logs-with-msbuild#save-a-binary-log)

## License
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "binlog-analyzer",
"displayName": "MSBuild Binlog Analyzer",
"description": "Analyze MSBuild binary logs with Copilot Chat and MCP tools",
"version": "0.10.20",
"version": "0.10.21",
"preview": true,
"publisher": "dotutils",
"license": "MIT",
Expand Down
18 changes: 9 additions & 9 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ let extensionContext: vscode.ExtensionContext | undefined;
let openedViaUri = false;
let optimizeInProgress = false;
let cachedMcpExePath: string | null | undefined; // undefined = not searched yet
const DOTNET_ENG_FEED = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json';
const DOTNET_TOOLS_FEED = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json';
let codeLensRegistered = false;

function escapeHtml(s: string): string {
Expand Down Expand Up @@ -2137,11 +2137,11 @@ async function configureMcpServer(binlogPaths: string[], config: vscode.Workspac
...(workspaceCwd && { cwd: workspaceCwd }),
};
vscode.window.showWarningMessage(
'Could not find or install AITools.BinlogMcp. Install it manually: `dotnet tool install -g AITools.BinlogMcp --prerelease --add-source ' + DOTNET_ENG_FEED + '`',
'Could not find or install AITools.BinlogMcp. Install it manually: `dotnet tool install -g AITools.BinlogMcp --prerelease --add-source ' + DOTNET_TOOLS_FEED + '`',
'Copy Command'
).then(sel => {
if (sel === 'Copy Command') {
vscode.env.clipboard.writeText('dotnet tool install -g AITools.BinlogMcp --prerelease --add-source ' + DOTNET_ENG_FEED);
vscode.env.clipboard.writeText('dotnet tool install -g AITools.BinlogMcp --prerelease --add-source ' + DOTNET_TOOLS_FEED);
}
});
}
Expand Down Expand Up @@ -2312,9 +2312,9 @@ async function getLatestNuGetVersion(): Promise<string | null> {
const cp = require('child_process');

return new Promise<string | null>((resolve) => {
// Search the dotnet-eng feed for the package (includes prereleases)
// Search the dotnet-tools feed for the package (includes prereleases)
cp.execFile('dotnet', ['package', 'search', NUGET_PACKAGE_ID, '--exact-match', '--format', 'json', '--prerelease',
'--source', DOTNET_ENG_FEED],
'--source', DOTNET_TOOLS_FEED],
{ timeout: 30000, encoding: 'utf8' },
(error: any, stdout: string) => {
if (error) {
Expand Down Expand Up @@ -2363,7 +2363,7 @@ async function updateMcpServer() {
const result = await vscode.window.withProgress(
{ location: vscode.ProgressLocation.Notification, title: 'Updating AITools.BinlogMcp MCP server...' },
() => new Promise<{ success: boolean; output: string }>((resolve) => {
cp.execFile('dotnet', ['tool', 'update', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_ENG_FEED], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => {
cp.execFile('dotnet', ['tool', 'update', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => {
resolve({ success: !err, output: (stderr || stdout || '').toString() });
});
})
Expand Down Expand Up @@ -2403,7 +2403,7 @@ async function applyPendingToolUpdate(): Promise<void> {
const result = await vscode.window.withProgress(
{ location: vscode.ProgressLocation.Notification, title: 'Updating AITools.BinlogMcp MCP server...' },
() => new Promise<{ success: boolean; output: string }>((resolve) => {
cp.execFile('dotnet', ['tool', 'update', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_ENG_FEED], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => {
cp.execFile('dotnet', ['tool', 'update', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, (err: Error | null, stdout: string, stderr: string) => {
resolve({ success: !err, output: (stderr || stdout || '').toString() });
});
})
Expand Down Expand Up @@ -2495,9 +2495,9 @@ async function installMcpTool(): Promise<string | null> {
const result = await vscode.window.withProgress(
{ location: vscode.ProgressLocation.Notification, title: 'Installing AITools.BinlogMcp MCP server (dotnet tool)...' },
() => new Promise<string | null>((resolve) => {
cp.execFile('dotnet', ['tool', 'install', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_ENG_FEED], { timeout: 60000 }, (err: Error | null) => {
cp.execFile('dotnet', ['tool', 'install', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, (err: Error | null) => {
if (err) {
cp.execFile('dotnet', ['tool', 'update', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_ENG_FEED], { timeout: 60000 }, () => {
cp.execFile('dotnet', ['tool', 'update', '-g', 'AITools.BinlogMcp', '--prerelease', '--add-source', DOTNET_TOOLS_FEED], { timeout: 60000 }, () => {
const exe = findMcpTool();
telemetry.trackToolInstall(!!exe);
resolve(exe);
Expand Down
Loading