diff --git a/.github/issue-evidence/11752-widget-overlap/after-mobile-home.png b/.github/issue-evidence/11752-widget-overlap/after-mobile-home.png index 934d9cf37c650..6454f04a199ba 100644 Binary files a/.github/issue-evidence/11752-widget-overlap/after-mobile-home.png and b/.github/issue-evidence/11752-widget-overlap/after-mobile-home.png differ diff --git a/.github/issue-evidence/11752-widget-overlap/before-mobile-home.png b/.github/issue-evidence/11752-widget-overlap/before-mobile-home.png index 1f6e9c746ea20..9d089a3f3f962 100644 Binary files a/.github/issue-evidence/11752-widget-overlap/before-mobile-home.png and b/.github/issue-evidence/11752-widget-overlap/before-mobile-home.png differ diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 64182c252c4af..0564a58438b92 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -626,40 +626,6 @@ jobs: run: | node packages/scripts/verify-npm-pack-dist.mjs --all-public-dist-packages --build - # Stage downloadable release binaries so the GitHub Release carries more - # than just source archives (#11858): headline npm tarballs + standalone - # `elizaos` CLI executables for every platform + a combined checksum file. - # Runs while workspace:* refs are still replaced (packed dependency ranges - # match the registry) and before the "Restore workspace references" step. - # Gated to real release events β€” a workflow_dispatch beta (tag_created) or - # a stable GitHub `release`. - - name: Stage release binaries (npm tarballs + standalone CLI) - id: stage_artifacts - if: steps.tag.outputs.tag_created == 'true' || github.event_name == 'release' - run: | - set -euo pipefail - ARTIFACT_DIR="${GITHUB_WORKSPACE}/release-artifacts" - rm -rf "${ARTIFACT_DIR}" - mkdir -p "${ARTIFACT_DIR}" - - echo "πŸ“¦ Packing headline npm tarballs..." - node packages/scripts/pack-release-artifacts.mjs --out "${ARTIFACT_DIR}/npm" - - echo "πŸ›  Compiling standalone elizaos CLI binaries (all platforms)..." - bun packages/elizaos/build-standalone.ts --out "${ARTIFACT_DIR}/cli" - - echo "πŸ” Writing combined SHA256SUMS.txt..." - ( - cd "${ARTIFACT_DIR}" - find . -type f \( -name '*.tgz' -o -name '*.tar.gz' -o -name '*.zip' \) \ - | sed 's|^\./||' | sort \ - | while read -r f; do shasum -a 256 "$f"; done > SHA256SUMS.txt - ) - - echo "artifact_dir=${ARTIFACT_DIR}" >> "$GITHUB_OUTPUT" - echo "=== staged release artifacts ===" - find "${ARTIFACT_DIR}" -type f | sort - # Publish to NPM (only after git operations succeed) - name: Skip NPM publish on forks if: github.repository != 'elizaOS/eliza' @@ -827,17 +793,6 @@ jobs: with: tag_name: ${{ steps.tag.outputs.tag_name }} name: ${{ steps.tag.outputs.tag_name }} - # Attach the staged downloadable binaries alongside the auto-generated - # source archives. fail_on_unmatched_files surfaces a broken staging - # step instead of silently publishing a source-only release again. - files: | - release-artifacts/npm/*.tgz - release-artifacts/npm/SHA256SUMS-npm.txt - release-artifacts/cli/*.tar.gz - release-artifacts/cli/*.zip - release-artifacts/cli/SHA256SUMS-cli.txt - release-artifacts/SHA256SUMS.txt - fail_on_unmatched_files: true body: | πŸ”΅ Beta Release @@ -856,38 +811,12 @@ jobs: bun add @elizaos/core@${{ steps.release_type.outputs.dist_tag }} ``` - ### Downloads - - Prefer a self-contained binary? Grab a standalone `elizaos` CLI - (`elizaos-.tar.gz` / `.zip`) below β€” no npm or Bun required. - The `*.tgz` files are the exact npm tarballs; verify any download - against `SHA256SUMS.txt`. - --- > **Note:** This is a ${{ steps.release_type.outputs.type }} release. Production releases use the `latest` tag and are triggered by GitHub releases on tags matching `v*.*.*`. draft: false prerelease: true - # Stable production releases already exist (a human created the GitHub - # release before this workflow fired on the `release` event), so we append - # the staged binaries to that existing release instead of creating one. - - name: Attach release binaries to production release - if: github.event_name == 'release' && steps.stage_artifacts.outputs.artifact_dir != '' - uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.event.release.tag_name }} - files: | - release-artifacts/npm/*.tgz - release-artifacts/npm/SHA256SUMS-npm.txt - release-artifacts/cli/*.tar.gz - release-artifacts/cli/*.zip - release-artifacts/cli/SHA256SUMS-cli.txt - release-artifacts/SHA256SUMS.txt - fail_on_unmatched_files: true - - name: Summary if: always() run: | diff --git a/.gitignore b/.gitignore index 5136ecbebe4cb..8207f3a1d0d4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1518,8 +1518,3 @@ railway.json .railwayignore .dockerignore packages/ui/src/components/shell/__e2e__/output-fused-wake-integration/ - -# Standalone CLI build output (packages/elizaos/build-standalone.ts) -packages/elizaos/dist-standalone/ -# Release artifacts staged by release.yaml (npm tarballs + CLI binaries) -release-artifacts/ diff --git a/packages/app/test/ui-smoke/all-views-interaction.spec.ts b/packages/app/test/ui-smoke/all-views-interaction.spec.ts index eaa97d1768395..a184eabfb5f09 100644 --- a/packages/app/test/ui-smoke/all-views-interaction.spec.ts +++ b/packages/app/test/ui-smoke/all-views-interaction.spec.ts @@ -11,6 +11,7 @@ import { openAppPath, seedAppStorage, } from "./helpers"; +import { VIEW_ROUTES } from "./view-routes"; /** * Generic per-view interaction coverage (#8796). @@ -27,42 +28,6 @@ import { * Clicks that navigate away are recovered by re-opening the route, so one * navigation doesn't end coverage of the rest of the page. */ -const VIEW_ROUTES: Array<{ id: string; path: string }> = [ - { id: "chat", path: "/chat" }, - { id: "phone", path: "/phone" }, - { id: "messages", path: "/messages" }, - { id: "contacts", path: "/contacts" }, - { id: "camera", path: "/camera" }, - { id: "tasks", path: "/apps/tasks" }, - { id: "browser", path: "/browser" }, - { id: "stream", path: "/stream" }, - { id: "apps", path: "/apps" }, - { id: "views", path: "/views" }, - { id: "character", path: "/character" }, - { id: "character-select", path: "/character/select" }, - { id: "automations", path: "/automations" }, - { id: "inventory", path: "/wallet" }, - { id: "documents", path: "/character/documents" }, - { id: "files", path: "/apps/files" }, - { id: "plugins", path: "/apps/plugins" }, - { id: "skills", path: "/apps/skills" }, - { id: "fine-tuning", path: "/apps/fine-tuning" }, - { id: "trajectories", path: "/apps/trajectories" }, - { id: "transcripts", path: "/apps/transcripts" }, - { id: "relationships", path: "/apps/relationships" }, - { id: "memories", path: "/apps/memories" }, - { id: "rolodex", path: "/rolodex" }, - { id: "voice", path: "/settings/voice" }, - { id: "runtime", path: "/apps/runtime" }, - { id: "database", path: "/apps/database" }, - { id: "desktop", path: "/desktop" }, - { id: "settings", path: "/settings" }, - { id: "tutorial", path: "/tutorial" }, - { id: "help", path: "/help" }, - { id: "logs", path: "/apps/logs" }, - { id: "background", path: "/background" }, -]; - // Bound per-view work so the suite stays under the playwright timeout while // still exercising a representative breadth of controls. const MAX_CLICKS = 24; diff --git a/packages/app/test/ui-smoke/tap-target-geometry-all-views.spec.ts b/packages/app/test/ui-smoke/tap-target-geometry-all-views.spec.ts new file mode 100644 index 0000000000000..b4add44c8f4f1 --- /dev/null +++ b/packages/app/test/ui-smoke/tap-target-geometry-all-views.spec.ts @@ -0,0 +1,528 @@ +// Reusable rendered-geometry tap-target + role/DOM-coherence gate (#10722). +// +// The 44px Apple-HIG touch floor used to be enforced only as a CSS token +// (`--min-touch-target`) plus lint conventions β€” nothing measured what the +// browser actually laid out, so a control could regress below 44px (the +// ShellBackButton shipped at 36px; the spatial filter chips at ~34px) with the +// whole gate green. `tap-target-geometry.spec.ts` measures the two known +// regression surfaces; THIS spec generalizes that to a REUSABLE gate that walks +// the same canonical built-in view enumeration the interaction-coverage spec +// uses (`./view-routes`), measures REAL `getBoundingClientRect()` geometry for +// every standalone interactive control on a coarse-pointer Pixel-7 viewport, and +// asserts: +// +// 1. every STANDALONE interactive control (icon/label button, role=button/ +// tab/switch/menuitem, standalone link) renders a >=44x44 hit target, and +// 2. role<->DOM-node coherence: an ARIA role must not contradict the node's +// native semantics, a non-native role=button/link must be keyboard- +// focusable, and every interactive control must expose an accessible name. +// +// Legitimately-sub-44 controls (inline prose links, native checkbox/radio boxes +// whose