From f10cd4cd9a2b836e4ed839d7d74c72b976dfceb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B0=E8=A7=85=E6=BA=90=E7=A0=81=E5=BA=93?= Date: Tue, 2 Jun 2026 03:44:33 +0000 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E8=87=B3=E6=96=B0=E8=A7=85?= =?UTF-8?q?=E6=BA=90=E7=A0=81=E5=BA=93=20=E2=80=94=20=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E7=A4=BE=E5=8C=BA=E9=93=BE=E6=8E=A5=EF=BC=8C=E4=BF=9D=E7=95=99?= =?UTF-8?q?AI=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug_report.yml | 101 --------- .github/ISSUE_TEMPLATE/config.yml | 8 - .github/ISSUE_TEMPLATE/feature_request.yml | 76 ------- .github/ISSUE_TEMPLATE/general_issue.md | 22 -- .github/workflows/build.yml | 46 ---- .github/workflows/desktop-manual-build.yml | 213 ------------------ .github/workflows/desktop-release.yml | 206 ----------------- .github/workflows/desktop-runtime.yml | 125 ---------- .github/workflows/docker-publish.yml | 46 ---- .github/workflows/npm-lockfile-check.yml | 45 ---- .github/workflows/playwright.yml | 52 ----- .github/workflows/website-deploy.yml | 89 -------- .xinmi/LOG.md | 19 ++ README.md | 20 +- README_zh.md | 22 +- docs/harness/validation.md | 2 +- package-lock.json | 204 ++++++++--------- package.json | 4 +- .../client/public/skill-recommendations.en.md | 70 +++--- .../client/public/skill-recommendations.zh.md | 70 +++--- .../src/components/layout/AppSidebar.vue | 4 +- packages/client/src/i18n/locales/de.ts | 2 +- packages/client/src/i18n/locales/en.ts | 2 +- packages/client/src/i18n/locales/es.ts | 2 +- packages/client/src/i18n/locales/fr.ts | 2 +- packages/client/src/i18n/locales/ja.ts | 2 +- packages/client/src/i18n/locales/ko.ts | 2 +- packages/client/src/i18n/locales/pt.ts | 2 +- packages/client/src/i18n/locales/zh-TW.ts | 2 +- packages/client/src/i18n/locales/zh.ts | 2 +- packages/desktop/README.md | 6 +- packages/desktop/package-lock.json | 114 +++++----- packages/desktop/package.json | 2 +- packages/desktop/src/main/runtime-manager.ts | 6 +- packages/desktop/src/main/updater.ts | 4 +- packages/server/src/controllers/update.ts | 6 +- .../services/hermes/agent-bridge/manager.ts | 2 +- .../services/hermes/copilot-device-flow.ts | 8 +- .../src/services/hermes/copilot-models.ts | 2 +- .../src/components/landing/HeroSection.vue | 2 +- .../src/components/landing/InstallSection.vue | 4 +- .../components/landing/StarHistorySection.vue | 4 +- .../src/components/layout/SiteFooter.vue | 2 +- .../src/components/layout/SiteHeader.vue | 4 +- packages/website/src/i18n/en.ts | 2 +- packages/website/src/i18n/zh.ts | 2 +- tests/client/copilot-login-modal.test.ts | 8 +- tests/server/agent-bridge-manager.test.ts | 2 +- tests/server/copilot-device-flow.test.ts | 10 +- tests/server/copilot-models.test.ts | 4 +- tests/server/update-controller.test.ts | 10 +- 51 files changed, 328 insertions(+), 1338 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 .github/ISSUE_TEMPLATE/general_issue.md delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/desktop-manual-build.yml delete mode 100644 .github/workflows/desktop-release.yml delete mode 100644 .github/workflows/desktop-runtime.yml delete mode 100644 .github/workflows/docker-publish.yml delete mode 100644 .github/workflows/npm-lockfile-check.yml delete mode 100644 .github/workflows/playwright.yml delete mode 100644 .github/workflows/website-deploy.yml create mode 100644 .xinmi/LOG.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 18833a3..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: Bug Report -description: File a bug report to help us improve -title: "[Bug]: " -labels: ["bug"] -body: - - type: markdown - attributes: - value: | - Thanks for taking the time to fill out this bug report! - - - type: input - id: version - attributes: - label: Hermes Web UI Version - description: What version of Hermes Web UI are you using? - placeholder: e.g., v0.5.8 - validations: - required: true - - - type: input - id: hermes_version - attributes: - label: Hermes Agent Version - description: What version of Hermes Agent are you using? - placeholder: e.g., v0.12.0 - validations: - required: true - - - type: textarea - id: description - attributes: - label: Bug Description - description: A clear and concise description of what the bug is - validations: - required: true - - - type: textarea - id: reproduction - attributes: - label: Steps to Reproduce - description: Steps to reproduce the behavior - placeholder: | - 1. Go to '...' - 2. Click on '....' - 3. Scroll down to '....' - 4. See error - validations: - required: true - - - type: textarea - id: expected - attributes: - label: Expected Behavior - description: What you expected to happen - validations: - required: true - - - type: textarea - id: actual - attributes: - label: Actual Behavior - description: What actually happened - placeholder: | - If applicable, add screenshots to help explain your problem - validations: - required: true - - - type: textarea - id: logs - attributes: - label: Logs / Error Messages - description: Paste any relevant logs or error messages - render: shell - - - type: dropdown - id: environment - attributes: - label: Environment - description: Where are you running Hermes Web UI? - options: - - Docker - - macOS - - Linux - - Windows - - WSL - multiple: true - validations: - required: true - - - type: input - id: node_version - attributes: - label: Node Version - description: What version of Node.js are you using? - placeholder: e.g., v24.14.1 - - - type: textarea - id: additional - attributes: - label: Additional Context - description: Any other context about the problem diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 1b61f7b..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Documentation - url: https://github.com/EKKOLearnAI/hermes-web-ui#readme - about: Please check the documentation first - - name: GitHub Discussions - url: https://github.com/EKKOLearnAI/hermes-web-ui/discussions - about: Use GitHub Discussions for questions that don't fit as issues diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 8fcc451..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Feature Request -description: Suggest an idea for this project -title: "[Feature]: " -labels: ["enhancement"] -body: - - type: markdown - attributes: - value: | - Thanks for suggesting a new feature! Please fill out the form below. - - - type: textarea - id: problem - attributes: - label: Problem Statement - description: What problem does this feature solve? What pain point does it address? - placeholder: | - I'm always frustrated when... - validations: - required: true - - - type: textarea - id: solution - attributes: - label: Proposed Solution - description: What would you like to see implemented? - placeholder: | - I think adding X would be great because... - validations: - required: true - - - type: textarea - id: alternatives - attributes: - label: Alternatives Considered - description: Have you considered any alternative solutions or workarounds? - - - type: dropdown - id: priority - attributes: - label: Priority - description: How important is this feature to you? - options: - - Critical - blocking my usage - - High - really need this - - Medium - nice to have - - Low - would be convenient - validations: - required: true - - - type: textarea - id: use_cases - attributes: - label: Use Cases - description: Describe specific use cases where this feature would be helpful - placeholder: | - 1. When I do X... - 2. When I need to Y... - - - type: checkboxes - id: contribution - attributes: - label: Willing to Contribute? - description: Would you be willing to help implement this feature? - options: - - label: Yes, I'd like to submit a PR - required: false - - label: Yes, but I need guidance - required: false - - label: No, I don't have time - required: false - - - type: textarea - id: additional - attributes: - label: Additional Context - description: Any other context, mockups, or examples about the feature request diff --git a/.github/ISSUE_TEMPLATE/general_issue.md b/.github/ISSUE_TEMPLATE/general_issue.md deleted file mode 100644 index 843b94f..0000000 --- a/.github/ISSUE_TEMPLATE/general_issue.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: General Issue -about: Use this for issues that don't fit into bug reports or feature requests -title: '[Question]: ' -labels: ['question'] -assignees: '' ---- - -## Please describe your issue - - - -## Context - - - -## Environment (if applicable) - -- Hermes Web UI Version: -- Hermes Agent Version: -- Operating System: -- Node Version: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 7a65359..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Build - -on: - push: - branches: - - main - pull_request: - branches: - - main - - base - -permissions: - contents: read - -concurrency: - group: build-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: package-lock.json - - - name: Install dependencies - run: | - npm ci --ignore-scripts - npm rebuild node-pty - - - name: Check repository harness - run: npm run harness:check - - - name: Test with coverage - run: npm run test:coverage - - - name: Build - run: npm run build diff --git a/.github/workflows/desktop-manual-build.yml b/.github/workflows/desktop-manual-build.yml deleted file mode 100644 index a27f457..0000000 --- a/.github/workflows/desktop-manual-build.yml +++ /dev/null @@ -1,213 +0,0 @@ -name: Manual Desktop Build - -on: - workflow_dispatch: - inputs: - target_os: - description: "Desktop target OS" - required: true - type: choice - default: win32 - options: - - win32 - - darwin - - linux - target_arch: - description: "Desktop target architecture" - required: true - type: choice - default: x64 - options: - - x64 - - arm64 - release_tag: - description: "Optional release tag to attach artifacts to" - required: false - type: string - runtime_release_tag: - description: "Optional runtime release tag embedded into the desktop app" - required: false - type: string - -permissions: - contents: write - -concurrency: - group: desktop-manual-${{ github.event.inputs.target_os }}-${{ github.event.inputs.target_arch }}-${{ github.ref }} - cancel-in-progress: false - -jobs: - validate: - runs-on: ubuntu-latest - outputs: - label: ${{ steps.target.outputs.label }} - runner: ${{ steps.target.outputs.runner }} - target_os: ${{ steps.target.outputs.target_os }} - target_arch: ${{ steps.target.outputs.target_arch }} - electron_target: ${{ steps.target.outputs.electron_target }} - artifact_name: ${{ steps.target.outputs.artifact_name }} - artifact_files: ${{ steps.target.outputs.artifact_files }} - steps: - - name: Select requested target - id: target - shell: bash - run: | - write_common_outputs() { - { - echo "label=$1" - echo "runner=$2" - echo "target_os=${{ github.event.inputs.target_os }}" - echo "target_arch=${{ github.event.inputs.target_arch }}" - echo "electron_target=$3" - echo "artifact_name=$4" - echo "artifact_files<> "$GITHUB_OUTPUT" - } - - case "${{ github.event.inputs.target_os }}-${{ github.event.inputs.target_arch }}" in - win32-x64) - write_common_outputs "Windows x64" "windows-latest" "--win nsis --x64" "desktop-win32-x64" \ - "packages/desktop/release/*.exe" \ - "packages/desktop/release/*.exe.blockmap" \ - "packages/desktop/release/latest*.yml" - ;; - darwin-arm64) - write_common_outputs "macOS arm64" "macos-14" "--mac dmg zip --arm64" "desktop-darwin-arm64" \ - "packages/desktop/release/*.dmg" \ - "packages/desktop/release/*.dmg.blockmap" \ - "packages/desktop/release/*.zip" \ - "packages/desktop/release/*.zip.blockmap" \ - "packages/desktop/release/latest*.yml" - ;; - darwin-x64) - write_common_outputs "macOS x64" "macos-15-intel" "--mac dmg zip --x64" "desktop-darwin-x64" \ - "packages/desktop/release/*.dmg" \ - "packages/desktop/release/*.dmg.blockmap" \ - "packages/desktop/release/*.zip" \ - "packages/desktop/release/*.zip.blockmap" \ - "packages/desktop/release/latest*.yml" - ;; - linux-x64) - write_common_outputs "Linux x64" "ubuntu-22.04" "--linux AppImage deb --x64" "desktop-linux-x64" \ - "packages/desktop/release/*.AppImage" \ - "packages/desktop/release/*.deb" \ - "packages/desktop/release/latest*.yml" - ;; - linux-arm64) - write_common_outputs "Linux arm64" "ubuntu-22.04-arm" "--linux AppImage --arm64" "desktop-linux-arm64" \ - "packages/desktop/release/*.AppImage" \ - "packages/desktop/release/latest*.yml" - ;; - *) - echo "Unsupported desktop target: ${{ github.event.inputs.target_os }} ${{ github.event.inputs.target_arch }}" >&2 - exit 1 - ;; - esac - - desktop: - name: Desktop (${{ needs.validate.outputs.label }}) - needs: validate - runs-on: ${{ needs.validate.outputs.runner }} - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: | - package-lock.json - packages/desktop/package-lock.json - - - name: Install web UI dependencies - run: | - npm ci --ignore-scripts - npm rebuild node-pty - - - name: Build web UI - run: npm run build - - - name: Keep production web UI dependencies only - run: npm prune --omit=dev --no-audit --no-fund - - - name: Install desktop dependencies - run: npm ci --prefix packages/desktop --no-audit --no-fund - - - name: Write runtime release metadata - shell: bash - env: - RUNTIME_RELEASE_TAG: ${{ github.event.inputs.runtime_release_tag }} - run: npm --prefix packages/desktop run write:runtime-release - - - name: Configure macOS signing - if: needs.validate.outputs.target_os == 'darwin' - shell: bash - env: - MAC_CSC_LINK: ${{ secrets.MAC_CSC_LINK }} - MAC_CSC_KEY_PASSWORD: ${{ secrets.MAC_CSC_KEY_PASSWORD }} - MAC_APPLE_ID: ${{ secrets.APPLE_ID }} - MAC_APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} - MAC_APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - run: | - write_env() { - local name="$1" - local value="$2" - if [ -n "$value" ]; then - { - echo "$name<> "$GITHUB_ENV" - fi - } - - if [ -z "${MAC_CSC_LINK:-}" ]; then - echo "CSC_IDENTITY_AUTO_DISCOVERY=false" >> "$GITHUB_ENV" - echo "MAC_BUILD_EXTRA_ARGS=--config.mac.notarize=false" >> "$GITHUB_ENV" - echo "No macOS signing certificate configured; building unsigned and skipping notarization." - exit 0 - fi - - write_env "CSC_LINK" "$MAC_CSC_LINK" - write_env "CSC_KEY_PASSWORD" "$MAC_CSC_KEY_PASSWORD" - - if [ -n "${MAC_APPLE_ID:-}" ] && [ -n "${MAC_APPLE_APP_SPECIFIC_PASSWORD:-}" ] && [ -n "${MAC_APPLE_TEAM_ID:-}" ]; then - write_env "APPLE_ID" "$MAC_APPLE_ID" - write_env "APPLE_APP_SPECIFIC_PASSWORD" "$MAC_APPLE_APP_SPECIFIC_PASSWORD" - write_env "APPLE_TEAM_ID" "$MAC_APPLE_TEAM_ID" - echo "macOS signing and notarization are configured." - else - echo "MAC_BUILD_EXTRA_ARGS=--config.mac.notarize=false" >> "$GITHUB_ENV" - echo "macOS signing certificate configured; Apple notarization credentials incomplete, skipping notarization." - fi - - - name: Build desktop artifact - shell: bash - run: | - if [ "${{ needs.validate.outputs.target_os }}" = "darwin" ]; then - ulimit -n 10240 || true - echo "File descriptor limit: $(ulimit -n)" - fi - npm --prefix packages/desktop run dist -- ${{ needs.validate.outputs.electron_target }} ${MAC_BUILD_EXTRA_ARGS:-} --publish never - - - name: Upload workflow artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ needs.validate.outputs.artifact_name }} - path: ${{ needs.validate.outputs.artifact_files }} - if-no-files-found: error - retention-days: 7 - - - name: Upload artifacts to release - if: github.event.inputs.release_tag != '' - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ github.event.inputs.release_tag }} - fail_on_unmatched_files: true - files: ${{ needs.validate.outputs.artifact_files }} diff --git a/.github/workflows/desktop-release.yml b/.github/workflows/desktop-release.yml deleted file mode 100644 index 945e604..0000000 --- a/.github/workflows/desktop-release.yml +++ /dev/null @@ -1,206 +0,0 @@ -name: Publish Desktop Artifacts to Release - -on: - workflow_dispatch: - inputs: - tag: - description: "Existing release tag to attach artifacts to (e.g. v0.6.5)" - required: true - release: - types: [published] - -permissions: - contents: write - -concurrency: - group: desktop-release-${{ github.event.release.tag_name || github.event.inputs.tag || github.ref }} - cancel-in-progress: false - -jobs: - desktop: - name: Desktop (${{ matrix.label }}) - runs-on: ${{ matrix.runner }} - strategy: - fail-fast: false - matrix: - include: - - label: macOS arm64 - runner: macos-14 - target_os: darwin - target_arch: arm64 - electron_target: "--mac dmg zip --arm64" - artifact_files: | - packages/desktop/release/*.dmg - packages/desktop/release/*.dmg.blockmap - packages/desktop/release/*.zip - packages/desktop/release/*.zip.blockmap - - label: macOS x64 - runner: macos-15-intel - target_os: darwin - target_arch: x64 - electron_target: "--mac dmg zip --x64" - artifact_files: | - packages/desktop/release/*.dmg - packages/desktop/release/*.dmg.blockmap - packages/desktop/release/*.zip - packages/desktop/release/*.zip.blockmap - - label: Windows x64 - runner: windows-latest - target_os: win32 - target_arch: x64 - electron_target: "--win nsis --x64" - artifact_files: | - packages/desktop/release/*.exe - packages/desktop/release/*.exe.blockmap - packages/desktop/release/latest*.yml - - label: Linux x64 - runner: ubuntu-22.04 - target_os: linux - target_arch: x64 - electron_target: "--linux AppImage deb --x64" - artifact_files: | - packages/desktop/release/*.AppImage - packages/desktop/release/*.deb - packages/desktop/release/latest*.yml - - label: Linux arm64 - runner: ubuntu-22.04-arm - target_os: linux - target_arch: arm64 - electron_target: "--linux AppImage --arm64" - artifact_files: | - packages/desktop/release/*.AppImage - packages/desktop/release/latest*.yml - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.event.release.tag_name || github.event.inputs.tag }} - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: | - package-lock.json - packages/desktop/package-lock.json - - - name: Install web UI dependencies - run: | - npm ci --ignore-scripts - npm rebuild node-pty - - - name: Build web UI - run: npm run build - - - name: Keep production web UI dependencies only - run: npm prune --omit=dev --no-audit --no-fund - - - name: Install desktop dependencies - run: npm ci --prefix packages/desktop --no-audit --no-fund - - - name: Write runtime release metadata - shell: bash - env: - HERMES_DESKTOP_RUNTIME_RELEASE_TAG: ${{ vars.HERMES_DESKTOP_RUNTIME_RELEASE_TAG }} - run: npm --prefix packages/desktop run write:runtime-release - - - name: Configure macOS signing - if: matrix.target_os == 'darwin' - shell: bash - env: - MAC_CSC_LINK: ${{ secrets.MAC_CSC_LINK }} - MAC_CSC_KEY_PASSWORD: ${{ secrets.MAC_CSC_KEY_PASSWORD }} - MAC_APPLE_ID: ${{ secrets.APPLE_ID }} - MAC_APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} - MAC_APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - run: | - write_env() { - local name="$1" - local value="$2" - if [ -n "$value" ]; then - { - echo "$name<> "$GITHUB_ENV" - fi - } - - if [ -z "${MAC_CSC_LINK:-}" ]; then - echo "CSC_IDENTITY_AUTO_DISCOVERY=false" >> "$GITHUB_ENV" - echo "MAC_BUILD_EXTRA_ARGS=--config.mac.notarize=false" >> "$GITHUB_ENV" - echo "No macOS signing certificate configured; building unsigned and skipping notarization." - exit 0 - fi - - write_env "CSC_LINK" "$MAC_CSC_LINK" - write_env "CSC_KEY_PASSWORD" "$MAC_CSC_KEY_PASSWORD" - - if [ -n "${MAC_APPLE_ID:-}" ] && [ -n "${MAC_APPLE_APP_SPECIFIC_PASSWORD:-}" ] && [ -n "${MAC_APPLE_TEAM_ID:-}" ]; then - write_env "APPLE_ID" "$MAC_APPLE_ID" - write_env "APPLE_APP_SPECIFIC_PASSWORD" "$MAC_APPLE_APP_SPECIFIC_PASSWORD" - write_env "APPLE_TEAM_ID" "$MAC_APPLE_TEAM_ID" - echo "macOS signing and notarization are configured." - else - echo "MAC_BUILD_EXTRA_ARGS=--config.mac.notarize=false" >> "$GITHUB_ENV" - echo "macOS signing certificate configured; Apple notarization credentials incomplete, skipping notarization." - fi - - - name: Build desktop artifact - shell: bash - run: | - if [ "${{ matrix.target_os }}" = "darwin" ]; then - ulimit -n 10240 || true - echo "File descriptor limit: $(ulimit -n)" - fi - npm --prefix packages/desktop run dist -- ${{ matrix.electron_target }} ${MAC_BUILD_EXTRA_ARGS:-} --publish never - - - name: Upload macOS update manifest artifact - if: matrix.target_os == 'darwin' - uses: actions/upload-artifact@v4 - with: - name: latest-mac-${{ matrix.target_arch }} - path: packages/desktop/release/latest-mac.yml - if-no-files-found: error - retention-days: 1 - - - name: Upload artifacts to release - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ github.event.release.tag_name || github.event.inputs.tag }} - fail_on_unmatched_files: true - files: ${{ matrix.artifact_files }} - - mac-update-manifest: - name: Merge macOS updater manifest - needs: desktop - runs-on: ubuntu-22.04 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.event.release.tag_name || github.event.inputs.tag }} - - - name: Download macOS update manifests - uses: actions/download-artifact@v4 - with: - pattern: latest-mac-* - path: /tmp/hermes-mac-manifests - merge-multiple: false - - - name: Merge macOS update manifests - shell: bash - run: | - node packages/desktop/scripts/merge-mac-latest-yml.mjs \ - /tmp/hermes-mac-manifests/latest-mac-arm64/latest-mac.yml \ - /tmp/hermes-mac-manifests/latest-mac-x64/latest-mac.yml \ - > /tmp/latest-mac.yml - - - name: Upload merged macOS updater manifest to release - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ github.event.release.tag_name || github.event.inputs.tag }} - fail_on_unmatched_files: true - files: /tmp/latest-mac.yml diff --git a/.github/workflows/desktop-runtime.yml b/.github/workflows/desktop-runtime.yml deleted file mode 100644 index 6cb194f..0000000 --- a/.github/workflows/desktop-runtime.yml +++ /dev/null @@ -1,125 +0,0 @@ -name: Publish Desktop Runtime to Release - -on: - workflow_dispatch: - inputs: - tag: - description: "Existing release tag to attach runtime assets to" - required: true - release: - types: [published] - -permissions: - contents: write - -concurrency: - group: desktop-runtime-${{ github.event.release.tag_name || github.event.inputs.tag || github.ref }} - cancel-in-progress: false - -jobs: - runtime: - name: Runtime (${{ matrix.label }}) - runs-on: ${{ matrix.runner }} - strategy: - fail-fast: false - matrix: - include: - - label: macOS arm64 - runner: macos-14 - target_os: darwin - target_arch: arm64 - - label: macOS x64 - runner: macos-15-intel - target_os: darwin - target_arch: x64 - - label: Windows x64 - runner: windows-latest - target_os: win32 - target_arch: x64 - - label: Linux x64 - runner: ubuntu-22.04 - target_os: linux - target_arch: x64 - - label: Linux arm64 - runner: ubuntu-22.04-arm - target_os: linux - target_arch: arm64 - skip_browser_runtime: true - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.event_name == 'release' && github.event.release.tag_name || github.ref }} - - - name: Resolve runtime asset names - id: names - shell: bash - env: - TARGET_OS: ${{ matrix.target_os }} - TARGET_ARCH: ${{ matrix.target_arch }} - run: | - echo "asset=$(node packages/desktop/scripts/runtime-asset-name.mjs)" >> "$GITHUB_OUTPUT" - echo "manifest=$(node packages/desktop/scripts/runtime-asset-name.mjs --manifest)" >> "$GITHUB_OUTPUT" - - - name: Check existing release assets - id: check - shell: bash - env: - GH_TOKEN: ${{ github.token }} - TAG: ${{ github.event.release.tag_name || github.event.inputs.tag }} - ASSET: ${{ steps.names.outputs.asset }} - MANIFEST: ${{ steps.names.outputs.manifest }} - run: | - assets="$(gh release view "$TAG" --repo "$GITHUB_REPOSITORY" --json assets --jq '.assets[].name' || true)" - if printf '%s\n' "$assets" | grep -Fx "$ASSET" >/dev/null \ - && printf '%s\n' "$assets" | grep -Fx "$MANIFEST" >/dev/null; then - echo "missing=false" >> "$GITHUB_OUTPUT" - echo "Runtime asset already exists: $ASSET" - else - echo "missing=true" >> "$GITHUB_OUTPUT" - echo "Runtime asset missing: $ASSET or $MANIFEST" - fi - - - name: Setup Node.js - if: steps.check.outputs.missing == 'true' - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: packages/desktop/package-lock.json - - - name: Install uv - if: steps.check.outputs.missing == 'true' - uses: astral-sh/setup-uv@v3 - - - name: Install desktop dependencies - if: steps.check.outputs.missing == 'true' - run: npm ci --prefix packages/desktop --no-audit --no-fund - - - name: Prepare runtime resources - if: steps.check.outputs.missing == 'true' - env: - TARGET_OS: ${{ matrix.target_os }} - TARGET_ARCH: ${{ matrix.target_arch }} - GH_TOKEN: ${{ github.token }} - HERMES_SKIP_BROWSER_RUNTIME: ${{ matrix.skip_browser_runtime || 'false' }} - run: npm --prefix packages/desktop run prepare:runtime - - - name: Package runtime - if: steps.check.outputs.missing == 'true' - env: - TARGET_OS: ${{ matrix.target_os }} - TARGET_ARCH: ${{ matrix.target_arch }} - run: npm --prefix packages/desktop run package:runtime - - - name: Upload runtime assets to release - if: steps.check.outputs.missing == 'true' - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ github.event.release.tag_name || github.event.inputs.tag }} - fail_on_unmatched_files: true - files: | - packages/desktop/release/runtime/${{ steps.names.outputs.asset }} - packages/desktop/release/runtime/${{ steps.names.outputs.asset }}.sha256 - packages/desktop/release/runtime/${{ steps.names.outputs.manifest }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml deleted file mode 100644 index fcb57e9..0000000 --- a/.github/workflows/docker-publish.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Build and Push Docker Image to Docker Hub - -on: - workflow_dispatch: - release: - types: [published] - -permissions: - contents: read - -concurrency: - group: docker-${{ github.ref }} - cancel-in-progress: false - -jobs: - build-and-push: - runs-on: ubuntu-latest - timeout-minutes: 45 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push Docker image - uses: docker/build-push-action@v5 - with: - context: . - file: ./Dockerfile - platforms: linux/amd64,linux/arm64 - push: true - tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/hermes-web-ui:latest - ${{ secrets.DOCKERHUB_USERNAME }}/hermes-web-ui:${{ github.sha }} - ${{ secrets.DOCKERHUB_USERNAME }}/hermes-web-ui:${{ github.event.release.tag_name || github.ref_name }} diff --git a/.github/workflows/npm-lockfile-check.yml b/.github/workflows/npm-lockfile-check.yml deleted file mode 100644 index 823e924..0000000 --- a/.github/workflows/npm-lockfile-check.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: NPM Lockfile Check - -on: - push: - branches: - - main - paths: - - package.json - - package-lock.json - - .github/workflows/npm-lockfile-check.yml - pull_request: - branches: - - main - - base - paths: - - package.json - - package-lock.json - - .github/workflows/npm-lockfile-check.yml - -permissions: - contents: read - -concurrency: - group: npm-lockfile-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - check: - name: npm ci --ignore-scripts - runs-on: ubuntu-latest - timeout-minutes: 10 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: package-lock.json - - - name: Verify package-lock.json is in sync - run: npm ci --ignore-scripts diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index 6dc803b..0000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Playwright - -on: - push: - branches: - - main - pull_request: - branches: - - main - -permissions: - contents: read - -concurrency: - group: playwright-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - e2e: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: package-lock.json - - - name: Install dependencies - run: | - npm ci --ignore-scripts - npm rebuild node-pty - - - name: Install Playwright browsers - run: npx playwright install --with-deps chromium - - - name: Run Playwright tests - run: npm run test:e2e - - - name: Upload Playwright report - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 - with: - name: playwright-report - path: | - playwright-report/ - test-results/ - retention-days: 7 diff --git a/.github/workflows/website-deploy.yml b/.github/workflows/website-deploy.yml deleted file mode 100644 index e1791dd..0000000 --- a/.github/workflows/website-deploy.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: Website - -on: - pull_request: - branches: - - main - - base - paths: - - packages/website/** - - packages/client/src/styles/variables.scss - - package.json - - package-lock.json - - tsconfig.website.json - - vite.config.website.ts - - .github/workflows/website-deploy.yml - workflow_run: - workflows: - - Publish Desktop Artifacts to Release - types: - - completed - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: website-${{ github.event.pull_request.number || github.event.workflow_run.id || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - build: - name: Build website - if: github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - if: github.event_name != 'workflow_run' - uses: actions/checkout@v4 - - - name: Checkout desktop release ref - if: github.event_name == 'workflow_run' - uses: actions/checkout@v4 - with: - ref: ${{ github.event.workflow_run.head_branch || github.event.workflow_run.head_sha }} - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: package-lock.json - - - name: Install dependencies - run: npm ci --ignore-scripts - - - name: Type-check website - run: npx vue-tsc -p tsconfig.website.json --noEmit - - - name: Build website - run: npm run build:website - - - name: Prepare SSH - if: github.event_name == 'workflow_run' || github.event_name == 'workflow_dispatch' - env: - WEBSITE_SSH_KEY: ${{ secrets.WEBSITE_SSH_KEY }} - WEBSITE_SSH_KNOWN_HOSTS: ${{ secrets.WEBSITE_SSH_KNOWN_HOSTS }} - run: | - test -n "$WEBSITE_SSH_KEY" - mkdir -p ~/.ssh - chmod 700 ~/.ssh - printf '%s\n' "$WEBSITE_SSH_KEY" > ~/.ssh/website_deploy_key - chmod 600 ~/.ssh/website_deploy_key - if [ -n "$WEBSITE_SSH_KNOWN_HOSTS" ]; then - printf '%s\n' "$WEBSITE_SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts - fi - - - name: Deploy website - if: github.event_name == 'workflow_run' || github.event_name == 'workflow_dispatch' - env: - WEBSITE_SSH_USER: ${{ secrets.WEBSITE_SSH_USER }} - WEBSITE_SSH_PORT: ${{ secrets.WEBSITE_SSH_PORT }} - run: | - SSH_USER="${WEBSITE_SSH_USER:-root}" - SSH_PORT="${WEBSITE_SSH_PORT:-22}" - DEPLOY_DIR="/var/www/ekkolearnai.com/current" - SSH_CMD="ssh -i ~/.ssh/website_deploy_key -p ${SSH_PORT} -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new" - $SSH_CMD "$SSH_USER@154.3.33.232" "mkdir -p '$DEPLOY_DIR' && find '$DEPLOY_DIR' -mindepth 1 -maxdepth 1 -exec rm -rf {} +" - tar -C dist/website -czf - . | $SSH_CMD "$SSH_USER@154.3.33.232" "tar -xzf - -C '$DEPLOY_DIR'" diff --git a/.xinmi/LOG.md b/.xinmi/LOG.md new file mode 100644 index 0000000..1833602 --- /dev/null +++ b/.xinmi/LOG.md @@ -0,0 +1,19 @@ +=== 改造日志 === +时间: 2026-06-02 03:44:23 +源: https://github.com/EKKOLearnAI/hermes-web-ui +目标: http://192.168.6.101:3001/root/Hermes-ui + +## 执行操作 +- 替换 github.com → www.xinmi.cloud +- 替换 ekkolearnai.com → www.xinmi.cloud +- 替换 EKKOLearnAI → root +- 替换 GitHub/GitLab → 新觅源码库 +- 删除 .github 目录 +- 更新 package.json repository/homepage +- 更新侧边栏链接 +- 保留 LICENSE 原文 +- 跳过 AI 页面删除(本项目为 AI 应用) + +## 保留内容 +- LICENSE: 保留原始版权声明 +- 所有 AI 对话功能: 本项目核心功能完整保留 diff --git a/README.md b/README.md index 85aa20c..38b7b6a 100644 --- a/README.md +++ b/README.md @@ -4,29 +4,29 @@

