Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) by XXPermanentXX · Pull Request #51 · modelstudioai/cli · GitHub
Skip to content

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35) - #51

Merged
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2
Jun 12, 2026
Merged

fix: honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY env vars (#35)#51
XXPermanentXX merged 5 commits into
mainfrom
fix/proxy-env-support-v2

Conversation

@XXPermanentXX

Copy link
Copy Markdown
Collaborator

Summary

Fixes#35 — running bl behind a VPN / corporate proxy failed with ECONNRESET: Client network socket disconnected before secure TLS connection was established.

Root cause: Node's built-in fetch (undici) does not read proxy environment variables, so the CLI always connected directly, bypassing the local proxy and getting blocked.

Fix: at startup, install an EnvHttpProxyAgent as the global undici dispatcher — but only when HTTP_PROXY / HTTPS_PROXY is actually set. When no proxy variable is configured, the global dispatcher is untouched and behavior is exactly as before.

export HTTPS_PROXY=http://127.0.0.1:7890
bl app list # now routes through the proxy

Changes

  • packages/cli/src/proxy.ts (new): readProxyEnv() + setupProxyFromEnv(). Lowercase variables take precedence over uppercase (curl convention); NO_PROXY is supported.
    • Values are trimmed and passed explicitly to work around undici reading env vars with ??, where an empty lowercase variable (https_proxy="") masks a configured uppercase one.
    • An invalid proxy URL fails with a clear Invalid proxy configuration: … error (plus hint) instead of a raw stack trace.
  • packages/cli/src/main.ts: call setupProxyFromEnv() at module top level, before any fetch is issued (including update-checker / telemetry).
  • packages/cli/src/error-handler.ts: the ECONNRESET hint now suggests export HTTPS_PROXY=… for VPN / corporate-proxy users.
  • undici added as an explicit dependency (catalog ^8.4.1).

Tests (fully offline, no credentials required)

  • tests/proxy.test.ts: readProxyEnv parsing — unset/blank handling, lowercase precedence, empty-string-masking regression, NO_PROXY.
  • tests/e2e/proxy.e2e.test.ts: runs a minimal probe script (setupProxyFromEnv() + a bare fetch()) against a .invalid host through a local CONNECT proxy. It does not drive any CLI command, so it needs no api key / access token — consistent with the existing e2e design. Verifies:
    • with HTTPS_PROXY set, the bare fetch tunnels through the proxy (CONNECT to the target host);
    • empty lowercase https_proxy does not mask HTTPS_PROXY;
    • NO_PROXY match keeps the request direct;
    • with no proxy vars set, the proxy receives zero traffic (no behavior change);
    • an invalid proxy URL produces a clear error message.

All proxy tests pass under a simulated CI environment (empty HOME, no credentials).

Note

Supersedes #50, which had a tangled commit history. This branch is rebuilt cleanly on top of main. The version bump / CHANGELOG for the release are intentionally left out and will go in a separate PR.

Also includes two small unrelated cleanups as separate commits: a video-ref r2v e2e prompt tweak, and removing the machine-local .claude/scheduled_tasks.lock from version control.

Node's built-in fetch (undici) ignores proxy environment variables, so
bl always connected directly and failed with ECONNRESET behind a VPN or
corporate proxy. Install an EnvHttpProxyAgent as the global dispatcher at
startup, but only when a proxy variable is actually set — behavior is
unchanged otherwise. Lowercase variables take precedence over uppercase
(curl convention) and NO_PROXY is honored.
Values are trimmed and passed explicitly to work around undici reading
env vars with ??, where an empty lowercase variable (https_proxy="")
masks a configured uppercase one. Invalid proxy URLs fail with a clear
usage error instead of a stack trace, and the ECONNRESET hint now
suggests exporting HTTPS_PROXY.
Tests are fully offline and need no credentials: unit tests cover env
parsing, and the e2e test runs a minimal probe (setupProxyFromEnv + a
bare fetch) against a .invalid host through a local CONNECT proxy to
verify traffic routes through the proxy, NO_PROXY is honored, no
dispatcher is installed when unset, and invalid values error clearly.
Switch the seed-image prompt from a cat sketch to a green leaf for a
simpler, more reliably-generated reference frame.
It's a machine-local runtime lock file that shouldn't be in the repo;
remove it and add it to .gitignore.
Bump bailian-cli / bailian-cli-core to 1.3.1, sync skill version, and
document the HTTP_PROXY / HTTPS_PROXY / NO_PROXY fix (#35) in CHANGELOG.
@XXPermanentXX
XXPermanentXX merged commit a90a35d into mainJun 12, 2026
1 check passed
@XXPermanentXX
XXPermanentXX deleted the fix/proxy-env-support-v2 branch June 12, 2026 09:16
Sign up for freeto 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.

Confuse Report: 在本地开启VPN代理的情况下,会提示以上异常,请问如何处理

1 participant

@XXPermanentXX