698 Commits
Author SHA1 Message Date
New FutureandFuture New 4e2b757f37 feat(branding): refresh DDNS logo and GitHub social cover (#740)
* feat(branding): refresh DDNS logo and social cover

* test(branding): pin reviewed asset exports

* test(branding): remove brand asset checks

* fix(cache): tolerate small filesystem clock skew

* docs(branding): correct cover license reference

---------

Co-authored-by: Future New (WEILAI LIU) <weilail@microsoft.com>
2026-09-13 22:38:36 +08:00
New Futureandopenhands e9ad33e88b Feat/v5 web mcp (#745)
* feat(rust): add Web dashboard and MCP services

Share configuration, status and synchronization between Web and MCP; add authenticated HTTP, stdio lifecycle support, in-process scheduling and offline regression tests. Exercise native tests on the existing Windows/macOS/Linux CI matrix.

Co-authored-by: openhands <openhands@all-hands.dev>

* ci(rust): allow manual cross-platform validation

Enable workflow_dispatch for feature-branch CI without requiring PR creation. Preserve matrices, permissions, publishing boundaries and trusted-branch cache policy.

Co-authored-by: openhands <openhands@all-hands.dev>

* ci(rust): validate feature branch pushes

Run the existing Rust cross-platform matrix for feat/** pushes while retaining trusted-branch-only cache writes and unchanged release triggers.

Co-authored-by: openhands <openhands@all-hands.dev>

* ci(rust): remove temporary branch trigger

The v5 pull request now exists and runs the complete native matrix, so restore the original trusted push branches while retaining Web/MCP paths and tests.

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-09-12 12:09:26 +08:00
93b79d2103 feat(v5): prepare the Rust DDNS development line (#728)
* feat(rust): add parallel DDNS MVP

Add a synchronous Rust client with compatible configuration, IP discovery, caching, and the first four providers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): address review compatibility gaps

Handle DNSPod failures safely, accept Python-compatible log thresholds, document Rust regex limits, and tolerate non-Unicode environment entries.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve generated provider options

Serialize endpoint overrides and --extra.* values so generated configuration files reproduce accepted CLI settings.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): align provider and config behavior

Keep provider lookup parameters scoped, continue DNSPod zone discovery safely, and match Python configuration and regex semantics.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): harden credentials and CI scoping

Redact provider credentials, align remaining config/cache behavior, and avoid running language-specific builds for unrelated changes while preserving required checks.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve authenticated URL compatibility

Translate embedded URL credentials to Basic auth, align generated TTL defaults, and run Rust checks for the abc PR target.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): isolate caches and aggregate safe errors

Keep Python cache files untouched, redact retained failures, and continue multi-provider runs after log setup errors.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* feat(rust): complete providers and distribution

Port the remaining DNS providers and aliases, add protected native/container release workflows, and provide a checksum-aware Rust installer.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs(agents): register Rust development guide

Keep the generated project structure contract aligned with the new bilingual Rust documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): address review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* refactor(rust): simplify core design

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* refactor(rust): use typed borrowed core

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* refactor(rust): streamline transport state

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(rust): share provider fixtures

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(rust): expand end-to-end coverage

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): simplify provider modes and lookup handling

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* chore(v5): prepare isolated Rust development line

Keep Rust changes on the v5 integration line and prepare artifacts without publishing or changing the stable Python entrypoint.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): redact credential-bearing URL paths

Hide non-root URL paths in diagnostics and omit URI text from transport errors while preserving actual request URLs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): fully mask credential values

Replace credential prefixes and suffixes with a constant opaque marker while retaining raw and percent-encoded masking.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): correct provider signing and zone lookup errors

Use RFC3986 canonical queries for Huawei signing. Distinguish documented NameSilo and ClouDNS zone misses from authentication, HTTP, and provider failures. Add offline regressions and matching V5 documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve address spelling for regex rules

Match regex rules against the extracted address text without IPv6 canonicalization, while retaining strict IpAddr validation and parsed return values. Cover original spelling, invalid candidates, family filtering, and matching boundaries.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): reject unusable local IPs and malformed record lists

Filter loopback and unspecified addresses before local indexing. Reject malformed ClouDNS, Huawei, and NameSilo record lookups without creating duplicates while retaining valid empty responses. Isolate installer test globals and cleanup traps in subshells.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): keep DNS.COM signatures out of diagnostics

Use the sensitive request path for signed DNS.COM bodies, omit raw HTTP and JSON failure responses, and redact signatures echoed in API messages. Preserve request signing and ordinary HTTP diagnostics with offline regressions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): mask form credentials and validate upgrades before replacement

Reuse the form encoder for credential redaction and smoke-test temporary installer binaries before replacing a working installation. Cover rejected upgrades and existing trailing-period IP parsing without changing address extraction.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve provider updates and V5 preparation contracts

Send Huawei canonical query bytes unchanged, accept nonempty single-label domains at configuration ingress, and honor AliDNS/ESA extras on unchanged addresses. Require V5 prereleases in artifact preparation with offline regression coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): accept separated negative CLI integers

Recognize negative integer tokens as required scalar values without consuming option names. Preserve per-option range validation and cover log-level aliases, inline parity, and real CLI execution.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): use architecture names for Rust QEMU setup

Install only the arm64 emulator on the amd64 OCI preparation runner while preserving linux/amd64,linux/arm64 for Buildx. Strengthen offline workflow contracts to distinguish the two inputs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-12 00:39:34 +08:00
New FutureandFuture New 8e784f6976 ci: migrate issue replies to Copilot with the built-in Actions token (#742)
* test(ci): probe Copilot built-in token access

* test(ci): remove completed Copilot token probe

* ci: migrate issue replies to Copilot agentic workflow

---------

Co-authored-by: Future New (WEILAI LIU) <weilail@microsoft.com>
2026-09-08 18:44:17 +08:00
dependabot[bot] fee4927e87 build(deps-dev): bump vitepress from 2.0.0-alpha.19 to 2.0.0-alpha.20 in /docs (#741)
build(deps-dev): bump vitepress in /docs

Bumps [vitepress](https://github.com/vuejs/vitepress) from 2.0.0-alpha.19 to 2.0.0-alpha.20.
- [Release notes](https://github.com/vuejs/vitepress/releases)
- [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.19...v2.0.0-alpha.20)

---
updated-dependencies:
- dependency-name: vitepress
  dependency-version: 2.0.0-alpha.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 10:49:39 +08:00
27f0f1c0ac fix: correct DNS sync results and configuration retention (#739)
* fix: correct DNS sync results and configuration retention

Keep address families independent, reject failed update responses, preserve complete IPv6 addresses, and retain Studio drafts and effective extra settings. Add offline regressions and wire Studio tests into documentation builds.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(provider): make disk cache regressions deterministic

Align the cache fixture wall clock and file mtime so Windows Python 3.12 clock granularity cannot turn a freshly saved cache into a future-dated file. Keep real disk reads, all cache assertions, production expiry policy and CI matrices unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
v4.2.1-beta3
2026-09-06 12:45:46 +08:00
New FutureandCopilot App 087b18bcdc fix(ci): set GitHub release repository context (#738)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
v4.2.1-beta2
2026-08-28 15:25:22 +08:00
8c42e248d6 ci(release): support immutable publishing (#737)
* ci(release): support immutable publishing

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): address release review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): validate release state before publishing

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): simplify release tag preparation

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Future New (WEILAI LIU) <weilail@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
v4.2.1-beta1
2026-08-27 20:33:10 +08:00
3c8578e9f4 feat(mcp): add Streamable HTTP transport (#736)
* feat(mcp): add Streamable HTTP transport

Add a modern MCP 2026-07-28 HTTP endpoint for standalone and Web modes, with shared listener configuration, authentication, schema, tests, and bilingual documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(tests): support Python 2 HTTP assertions

Normalize response header names and call handler methods through their underlying functions so the HTTP tests behave consistently on Python 2.7 and Python 3.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): harden HTTP request handling

Validate mirrored request IDs, align Config Studio listener checks, bound socket reads, and accept the binary wrapper's documented SIGINT exit status.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): align HTTP negotiation validation

Reject unavailable Accept media types by quality and keep schema host validation consistent with runtime listener checks.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(tests): validate host schema behavior

Assert accepted and rejected host samples instead of comparing Unicode escape representations that differ on Python 2.7.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(tests): avoid cross-engine schema regex

Keep the schema pattern contract without executing its ECMA-262 Unicode escape through Python 2's incompatible regex engine.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): validate HTTP request boundaries

Reject empty tokens and malformed JSON-RPC request shapes, and keep Config Studio bracket validation aligned with runtime listener handling.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): tighten HTTP input validation

Reject legacy notifications, nested host brackets, and document the required JSON content type so validation remains consistent across runtime, schema, and Config Studio.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): validate Origin before method errors

Apply the existing Origin policy to non-POST MCP requests and return CORS headers for configured allowed origins.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs(mcp): clarify proxy Origin allowlist

Explain that browser clients behind TLS termination must allowlist the public HTTPS origin even when the public page appears same-origin.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs(mcp): add standalone server guide

Move MCP client setup, transports, tools, security, and protocol limits into dedicated Chinese and English pages with matching navigation and index links.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): reject duplicate routing headers

Reject repeated MCP protocol, method, and name headers before body consistency checks across Python 2 and Python 3.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): validate named request headers

Validate Mcp-Name for tools/call, prompts/get, and resources/read before dispatching unsupported methods.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
v4.2.0
2026-08-23 21:36:26 +08:00
2501c4a1d8 ci(agent): add deterministic project checks (#735)
* feat(agent): define portable project development contract

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* ci(agent): add deterministic project checks

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): isolate agent contract concurrency

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): run complete agent contracts

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): cover generated docs and drift reports

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): close project contract coverage gaps

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): harden change discovery contracts

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): close final contract blind spots

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): validate active provider surfaces

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): enforce complete validation indexes

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): reject stale provider overview rows

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): validate all workflow changes

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): keep validation inputs deterministic

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): ignore deleted format targets

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(agent): ignore hidden provider inventories

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* perf(agent): deduplicate conservative checks

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-21 16:58:28 +08:00
08837bbd09 feat(agent): define portable project development contract (#734)
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-21 14:02:26 +08:00
90e04b70bd test(http): handle wrapped network timeouts (#733)
* test(http): handle wrapped network timeouts

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(http): tighten network error classification

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-21 01:05:32 +08:00
CopilotandNewFuture 6b12670cca chore(ci): update Nuitka to 4.2 (#732)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
v4.2.0-beta2
2026-08-19 21:15:53 +08:00
dependabot[bot] e945f89c51 build(deps): bump actions/cache from 5 to 6 (#731)
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 09:36:57 +08:00
dd16df78b7 ci(build): persist incremental compiler caches (#730)
* ci(build): persist compiler caches

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* ci(build): restrict compiler cache writes

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
v4.2.0-beta1
2026-08-17 14:13:55 +08:00
06c0e912f4 test(e2e): expand binary coverage (#727)
* test(e2e): expand binary coverage

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* ci(e2e): cap binary jobs at 10 minutes

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(e2e): stabilize binary matrix tests

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): refresh cross-platform test images

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): defer ARMv6 emulation until tests

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): keep ARMv6 job within timeout

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-16 02:43:33 +08:00
6e3d3560c7 fix(http): bound external requests in CI tests (#726)
* fix(tests): handle endpoint timeouts in fallback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(http): add configurable request timeout

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-15 22:23:27 +08:00
CopilotandNewFuture 27fa7f478d docs(agents): sync AGENTS.md structure with new ddns/mcp.py (#725)
* Initial plan

* docs(agents): sync AGENTS.md structure and metadata

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
2026-08-15 17:02:12 +08:00
CopilotandNewFuture 2e2daa50be Fix dashboard cache reads with small Windows mtime skew (#723)
* Initial plan

* fix(web): tolerate small cache timestamp skew

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* fix(web): reject future cache timestamps

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* test(web): cover future cache timestamps

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* fix(web): tolerate small cache timestamp skew

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* fix(test_web): keep cache fixture unicode-safe on Python 2.7

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
2026-08-14 17:50:59 +08:00
c919f2c6af feat(mcp): add dependency-free DDNS server (#722)
* feat(mcp): add dependency-free DDNS server

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mcp): stop cancelled DDNS updates

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-13 17:25:47 +08:00
a05bedf000 docs(agents): document embedded web package (#721)
docs(agents): update web directory structure

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-12 17:42:56 +08:00
c30822bd33 test(e2e): cover source and binary workflows (#719)
* test(e2e): cover source and binary workflows

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(e2e): stop compiled process groups

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* ci(build): limit ARM BuildKit parallelism

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* revert: remove ARM BuildKit workaround

The builder image is being rebuilt to address the zstd allocation failure at its source.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(e2e): use OS-assigned dashboard port

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-12 15:39:51 +08:00
d14594f14d feat(web): add local management dashboard (#718)
* feat(web): add local management dashboard

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(web): address review and Python 2 compatibility

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* chore: remove design session artifacts

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(web): harden packaged resources and HTTP semantics

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(web): support Python 2 handler mocks

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(web): detect all external schedulers

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-11 18:23:17 +00:00
dependabot[bot] 5ee2351854 Bump vitepress from 2.0.0-alpha.18 to 2.0.0-alpha.19 in /docs (#717)
Bumps [vitepress](https://github.com/vuejs/vitepress) from 2.0.0-alpha.18 to 2.0.0-alpha.19.
- [Release notes](https://github.com/vuejs/vitepress/releases)
- [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.18...v2.0.0-alpha.19)

---
updated-dependencies:
- dependency-name: vitepress
  dependency-version: 2.0.0-alpha.19
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 10:07:56 +08:00
c4b6d4e0d8 docs(agents): separate Config Studio from LLM sources (#716)
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-10 10:35:34 +08:00
1d04b4eb0f feat(docs): redesign documentation experience (#715)
* feat(docs): redesign documentation experience

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docs): preserve Config Studio state

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docs): clarify credential diagnostics

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docs): address review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-10 09:37:20 +08:00
e58daa0a80 feat(docs): add configuration studio (#712)
* feat(docs): add configuration studio

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(config): address PR review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docker): avoid 32-bit Nuitka compression OOM

Disable onefile compression only for 32-bit BuildKit targets, where zstd can exhaust the process address space.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* revert: restore compressed Linux binaries

The builder image has been rebuilt with the previous working toolchain.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs: remove English configuration studio

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* chore: remove product design artifact

Restore the English configuration studio that was removed by mistake.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docs): protect credentials in address sources

Treat URL userinfo in IPv4 and IPv6 detection sources as sensitive so previews, copies, downloads, and duplicated providers exclude it by default.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docs): preserve explicit empty tokens

Keep runtime-significant empty token fields in credential-free exports while continuing to omit non-empty secrets.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docs): export entered credentials

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs(config): clarify special source splitting

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-08 11:09:51 +08:00
e102ce5039 fix(docker): prevent zombie process accumulation (#711)
* fix(docker): prevent zombie process accumulation

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(docker): forward signals to startup processes

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-08 01:05:22 +08:00
0a80f32fb8 test(util.http): remove external network flakiness (#710)
* test(util.http): remove external network flakiness

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(util.http): bypass proxies in loopback test

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(util.http): support Python 2 HTTP handler

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-07 23:23:43 +08:00
06fceed0f7 feat(cache): add configurable cache max age (#709)
* feat(cache): add configurable cache max age

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(cache): cover cache max age integration paths

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(cache): fix portable regression test formatting

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* style(test): format cache max age run test

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Future New (WEILAI LIU) <weilail@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
v4.1.5
2026-08-06 17:59:40 +08:00
CopilotandNewFuture adc3d4fd40 Fix Nuitka onefile compression dependencies (#707)
fix(build): install Nuitka onefile dependencies

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
2026-08-05 20:15:12 +08:00
CopilotandNewFuture 9a260d17c4 Fix Docker ARM build failure from buggy patchelf (#706)
* Initial plan

* fix(docker): avoid buggy patchelf in alpine builder

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* chore(docker): use patchelf 0.19.1

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
2026-08-05 18:51:03 +08:00
iCastureandNew Future e61bc6b474 fix(ip): honor fallback order for index4/index6 rules (#690)
fix(ip): continue rule fallback when a resolver returns no result

Refactor get_ip() to evaluate one rule at a time and only stop when a
usable address is found.

This fixes index4/index6 fallback chains where resolvers such as url,
public, regex, cmd, or shell could return an empty result and prevent
later rules from running.

Update tests to cover fallback across multiple rule types for both IPv4
and IPv6.

Co-authored-by: New Future <NewFuture@users.noreply.github.com>
2026-08-05 15:42:02 +08:00
dependabot[bot]andNew Future 024ba4a336 Bump actions/setup-node from 6 to 7 (#703)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>
2026-07-22 13:56:35 +08:00
dependabot[bot] c0a5fb6c62 Bump actions/setup-python from 6 to 7 (#704)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6 to 7.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 14:34:53 +08:00
dependabot[bot] 8507073431 Bump vitepress from 2.0.0-alpha.17 to 2.0.0-alpha.18 in /docs (#702)
Bumps [vitepress](https://github.com/vuejs/vitepress) from 2.0.0-alpha.17 to 2.0.0-alpha.18.
- [Release notes](https://github.com/vuejs/vitepress/releases)
- [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.17...v2.0.0-alpha.18)

---
updated-dependencies:
- dependency-name: vitepress
  dependency-version: 2.0.0-alpha.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 17:00:07 +08:00
dependabot[bot] e2e055ef6e Bump actions/checkout from 6 to 7 (#701)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-24 10:26:25 +08:00
f8c098561d Update AGENTS documentation structure and check (#700)
* Initial plan

* docs(agents): update documentation directory tree

* docs(llms): remove excessive English and schema links

* docs(agents): simplify English docs listing

* docs(llms): describe English doc link pattern

* fix(ci): support mirrored English docs in agents check

* fix(ci): clarify mirrored docs detection

* fix(ci): improve agents check readability

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* docs(agents): clarify parse_agents_md docstring return values

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-16 08:04:58 +08:00
New Future 96c4ba71ce docs(agents): streamline agent guidance (#698) 2026-06-15 09:59:50 +08:00
CopilotandNew Future 25d6075e37 docs(agents): sync AGENTS.md and llms.txt for west provider (#696)
* Initial plan

* docs(agents): update AGENTS.md and llms.txt for west provider

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>
2026-06-14 02:53:51 +00:00
Copilot 4fec62d95d Remove Alibaba Cloud ESA promotional links (#697)
* docs(aliesa): remove Alibaba Cloud ESA promo links

* docs(readme): remove ESA footer sponsor image

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-06-14 10:43:37 +08:00
93d4698ff7 feat(provider.west): add West.cn DNS provider support (#628)
* Initial plan

* feat(provider.west): add West.cn DNS provider support

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* refactor(provider.west): address review feedback - remove LINE_MAPPING, implement domain fallback, update docs

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* fix(provider.west): improve logging format for root domain

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(provider.west): correct comment about domain parsing order and clarify error code handling

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

* refactor(provider.west): simplify domain not found check to use code=404

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-06-12 12:04:51 +00:00
Copilot 7490657d82 Use HTTP ipify URL in documentation examples (#694)
* fix(ip): remove unavailable ipify cn endpoint

* test(ip): avoid substring matching in fallback test

* fix(ip): remove unavailable ipw endpoints

* fix(ip): add ddnsip public endpoints

* docs: use http ipify URL in examples

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-06-12 19:51:59 +08:00
dependabot[bot] 9834fdea5e Bump actions/upload-pages-artifact from 4 to 5 (#689)
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 14:56:26 +00:00
dependabot[bot] 343a01c521 Bump actions/deploy-pages from 4 to 5 (#687)
Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4 to 5.
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](https://github.com/actions/deploy-pages/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/deploy-pages
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 22:44:14 +08:00
dependabot[bot] bed287da2e Bump actions/github-script from 8 to 9 (#688)
Bumps [actions/github-script](https://github.com/actions/github-script) from 8 to 9.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 19:37:45 +08:00
dependabot[bot] 14b2d76fc0 Bump vitepress from 2.0.0-alpha.16 to 2.0.0-alpha.17 in /docs (#686)
Bumps [vitepress](https://github.com/vuejs/vitepress) from 2.0.0-alpha.16 to 2.0.0-alpha.17.
- [Release notes](https://github.com/vuejs/vitepress/releases)
- [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.16...v2.0.0-alpha.17)

---
updated-dependencies:
- dependency-name: vitepress
  dependency-version: 2.0.0-alpha.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-26 19:50:09 +08:00
dependabot[bot] 78a81b9f3b Bump docker/metadata-action from 5 to 6 (#685)
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5 to 6.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-23 15:35:25 +08:00
dependabot[bot] 3824ddc2d8 Bump docker/setup-qemu-action from 3 to 4 (#684)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 16:11:59 +08:00
dependabot[bot] f07a494bde Bump docker/setup-buildx-action from 3 to 4 (#681) 2026-03-13 17:11:13 +08:00