Repository navigation
fix(computer-use): clean up completed permission helpers asynchronously #9650
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Computer-use e2e | |
| on: | |
| pull_request: | |
| paths: | |
| - '.github/workflows/computer-e2e.yml' | |
| - 'config/electron-builder.config.cjs' | |
| - 'config/scripts/build-computer-macos.mjs' | |
| - 'config/scripts/build-native-for-platform.mjs' | |
| - 'config/scripts/build-native-for-platform.test.mjs' | |
| - 'config/scripts/pnpm-cli-invocation.mjs' | |
| - 'config/scripts/build-windows-cli-launcher.mjs' | |
| - 'config/scripts/build-windows-cli-launcher.test.mjs' | |
| - 'config/scripts/macos-computer-helper-owner-loss-benchmark.mjs' | |
| - 'config/scripts/macos-computer-helper-owner-loss-group-recovery.test.mjs' | |
| - 'config/scripts/macos-computer-helper-owner-loss-metrics.mjs' | |
| - 'config/scripts/macos-computer-helper-owner-loss-processes.mjs' | |
| - 'config/scripts/macos-computer-helper-owner-loss-processes.test.mjs' | |
| - 'config/scripts/macos-computer-helper-owner-loss-trial-cleanup.mjs' | |
| - 'config/scripts/computer-use-smoke.mjs' | |
| - 'config/scripts/computer-use-smoke.test.mjs' | |
| - 'config/scripts/daemon-boot-smoke.mjs' | |
| - 'config/scripts/daemon-endpoint-handover-smoke.mjs' | |
| - 'config/scripts/windows-daemon-workspace-close-repro.mjs' | |
| - 'config/scripts/verify-computer-native.mjs' | |
| # Why: the native-smoke job boots the built terminal daemon under plain | |
| # Node, so any change to the daemon bundle graph or the main build must | |
| # re-run it (the v1.4.129-rc.1 daemon outage shipped with green CI). | |
| - 'electron.vite.config.ts' | |
| - 'config/build-plugins/**' | |
| - 'src/main/daemon/**' | |
| - '!src/main/daemon/**/*.test.ts' | |
| - 'src/main/providers/local-pty-provider.ts' | |
| - 'src/main/providers/windows-shell-args.ts' | |
| - 'src/main/providers/windows-shell-preflight-runtime.windows.test.ts' | |
| - 'native/computer-use-macos/**' | |
| - 'native/computer-use-linux/**' | |
| - 'native/computer-use-windows/**' | |
| - 'native/windows-cli-launcher/**' | |
| - 'skills/computer-use/SKILL.md' | |
| - 'src/cli/**' | |
| - 'src/main/computer/**' | |
| - 'src/main/runtime/rpc/dispatcher.ts' | |
| - 'src/main/runtime/rpc/errors.ts' | |
| - 'src/main/runtime/rpc/methods/computer*.ts' | |
| - 'src/main/ssh/ssh-remote-cli-launcher.ts' | |
| - 'src/main/ssh/ssh-remote-cli-launcher.test.ts' | |
| - 'src/shared/computer-use-*.ts' | |
| - 'tests/e2e/computer-linux.e2e.ts' | |
| - 'tests/e2e/computer-windows.e2e.ts' | |
| - 'tests/e2e/computer-windows-store.e2e.ts' | |
| - 'tests/e2e/helpers/computer-cli-driver.ts' | |
| - 'tests/e2e/helpers/computer-driver.ts' | |
| - 'tests/e2e/vitest.config.ts' | |
| workflow_dispatch: | |
| schedule: | |
| - cron: '0 6 * * *' | |
| concurrency: | |
| group: computer-e2e-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| jobs: | |
| native-smoke: | |
| if: github.event_name == 'pull_request' | |
| permissions: | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-22.04, windows-latest] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| persist-credentials: false | |
| - if: runner.os == 'Linux' | |
| run: sudo apt-get update && sudo apt-get install -y python3 python3-gi gir1.2-atspi-2.0 at-spi2-core | |
| - uses: ./.github/actions/install-node-dependencies | |
| with: | |
| native-runtime: node | |
| # Why: without --config, bare vitest ignores config/vitest.config.ts (there | |
| # is no root config) and falls back to the 5s default timeout with no | |
| # Windows worker cap, so the real csc.exe launcher-compile tests time out | |
| # on hosted Windows. Use the shared config so this job matches pnpm test. | |
| - run: >- | |
| pnpm vitest run --config config/vitest.config.ts | |
| src/main/ssh/ssh-remote-cli-launcher.test.ts | |
| config/scripts/macos-computer-helper-owner-loss-group-recovery.test.mjs | |
| config/scripts/macos-computer-helper-owner-loss-processes.test.mjs | |
| config/scripts/computer-use-smoke.test.mjs | |
| src/main/computer/computer-provider-lifecycle.test.ts | |
| src/main/computer/computer-provider-unavailable-message.test.ts | |
| src/main/computer/sidecar-client.test.ts | |
| src/main/computer/macos-native-provider-client.test.ts | |
| src/main/computer/macos-native-provider-socket.test.ts | |
| src/main/computer/macos-computer-use-permissions.test.ts | |
| src/main/computer/macos-computer-use-permission-status.test.ts | |
| src/main/providers/windows-shell-preflight-runtime.windows.test.ts | |
| src/main/computer/desktop-script-provider-client.test.ts | |
| src/main/computer/desktop-script-provider-cache.test.ts | |
| src/main/computer/desktop-script-provider-actions.test.ts | |
| src/main/computer/desktop-script-provider-cache-lifecycle.test.ts | |
| src/main/computer/desktop-script-provider-errors.test.ts | |
| src/main/computer/desktop-script-provider-action-errors.test.ts | |
| src/shared/computer-use-error-recovery.test.ts | |
| src/shared/computer-use-key-spec.test.ts | |
| src/cli/format.test.ts | |
| src/cli/handlers/computer.test.ts | |
| src/cli/handlers/computer-action-routing.test.ts | |
| src/cli/handlers/computer-action-validation.test.ts | |
| src/cli/handlers/computer-state-formatting.test.ts | |
| src/cli/index.test.ts | |
| src/main/runtime/rpc/dispatcher-computer-errors.test.ts | |
| src/main/runtime/rpc/errors.test.ts | |
| src/main/runtime/rpc/methods/computer.test.ts | |
| src/main/runtime/rpc/methods/computer-actions.test.ts | |
| src/cli/runtime/envelope-schema.test.ts | |
| src/shared/remote-runtime-client.test.ts | |
| - run: pnpm verify:computer-native | |
| - run: pnpm build:cli | |
| - run: pnpm run build:electron-vite:parallel | |
| # Why: boot the BUILT daemon-entry under plain Node the way production | |
| # forks it. v1.4.129-rc.1 shipped a daemon that exited at module load | |
| # (leaked electron require) while every other check passed; this fails | |
| # the PR when the built daemon cannot start on ubuntu-22.04 / windows. | |
| - name: Daemon boot smoke | |
| run: node config/scripts/daemon-boot-smoke.mjs | |
| # Why: a daemon that lost its endpoint name used to delete the replacement's | |
| # socket on exit, stranding a live daemon that hosts PTYs nothing can reach. | |
| # Only two real processes racing the same endpoint reproduce it. | |
| - name: Daemon endpoint handover smoke | |
| run: node config/scripts/daemon-endpoint-handover-smoke.mjs | |
| # Why: workspace removal overlaps graceful renderer teardown with the | |
| # forced main-process sweep; exercise that exact pair against real ConPTY. | |
| - name: Windows daemon workspace-close repro | |
| if: runner.os == 'Windows' | |
| run: node config/scripts/windows-daemon-workspace-close-repro.mjs | |
| # Hosted macOS runners cannot receive persistent Accessibility/Screen Recording | |
| # grants. Keep the real native build/owner-loss checks on every trigger instead. | |
| mac-native-owner-smoke: | |
| runs-on: macos-15 | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/install-node-dependencies | |
| with: | |
| native-runtime: electron | |
| - name: Owner-loss benchmark process cleanup | |
| run: >- | |
| pnpm vitest run | |
| config/scripts/macos-computer-helper-owner-loss-group-recovery.test.mjs | |
| config/scripts/macos-computer-helper-owner-loss-processes.test.mjs | |
| # Why: the parallel launcher's cancellation tests are darwin-only and no | |
| # other PR job runs on macOS. | |
| - name: Parallel native build launcher cancellation | |
| run: >- | |
| pnpm vitest run --config config/vitest.config.ts | |
| config/scripts/build-native-for-platform.test.mjs | |
| - name: Authenticated helper owner-loss smoke | |
| run: pnpm bench:macos-computer-helper-owner-loss --expect reaped --trials 1 | |
| - name: Swift tests and signed universal helper verification | |
| run: pnpm verify:computer-native | |
| linux: | |
| if: github.event_name != 'pull_request' | |
| runs-on: ubuntu-22.04 | |
| env: | |
| ORCA_COMPUTER_E2E: '1' | |
| ACCESSIBILITY_ENABLED: '1' | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| persist-credentials: false | |
| - run: sudo apt-get update && sudo apt-get install -y build-essential python3 python3-gi gir1.2-atspi-2.0 gedit at-spi2-core xvfb xclip xdotool | |
| - uses: ./.github/actions/install-node-dependencies | |
| with: | |
| native-runtime: electron | |
| - run: pnpm verify:computer-native | |
| - run: pnpm build:cli | |
| - run: pnpm run build:electron-vite:parallel | |
| - run: xvfb-run --auto-servernum dbus-run-session -- pnpm test:e2e:computer --reporter=verbose tests/e2e/computer-linux.e2e.ts | |
| windows: | |
| if: github.event_name != 'pull_request' | |
| runs-on: windows-latest | |
| env: | |
| ORCA_COMPUTER_E2E: '1' | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/install-node-dependencies | |
| with: | |
| native-runtime: electron | |
| - run: pnpm verify:computer-native | |
| - run: pnpm build:cli | |
| - run: pnpm run build:electron-vite:parallel | |
| - run: pnpm test:e2e:computer --reporter=verbose tests/e2e/computer-windows.e2e.ts tests/e2e/computer-windows-store.e2e.ts |