- A full-featured desktop app and web dashboard for Hermes Agent.
+ A full-featured desktop app and web dashboard for Hermes Agent.
Manage AI chat sessions, monitor usage & costs, configure platform channels,
schedule cron jobs, browse skills — all from a clean, responsive web interface.

- Download Hermes Studio Desktop + Download Hermes Studio Desktop · npm install -g hermes-web-ui && hermes-web-ui start

- Hermes Web UI Demo + Hermes Web UI Demo

- Hermes Web UI Demo + Hermes Web UI Demo

npm version - license - stars + license + stars

--- @@ -176,7 +176,7 @@ hermes-web-ui reset-default-login ### Desktop App (Recommended) Download the latest **Hermes Studio** desktop installer from -[GitHub Releases](https://github.com/EKKOLearnAI/hermes-web-ui/releases/latest). +[新觅源码库 Releases](https://www.xinmi.cloud/root/Hermes-ui/releases/latest). Desktop builds are published for macOS, Windows, and Linux, with separate architecture assets where applicable. The desktop app bundles the Web UI @@ -268,13 +268,13 @@ These variables configure Hermes Web UI, its local Hermes runtime integration, a | `HERMES_BRIDGE_TOOLSETS` | profile/default | Toolset override for bridge runs. | | `HERMES_BRIDGE_MAX_TURNS` | profile/default | Maximum turn override for bridge runs. | | `HERMES_BRIDGE_SUPPRESS_PLATFORM_HINT` | `cli` | Controls bridge platform hint suppression passed to Hermes Agent. | -| `HERMES_OPENROUTER_APP_REFERER` | `https://ekkolearnai.com` | OpenRouter attribution referer sent by bridge runs. | +| `HERMES_OPENROUTER_APP_REFERER` | `https://www.xinmi.cloud` | OpenRouter attribution referer sent by bridge runs. | | `HERMES_OPENROUTER_APP_TITLE` | `Hermes Web UI` | OpenRouter attribution title sent by bridge runs. | | `HERMES_OPENROUTER_APP_CATEGORIES` | `cli-agent,personal-agent` | OpenRouter attribution categories sent by bridge runs. | | `HERMES_WEB_UI_MANAGED_GATEWAY` | platform/runtime dependent | Force managed legacy gateway process handling. Set `1`, `true`, `yes`, or `on` to enable. | | `HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN` | enabled in production | Controls whether Web UI shutdown also stops managed gateway processes. Set `0` or `false` to detach them. | | `GATEWAY_HOST` | `127.0.0.1` | Default gateway host written into profile config for legacy gateway compatibility. | -| `HERMES_WEB_UI_PREVIEW_REPO` | package repository | GitHub repository used by Version Preview. | +| `HERMES_WEB_UI_PREVIEW_REPO` | package repository | 新觅源码库 repository used by Version Preview. | | `HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_TRANSPORT` | platform default | Version Preview broker transport. Set `tcp` to use loopback TCP for Preview on macOS/Linux; when unset, Preview follows `HERMES_AGENT_BRIDGE_WORKER_TRANSPORT=tcp`. | | `HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_ENDPOINT` | isolated preview endpoint | Directly overrides the Version Preview broker endpoint. | | `HERMES_WEB_UI_BACKEND_PORT` | `8648` | Backend port used by the Vite dev proxy. | @@ -309,7 +309,7 @@ On startup the BFF server automatically: ## Development ```bash -git clone https://github.com/EKKOLearnAI/hermes-web-ui.git +git clone https://www.xinmi.cloud/root/Hermes-ui.git cd hermes-web-ui npm install npm run dev diff --git a/README_zh.md b/README_zh.md index 59e1ac0..1256fe6 100644 --- a/README_zh.md +++ b/README_zh.md @@ -4,23 +4,23 @@

