Fallback to env proxy when dsh-http-proxy cannot resolve on link installs.

Use process HTTP_PROXY/HTTPS_PROXY and undici global dispatcher when the policy module import fails, so symlinked desktop plugins still egress through the corporate proxy.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-10-10 14:24:33 +08:00
parent 26a8c2ecee
commit 4b4a1e4460
5 changed files with 197 additions and 35 deletions

View file

@ -12,7 +12,7 @@ test('package exports resolve and peerDependencies stay open', async () => {
assert.equal(pkg.exports['.'], './lib/index.js')
assert.equal(pkg.exports['./client'], './lib/client.browser.js')
assert.equal(pkg.engines.node, '>=20')
assert.equal(pkg.version, '0.2.40')
assert.equal(pkg.version, '0.2.41')
assert.equal(pkg.dsh.client.immediately, false)
assert.equal(pkg.dependencies['@modelcontextprotocol/client'], '2.0.0')
assert.ok(!Object.hasOwn(pkg.dependencies, '@modelcontextprotocol/sdk'))
@ -86,16 +86,18 @@ test('known providers are CDKey-only while custom keeps advanced fields', async
assert.match(client, /已知提供商不需要填写端点链接/)
})
test('HTTP transport inherits DSH proxy and pins DNS on the direct path', async () => {
test('HTTP transport inherits DSH proxy with env fallback and pins DNS on direct path', async () => {
const transport = await read('lib/client.js')
const proxyEnv = await read('lib/proxy-env.js')
assert.match(transport, /from '@modelcontextprotocol\/client'/)
assert.match(transport, /from '@modelcontextprotocol\/client\/stdio'/)
assert.doesNotMatch(transport, /from ['"]@modelcontextprotocol\/sdk/)
assert.match(transport, /@deepseek-ai\/dsh-http-proxy/)
assert.match(transport, /proxyRouteFor/)
assert.match(transport, /resolveEgressRoute/)
assert.match(proxyEnv, /proxyRouteFor/)
assert.match(proxyEnv, /readProxyEnv/)
assert.match(proxyEnv, /getGlobalDispatcher/)
assert.match(transport, /parseHttpEndpoint/)
assert.match(transport, /validateHttpEndpoint\(server\.url, \{ signal \}\)/)
assert.match(transport, /dispatcher/)
assert.match(transport, /redirect: 'error'/)
assert.match(transport, /versionNegotiation:\s*\{\s*mode:\s*['"]auto['"]/)
})