Updates version to v4.0.0 - #1875
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
The DevTools v4 schema is invalid and incomplete, and the stdio mock default still references v2.1.0.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Updates Dev Proxy to v4.0.0 with new versioned configuration schemas and updated references.
Changes:
- Bumps project, installer, Docker, and script versions.
- Adds the
schemas/v4.0.0schema set. - Updates configuration examples and schema URLs.
File summaries
| File | Summary |
|---|---|
scripts/version.ps1 |
Updates beta version. |
scripts/local-setup.ps1 |
Updates local setup version. |
scripts/Dockerfile_local |
Updates local Docker version. |
schemas/v4.0.0/typespecgeneratorplugin.schema.json |
Adds v4.0.0 TypeSpec schema. |
schemas/v4.0.0/rewriteplugin.schema.json |
Adds v4.0.0 Rewrite schema. |
schemas/v4.0.0/rewriteplugin.rewritesfile.schema.json |
Adds v4.0.0 rewrite-rules schema. |
schemas/v4.0.0/rc.schema.json |
Adds v4.0.0 root configuration schema. |
schemas/v4.0.0/ratelimitingplugin.schema.json |
Adds v4.0.0 rate-limiting schema. |
schemas/v4.0.0/ratelimitingplugin.customresponsefile.schema.json |
Adds v4.0.0 rate-limit response schema. |
schemas/v4.0.0/openapispecgeneratorplugin.schema.json |
Adds v4.0.0 OpenAPI generator schema. |
schemas/v4.0.0/openaitelemetryplugin.schema.json |
Adds v4.0.0 OpenTelemetry schema. |
schemas/v4.0.0/openaitelemetryplugin.pricesfile.schema.json |
Adds v4.0.0 pricing schema. |
schemas/v4.0.0/mockstdioresponseplugin.schema.json |
Adds v4.0.0 stdio mock schema. |
schemas/v4.0.0/mockstdioresponseplugin.mocksfile.schema.json |
Adds v4.0.0 stdio mocks schema. |
schemas/v4.0.0/mockresponseplugin.schema.json |
Adds v4.0.0 response mock schema. |
schemas/v4.0.0/mockresponseplugin.mocksfile.schema.json |
Adds v4.0.0 response mocks schema. |
schemas/v4.0.0/mockrequestplugin.schema.json |
Adds v4.0.0 request mock schema. |
schemas/v4.0.0/mockrequestplugin.mockfile.schema.json |
Adds v4.0.0 request mock-file schema. |
schemas/v4.0.0/minimalpermissionsplugin.schema.json |
Adds v4.0.0 minimal permissions schema. |
schemas/v4.0.0/minimalpermissionsguidanceplugin.schema.json |
Adds v4.0.0 permissions guidance schema. |
schemas/v4.0.0/minimalcsompermissionsplugin.schema.json |
Adds v4.0.0 CSOM permissions schema. |
schemas/v4.0.0/minimalcsompermissions.types.schema.json |
Adds v4.0.0 CSOM types schema. |
schemas/v4.0.0/latencyplugin.schema.json |
Adds v4.0.0 latency schema. |
schemas/v4.0.0/languagemodelratelimitingplugin.schema.json |
Adds v4.0.0 language-model rate-limit schema. |
schemas/v4.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json |
Adds v4.0.0 token-limit response schema. |
schemas/v4.0.0/languagemodelfailureplugin.schema.json |
Adds v4.0.0 language-model failure schema. |
schemas/v4.0.0/httpfilegeneratorplugin.schema.json |
Adds v4.0.0 HTTP file generator schema. |
schemas/v4.0.0/hargeneratorplugin.schema.json |
Adds v4.0.0 HAR generator schema. |
schemas/v4.0.0/graphrandomerrorplugin.schema.json |
Adds v4.0.0 Graph error schema. |
schemas/v4.0.0/graphminimalpermissionsplugin.schema.json |
Adds v4.0.0 Graph permissions schema. |
schemas/v4.0.0/graphminimalpermissionsguidanceplugin.schema.json |
Adds v4.0.0 Graph guidance schema. |
schemas/v4.0.0/genericrandomerrorplugin.schema.json |
Adds v4.0.0 generic error schema. |
schemas/v4.0.0/genericrandomerrorplugin.errorsfile.schema.json |
Adds v4.0.0 generic errors-file schema. |
schemas/v4.0.0/executionsummaryplugin.schema.json |
Adds v4.0.0 execution summary schema. |
schemas/v4.0.0/devtoolsplugin.schema.json |
Adds the DevTools schema; critical (3 votes): invalid JSON due to a missing comma; moderate (2 votes): omits preferredBrowserPath. |
schemas/v4.0.0/crudapiplugin.schema.json |
Adds v4.0.0 CRUD plugin schema. |
schemas/v4.0.0/crudapiplugin.apifile.schema.json |
Adds v4.0.0 CRUD API definition schema. |
schemas/v4.0.0/cachingguidanceplugin.schema.json |
Adds v4.0.0 caching guidance schema. |
schemas/v4.0.0/authplugin.schema.json |
Adds v4.0.0 authentication schema. |
schemas/v4.0.0/apicenterproductionversionplugin.schema.json |
Adds v4.0.0 API Center production-version schema. |
schemas/v4.0.0/apicenteronboardingplugin.schema.json |
Adds v4.0.0 API Center onboarding schema. |
schemas/v4.0.0/apicenterminimalpermissionsplugin.schema.json |
Adds v4.0.0 API Center permissions schema. |
install.iss |
Updates stable installer version. |
install-beta.iss |
Updates beta installer version. |
Dockerfile_beta |
Updates beta Docker version. |
Dockerfile |
Updates stable Docker version. |
DevProxy/devproxyrc.yaml |
Updates YAML schema references. |
DevProxy/devproxyrc.json |
Updates JSON schema references. |
DevProxy/DevProxy.csproj |
Bumps application version. |
DevProxy/devproxy-errors.yaml |
Updates YAML schema reference. |
DevProxy/devproxy-errors.json |
Updates JSON schema reference. |
DevProxy/config/spo-csom-types.json |
Updates CSOM schema reference. |
DevProxy/config/microsoft-graph.json |
Updates Graph schema references. |
DevProxy/config/microsoft-graph-rate-limiting.json |
Updates root schema reference. |
DevProxy/config/m365.json |
Updates M365 schema references. |
DevProxy/config/m365-mocks.json |
Updates mocks schema reference. |
DevProxy/config-templates/devproxyrc.yaml |
Updates template schema reference. |
DevProxy/config-templates/devproxyrc.json |
Updates template schema reference. |
DevProxy.Plugins/Mocking/MockResponsePlugin.cs |
Updates the response-mock schema URL; moderate (1 vote): the sibling stdio-mock default still references the v2.1.0 schema. |
DevProxy.Plugins/DevProxy.Plugins.csproj |
Bumps plugin version. |
DevProxy.Abstractions/DevProxy.Abstractions.csproj |
Bumps abstractions version. |
Review details
- Files reviewed: 16/16 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved findings affect Edge Beta startup and IPv4/IPv6 configuration behavior.
Get a fresh assessment by requesting another Copilot review.
Review details
Suppressed comments (1)
schemas/v4.0.0/rc.schema.json:44
- The removed IPv4 constraint also admits IPv6 addresses, but API URLs are still built by interpolating the address in
ApiCommand.PrintApiInfoandConsoleHotkeyHandler.PrintApiInstructions, producing values such ashttp://::1:8897instead of bracketed IPv6 URLs. An IPv6 address that now passes this schema therefore breaksapi showand the documented hotkey curl commands; make these URL constructions IPv6-aware before accepting IPv6 here.
"ipAddress": {
"type": "string",
"description": "IP address for Dev Proxy to listen on."
- Files reviewed: 17/17 changed files
- Comments generated: 2
- Review effort level: Lite
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
IPv6 system-proxy formatting remains unresolved, and documentation still references v3.0.0 schemas.
Review details
Suppressed comments (2)
DevProxy/config-templates/devproxyrc.json:2
- This version bump leaves the repository's Dev Proxy skill documentation examples pinned to
v3.0.0(for example,skills/dev-proxy/references/configuration.md:13,31andskills/dev-proxy/references/mock-api-responses.md:23,34,49). Those examples are user-facing and the same documentation requires the schema version to match the installed version, so after installing 4.0.0 they still point to stale schemas and omit the v4 changes. Update the embedded schema URLs as part of this bump.
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
schemas/v4.0.0/rc.schema.json:50
- This newly permits IPv6 bind addresses, but the default
asSystemProxypath still formats the WindowsProxyServervalue withSystemProxyAddress.ToHostPort, which returns::1:portwithout IPv6 brackets. That value is ambiguous/malformed as a host-port endpoint, so IPv6 configurations can start Kestrel but fail to register a usable Windows system proxy. Format IPv6 hosts as[address]:port(and add coverage) or keep IPv6 out of the schema until system-proxy registration handles it.
"format": "ipv4"
},
{
"format": "ipv6"
}
- Files reviewed: 22/22 changed files
- Comments generated: 0 new
- Review effort level: Lite
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Unresolved IPv6 wildcard URL/system-proxy normalization and stale v3 installation references remain.
Review details
Suppressed comments (6)
DevProxy.Abstractions/Proxy/SystemProxyAddress.cs:49
- The v4 config schema now accepts any valid IPv6 spelling, but
ResolveHoststill recognizes only the literal"::"as the IPv6 wildcard. A valid value such as::0or0:0:0:0:0:0:0:0therefore bindsIPv6Anywhile the system-proxy registration uses that non-dialable address, so enabling the system proxy breaks clients; normalize parsedIPAddress.IPv6Any(andIPAddress.Any) instead of comparing string literals.
if (IPAddress.TryParse(host, out var address) && address.AddressFamily == AddressFamily.InterNetworkV6)
{
host = $"[{host}]";
DevProxy/Commands/ApiCommand.cs:46
api showalso reports a client-facing URL, but it preserves the valid wildcard bind::and produceshttp://[::]:<port>, which cannot be used to call the API. Use the same wildcard-to-client-host normalization as the other API URL paths.
var baseUrl = new UriBuilder(Uri.UriSchemeHttp, ipAddress, apiPort).Uri.GetLeftPart(UriPartial.Authority);
DevProxy/Commands/DevProxyCommand.cs:246
- The command help is another client-facing endpoint and now formats
::ashttp://[::]:<port>/swagger. Because::is an unspecified bind address rather than a destination, the advertised OpenAPI URL is unusable for this valid v4 configuration; normalize the host before constructing it.
ILogger<DevProxyCommand> logger) : base($"Start Dev Proxy\n\nAPI:\n Dev Proxy exposes a REST API for runtime management.\n OpenAPI spec: {new UriBuilder(Uri.UriSchemeHttp, proxyConfiguration.IPAddress ?? "127.0.0.1", proxyConfiguration.ApiPort).Uri.GetLeftPart(UriPartial.Authority)}/swagger\n Use --api-port to configure (default: {proxyConfiguration.ApiPort}).\n Run 'devproxy api show' for more information.")
DevProxy/Commands/DevProxyCommand.cs:317
- If the API address feature is unavailable, this fallback persists/logs a URL built from the raw bind address. With the newly supported
ipAddress: "::", that becomeshttp://[::]:<port>, so detached readiness/status requests can target an unusable endpoint. Normalize the fallback host before creating the URI, consistent withSystemProxyAddress.ResolveHost.
var address = serverAddresses?.Addresses.FirstOrDefault() ??
new UriBuilder(Uri.UriSchemeHttp, _proxyConfiguration.IPAddress, _proxyConfiguration.ApiPort).Uri.GetLeftPart(UriPartial.Authority);
DevProxy/Proxy/ConsoleHotkeyHandler.cs:57
- The v4 schema now allows the IPv6 wildcard
::, but this client-facing URL uses the raw bind address. For that valid configuration it emitshttp://[::]:8897/proxy, and the unspecified address is not dialable, so every generated curl command fails. Normalize wildcard binds to a client host (the existingSystemProxyAddress.ResolveHosthelper does this) before building the URL, and cover::in the test.
var baseUrl = new UriBuilder(Uri.UriSchemeHttp, configuration.IPAddress, configuration.ApiPort).Uri.GetLeftPart(UriPartial.Authority) + "/proxy";
skills/dev-proxy/SKILL.md:82
- The schema examples are now hard-coded to v4, but this skill still links to installation and CI/CD snippets that install/pin v3.0.0. Following the skill can therefore pair these v4 schema URLs with a v3 binary, contradicting the rule below that the schema version must match the installed version; update those snippets to 4.0.0 or explicitly label them as historical.
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
- Files reviewed: 30/30 changed files
- Comments generated: 0 new
- Review effort level: Lite
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Explicit HTTP port 80 is omitted, breaking port-conflict checks and endpoint consistency.
Review details
Suppressed comments (1)
DevProxy.Abstractions/Proxy/SystemProxyAddress.cs:48
UriBuilderomits the explicit port when it is HTTP's default port 80, so this helper returnshttp://hostinstead of the configuredhttp://host:80. That breaks the existing daemon port-conflict check, which matchesApiUrlby its:80suffix, and makes the reported endpoint inconsistent with the configured port. Compose the authority from the normalized host and an explicit port instead.
new UriBuilder(Uri.UriSchemeHttp, ResolveHost(ipAddress), port).Uri.GetLeftPart(UriPartial.Authority);
- Files reviewed: 32/32 changed files
- Comments generated: 0 new
- Review effort level: Lite
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Resolve bracketed IPv6 wildcard normalization and document the new DevTools options.
Review details
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
DevProxy/Commands/DevProxyCommand.cs:318
- When the API is bound to the IPv6 wildcard (
::), Kestrel exposes an address such ashttp://[::]:8897.Uri.Hostpreserves the brackets, soResolveHostcannot parse it asIPAddress.IPv6Any; this storeshttp://[::]:8897in daemon state, which is not a usable client endpoint for status/stop requests. UseserverUri.DnsSafeHost(or otherwise strip the URI brackets before normalization) so the wildcard is converted to loopback.
schemas/v4.0.0/devtoolsplugin.schema.json:22
- The v4 schema now advertises
EdgeBetaandpreferredBrowserPath, but the user-facing skill tables still list onlyEdge,EdgeDev, andChromeand omit the executable-path option (skills/dev-proxy/references/configuration.md:291andskills/dev-proxy/references/plugin-catalog.md:140). Users following these references will miss valid v4 DevTools settings; update both tables with the new options.
"description": "Which browser to use to launch Dev Tools. Supported values: Edge, EdgeDev, Chrome, EdgeBeta. Default: Edge."
},
"preferredBrowserPath": {
"type": "string",
"description": "Path to the browser executable. When specified, overrides preferredBrowser."
- Files reviewed: 32/32 changed files
- Comments generated: 0 new
- Review effort level: Lite
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
No description provided.