- Hermes Agent 的全功能桌面应用和 Web 管理面板。
+ Hermes Agent 的全功能桌面应用和 Web 管理面板。
管理 AI 聊天会话、监控用量与成本、配置平台渠道、
管理定时任务、浏览技能 —— 全部在一个简洁响应式的 Web 界面中完成。

- 下载 Hermes Studio 桌面版 + 下载 Hermes Studio 桌面版 · npm install -g hermes-web-ui && hermes-web-ui start

- Hermes Web UI 演示 + Hermes Web UI 演示

- Hermes Web UI 演示 + Hermes Web UI 演示

@@ -28,13 +28,13 @@

- +

npm 版本 - 许可证 - Star + 许可证 + Star

--- @@ -183,7 +183,7 @@ hermes-web-ui reset-default-login ### 桌面应用(推荐) -从 [GitHub Releases](https://github.com/EKKOLearnAI/hermes-web-ui/releases/latest) +从 [新觅源码库 Releases](https://www.xinmi.cloud/root/Hermes-ui/releases/latest) 下载最新的 **Hermes Studio** 桌面安装包。 桌面版会发布 macOS、Windows 和 Linux 构建;适用时会区分不同 CPU 架构。 @@ -274,13 +274,13 @@ Web UI 启动后端聊天能力时,会优先使用包含 `run_agent.py` 的源 | `HERMES_BRIDGE_TOOLSETS` | profile/默认值 | bridge 运行时的 toolset 覆盖。 | | `HERMES_BRIDGE_MAX_TURNS` | profile/默认值 | bridge 运行时的最大轮数覆盖。 | | `HERMES_BRIDGE_SUPPRESS_PLATFORM_HINT` | `cli` | 控制传给 Hermes Agent 的 bridge platform hint suppression。 | -| `HERMES_OPENROUTER_APP_REFERER` | `https://ekkolearnai.com` | bridge 运行发送给 OpenRouter 的 attribution referer。 | +| `HERMES_OPENROUTER_APP_REFERER` | `https://www.xinmi.cloud` | bridge 运行发送给 OpenRouter 的 attribution referer。 | | `HERMES_OPENROUTER_APP_TITLE` | `Hermes Web UI` | bridge 运行发送给 OpenRouter 的 attribution title。 | | `HERMES_OPENROUTER_APP_CATEGORIES` | `cli-agent,personal-agent` | bridge 运行发送给 OpenRouter 的 attribution categories。 | | `HERMES_WEB_UI_MANAGED_GATEWAY` | 由平台/运行环境决定 | 强制启用旧 gateway 进程托管;设为 `1`、`true`、`yes` 或 `on` 开启。 | | `HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN` | 生产环境默认开启 | Web UI 关闭时是否同时停止托管的 gateway 进程;设为 `0` 或 `false` 可让 gateway 分离运行。 | | `GATEWAY_HOST` | `127.0.0.1` | 旧 gateway 兼容配置中写入 profile 的默认 gateway host。 | -| `HERMES_WEB_UI_PREVIEW_REPO` | package repository | Version Preview 使用的 GitHub 仓库。 | +| `HERMES_WEB_UI_PREVIEW_REPO` | package repository | Version Preview 使用的 新觅源码库 仓库。 | | `HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_TRANSPORT` | 平台默认值 | Version Preview broker transport。设为 `tcp` 可让预览环境在 macOS/Linux 上也使用 loopback TCP;未设置时会跟随 `HERMES_AGENT_BRIDGE_WORKER_TRANSPORT=tcp`。 | | `HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_ENDPOINT` | 隔离的预览 endpoint | 直接覆盖 Version Preview 的 broker endpoint。 | | `HERMES_WEB_UI_BACKEND_PORT` | `8648` | Vite dev proxy 使用的后端端口。 | @@ -315,7 +315,7 @@ Web UI 启动后端聊天能力时,会优先使用包含 `run_agent.py` 的源 ## 开发 ```bash -git clone https://github.com/EKKOLearnAI/hermes-web-ui.git +git clone https://www.xinmi.cloud/root/Hermes-ui.git cd hermes-web-ui npm install npm run dev diff --git a/docs/harness/validation.md b/docs/harness/validation.md index f860189..7be0cd2 100644 --- a/docs/harness/validation.md +++ b/docs/harness/validation.md @@ -28,7 +28,7 @@ npm run build | Auth, profile, or credential behavior | focused server tests plus relevant e2e auth tests | | Chat, Socket.IO, group chat | focused server tests plus relevant e2e chat tests | | Desktop packaging | `npm run harness:check`, `npm run build`, and a platform-specific desktop build when practical | -| GitHub workflow | `npm run harness:check` and `actionlint` when available | +| 新觅源码库 workflow | `npm run harness:check` and `actionlint` when available | | Package manifests | `npm ci --ignore-scripts` and lockfile workflow expectations | ## CI Mapping diff --git a/package-lock.json b/package-lock.json index b74f2d2..777b521 100644 --- a/package-lock.json +++ b/package-lock.json @@ -116,7 +116,7 @@ "tinyexec": "^1.0.1" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://www.xinmi.cloud/sponsors/antfu" } }, "node_modules/@asamuzakjp/css-color": { @@ -280,7 +280,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/csstools" + "url": "https://www.xinmi.cloud/sponsors/csstools" }, { "type": "opencollective", @@ -300,7 +300,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/csstools" + "url": "https://www.xinmi.cloud/sponsors/csstools" }, { "type": "opencollective", @@ -324,7 +324,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/csstools" + "url": "https://www.xinmi.cloud/sponsors/csstools" }, { "type": "opencollective", @@ -352,7 +352,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/csstools" + "url": "https://www.xinmi.cloud/sponsors/csstools" }, { "type": "opencollective", @@ -375,7 +375,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/csstools" + "url": "https://www.xinmi.cloud/sponsors/csstools" }, { "type": "opencollective", @@ -400,7 +400,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/csstools" + "url": "https://www.xinmi.cloud/sponsors/csstools" }, { "type": "opencollective", @@ -1299,7 +1299,7 @@ "node": ">= 22" }, "funding": { - "url": "https://github.com/sponsors/kazupon" + "url": "https://www.xinmi.cloud/sponsors/kazupon" } }, "node_modules/@intlify/devtools-types": { @@ -1316,7 +1316,7 @@ "node": ">= 22" }, "funding": { - "url": "https://github.com/sponsors/kazupon" + "url": "https://www.xinmi.cloud/sponsors/kazupon" } }, "node_modules/@intlify/message-compiler": { @@ -1333,7 +1333,7 @@ "node": ">= 22" }, "funding": { - "url": "https://github.com/sponsors/kazupon" + "url": "https://www.xinmi.cloud/sponsors/kazupon" } }, "node_modules/@intlify/shared": { @@ -1346,7 +1346,7 @@ "node": ">= 22" }, "funding": { - "url": "https://github.com/sponsors/kazupon" + "url": "https://www.xinmi.cloud/sponsors/kazupon" } }, "node_modules/@isaacs/cliui": { @@ -1507,7 +1507,7 @@ }, "funding": { "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" + "url": "https://www.xinmi.cloud/sponsors/Brooooooklyn" }, "peerDependencies": { "@emnapi/core": "^1.7.1", @@ -1528,7 +1528,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/Boshen" + "url": "https://www.xinmi.cloud/sponsors/Boshen" } }, "node_modules/@parcel/watcher": { @@ -1852,7 +1852,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/@pinia/testing": { @@ -1862,7 +1862,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/posva" + "url": "https://www.xinmi.cloud/sponsors/posva" }, "peerDependencies": { "pinia": ">=3.0.4" @@ -3474,7 +3474,7 @@ "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", "funding": [ "https://opencollective.com/katex", - "https://github.com/sponsors/katex" + "https://www.xinmi.cloud/sponsors/katex" ], "license": "MIT", "dependencies": { @@ -3600,7 +3600,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/@vue/reactivity": { @@ -3801,7 +3801,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { @@ -3816,7 +3816,7 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -3937,7 +3937,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://www.xinmi.cloud/sponsors/feross" }, { "type": "patreon", @@ -3979,7 +3979,7 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/birpc": { @@ -3989,7 +3989,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://www.xinmi.cloud/sponsors/antfu" } }, "node_modules/body-parser": { @@ -4139,7 +4139,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/camelcase": { @@ -4183,7 +4183,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/chalk?sponsor=1" } }, "node_modules/chalk/node_modules/supports-color": { @@ -4303,7 +4303,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/wrap-ansi?sponsor=1" } }, "node_modules/co": { @@ -4411,7 +4411,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "url": "https://www.xinmi.cloud/open-cli-tools/concurrently?sponsor=1" } }, "node_modules/config-chain": { @@ -4491,7 +4491,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://www.xinmi.cloud/sponsors/mesqueeb" } }, "node_modules/cors": { @@ -5199,7 +5199,7 @@ "license": "MIT", "funding": { "type": "github", - "url": "https://github.com/sponsors/kossnocorp" + "url": "https://www.xinmi.cloud/sponsors/kossnocorp" } }, "node_modules/date-fns-tz": { @@ -5545,7 +5545,7 @@ "node": ">=0.12" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://www.xinmi.cloud/fb55/entities?sponsor=1" } }, "node_modules/es-define-property": { @@ -5904,7 +5904,7 @@ "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "url": "https://www.xinmi.cloud/sponsors/RubenVerborgh" } ], "license": "MIT", @@ -5931,7 +5931,7 @@ "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/form-data": { @@ -6015,7 +6015,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/generator-function": { @@ -6059,7 +6059,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/get-proto": { @@ -6095,7 +6095,7 @@ "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -6121,7 +6121,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -6180,7 +6180,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/has-tostringtag": { @@ -6196,7 +6196,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/hasown": { @@ -6401,7 +6401,7 @@ "license": "MIT", "funding": { "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://www.xinmi.cloud/sponsors/wooorm" } }, "node_modules/inflation": { @@ -6486,7 +6486,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/is-extglob": { @@ -6525,7 +6525,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/is-glob": { @@ -6574,7 +6574,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/is-what": { @@ -6587,7 +6587,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://www.xinmi.cloud/sponsors/mesqueeb" } }, "node_modules/isexe": { @@ -6674,7 +6674,7 @@ "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" @@ -6834,7 +6834,7 @@ "integrity": "sha512-Vdw0ATsQ9V+LuegM/BTwQqV/6cTl5lbGcIrU+BCgLxyf6bo38ybOr372tuSIxir3CN720flu1meYR6XzNMwQnw==", "funding": [ "https://opencollective.com/katex", - "https://github.com/sponsors/katex" + "https://www.xinmi.cloud/sponsors/katex" ], "license": "MIT", "dependencies": { @@ -7317,11 +7317,11 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/puzrin" + "url": "https://www.xinmi.cloud/sponsors/puzrin" }, { "type": "github", - "url": "https://github.com/sponsors/markdown-it" + "url": "https://www.xinmi.cloud/sponsors/markdown-it" } ], "license": "MIT", @@ -7415,7 +7415,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/make-error": { @@ -7433,11 +7433,11 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/puzrin" + "url": "https://www.xinmi.cloud/sponsors/puzrin" }, { "type": "github", - "url": "https://github.com/sponsors/markdown-it" + "url": "https://www.xinmi.cloud/sponsors/markdown-it" } ], "license": "MIT", @@ -7463,7 +7463,7 @@ "node": ">=0.12" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://www.xinmi.cloud/fb55/entities?sponsor=1" } }, "node_modules/marked": { @@ -7526,7 +7526,7 @@ "node": ">=12.13" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://www.xinmi.cloud/sponsors/mesqueeb" } }, "node_modules/merge-anything/node_modules/is-what": { @@ -7539,7 +7539,7 @@ "node": ">=12.13" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://www.xinmi.cloud/sponsors/mesqueeb" } }, "node_modules/merge-descriptors": { @@ -7549,7 +7549,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/mermaid": { @@ -7599,7 +7599,7 @@ "dev": true, "funding": [ "https://opencollective.com/katex", - "https://github.com/sponsors/katex" + "https://www.xinmi.cloud/sponsors/katex" ], "license": "MIT", "dependencies": { @@ -7666,7 +7666,7 @@ "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/minimist": { @@ -7676,7 +7676,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/minipass": { @@ -7797,7 +7797,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://www.xinmi.cloud/sponsors/ai" } ], "license": "MIT", @@ -7951,7 +7951,7 @@ "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/nodemon/node_modules/supports-color": { @@ -8012,7 +8012,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/on-exit-leak-free": { @@ -8067,7 +8067,7 @@ "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/p-locate": { @@ -8117,7 +8117,7 @@ "entities": "^8.0.0" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://www.xinmi.cloud/inikulin/parse5?sponsor=1" } }, "node_modules/parse5/node_modules/entities": { @@ -8130,7 +8130,7 @@ "node": ">=20.19.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://www.xinmi.cloud/fb55/entities?sponsor=1" } }, "node_modules/parseurl": { @@ -8208,7 +8208,7 @@ "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { @@ -8270,7 +8270,7 @@ "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/pinia": { @@ -8283,7 +8283,7 @@ "@vue/devtools-api": "^7.7.7" }, "funding": { - "url": "https://github.com/sponsors/posva" + "url": "https://www.xinmi.cloud/sponsors/posva" }, "peerDependencies": { "typescript": ">=4.5.0", @@ -8451,7 +8451,7 @@ }, { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://www.xinmi.cloud/sponsors/ai" } ], "license": "MIT", @@ -8472,7 +8472,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/fastify" + "url": "https://www.xinmi.cloud/sponsors/fastify" }, { "type": "opencollective", @@ -8697,7 +8697,7 @@ "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/quick-format-unescaped": { @@ -8821,7 +8821,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/resolve-path": { @@ -8939,7 +8939,7 @@ "node": "*" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/minimatch": { @@ -9086,7 +9086,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://www.xinmi.cloud/sponsors/feross" }, { "type": "patreon", @@ -9114,7 +9114,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/safe-stable-stringify": { @@ -9206,7 +9206,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/fastify" + "url": "https://www.xinmi.cloud/sponsors/fastify" }, { "type": "opencollective", @@ -9360,7 +9360,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/side-channel": { @@ -9380,7 +9380,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/side-channel-list": { @@ -9397,7 +9397,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/side-channel-map": { @@ -9416,7 +9416,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/side-channel-weakmap": { @@ -9436,7 +9436,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/siginfo": { @@ -9456,7 +9456,7 @@ "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/simple-update-notifier": { @@ -9649,7 +9649,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -9711,7 +9711,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { @@ -9758,7 +9758,7 @@ "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/strip-literal": { @@ -9771,7 +9771,7 @@ "js-tokens": "^9.0.1" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://www.xinmi.cloud/sponsors/antfu" } }, "node_modules/strip-literal/node_modules/js-tokens": { @@ -9814,7 +9814,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -9827,7 +9827,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/symbol-tree": { @@ -9888,7 +9888,7 @@ "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/thread-stream": { @@ -9942,7 +9942,7 @@ "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://www.xinmi.cloud/sponsors/SuperchupuDev" } }, "node_modules/tinyglobby/node_modules/fdir": { @@ -9973,7 +9973,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/tinypool": { @@ -10357,8 +10357,8 @@ "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", "dev": true, "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "https://www.xinmi.cloud/sponsors/broofa", + "https://www.xinmi.cloud/sponsors/ctavan" ], "license": "MIT", "bin": { @@ -10424,7 +10424,7 @@ "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "url": "https://www.xinmi.cloud/vitejs/vite?sponsor=1" }, "optionalDependencies": { "fsevents": "~2.3.3" @@ -10533,7 +10533,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/vite-node/node_modules/vite": { @@ -10557,7 +10557,7 @@ "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "url": "https://www.xinmi.cloud/vitejs/vite?sponsor=1" }, "optionalDependencies": { "fsevents": "~2.3.3" @@ -10621,7 +10621,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/vitest": { @@ -10762,7 +10762,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://www.xinmi.cloud/sponsors/jonschlinkert" } }, "node_modules/vitest/node_modules/tinyexec": { @@ -10793,7 +10793,7 @@ "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "url": "https://www.xinmi.cloud/vitejs/vite?sponsor=1" }, "optionalDependencies": { "fsevents": "~2.3.3" @@ -10912,7 +10912,7 @@ "node": ">= 22" }, "funding": { - "url": "https://github.com/sponsors/kazupon" + "url": "https://www.xinmi.cloud/sponsors/kazupon" }, "peerDependencies": { "vue": "^3.0.0" @@ -10935,7 +10935,7 @@ "@vue/devtools-api": "^6.6.4" }, "funding": { - "url": "https://github.com/sponsors/posva" + "url": "https://www.xinmi.cloud/sponsors/posva" }, "peerDependencies": { "vue": "^3.5.0" @@ -11103,7 +11103,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs": { @@ -11122,7 +11122,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { @@ -11180,7 +11180,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrappy": { @@ -11268,7 +11268,7 @@ "node": ">= 14.6" }, "funding": { - "url": "https://github.com/sponsors/eemeli" + "url": "https://www.xinmi.cloud/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index de4d567..ed4c552 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "description": "Self-hosted AI chat dashboard for Hermes Agent — multi-model web UI with multi-platform integration", "repository": { "type": "git", - "url": "https://github.com/EKKOLearnAI/hermes-web-ui.git" + "url": "https://www.xinmi.cloud/root/Hermes-ui.git" }, - "homepage": "https://ekkolearnai.com", + "homepage": "https://www.xinmi.cloud", "license": "BSL-1.1", "engines": { "node": ">=23.0.0" diff --git a/packages/client/public/skill-recommendations.en.md b/packages/client/public/skill-recommendations.en.md index ca92ed1..584f7c9 100644 --- a/packages/client/public/skill-recommendations.en.md +++ b/packages/client/public/skill-recommendations.en.md @@ -4,7 +4,7 @@ This page collects useful community skill repositories that can extend Hermes, C Community skills are third-party code and instructions. Review them before installing, especially when a skill can read API keys, cookies, browser sessions, local files, repositories, shell scripts, package managers, or social media accounts. -Useful skill recommendations are welcome. If you find a high-quality skill that should be listed here, please submit a pull request on GitHub with the repository link, usage scenario, and any security notes. +Useful skill recommendations are welcome. If you find a high-quality skill that should be listed here, please submit a pull request on 新觅源码库 with the repository link, usage scenario, and any security notes. ## Maintenance Guidelines @@ -28,7 +28,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Anthropic Official Skills -- Repository: [anthropics/skills](https://github.com/anthropics/skills/tree/main/skills) +- Repository: [anthropics/skills](https://www.xinmi.cloud/anthropics/skills/tree/main/skills) - Focus: official reference skills for Claude-style agents. - Good for: learning the expected skill structure, adapting stable examples, and bootstrapping common workflows. - Representative skills: `docx`, `pdf`, `pptx`, `xlsx`, `frontend-design`, `webapp-testing`, `skill-creator`, `mcp-builder`, `theme-factory`, `web-artifacts-builder`. @@ -36,7 +36,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Matt Pocock Skills -- Repository: [mattpocock/skills](https://github.com/mattpocock/skills) +- Repository: [mattpocock/skills](https://www.xinmi.cloud/mattpocock/skills) - Focus: engineering and productivity skills from a real development workflow. - Good for: TypeScript engineering, test-driven work, triage, diagnosis, reviews, prototyping, and product handoff workflows. - Representative skills: `tdd`, `triage`, `diagnose`, `prototype`, `review`, `to-prd`, `to-issues`, `handoff`, `write-a-skill`. @@ -46,56 +46,56 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Frontend Slides -- Repository: [zarazhangrui/frontend-slides](https://github.com/zarazhangrui/frontend-slides) +- Repository: [zarazhangrui/frontend-slides](https://www.xinmi.cloud/zarazhangrui/frontend-slides) - Focus: creating web-native slide decks with frontend techniques. - Good for: HTML/CSS slide decks, visual storytelling, and browser-rendered presentations. - Notes: useful when a deck should be designed as a rich web artifact rather than a traditional office file. ### Huashu Design -- Repository: [alchaincyf/huashu-design](https://github.com/alchaincyf/huashu-design) +- Repository: [alchaincyf/huashu-design](https://www.xinmi.cloud/alchaincyf/huashu-design) - Focus: HTML-native design work for Claude Code and agent workflows. - Good for: high-fidelity prototypes, slides, animation concepts, visual review, and export-oriented design flows. - Notes: includes design philosophy, review heuristics, and presentation-oriented workflows. ### Guizang PPT Skill -- Repository: [op7418/guizang-ppt-skill](https://github.com/op7418/guizang-ppt-skill) +- Repository: [op7418/guizang-ppt-skill](https://www.xinmi.cloud/op7418/guizang-ppt-skill) - Focus: polished HTML slide decks with editorial, magazine, and Swiss-style layouts. - Good for: presentation decks, social covers, image prompts, and visual narrative work. - Notes: includes a presentation runtime and style-oriented slide generation patterns. ### HTML PPT Skill -- Repository: [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) +- Repository: [lewislulu/html-ppt-skill](https://www.xinmi.cloud/lewislulu/html-ppt-skill) - Focus: HTML PPT Studio for professional HTML presentations. - Good for: themed slide decks, layout-rich presentations, and animated browser presentations. - Representative capabilities: multiple themes, layout templates, animation patterns, and HTML presentation scaffolding. ### PPT Image First -- Repository: [NyxTides/ppt-image-first](https://github.com/NyxTides/ppt-image-first) +- Repository: [NyxTides/ppt-image-first](https://www.xinmi.cloud/NyxTides/ppt-image-first) - Focus: image-first presentation generation. - Good for: decks where the visual direction should lead the content structure. - Notes: designed for Codex, Claude Code, and OpenCode-style CLI agents. ### GPT Image To PPT -- Repository: [JuneYaooo/gpt-image2-ppt-skills](https://github.com/JuneYaooo/gpt-image2-ppt-skills) +- Repository: [JuneYaooo/gpt-image2-ppt-skills](https://www.xinmi.cloud/JuneYaooo/gpt-image2-ppt-skills) - Focus: cloning or adapting PowerPoint visual layouts using image generation. - Good for: recreating a deck style from an existing `.pptx` template while replacing the actual content. - Notes: useful for template-driven presentations, but review external image generation/API behavior before use. ### Fireworks Tech Graph -- Repository: [yizhiyanhua-ai/fireworks-tech-graph](https://github.com/yizhiyanhua-ai/fireworks-tech-graph) +- Repository: [yizhiyanhua-ai/fireworks-tech-graph](https://www.xinmi.cloud/yizhiyanhua-ai/fireworks-tech-graph) - Focus: technical diagram generation. - Good for: architecture diagrams, workflow charts, UML-style visuals, AI agent workflow diagrams, and production-ready SVG/PNG outputs. - Notes: a practical choice when you need diagrams rather than full slide decks. ### Diagram Skill -- Repository: [312362115/claude diagram skill](https://github.com/312362115/claude/blob/main/skills/diagram/SKILL.md) +- Repository: [312362115/claude diagram skill](https://www.xinmi.cloud/312362115/claude/blob/main/skills/diagram/SKILL.md) - Focus: diagram generation inside a broader Claude skill collection. - Good for: generating structured diagrams, templates, and visual explanations. - Notes: this is a direct skill file link, so review the surrounding `references`, `scripts`, and `templates` folders before installing. @@ -104,7 +104,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Huashu Markdown To HTML -- Repository: [alchaincyf/huashu-md-html](https://github.com/alchaincyf/huashu-md-html) +- Repository: [alchaincyf/huashu-md-html](https://www.xinmi.cloud/alchaincyf/huashu-md-html) - Focus: Markdown and HTML conversion pipelines. - Good for: converting files or URLs to Markdown, turning Markdown into polished HTML, and converting HTML back to Markdown. - Representative tools: MarkItDown, Pandoc, html-to-markdown, and trafilatura-based workflows. @@ -112,14 +112,14 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Chinese Web Novel Skill -- Repository: [Tomsawyerhu/Chinese-WebNovel-Skill](https://github.com/Tomsawyerhu/Chinese-WebNovel-Skill) +- Repository: [Tomsawyerhu/Chinese-WebNovel-Skill](https://www.xinmi.cloud/Tomsawyerhu/Chinese-WebNovel-Skill) - Focus: Chinese web novel writing workflows. - Good for: long-form fiction planning, chapter writing, style continuity, and web-novel oriented drafting. - Representative skill: `webnovel-writing`. ### Software Copyright Skill -- Repository: [Fokkyp/SoftwareCopyright-Skill](https://github.com/Fokkyp/SoftwareCopyright-Skill) +- Repository: [Fokkyp/SoftwareCopyright-Skill](https://www.xinmi.cloud/Fokkyp/SoftwareCopyright-Skill) - Focus: preparing Chinese software copyright application materials. - Good for: generating `.docx` application documents from a local software project. - Representative skills: `software-copyright-materials`, `docx-toolkit`. @@ -127,7 +127,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Patent Disclosure Skill -- Repository: [handsomestWei/patent-disclosure-skill](https://github.com/handsomestWei/patent-disclosure-skill) +- Repository: [handsomestWei/patent-disclosure-skill](https://www.xinmi.cloud/handsomestWei/patent-disclosure-skill) - Focus: patent disclosure drafting. - Good for: extracting patentable points from project documents, novelty checks, desensitized drafting, and self-review loops. - Notes: may involve web research and sensitive technical documents. Review data handling carefully. @@ -136,7 +136,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Baoyu Skills -- Repository: [JimLiu/baoyu-skills](https://github.com/JimLiu/baoyu-skills) +- Repository: [JimLiu/baoyu-skills](https://www.xinmi.cloud/JimLiu/baoyu-skills) - Focus: image generation, content transformation, publishing, and media workflows. - Good for: image cards, article illustrations, slide decks, URL-to-Markdown conversion, YouTube transcripts, Markdown-to-HTML, and social posting workflows. - Representative skills: `baoyu-image-gen`, `baoyu-imagine`, `baoyu-slide-deck`, `baoyu-markdown-to-html`, `baoyu-post-to-x`, `baoyu-post-to-wechat`, `baoyu-post-to-weibo`, `baoyu-url-to-markdown`, `baoyu-youtube-transcript`, `baoyu-translate`, `baoyu-diagram`, `baoyu-comic`. @@ -144,7 +144,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Virtual Couple Travel Vlog -- Repository: [vibeshotclub/vsc-skills / virtual-couple-travel-vlog](https://github.com/vibeshotclub/vsc-skills/tree/main/virtual-couple-travel-vlog) +- Repository: [vibeshotclub/vsc-skills / virtual-couple-travel-vlog](https://www.xinmi.cloud/vibeshotclub/vsc-skills/tree/main/virtual-couple-travel-vlog) - Focus: travel-vlog style media generation. - Good for: short-form visual storytelling, character-based travel content, and repeatable media production prompts. - Notes: this is a subdirectory skill inside a larger skill collection. @@ -153,14 +153,14 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Web Access -- Repository: [eze-is/web-access](https://github.com/eze-is/web-access) +- Repository: [eze-is/web-access](https://www.xinmi.cloud/eze-is/web-access) - Focus: giving an agent structured web access through layered routing and browser/CDP workflows. - Good for: web research, browser-assisted tasks, parallel information gathering, and pages that require interaction. - Security note: browser access can expose logged-in sessions and local browser state. Audit before enabling. ### OpenCLI -- Repository: [jackwener/opencli](https://github.com/jackwener/opencli) +- Repository: [jackwener/opencli](https://www.xinmi.cloud/jackwener/opencli) - Focus: converting websites, browser sessions, Electron apps, and local tools into CLI-accessible automation surfaces for humans and AI agents. - Good for: letting agents operate logged-in Chrome pages, building reusable website adapters, wrapping local binaries, and turning browser workflows into deterministic commands. - Representative skills: `opencli-browser`, `opencli-adapter-author`, `opencli-autofix`, `opencli-usage`. @@ -168,7 +168,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Follow Builders -- Repository: [zarazhangrui/follow-builders](https://github.com/zarazhangrui/follow-builders) +- Repository: [zarazhangrui/follow-builders](https://www.xinmi.cloud/zarazhangrui/follow-builders) - Focus: monitoring AI builders across X, blogs, and YouTube podcasts. - Good for: tracking builders rather than influencers, summarizing feeds, and creating digest-style updates. - Representative data/config files: X feeds, blog feeds, podcast feeds, prompts, and state files. @@ -176,7 +176,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### SlowMist Agent Security -- Repository: [slowmist/slowmist-agent-security](https://github.com/slowmist/slowmist-agent-security) +- Repository: [slowmist/slowmist-agent-security](https://www.xinmi.cloud/slowmist/slowmist-agent-security) - Focus: security review for AI agents operating with untrusted inputs. - Good for: checking skills, MCP servers, repositories, URLs, prompts, and crypto/on-chain addresses for security risks. - Core idea: external input should be considered untrusted until verified. @@ -186,7 +186,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Huashu Nuwa Skill -- Repository: [alchaincyf/nuwa-skill](https://github.com/alchaincyf/nuwa-skill) +- Repository: [alchaincyf/nuwa-skill](https://www.xinmi.cloud/alchaincyf/nuwa-skill) - Focus: distilling a person or viewpoint into a reusable agent skill. - Good for: advisory-board style thinking, mental models, decision heuristics, and writing in a specific perspective. - Representative perspectives: Huashu Nuwa, Feynman, Steve Jobs, Elon Musk, Naval Ravikant, Paul Graham, Nassim Taleb. @@ -194,7 +194,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### PUA / Anti-PUA Skills -- Repository: [tanweai/pua](https://github.com/tanweai/pua) +- Repository: [tanweai/pua](https://www.xinmi.cloud/tanweai/pua) - Focus: high-agency, confrontational, coaching, or anti-PUA style agent behavior. - Good for: motivation, critique, resistance to manipulation, and intentionally sharp agent feedback. - Representative skills: `pua`, `pua-en`, `pua-ja`, `pua-loop`, `mama`, `p7`, `p9`, `p10`, `pro`, `shot`, `yes`. @@ -202,7 +202,7 @@ Useful skill recommendations are welcome. If you find a high-quality skill that ### Ex Skill -- Repository: [therealXiaomanChu/ex-skill](https://github.com/therealXiaomanChu/ex-skill) +- Repository: [therealXiaomanChu/ex-skill](https://www.xinmi.cloud/therealXiaomanChu/ex-skill) - Focus: distilling an ex-partner/persona into an AI skill that speaks in that style. - Good for: persona experiments, emotional roleplay, and style simulation. - Representative skill: `create-ex`. @@ -212,17 +212,17 @@ Useful skill recommendations are welcome. If you find a high-quality skill that If you only want a practical starter set: -- [Anthropic Official Skills](https://github.com/anthropics/skills/tree/main/skills) for reference implementations. -- [Matt Pocock Skills](https://github.com/mattpocock/skills) for engineering workflows. -- [Baoyu Skills](https://github.com/JimLiu/baoyu-skills) for image, media, and publishing workflows. -- [Huashu Design](https://github.com/alchaincyf/huashu-design) for high-fidelity HTML-native design. -- [Guizang PPT Skill](https://github.com/op7418/guizang-ppt-skill) or [HTML PPT Skill](https://github.com/lewislulu/html-ppt-skill) for browser-based presentations. -- [Huashu Markdown To HTML](https://github.com/alchaincyf/huashu-md-html) for Markdown/HTML document conversion. -- [Web Access](https://github.com/eze-is/web-access) for web research workflows. -- [OpenCLI](https://github.com/jackwener/opencli) for logged-in browser automation and reusable website CLI adapters. -- [Fireworks Tech Graph](https://github.com/yizhiyanhua-ai/fireworks-tech-graph) for technical diagrams. -- [SlowMist Agent Security](https://github.com/slowmist/slowmist-agent-security) for reviewing risky community skills. +- [Anthropic Official Skills](https://www.xinmi.cloud/anthropics/skills/tree/main/skills) for reference implementations. +- [Matt Pocock Skills](https://www.xinmi.cloud/mattpocock/skills) for engineering workflows. +- [Baoyu Skills](https://www.xinmi.cloud/JimLiu/baoyu-skills) for image, media, and publishing workflows. +- [Huashu Design](https://www.xinmi.cloud/alchaincyf/huashu-design) for high-fidelity HTML-native design. +- [Guizang PPT Skill](https://www.xinmi.cloud/op7418/guizang-ppt-skill) or [HTML PPT Skill](https://www.xinmi.cloud/lewislulu/html-ppt-skill) for browser-based presentations. +- [Huashu Markdown To HTML](https://www.xinmi.cloud/alchaincyf/huashu-md-html) for Markdown/HTML document conversion. +- [Web Access](https://www.xinmi.cloud/eze-is/web-access) for web research workflows. +- [OpenCLI](https://www.xinmi.cloud/jackwener/opencli) for logged-in browser automation and reusable website CLI adapters. +- [Fireworks Tech Graph](https://www.xinmi.cloud/yizhiyanhua-ai/fireworks-tech-graph) for technical diagrams. +- [SlowMist Agent Security](https://www.xinmi.cloud/slowmist/slowmist-agent-security) for reviewing risky community skills. ## Original Source List -This document was compiled from a curated Hermes / Claude skill sharing list and expanded with public GitHub repository metadata. +This document was compiled from a curated Hermes / Claude skill sharing list and expanded with public 新觅源码库 repository metadata. diff --git a/packages/client/public/skill-recommendations.zh.md b/packages/client/public/skill-recommendations.zh.md index ce30899..4304591 100644 --- a/packages/client/public/skill-recommendations.zh.md +++ b/packages/client/public/skill-recommendations.zh.md @@ -4,7 +4,7 @@ 社区 Skill 本质上是第三方指令和代码。安装前请先审计,尤其是会读取 API Key、Cookie、浏览器登录态、本地文件、仓库内容,或者会执行 shell、安装依赖、自动发帖、访问外部 API 的 Skill。 -欢迎大家推荐各种好用的 Skill。如果你发现值得收录的高质量 Skill,可以到 GitHub 提交 PR,并附上仓库链接、适用场景和必要的安全说明。 +欢迎大家推荐各种好用的 Skill。如果你发现值得收录的高质量 Skill,可以到 新觅源码库 提交 PR,并附上仓库链接、适用场景和必要的安全说明。 ## 维护规范 @@ -28,7 +28,7 @@ ### Anthropic 官方 Skills -- 仓库:[anthropics/skills](https://github.com/anthropics/skills/tree/main/skills) +- 仓库:[anthropics/skills](https://www.xinmi.cloud/anthropics/skills/tree/main/skills) - 方向:Claude 官方参考 Skill。 - 适合:学习标准 Skill 结构、参考稳定实现、搭建通用工作流。 - 代表 Skills:`docx`、`pdf`、`pptx`、`xlsx`、`frontend-design`、`webapp-testing`、`skill-creator`、`mcp-builder`、`theme-factory`、`web-artifacts-builder`。 @@ -36,7 +36,7 @@ ### Matt Pocock Skills -- 仓库:[mattpocock/skills](https://github.com/mattpocock/skills) +- 仓库:[mattpocock/skills](https://www.xinmi.cloud/mattpocock/skills) - 方向:工程与生产力工作流。 - 适合:TypeScript 工程、TDD、问题诊断、代码评审、原型开发、PRD/Issue/Handoff 等开发流程。 - 代表 Skills:`tdd`、`triage`、`diagnose`、`prototype`、`review`、`to-prd`、`to-issues`、`handoff`、`write-a-skill`。 @@ -46,56 +46,56 @@ ### Frontend Slides -- 仓库:[zarazhangrui/frontend-slides](https://github.com/zarazhangrui/frontend-slides) +- 仓库:[zarazhangrui/frontend-slides](https://www.xinmi.cloud/zarazhangrui/frontend-slides) - 方向:用前端技术生成网页幻灯片。 - 适合:HTML/CSS 幻灯片、视觉叙事、浏览器渲染的演示稿。 - 备注:适合把演示稿当成 Web Artifact 来做,而不是传统 Office 文件。 ### 华叔 Design -- 仓库:[alchaincyf/huashu-design](https://github.com/alchaincyf/huashu-design) +- 仓库:[alchaincyf/huashu-design](https://www.xinmi.cloud/alchaincyf/huashu-design) - 方向:Claude Code 中的 HTML 原生设计 Skill。 - 适合:高保真原型、幻灯片、动画概念、视觉评审和导出型设计流程。 - 备注:包含设计哲学、评审维度和演示型工作流。 ### 归藏 PPT Skill -- 仓库:[op7418/guizang-ppt-skill](https://github.com/op7418/guizang-ppt-skill) +- 仓库:[op7418/guizang-ppt-skill](https://www.xinmi.cloud/op7418/guizang-ppt-skill) - 方向:生成高质量 HTML 幻灯片。 - 适合:杂志风、编辑风、瑞士风等视觉风格的演示稿、社交封面、图片提示词和叙事型页面。 - 备注:包含演示运行时和风格化生成模式。 ### HTML PPT Skill -- 仓库:[lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) +- 仓库:[lewislulu/html-ppt-skill](https://www.xinmi.cloud/lewislulu/html-ppt-skill) - 方向:HTML PPT Studio。 - 适合:主题化幻灯片、复杂布局演示稿和带动画的浏览器演示。 - 代表能力:多主题、多布局、动画模式和 HTML 演示脚手架。 ### PPT Image First -- 仓库:[NyxTides/ppt-image-first](https://github.com/NyxTides/ppt-image-first) +- 仓库:[NyxTides/ppt-image-first](https://www.xinmi.cloud/NyxTides/ppt-image-first) - 方向:图片优先的 PPT 生成。 - 适合:视觉方向先行的演示稿创作。 - 备注:面向 Codex、Claude Code、OpenCode CLI 等 Agent 工作流。 ### GPT Image To PPT -- 仓库:[JuneYaooo/gpt-image2-ppt-skills](https://github.com/JuneYaooo/gpt-image2-ppt-skills) +- 仓库:[JuneYaooo/gpt-image2-ppt-skills](https://www.xinmi.cloud/JuneYaooo/gpt-image2-ppt-skills) - 方向:用图像生成能力复刻或改造 PPT 视觉版式。 - 适合:从已有 `.pptx` 模板中学习版式,再替换成自己的内容。 - 备注:涉及图像生成和外部 API 时请先检查配置与数据发送逻辑。 ### Fireworks Tech Graph -- 仓库:[yizhiyanhua-ai/fireworks-tech-graph](https://github.com/yizhiyanhua-ai/fireworks-tech-graph) +- 仓库:[yizhiyanhua-ai/fireworks-tech-graph](https://www.xinmi.cloud/yizhiyanhua-ai/fireworks-tech-graph) - 方向:技术图表生成。 - 适合:架构图、流程图、UML 风格图、AI Agent 工作流图,以及 SVG/PNG 输出。 - 备注:需要图表而不是整套演示稿时很实用。 ### Diagram Skill -- 仓库:[312362115/claude diagram skill](https://github.com/312362115/claude/blob/main/skills/diagram/SKILL.md) +- 仓库:[312362115/claude diagram skill](https://www.xinmi.cloud/312362115/claude/blob/main/skills/diagram/SKILL.md) - 方向:结构化图表生成。 - 适合:生成图表、模板化视觉解释和技术说明。 - 备注:这是一个直接指向 `SKILL.md` 的链接,安装前也要检查同目录下的 `references`、`scripts` 和 `templates`。 @@ -104,7 +104,7 @@ ### 华叔 Markdown To HTML -- 仓库:[alchaincyf/huashu-md-html](https://github.com/alchaincyf/huashu-md-html) +- 仓库:[alchaincyf/huashu-md-html](https://www.xinmi.cloud/alchaincyf/huashu-md-html) - 方向:Markdown 与 HTML 双向转换流水线。 - 适合:把文件或网页转 Markdown,把 Markdown 转精美 HTML,把 HTML 再转回 Markdown。 - 代表工具:MarkItDown、Pandoc、html-to-markdown、trafilatura。 @@ -112,14 +112,14 @@ ### 中文网文写作 Skill -- 仓库:[Tomsawyerhu/Chinese-WebNovel-Skill](https://github.com/Tomsawyerhu/Chinese-WebNovel-Skill) +- 仓库:[Tomsawyerhu/Chinese-WebNovel-Skill](https://www.xinmi.cloud/Tomsawyerhu/Chinese-WebNovel-Skill) - 方向:中文网文小说写作。 - 适合:长篇小说规划、章节创作、风格延续和网文式叙事。 - 代表 Skill:`webnovel-writing`。 ### 软件著作权材料 Skill -- 仓库:[Fokkyp/SoftwareCopyright-Skill](https://github.com/Fokkyp/SoftwareCopyright-Skill) +- 仓库:[Fokkyp/SoftwareCopyright-Skill](https://www.xinmi.cloud/Fokkyp/SoftwareCopyright-Skill) - 方向:中国软件著作权申请材料生成。 - 适合:根据本地项目生成 `.docx` 软著申请材料。 - 代表 Skills:`software-copyright-materials`、`docx-toolkit`。 @@ -127,7 +127,7 @@ ### 专利交底书 Skill -- 仓库:[handsomestWei/patent-disclosure-skill](https://github.com/handsomestWei/patent-disclosure-skill) +- 仓库:[handsomestWei/patent-disclosure-skill](https://www.xinmi.cloud/handsomestWei/patent-disclosure-skill) - 方向:专利技术交底书生成。 - 适合:从项目文档挖掘专利点、联网查新、脱敏成文和自检。 - 备注:可能涉及敏感技术资料和联网检索,使用前请关注数据处理方式。 @@ -136,7 +136,7 @@ ### 宝玉 Skills -- 仓库:[JimLiu/baoyu-skills](https://github.com/JimLiu/baoyu-skills) +- 仓库:[JimLiu/baoyu-skills](https://www.xinmi.cloud/JimLiu/baoyu-skills) - 方向:图片生成、内容转换、发布和媒体工作流。 - 适合:图片卡片、文章配图、幻灯片、URL 转 Markdown、YouTube 字幕、Markdown 转 HTML、社交平台发布。 - 代表 Skills:`baoyu-image-gen`、`baoyu-imagine`、`baoyu-slide-deck`、`baoyu-markdown-to-html`、`baoyu-post-to-x`、`baoyu-post-to-wechat`、`baoyu-post-to-weibo`、`baoyu-url-to-markdown`、`baoyu-youtube-transcript`、`baoyu-translate`、`baoyu-diagram`、`baoyu-comic`。 @@ -144,7 +144,7 @@ ### Virtual Couple Travel Vlog -- 仓库:[vibeshotclub/vsc-skills / virtual-couple-travel-vlog](https://github.com/vibeshotclub/vsc-skills/tree/main/virtual-couple-travel-vlog) +- 仓库:[vibeshotclub/vsc-skills / virtual-couple-travel-vlog](https://www.xinmi.cloud/vibeshotclub/vsc-skills/tree/main/virtual-couple-travel-vlog) - 方向:旅行 vlog 风格媒体生成。 - 适合:短视频视觉叙事、角色化旅行内容和可复用媒体提示词。 - 备注:这是一个大仓库里的子目录 Skill。 @@ -153,14 +153,14 @@ ### Web Access -- 仓库:[eze-is/web-access](https://github.com/eze-is/web-access) +- 仓库:[eze-is/web-access](https://www.xinmi.cloud/eze-is/web-access) - 方向:为 Agent 提供结构化联网能力。 - 适合:网页研究、浏览器辅助任务、并行信息收集和需要交互的网站。 - 安全提示:浏览器访问可能暴露已登录状态和本地浏览器数据,启用前要审计。 ### OpenCLI -- 仓库:[jackwener/opencli](https://github.com/jackwener/opencli) +- 仓库:[jackwener/opencli](https://www.xinmi.cloud/jackwener/opencli) - 方向:把网站、浏览器会话、Electron 应用和本地工具转换成 CLI 可调用的自动化入口。 - 适合:让 Agent 操作已登录的 Chrome 页面、编写可复用网站适配器、封装本地命令,以及把浏览器流程变成稳定命令。 - 代表 Skills:`opencli-browser`、`opencli-adapter-author`、`opencli-autofix`、`opencli-usage`。 @@ -168,7 +168,7 @@ ### Follow Builders -- 仓库:[zarazhangrui/follow-builders](https://github.com/zarazhangrui/follow-builders) +- 仓库:[zarazhangrui/follow-builders](https://www.xinmi.cloud/zarazhangrui/follow-builders) - 方向:跟踪 AI builders 的 X、博客和 YouTube 播客内容。 - 适合:关注 builder 而不是 influencer,生成摘要和内容 digest。 - 代表内容:X feed、blog feed、podcast feed、prompts 和状态文件。 @@ -176,7 +176,7 @@ ### SlowMist Agent Security -- 仓库:[slowmist/slowmist-agent-security](https://github.com/slowmist/slowmist-agent-security) +- 仓库:[slowmist/slowmist-agent-security](https://www.xinmi.cloud/slowmist/slowmist-agent-security) - 方向:AI Agent 安全审计框架。 - 适合:检查 Skill、MCP、仓库、URL、Prompt 和链上地址的安全风险。 - 核心原则:所有外部输入在验证前都不可信。 @@ -186,7 +186,7 @@ ### 华叔 Nuwa Skill -- 仓库:[alchaincyf/nuwa-skill](https://github.com/alchaincyf/nuwa-skill) +- 仓库:[alchaincyf/nuwa-skill](https://www.xinmi.cloud/alchaincyf/nuwa-skill) - 方向:把某个人或视角蒸馏成可复用 Skill。 - 适合:顾问团式思考、心智模型、决策启发式和特定视角写作。 - 代表视角:华叔 Nuwa、Feynman、Jobs、Musk、Naval、Paul Graham、Taleb。 @@ -194,7 +194,7 @@ ### PUA / 反 PUA 类 Skills -- 仓库:[tanweai/pua](https://github.com/tanweai/pua) +- 仓库:[tanweai/pua](https://www.xinmi.cloud/tanweai/pua) - 方向:高能动性、强反馈、反操控或尖锐教练风格的 Agent 行为。 - 适合:动机强化、批判反馈、反操控和刻意强风格交互。 - 代表 Skills:`pua`、`pua-en`、`pua-ja`、`pua-loop`、`mama`、`p7`、`p9`、`p10`、`pro`、`shot`、`yes`。 @@ -202,7 +202,7 @@ ### Ex Skill -- 仓库:[therealXiaomanChu/ex-skill](https://github.com/therealXiaomanChu/ex-skill) +- 仓库:[therealXiaomanChu/ex-skill](https://www.xinmi.cloud/therealXiaomanChu/ex-skill) - 方向:把某个前任/人格风格蒸馏成 AI Skill。 - 适合:Persona 实验、情绪化角色扮演和特定语气模拟。 - 代表 Skill:`create-ex`。 @@ -212,17 +212,17 @@ 如果你只想先装一批实用的,可以从这些开始: -- [Anthropic 官方 Skills](https://github.com/anthropics/skills/tree/main/skills):参考实现和通用能力。 -- [Matt Pocock Skills](https://github.com/mattpocock/skills):工程流程。 -- [宝玉 Skills](https://github.com/JimLiu/baoyu-skills):图片、媒体和发布。 -- [华叔 Design](https://github.com/alchaincyf/huashu-design):高保真 HTML 设计。 -- [归藏 PPT Skill](https://github.com/op7418/guizang-ppt-skill) 或 [HTML PPT Skill](https://github.com/lewislulu/html-ppt-skill):浏览器演示稿。 -- [华叔 Markdown To HTML](https://github.com/alchaincyf/huashu-md-html):Markdown/HTML 文档转换。 -- [Web Access](https://github.com/eze-is/web-access):网页研究。 -- [OpenCLI](https://github.com/jackwener/opencli):已登录浏览器自动化和可复用网站 CLI 适配器。 -- [Fireworks Tech Graph](https://github.com/yizhiyanhua-ai/fireworks-tech-graph):技术图表。 -- [SlowMist Agent Security](https://github.com/slowmist/slowmist-agent-security):社区 Skill 安全审计。 +- [Anthropic 官方 Skills](https://www.xinmi.cloud/anthropics/skills/tree/main/skills):参考实现和通用能力。 +- [Matt Pocock Skills](https://www.xinmi.cloud/mattpocock/skills):工程流程。 +- [宝玉 Skills](https://www.xinmi.cloud/JimLiu/baoyu-skills):图片、媒体和发布。 +- [华叔 Design](https://www.xinmi.cloud/alchaincyf/huashu-design):高保真 HTML 设计。 +- [归藏 PPT Skill](https://www.xinmi.cloud/op7418/guizang-ppt-skill) 或 [HTML PPT Skill](https://www.xinmi.cloud/lewislulu/html-ppt-skill):浏览器演示稿。 +- [华叔 Markdown To HTML](https://www.xinmi.cloud/alchaincyf/huashu-md-html):Markdown/HTML 文档转换。 +- [Web Access](https://www.xinmi.cloud/eze-is/web-access):网页研究。 +- [OpenCLI](https://www.xinmi.cloud/jackwener/opencli):已登录浏览器自动化和可复用网站 CLI 适配器。 +- [Fireworks Tech Graph](https://www.xinmi.cloud/yizhiyanhua-ai/fireworks-tech-graph):技术图表。 +- [SlowMist Agent Security](https://www.xinmi.cloud/slowmist/slowmist-agent-security):社区 Skill 安全审计。 ## 来源说明 -本文档基于一份 Hermes / Claude Skills 分享清单整理,并补充了公开 GitHub 仓库描述与目录信息。 +本文档基于一份 Hermes / Claude Skills 分享清单整理,并补充了公开 新觅源码库 仓库描述与目录信息。 diff --git a/packages/client/src/components/layout/AppSidebar.vue b/packages/client/src/components/layout/AppSidebar.vue index 7472387..c8158da 100644 --- a/packages/client/src/components/layout/AppSidebar.vue +++ b/packages/client/src/components/layout/AppSidebar.vue @@ -355,10 +355,10 @@ function openChangelog() {
diff --git a/packages/client/src/i18n/locales/de.ts b/packages/client/src/i18n/locales/de.ts index 281f9b7..83c494b 100644 --- a/packages/client/src/i18n/locales/de.ts +++ b/packages/client/src/i18n/locales/de.ts @@ -1261,7 +1261,7 @@ jobTriggered: 'Job ausgelost', // Anderungsprotokoll changelog: { new_0_6_7_1: 'Die Desktop-App nutzt jetzt standardmäßig Port 8748, unterstützt Zugriff im lokalen Netzwerk und kann direkt im lokalen Browser geöffnet werden', - new_0_6_7_9: 'Desktop-Download-Links sind jetzt auf der offiziellen Website https://ekkolearnai.com/ verfügbar, aktuelle Installer bleiben außerdem über GitHub Releases verfügbar', + new_0_6_7_9: 'Desktop-Download-Links sind jetzt auf der offiziellen Website https://www.xinmi.cloud/ verfügbar, aktuelle Installer bleiben außerdem über GitHub Releases verfügbar', new_0_6_7_2: 'MCP-Tools sind vollständiger: Bridge Tool Discovery, MCP-Management-Lifecycle und Tool-Sichtbarkeit pro Modell im Manager wurden verbessert', new_0_6_7_3: 'Nachrichtenlisten zentrieren leere Zustände korrekt, reduzieren Scroll-Jitter, zeigen beim Laden von History keine Live-Chat-Nachrichten mehr, behalten Scrollpositionen pro Session und blenden beim Session-Wechsel 1,5 Sekunden ein', new_0_6_7_4: 'Bridge und Runtime sind stabiler durch erhaltene Text/tool-call-Reihenfolge, korrektes Profile runtime status loading, bessere Node/npm-Erkennung und übersprungene Produktionsdatenverzeichnis-Erstellung', diff --git a/packages/client/src/i18n/locales/en.ts b/packages/client/src/i18n/locales/en.ts index 1d98c63..a80c31f 100644 --- a/packages/client/src/i18n/locales/en.ts +++ b/packages/client/src/i18n/locales/en.ts @@ -1483,7 +1483,7 @@ export default { // Changelog changelog: { new_0_6_7_1: 'The desktop app now defaults to port 8748, supports LAN access, and can be opened directly from a local browser', - new_0_6_7_9: 'Desktop download links are now available on the official website at https://ekkolearnai.com/, and the latest installers remain available from GitHub Releases', + new_0_6_7_9: 'Desktop download links are now available on the official website at https://www.xinmi.cloud/, and the latest installers remain available from GitHub Releases', new_0_6_7_2: 'MCP tooling is more complete with bridge tool discovery fixes, MCP management lifecycle fixes, and per-model tool visibility controls in the manager', new_0_6_7_3: 'Message lists now center empty states correctly, reduce scroll jitter, avoid leaking live chat messages into History while loading, preserve per-session scroll positions, and fade in over 1.5 seconds on session switches', new_0_6_7_4: 'Bridge and runtime stability improved by preserving text/tool-call ordering, fixing Profile runtime status loading, improving Node/npm detection, and skipping production data directory creation', diff --git a/packages/client/src/i18n/locales/es.ts b/packages/client/src/i18n/locales/es.ts index 40bb2ce..edd7d93 100644 --- a/packages/client/src/i18n/locales/es.ts +++ b/packages/client/src/i18n/locales/es.ts @@ -1261,7 +1261,7 @@ jobTriggered: 'Job ejecutado', // Registro de cambios changelog: { new_0_6_7_1: 'La app de escritorio ahora usa el puerto 8748 por defecto, permite acceso desde la red local y puede abrirse directamente desde un navegador local', - new_0_6_7_9: 'Los enlaces de descarga de escritorio ya están disponibles en el sitio oficial https://ekkolearnai.com/, y los instaladores más recientes siguen disponibles en GitHub Releases', + new_0_6_7_9: 'Los enlaces de descarga de escritorio ya están disponibles en el sitio oficial https://www.xinmi.cloud/, y los instaladores más recientes siguen disponibles en GitHub Releases', new_0_6_7_2: 'Las herramientas MCP quedan más completas con arreglos de discovery en bridge, ciclo de vida de gestión MCP y controles de visibilidad por modelo en el gestor', new_0_6_7_3: 'Las listas de mensajes centran mejor el estado vacío, reducen saltos de scroll, evitan mostrar mensajes del chat activo mientras carga History, preservan la posición por sesión y hacen fade-in de 1,5 segundos al cambiar de sesión', new_0_6_7_4: 'Bridge y runtime son más estables al preservar el orden texto/tool-call, corregir la carga de estado runtime de Profile, mejorar detección Node/npm y evitar crear directorios de datos en producción', diff --git a/packages/client/src/i18n/locales/fr.ts b/packages/client/src/i18n/locales/fr.ts index 95476bf..6d2ba4f 100644 --- a/packages/client/src/i18n/locales/fr.ts +++ b/packages/client/src/i18n/locales/fr.ts @@ -1261,7 +1261,7 @@ jobTriggered: 'Job declenche', // Journal des modifications changelog: { new_0_6_7_1: 'L application desktop utilise maintenant le port 8748 par défaut, prend en charge l accès LAN et peut être ouverte directement depuis un navigateur local', - new_0_6_7_9: 'Les liens de téléchargement desktop sont maintenant disponibles sur le site officiel https://ekkolearnai.com/, et les derniers installateurs restent disponibles via GitHub Releases', + new_0_6_7_9: 'Les liens de téléchargement desktop sont maintenant disponibles sur le site officiel https://www.xinmi.cloud/, et les derniers installateurs restent disponibles via GitHub Releases', new_0_6_7_2: 'Les outils MCP sont plus complets avec des corrections de découverte bridge, de cycle de vie MCP et des contrôles de visibilité par modèle dans le gestionnaire', new_0_6_7_3: 'Les listes de messages centrent mieux les états vides, réduisent les sauts de scroll, évitent d afficher le chat actif pendant le chargement de History, conservent la position par session et ajoutent un fondu de 1,5 seconde au changement de session', new_0_6_7_4: 'Bridge et runtime sont plus stables avec ordre texte/tool-call préservé, chargement du statut runtime de Profile corrigé, meilleure détection Node/npm et création du dossier de données production évitée', diff --git a/packages/client/src/i18n/locales/ja.ts b/packages/client/src/i18n/locales/ja.ts index 9dd9603..22165ac 100644 --- a/packages/client/src/i18n/locales/ja.ts +++ b/packages/client/src/i18n/locales/ja.ts @@ -1260,7 +1260,7 @@ export default { // 更新履歴 changelog: { new_0_6_7_1: 'Desktop アプリは既定で port 8748 を使用し、LAN アクセスとローカルブラウザからの直接アクセスに対応しました', - new_0_6_7_9: 'Desktop のダウンロードリンクを公式サイト https://ekkolearnai.com/ に追加し、最新インストーラーは引き続き GitHub Releases からも取得できます', + new_0_6_7_9: 'Desktop のダウンロードリンクを公式サイト https://www.xinmi.cloud/ に追加し、最新インストーラーは引き続き GitHub Releases からも取得できます', new_0_6_7_2: 'MCP ツールは bridge の tool discovery 修正、MCP 管理ライフサイクル修正、管理画面のモデル別 tool visibility によりさらに整備されました', new_0_6_7_3: 'メッセージ一覧は empty state の中央揃え、scroll jitter、History 読み込み中のライブチャット混入を修正し、セッション別スクロール位置保持と 1.5 秒のフェードインに対応しました', new_0_6_7_4: 'Bridge と runtime は text/tool-call の順序保持、Profile runtime status loading 修正、Node/npm 検出改善、本番 data directory 作成スキップで安定しました', diff --git a/packages/client/src/i18n/locales/ko.ts b/packages/client/src/i18n/locales/ko.ts index 7329fe1..c06d69a 100644 --- a/packages/client/src/i18n/locales/ko.ts +++ b/packages/client/src/i18n/locales/ko.ts @@ -1260,7 +1260,7 @@ export default { // 변경 이력 changelog: { new_0_6_7_1: 'Desktop 앱은 기본적으로 8748 포트를 사용하며 LAN 접근과 로컬 브라우저 직접 열기를 지원합니다', - new_0_6_7_9: 'Desktop 다운로드 링크가 공식 웹사이트 https://ekkolearnai.com/ 에 추가되었으며 최신 설치 파일은 GitHub Releases 에서도 계속 받을 수 있습니다', + new_0_6_7_9: 'Desktop 다운로드 링크가 공식 웹사이트 https://www.xinmi.cloud/ 에 추가되었으며 최신 설치 파일은 GitHub Releases 에서도 계속 받을 수 있습니다', new_0_6_7_2: 'MCP 도구는 bridge tool discovery 수정, MCP 관리 라이프사이클 수정, 관리자 화면의 모델별 tool visibility 제어로 더 완성되었습니다', new_0_6_7_3: '메시지 목록은 빈 상태 중앙 정렬, 스크롤 튐, History 로딩 중 라이브 채팅 메시지 노출을 수정하고 세션별 스크롤 위치 보존과 1.5초 페이드인을 지원합니다', new_0_6_7_4: 'Bridge 와 runtime 은 text/tool-call 순서 보존, Profile runtime status loading 수정, Node/npm 감지 개선, 운영 데이터 디렉터리 생성 생략으로 더 안정적입니다', diff --git a/packages/client/src/i18n/locales/pt.ts b/packages/client/src/i18n/locales/pt.ts index 31b7d42..cb7ff47 100644 --- a/packages/client/src/i18n/locales/pt.ts +++ b/packages/client/src/i18n/locales/pt.ts @@ -1261,7 +1261,7 @@ jobTriggered: 'Job acionado', // Registro de alteracoes changelog: { new_0_6_7_1: 'O app desktop agora usa a porta 8748 por padrão, permite acesso pela rede local e pode ser aberto diretamente em um navegador local', - new_0_6_7_9: 'Links de download do desktop agora estão disponíveis no site oficial https://ekkolearnai.com/, e os instaladores mais recentes continuam disponíveis no GitHub Releases', + new_0_6_7_9: 'Links de download do desktop agora estão disponíveis no site oficial https://www.xinmi.cloud/, e os instaladores mais recentes continuam disponíveis no GitHub Releases', new_0_6_7_2: 'As ferramentas MCP ficam mais completas com correções de discovery no bridge, ciclo de vida de gestão MCP e controles de visibilidade por modelo no gestor', new_0_6_7_3: 'Listas de mensagens centralizam melhor estados vazios, reduzem saltos de rolagem, evitam mostrar o chat ativo enquanto History carrega, preservam posição por sessão e fazem fade-in de 1,5 segundo ao trocar sessão', new_0_6_7_4: 'Bridge e runtime ficam mais estáveis preservando a ordem texto/tool-call, corrigindo carregamento de status runtime de Profile, melhorando detecção Node/npm e evitando criação de diretório de dados em produção', diff --git a/packages/client/src/i18n/locales/zh-TW.ts b/packages/client/src/i18n/locales/zh-TW.ts index 00b6f3f..b434887 100644 --- a/packages/client/src/i18n/locales/zh-TW.ts +++ b/packages/client/src/i18n/locales/zh-TW.ts @@ -1488,7 +1488,7 @@ export default { // 更新日誌 changelog: { new_0_6_7_1: '桌面版預設使用 8748 連接埠,支援區域網路內存取,也可以直接用本機瀏覽器開啟 Web UI', - new_0_6_7_9: '桌面端下載入口已補充到官網 https://ekkolearnai.com/,也可以繼續從 GitHub Releases 取得最新安裝包', + new_0_6_7_9: '桌面端下載入口已補充到官網 https://www.xinmi.cloud/,也可以繼續從 GitHub Releases 取得最新安裝包', new_0_6_7_2: 'MCP 工具鏈繼續完善:修復 bridge 工具發現與 MCP 管理生命週期,並在管理頁支援按模型控制工具可見性', new_0_6_7_3: '訊息列表體驗優化:修復空狀態置中、捲動抖動、歷史會話載入串訊息,並在切換會話時保留捲動位置與 1.5 秒淡入效果', new_0_6_7_4: 'Bridge 與執行狀態更穩定:保持文字和 tool-call 順序、修復 Profile runtime 狀態載入、改進 Node/npm 偵測,並避免正式環境自動建立資料目錄', diff --git a/packages/client/src/i18n/locales/zh.ts b/packages/client/src/i18n/locales/zh.ts index 0301fc3..399787a 100644 --- a/packages/client/src/i18n/locales/zh.ts +++ b/packages/client/src/i18n/locales/zh.ts @@ -1485,7 +1485,7 @@ export default { // 更新日志 changelog: { new_0_6_7_1: '桌面版默认使用 8748 端口,支持局域网内访问,也可以直接用本机浏览器打开 Web UI', - new_0_6_7_9: '桌面端下载入口已补充到官网 https://ekkolearnai.com/,也可以继续从 GitHub Releases 获取最新安装包', + new_0_6_7_9: '桌面端下载入口已补充到官网 https://www.xinmi.cloud/,也可以继续从 GitHub Releases 获取最新安装包', new_0_6_7_2: 'MCP 工具链继续完善:修复 bridge 工具发现与 MCP 管理生命周期,并在管理页支持按模型控制工具可见性', new_0_6_7_3: '消息列表体验优化:修复空状态居中、滚动抖动、历史会话加载串消息,并在切换会话时保留滚动位置与 1.5 秒淡入效果', new_0_6_7_4: 'Bridge 与运行态更稳定:保持文本和 tool-call 顺序、修复 Profile runtime 状态加载、改进 Node/npm 检测,并避免生产环境自动创建数据目录', diff --git a/packages/desktop/README.md b/packages/desktop/README.md index 1ed2028..536afd7 100644 --- a/packages/desktop/README.md +++ b/packages/desktop/README.md @@ -6,7 +6,7 @@ Electron desktop distribution for Hermes Studio. Download the latest macOS, Windows, or Linux installer for your CPU architecture from the project -[GitHub Releases](https://github.com/EKKOLearnAI/hermes-web-ui/releases/latest). +[新觅源码库 Releases](https://www.xinmi.cloud/root/Hermes-ui/releases/latest). The desktop app bundles the Web UI runtime and launches it locally from the native shell app. @@ -32,9 +32,9 @@ export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ export ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/ ``` -If GitHub release downloads are slow, `fetch-python.mjs` can also use a compatible +If 新觅源码库 release downloads are slow, `fetch-python.mjs` can also use a compatible python-build-standalone release mirror: ```sh -export PBS_BASE_URL=https://github.com/astral-sh/python-build-standalone/releases/download +export PBS_BASE_URL=https://www.xinmi.cloud/astral-sh/python-build-standalone/releases/download ``` diff --git a/packages/desktop/package-lock.json b/packages/desktop/package-lock.json index d2f3702..c107255 100644 --- a/packages/desktop/package-lock.json +++ b/packages/desktop/package-lock.json @@ -169,7 +169,7 @@ "node": ">= 8.0.0" }, "funding": { - "url": "https://github.com/sponsors/gjtorikian/" + "url": "https://www.xinmi.cloud/sponsors/gjtorikian/" } }, "node_modules/@electron/rebuild": { @@ -265,7 +265,7 @@ "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/@gar/promisify": { @@ -303,7 +303,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/ansi-regex?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { @@ -316,7 +316,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/ansi-styles?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { @@ -341,7 +341,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { @@ -357,7 +357,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/strip-ansi?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { @@ -375,7 +375,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@malept/cross-spawn-promise": { @@ -386,7 +386,7 @@ "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/malept" + "url": "https://www.xinmi.cloud/sponsors/malept" }, { "type": "tidelift", @@ -483,7 +483,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "url": "https://www.xinmi.cloud/sindresorhus/is?sponsor=1" } }, "node_modules/@szmarczak/http-timer": { @@ -692,7 +692,7 @@ }, "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://www.xinmi.cloud/sponsors/epoberezkin" } }, "node_modules/ajv-keywords": { @@ -728,7 +728,7 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/ansi-styles?sponsor=1" } }, "node_modules/app-builder-bin": { @@ -967,7 +967,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://www.xinmi.cloud/sponsors/feross" }, { "type": "patreon", @@ -1030,7 +1030,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://www.xinmi.cloud/sponsors/feross" }, { "type": "patreon", @@ -1168,7 +1168,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { @@ -1251,7 +1251,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/chalk?sponsor=1" } }, "node_modules/chownr": { @@ -1279,7 +1279,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "url": "https://www.xinmi.cloud/sponsors/sibiraj-s" } ], "license": "MIT", @@ -1320,7 +1320,7 @@ "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/cli-truncate": { @@ -1338,7 +1338,7 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/cliui": { @@ -1376,7 +1376,7 @@ "mimic-response": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/color-convert": { @@ -1513,7 +1513,7 @@ "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/config-file-ts/node_modules/minimatch": { @@ -1529,7 +1529,7 @@ "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/config-file-ts/node_modules/minipass": { @@ -1641,7 +1641,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/decompress-response/node_modules/mimic-response": { @@ -1654,7 +1654,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/defaults": { @@ -1667,7 +1667,7 @@ "clone": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { @@ -2015,7 +2015,7 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/err-code": { @@ -2201,7 +2201,7 @@ "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/foreground-child/node_modules/signal-exit": { @@ -2214,7 +2214,7 @@ "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/form-data": { @@ -2283,7 +2283,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/gauge": { @@ -2339,7 +2339,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/get-proto": { @@ -2369,7 +2369,7 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/glob": { @@ -2391,7 +2391,7 @@ "node": "*" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/glob/node_modules/balanced-match": { @@ -2435,7 +2435,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/got": { @@ -2461,7 +2461,7 @@ "node": ">=10.19.0" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://www.xinmi.cloud/sindresorhus/got?sponsor=1" } }, "node_modules/graceful-fs": { @@ -2490,7 +2490,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/has-tostringtag": { @@ -2506,7 +2506,7 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/has-unicode": { @@ -2640,7 +2640,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://www.xinmi.cloud/sponsors/feross" }, { "type": "patreon", @@ -2759,7 +2759,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/isarray": { @@ -2780,7 +2780,7 @@ "node": ">= 18.0.0" }, "funding": { - "url": "https://github.com/sponsors/gjtorikian/" + "url": "https://www.xinmi.cloud/sponsors/gjtorikian/" } }, "node_modules/isexe": { @@ -2800,7 +2800,7 @@ "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" @@ -3015,7 +3015,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/lowercase-keys": { @@ -3200,7 +3200,7 @@ "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/minimist": { @@ -3210,7 +3210,7 @@ "dev": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://www.xinmi.cloud/sponsors/ljharb" } }, "node_modules/minipass": { @@ -3443,7 +3443,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/npmlog": { @@ -3486,7 +3486,7 @@ "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/ora": { @@ -3510,7 +3510,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/p-cancelable": { @@ -3536,7 +3536,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/p-map": { @@ -3552,7 +3552,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/package-json-from-dist": { @@ -3596,7 +3596,7 @@ "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { @@ -3628,7 +3628,7 @@ }, "funding": { "type": "github", - "url": "https://github.com/sponsors/jet2jet" + "url": "https://www.xinmi.cloud/sponsors/jet2jet" } }, "node_modules/pend": { @@ -3730,7 +3730,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/read-binary-file-arch": { @@ -3830,7 +3830,7 @@ }, "funding": { "type": "github", - "url": "https://github.com/sponsors/jet2jet" + "url": "https://www.xinmi.cloud/sponsors/jet2jet" } }, "node_modules/resolve-alpn": { @@ -3850,7 +3850,7 @@ "lowercase-keys": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/restore-cursor": { @@ -3891,7 +3891,7 @@ "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://www.xinmi.cloud/sponsors/isaacs" } }, "node_modules/safe-buffer": { @@ -3902,7 +3902,7 @@ "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" + "url": "https://www.xinmi.cloud/sponsors/feross" }, { "type": "patreon", @@ -4464,7 +4464,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs": { @@ -4483,7 +4483,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://www.xinmi.cloud/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -4570,7 +4570,7 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://www.xinmi.cloud/sponsors/sindresorhus" } }, "node_modules/zip-stream": { diff --git a/packages/desktop/package.json b/packages/desktop/package.json index ef339ba..1233069 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -2,7 +2,7 @@ "name": "hermes-studio", "version": "0.6.8", "description": "Hermes Studio desktop distribution with bundled Python runtime and hermes-agent", - "homepage": "https://ekkolearnai.com", + "homepage": "https://www.xinmi.cloud", "author": { "name": "Hermes Studio Contributors", "email": "noreply@hermes-studio.local" diff --git a/packages/desktop/src/main/runtime-manager.ts b/packages/desktop/src/main/runtime-manager.ts index 48f7587..fcb55c2 100644 --- a/packages/desktop/src/main/runtime-manager.ts +++ b/packages/desktop/src/main/runtime-manager.ts @@ -25,7 +25,7 @@ import { } from './paths' const execFileAsync = promisify(execFile) -const DEFAULT_RUNTIME_BASE_URL = 'https://download.ekkolearnai.com' +const DEFAULT_RUNTIME_BASE_URL = 'https://download.www.xinmi.cloud' const RUNTIME_MANIFEST_NAME = 'runtime-manifest.json' const PACKAGED_RUNTIME_RELEASE_NAME = 'runtime-release.json' @@ -111,9 +111,9 @@ function runtimeAssetUrl(assetName: string, tag: string): string { const repo = process.env.HERMES_DESKTOP_RUNTIME_REPO?.trim() if (repo) { if (tag === 'latest') { - return `https://github.com/${repo}/releases/latest/download/${encodeURIComponent(assetName)}` + return `https://www.xinmi.cloud/${repo}/releases/latest/download/${encodeURIComponent(assetName)}` } - return `https://github.com/${repo}/releases/download/${encodeURIComponent(tag)}/${encodeURIComponent(assetName)}` + return `https://www.xinmi.cloud/${repo}/releases/download/${encodeURIComponent(tag)}/${encodeURIComponent(assetName)}` } const template = process.env.HERMES_DESKTOP_RUNTIME_BASE_URL?.trim() || DEFAULT_RUNTIME_BASE_URL diff --git a/packages/desktop/src/main/updater.ts b/packages/desktop/src/main/updater.ts index 789b48a..9ea87af 100644 --- a/packages/desktop/src/main/updater.ts +++ b/packages/desktop/src/main/updater.ts @@ -6,8 +6,8 @@ let initialized = false let checking = false let updateDownloaded = false -const LATEST_RELEASE_URL = 'https://api.github.com/repos/EKKOLearnAI/hermes-web-ui/releases/latest' -const CLOUDFLARE_DOWNLOAD_BASE_URL = 'https://download.ekkolearnai.com' +const LATEST_RELEASE_URL = 'https://api.www.xinmi.cloud/repos/EKKOLearnAI/hermes-web-ui/releases/latest' +const CLOUDFLARE_DOWNLOAD_BASE_URL = 'https://download.www.xinmi.cloud' interface GitHubRelease { tag_name?: string diff --git a/packages/server/src/controllers/update.ts b/packages/server/src/controllers/update.ts index bb582ed..c289a46 100644 --- a/packages/server/src/controllers/update.ts +++ b/packages/server/src/controllers/update.ts @@ -107,7 +107,7 @@ function normalizeGithubRepoUrl(raw: string): string { return raw .trim() .replace(/^git\+/, '') - .replace(/^git@github\.com:/, 'https://github.com/') + .replace(/^git@github\.com:/, 'https://www.xinmi.cloud/') .replace(/\.git$/, '') } @@ -127,7 +127,7 @@ function getPreviewRepoApiUrl(): string { const baseUrl = getPreviewRepoBaseUrl() const match = baseUrl.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)$/) if (!match) throw new Error(`Preview zip fallback only supports GitHub repositories: ${baseUrl}`) - return `https://api.github.com/repos/${match[1]}/${match[2]}` + return `https://api.www.xinmi.cloud/repos/${match[1]}/${match[2]}` } function getPreviewGithubRepoParts(): { owner: string; repo: string } { @@ -902,7 +902,7 @@ async function downloadGithubZip(ref: string, targetDir: string, type: 'tag' | ' const { owner, repo } = getPreviewGithubRepoParts() const refKind = type === 'branch' ? 'heads' : 'tags' const archiveKind = process.platform === 'win32' ? 'zip' : 'tar.gz' - const url = `https://codeload.github.com/${owner}/${repo}/${archiveKind}/refs/${refKind}/${encodeURIComponent(ref)}` + const url = `https://codeload.www.xinmi.cloud/${owner}/${repo}/${archiveKind}/refs/${refKind}/${encodeURIComponent(ref)}` appendPreviewActionLog(`download archive: ${url}`) const res = await fetch(url, { headers: { 'User-Agent': 'hermes-web-ui-preview' }, diff --git a/packages/server/src/services/hermes/agent-bridge/manager.ts b/packages/server/src/services/hermes/agent-bridge/manager.ts index fc5d0b3..deb99ad 100644 --- a/packages/server/src/services/hermes/agent-bridge/manager.ts +++ b/packages/server/src/services/hermes/agent-bridge/manager.ts @@ -10,7 +10,7 @@ const DEFAULT_AGENT_BRIDGE_STARTUP_TIMEOUT_MS = 120000 const DEFAULT_AGENT_BRIDGE_RESTART_DELAY_MS = 1000 const MAX_AGENT_BRIDGE_RESTART_DELAY_MS = 30000 const OPENROUTER_WEB_UI_ATTRIBUTION_ENV = { - HERMES_OPENROUTER_APP_REFERER: 'https://ekkolearnai.com', + HERMES_OPENROUTER_APP_REFERER: 'https://www.xinmi.cloud', HERMES_OPENROUTER_APP_TITLE: 'Hermes Web UI', HERMES_OPENROUTER_APP_CATEGORIES: 'cli-agent,personal-agent', } as const diff --git a/packages/server/src/services/hermes/copilot-device-flow.ts b/packages/server/src/services/hermes/copilot-device-flow.ts index 9645502..b897d1a 100644 --- a/packages/server/src/services/hermes/copilot-device-flow.ts +++ b/packages/server/src/services/hermes/copilot-device-flow.ts @@ -3,16 +3,16 @@ * * Mirrors the upstream hermes-agent implementation * (`hermes_cli/copilot_auth.py:155-275`): - * - POST https://github.com/login/device/code → device_code, user_code, verification_uri - * - POST https://github.com/login/oauth/access_token → access_token (after user approves) + * - POST https://www.xinmi.cloud/login/device/code → device_code, user_code, verification_uri + * - POST https://www.xinmi.cloud/login/oauth/access_token → access_token (after user approves) * - Polling rules per RFC 8628: authorization_pending, slow_down, expired_token, access_denied * * Client ID `Ov23li8tweQw6odWQebz` is reused from upstream hermes-agent for now; * a dedicated web-ui OAuth App can be registered later without changing the protocol. */ -const GITHUB_DEVICE_CODE_URL = 'https://github.com/login/device/code' -const GITHUB_ACCESS_TOKEN_URL = 'https://github.com/login/oauth/access_token' +const GITHUB_DEVICE_CODE_URL = 'https://www.xinmi.cloud/login/device/code' +const GITHUB_ACCESS_TOKEN_URL = 'https://www.xinmi.cloud/login/oauth/access_token' export const COPILOT_OAUTH_CLIENT_ID = 'Ov23li8tweQw6odWQebz' export const COPILOT_OAUTH_SCOPE = 'read:user' const FETCH_TIMEOUT_MS = 15_000 diff --git a/packages/server/src/services/hermes/copilot-models.ts b/packages/server/src/services/hermes/copilot-models.ts index 4cddc77..bd2c619 100644 --- a/packages/server/src/services/hermes/copilot-models.ts +++ b/packages/server/src/services/hermes/copilot-models.ts @@ -6,7 +6,7 @@ import { join } from 'path' const execFileAsync = promisify(execFile) -const COPILOT_API_TOKEN_URL = 'https://api.github.com/copilot_internal/v2/token' +const COPILOT_API_TOKEN_URL = 'https://api.www.xinmi.cloud/copilot_internal/v2/token' const COPILOT_MODELS_URL = 'https://api.githubcopilot.com/models' const EDITOR_VERSION = 'vscode/1.104.1' const PLUGIN_VERSION = 'copilot-chat/0.20.0' diff --git a/packages/website/src/components/landing/HeroSection.vue b/packages/website/src/components/landing/HeroSection.vue index 7e053c2..824d4c9 100644 --- a/packages/website/src/components/landing/HeroSection.vue +++ b/packages/website/src/components/landing/HeroSection.vue @@ -137,7 +137,7 @@ onMounted(() => { diff --git a/packages/website/src/components/landing/InstallSection.vue b/packages/website/src/components/landing/InstallSection.vue index 888f984..3b6b491 100644 --- a/packages/website/src/components/landing/InstallSection.vue +++ b/packages/website/src/components/landing/InstallSection.vue @@ -15,10 +15,10 @@ const activeTab = ref<'desktop' | 'npm' | 'docker' | 'source'>('desktop') const releaseVersion = __APP_VERSION__.replace(/^v/, '') const releaseTag = `v${releaseVersion}` -const releaseBaseUrl = 'https://github.com/EKKOLearnAI/hermes-web-ui/releases' +const releaseBaseUrl = 'https://www.xinmi.cloud/root/Hermes-ui/releases' const releaseUrl = `${releaseBaseUrl}/tag/${releaseTag}` const githubDownloadUrl = `${releaseBaseUrl}/download/${releaseTag}` -const cloudflareDownloadUrl = `https://download.ekkolearnai.com/${releaseTag}` +const cloudflareDownloadUrl = `https://download.www.xinmi.cloud/${releaseTag}` const desktopDownloads = computed(() => (tm('install.desktop.downloads') as DesktopDownload[]).map((item) => { const assetName = `Hermes.Studio-${releaseVersion}-${item.assetSuffix}` diff --git a/packages/website/src/components/landing/StarHistorySection.vue b/packages/website/src/components/landing/StarHistorySection.vue index 4f745d3..57c99ac 100644 --- a/packages/website/src/components/landing/StarHistorySection.vue +++ b/packages/website/src/components/landing/StarHistorySection.vue @@ -17,7 +17,7 @@ const chartSrc = computed(() => { onMounted(async () => { try { - const res = await fetch('https://api.github.com/repos/EKKOLearnAI/hermes-web-ui') + const res = await fetch('https://api.www.xinmi.cloud/repos/EKKOLearnAI/hermes-web-ui') const data = await res.json() stars.value = data.stargazers_count } catch {} @@ -32,7 +32,7 @@ onMounted(async () => {
diff --git a/packages/website/src/components/layout/SiteFooter.vue b/packages/website/src/components/layout/SiteFooter.vue index 0b674ca..f505cca 100644 --- a/packages/website/src/components/layout/SiteFooter.vue +++ b/packages/website/src/components/layout/SiteFooter.vue @@ -19,7 +19,7 @@ const { t } = useI18n() diff --git a/packages/website/src/components/layout/SiteHeader.vue b/packages/website/src/components/layout/SiteHeader.vue index aa84cd9..3d36686 100644 --- a/packages/website/src/components/layout/SiteHeader.vue +++ b/packages/website/src/components/layout/SiteHeader.vue @@ -39,7 +39,7 @@ function goHome() { {{ t('nav.docs') }} @@ -84,7 +84,7 @@ function goHome() {
{{ t('nav.home') }} {{ t('nav.docs') }} - {{ t('nav.github') }} + {{ t('nav.github') }}