From e4f33f0aed201011265cdcb2f2e2dc92ba875d11 Mon Sep 17 00:00:00 2001 From: mcocdaa <2021137961@qq.com> Date: Tue, 3 Nov 2026 11:00:38 +0100 Subject: [PATCH] style(ui): unify locale toggle badges, remove emoji clutter, and configure monthly grayscale dependabot --- .github/dependabot.yml | 126 +- .github/workflows/ci.yml | 28 +- .github/workflows/package-control-plane.yml | 10 +- .github/workflows/package-node.yml | 14 +- .github/workflows/release.yml | 4 +- .github/workflows/tauri-packages.yml | 46 +- .../tauri/src/views/NativeConnectView.vue | 2 +- .../src/views/NativeDeviceAuthorizeView.vue | 2 +- apps/control-plane/pyproject.toml | 2 +- .../persistence/repositories.py | 2 +- docs/web-client.md | 2 +- packages/client-ui/src/App.vue | 2 +- packages/client-ui/src/i18n/messages/en.ts | 2 +- packages/client-ui/src/i18n/messages/zh.ts | 2 +- .../client-ui/src/views/AgentPreviewView.vue | 2 +- .../src/views/DeviceAuthorizeView.vue | 2 +- packages/client-ui/src/views/LoginView.vue | 2 +- .../src/views/NativeAuthorizeView.vue | 2 +- .../test_configure_android_system_bars.py | 6 +- .../test_packaging_workflow_contract.py | 11 +- uv.lock | 2556 +++++++++-------- 21 files changed, 1513 insertions(+), 1312 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fac2bd9..a5bc179 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,70 +1,98 @@ version: 2 updates: - # npm (root workspace) - - package-ecosystem: npm - directory: / + - package-ecosystem: "npm" + directory: "/" schedule: - interval: monthly - open-pull-requests-limit: 5 + interval: "cron" + cronjob: "0 2 1 * *" + timezone: "Asia/Shanghai" + cooldown: + default-days: 7 + semver-major-days: 14 + semver-minor-days: 7 + semver-patch-days: 3 + open-pull-requests-limit: 10 + commit-message: + prefix: "chore(deps)" groups: npm-minor-patch: - patterns: ['*'] - update-types: ['minor', 'patch'] - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-major"] - commit-message: - prefix: 'chore(deps)' + update-types: + - "minor" + - "patch" - # uv (python workspace) - - package-ecosystem: uv - directory: / + - package-ecosystem: "uv" + directory: "/" schedule: - interval: monthly - open-pull-requests-limit: 5 + interval: "cron" + cronjob: "0 2 1 * *" + timezone: "Asia/Shanghai" + cooldown: + default-days: 7 + semver-major-days: 14 + semver-minor-days: 7 + semver-patch-days: 3 + open-pull-requests-limit: 10 + commit-message: + prefix: "chore(deps)" groups: uv-minor-patch: - patterns: ['*'] - update-types: ['minor', 'patch'] - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-major"] - commit-message: - prefix: 'chore(deps)' + update-types: + - "minor" + - "patch" - # github-actions - - package-ecosystem: github-actions - directory: / + - package-ecosystem: "github-actions" + directory: "/" schedule: - interval: monthly + interval: "cron" + cronjob: "0 2 1 * *" + timezone: "Asia/Shanghai" + cooldown: + default-days: 7 open-pull-requests-limit: 5 + commit-message: + prefix: "chore(ci)" groups: actions: - patterns: ['*'] - update-types: ['minor', 'patch'] - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-major"] + patterns: + - "*" - # Docker 基础镜像(deploy 目录) - - package-ecosystem: docker - directory: /deploy + - package-ecosystem: "docker" + directory: "/deploy" schedule: - interval: monthly + interval: "cron" + cronjob: "0 2 1 * *" + timezone: "Asia/Shanghai" + cooldown: + default-days: 7 + open-pull-requests-limit: 5 + commit-message: + prefix: "chore(docker)" + ignore: + - dependency-name: "python" + update-types: + - "version-update:semver-major" + - "version-update:semver-minor" + - dependency-name: "node" + update-types: + - "version-update:semver-major" + - "version-update:semver-minor" groups: docker-images: - patterns: ['*'] - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-major"] + patterns: + - "*" - - package-ecosystem: docker-compose - directory: /deploy + - package-ecosystem: "docker-compose" + directory: "/deploy" schedule: - interval: monthly + interval: "cron" + cronjob: "0 2 1 * *" + timezone: "Asia/Shanghai" + cooldown: + default-days: 7 + open-pull-requests-limit: 5 + commit-message: + prefix: "chore(docker)" groups: - compose-services: - patterns: ['*'] - ignore: - - dependency-name: "*" - update-types: ["version-update:semver-major"] + compose-images: + patterns: + - "*" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7d60a0f..bbcb14a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" @@ -39,11 +39,11 @@ jobs: # contracts:check regenerates the client contracts from the protocol # package, so this job needs the locked Python workspace as well. - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm @@ -80,7 +80,7 @@ jobs: steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" @@ -105,7 +105,7 @@ jobs: - name: Upload test metadata on failure if: failure() - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: pytest-metadata path: .ci/pytest.xml @@ -120,7 +120,7 @@ jobs: steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm @@ -129,7 +129,7 @@ jobs: with: components: rustfmt, clippy - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target # rust-cache keys caches by job id; keep the pre-split `verify` @@ -194,12 +194,12 @@ jobs: timeout-minutes: 45 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci @@ -211,11 +211,11 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 + - uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0 with: distribution: temurin java-version: "17" @@ -227,7 +227,7 @@ jobs: - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: targets: aarch64-linux-android - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci @@ -243,14 +243,14 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: targets: aarch64-apple-ios,aarch64-apple-ios-sim - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci diff --git a/.github/workflows/package-control-plane.yml b/.github/workflows/package-control-plane.yml index 3af9b19..3c4195e 100644 --- a/.github/workflows/package-control-plane.yml +++ b/.github/workflows/package-control-plane.yml @@ -41,7 +41,7 @@ jobs: retention_days: ${{ steps.context.outputs.retention_days }} steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Resolve validated package context @@ -71,7 +71,7 @@ jobs: timeout-minutes: 45 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version @@ -90,7 +90,7 @@ jobs: scripts/release/archive_control_plane_image.sh \ "$LOCAL_IMAGE" release-assets/termflow-control-plane.tar scripts/verify-control-plane-image.sh "$LOCAL_IMAGE" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.prepare.outputs.artifact_name }} path: release-assets/termflow-control-plane.tar @@ -109,7 +109,7 @@ jobs: id-token: write steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version @@ -118,7 +118,7 @@ jobs: run: python scripts/release/prepare_version.py - uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4 - uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4 - - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4 + - uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/package-node.yml b/.github/workflows/package-node.yml index 224d0c9..7d2e460 100644 --- a/.github/workflows/package-node.yml +++ b/.github/workflows/package-node.yml @@ -43,7 +43,7 @@ jobs: docker_retention_days: ${{ steps.context.outputs.docker_retention_days }} steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Resolve validated package context @@ -79,7 +79,7 @@ jobs: timeout-minutes: 30 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version @@ -106,7 +106,7 @@ jobs: --repository "$GITHUB_REPOSITORY" (cd release-assets && sha256sum termflow-node-linux-x86_64.tar.gz > SHA256SUMS) scripts/release/verify_node_bundle.sh "$PACKAGE_TAG" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.prepare.outputs.artifact_name }} path: | @@ -123,7 +123,7 @@ jobs: timeout-minutes: 45 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version @@ -141,7 +141,7 @@ jobs: scripts/release/archive_node_image.sh \ "$LOCAL_IMAGE" release-assets/termflow-node.tar scripts/verify-node-image.sh "$LOCAL_IMAGE" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.prepare.outputs.docker_artifact_name }} path: release-assets/termflow-node.tar @@ -160,7 +160,7 @@ jobs: id-token: write steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version @@ -169,7 +169,7 @@ jobs: run: python scripts/release/prepare_version.py - uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4 - uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4 - - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4 + - uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5371b59..7f38c86 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,7 +22,7 @@ jobs: is_prerelease: ${{ steps.version.outputs.is_prerelease }} steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Resolve release tag @@ -76,7 +76,7 @@ jobs: id-token: write steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8 with: path: release-assets merge-multiple: true diff --git a/.github/workflows/tauri-packages.yml b/.github/workflows/tauri-packages.yml index a4fb1a2..1efaf84 100644 --- a/.github/workflows/tauri-packages.yml +++ b/.github/workflows/tauri-packages.yml @@ -82,10 +82,10 @@ jobs: android_release_build: ${{ steps.version.outputs.android_release_build }} steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm @@ -139,25 +139,25 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version env: TERMFLOW_BUILD_VERSION: ${{ needs.validate-version.outputs.version }} run: python scripts/release/prepare_version.py - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci - name: Build unsigned NSIS installer run: npm run tauri:build --workspace @termflow/tauri-client -- --bundles nsis --ci - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.validate-version.outputs.artifact_prefix }}-windows-x64-nsis path: apps/clients/tauri/src-tauri/target/release/bundle/nsis/*-setup.exe @@ -177,19 +177,19 @@ jobs: APPIMAGE_EXTRACT_AND_RUN: "1" steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version env: TERMFLOW_BUILD_VERSION: ${{ needs.validate-version.outputs.version }} run: python scripts/release/prepare_version.py - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - name: Install Linux Tauri prerequisites @@ -221,7 +221,7 @@ jobs: cp apps/clients/tauri/src-tauri/target/release/bundle/deb/*.deb \ apps/clients/tauri/src-tauri/target/release/bundle/appimage/*.AppImage \ "$RUNNER_TEMP/termflow-linux/" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.validate-version.outputs.artifact_prefix }}-linux-x64 path: ${{ runner.temp }}/termflow-linux/* @@ -239,19 +239,19 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version env: TERMFLOW_BUILD_VERSION: ${{ needs.validate-version.outputs.version }} run: python scripts/release/prepare_version.py - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci @@ -278,7 +278,7 @@ jobs: exit 1 fi cp "$1" "$RUNNER_TEMP/termflow-artifacts/" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.validate-version.outputs.artifact_prefix }}-macos-arm64 path: ${{ runner.temp }}/termflow-artifacts/* @@ -296,18 +296,18 @@ jobs: timeout-minutes: 90 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version env: TERMFLOW_BUILD_VERSION: ${{ needs.validate-version.outputs.version }} run: python scripts/release/prepare_version.py - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 + - uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0 with: distribution: temurin java-version: "17" @@ -319,7 +319,7 @@ jobs: - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: targets: aarch64-linux-android - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci @@ -411,7 +411,7 @@ jobs: mkdir -p "$RUNNER_TEMP/termflow-android" cp "$APK_PATH" \ "$RUNNER_TEMP/termflow-android/TermFlow-${TERMFLOW_BUILD_VERSION}-android-arm64.apk" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.validate-version.outputs.artifact_prefix }}-android-arm64-apk path: ${{ runner.temp }}/termflow-android/* @@ -435,21 +435,21 @@ jobs: timeout-minutes: 90 steps: - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.12" - name: Materialize build version env: TERMFLOW_BUILD_VERSION: ${{ needs.validate-version.outputs.version }} run: python scripts/release/prepare_version.py - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: "22.23.2" cache: npm - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable with: targets: aarch64-apple-ios,aarch64-apple-ios-sim - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: workspaces: apps/clients/tauri/src-tauri -> target - run: npm ci @@ -469,7 +469,7 @@ jobs: fi ditto -c -k --sequesterRsrc --keepParent \ "$1" "$RUNNER_TEMP/termflow-artifacts/TermFlow-ios-simulator-aarch64.app.zip" - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: ${{ needs.validate-version.outputs.artifact_prefix }}-ios-simulator-aarch64 path: ${{ runner.temp }}/termflow-artifacts/TermFlow-ios-simulator-aarch64.app.zip diff --git a/apps/clients/tauri/src/views/NativeConnectView.vue b/apps/clients/tauri/src/views/NativeConnectView.vue index 7ae15d6..ecbe779 100644 --- a/apps/clients/tauri/src/views/NativeConnectView.vue +++ b/apps/clients/tauri/src/views/NativeConnectView.vue @@ -15,7 +15,7 @@ @click="toggleLocale" > - {{ t('app.switchLangBadge') }} + {{ t('app.switchLangBadge') }}
diff --git a/apps/clients/tauri/src/views/NativeDeviceAuthorizeView.vue b/apps/clients/tauri/src/views/NativeDeviceAuthorizeView.vue index 125c099..0a81618 100644 --- a/apps/clients/tauri/src/views/NativeDeviceAuthorizeView.vue +++ b/apps/clients/tauri/src/views/NativeDeviceAuthorizeView.vue @@ -12,7 +12,7 @@ @click="toggleLocale" > - {{ t('app.switchLangBadge') }} + {{ t('app.switchLangBadge') }} diff --git a/apps/control-plane/pyproject.toml b/apps/control-plane/pyproject.toml index d163f31..e68e80c 100644 --- a/apps/control-plane/pyproject.toml +++ b/apps/control-plane/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "pyotp>=2.9,<3", "pydantic-settings>=2.7,<3", "python-multipart>=0.0.20,<1", - "sqlalchemy>=2.0,<3", + "sqlalchemy[asyncio]>=2.0,<3", "termflow-protocol", "typer>=0.15,<1", "uvicorn[standard]>=0.54.0,<1", diff --git a/apps/control-plane/src/termflow_control_plane/persistence/repositories.py b/apps/control-plane/src/termflow_control_plane/persistence/repositories.py index bd44f3a..cb9900e 100644 --- a/apps/control-plane/src/termflow_control_plane/persistence/repositories.py +++ b/apps/control-plane/src/termflow_control_plane/persistence/repositories.py @@ -5745,7 +5745,7 @@ async def confirm_helper( ) -> AgentCleanupReceipt: observed = datetime.now(UTC) async with self._sessions() as session: - changed = await session.scalar( + changed: AgentCleanupReceipt | None = await session.scalar( update(AgentCleanupReceipt) .where( AgentCleanupReceipt.id == receipt_id, diff --git a/docs/web-client.md b/docs/web-client.md index 6ba27c7..d21edb3 100644 --- a/docs/web-client.md +++ b/docs/web-client.md @@ -12,7 +12,7 @@ Web C 是独立客户端,只调用 B 的公开 `/api/v1` HTTP 和 WebSocket - 登录:使用不带全局导航的极简页面;Admin Token 只用于换取 HttpOnly 会话,启用双重认证 时再输入验证器的一次性验证码,成功后立即从组件状态清除。右上角提供中英文语言切换按钮 - (`🌐 EN / 🌐 中文`,`[data-action="toggle-locale"]`),与应用顶栏及授权页共享持久化语言偏好; + (`EN / 中文`,`[data-action="toggle-locale"]`),与应用顶栏及授权页共享持久化语言偏好; - 总览:显示在线 Term、活动 Pane、24 小时交互数和 Computer 卡片;在线 Term 和活动 Pane 指标可悬浮或聚焦查看解释。每个 Computer 卡片内的 Term 使用独立圆角卡片,在线 Term 整块可点击进入终端; diff --git a/packages/client-ui/src/App.vue b/packages/client-ui/src/App.vue index 724c8e1..f63441f 100644 --- a/packages/client-ui/src/App.vue +++ b/packages/client-ui/src/App.vue @@ -14,7 +14,7 @@ @click="toggleLocale" >