feat(chat): run chat turns in CodeAct mode with a JS graph object model #11915
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: Test | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - "web/**" | |
| - "electron/**" | |
| - "packages/**" | |
| - "reliability/**" | |
| - "mobile/**" | |
| - "examples/**" | |
| - "scripts/**" | |
| - "Dockerfile" | |
| - ".dockerignore" | |
| - "package.json" | |
| - "package-lock.json" | |
| - "tsconfig.json" | |
| - "tsconfig.*.json" | |
| - "turbo.json" | |
| - ".nvmrc" | |
| - ".github/workflows/test.yml" | |
| - ".github/workflows/quality-checks.yml" | |
| - ".github/actions/setup-build/**" | |
| pull_request: | |
| branches: | |
| - main | |
| # No `paths` filter here: this workflow's "Quality Gate" job is a REQUIRED | |
| # status check. A path-filtered required check is left Pending (never runs) | |
| # when a PR push/merge touches no matching path — e.g. a clean "merge main" | |
| # commit — which blocks the PR and auto-merge indefinitely. Running the gate | |
| # on every PR keeps the required check from getting stuck. (The `push` to | |
| # main above keeps its path filter — there is no required-check to block.) | |
| # Cancel superseded runs for the same branch/PR; the latest push is what matters. | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| quality: | |
| name: Quality Gate (npm run check) | |
| uses: ./.github/workflows/quality-checks.yml | |
| # A called workflow's permissions are capped by the caller's, so the gate's | |
| # `docker` leg only gets its read-only GHCR buildcache access if it is | |
| # granted here too. | |
| permissions: | |
| contents: read | |
| packages: read | |
| with: | |
| # false → every check leg (deps/typecheck/lint/tests) runs to completion | |
| # so each reports its own red/green instead of the first failure masking | |
| # the rest. The required check is the reusable workflow's `quality` gate | |
| # job, surfaced unchanged as "Quality Gate (npm run check) / quality". | |
| fail-fast: false | |
| skip-tests: false | |
| # Heavy jobs run concurrently with the quality gate rather than after it, so | |
| # the critical path is max(quality, integration, e2e) instead of | |
| # quality + max(integration, e2e). Trade-off: a PR that fails a static check | |
| # still spends these runner minutes. They build packages themselves (they are | |
| # in this workflow, not the reusable quality-checks one, so they can't consume | |
| # its build artifact without depending on the whole gate — which would undo | |
| # the decoupling). | |
| integration: | |
| name: Workflow Integration Tests | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Set up Node, install deps, build packages | |
| uses: ./.github/actions/setup-build | |
| - name: Run shipped-workflow execution tests | |
| run: npm run test:integration | |
| workflow-runner-e2e: | |
| name: Workflow Runner Browser E2E | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Set up Node, install deps, build packages | |
| # mesa-vulkan-drivers ships lavapipe (CPU Vulkan ICD) so headless | |
| # Chromium can acquire a WebGPU adapter on GPU-less CI runners. The | |
| # workflow-runner browser harness uses it to drive shader-pool tests | |
| # (color.brightnessContrast, etc.) against the same module catalog | |
| # the server uses on Node/Dawn. | |
| uses: ./.github/actions/setup-build | |
| with: | |
| extra-apt: mesa-vulkan-drivers | |
| - name: Cache Playwright browsers | |
| id: playwright-cache | |
| uses: actions/cache@v6 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('**/package-lock.json') }} | |
| restore-keys: | | |
| ${{ runner.os }}-playwright- | |
| - name: Install Playwright Chromium browser | |
| run: npx playwright install --with-deps chromium | |
| working-directory: packages/workflow-runner | |
| - name: Run workflow-runner browser E2E tests | |
| run: npm run test:e2e --workspace=@nodetool-ai/workflow-runner | |
| - name: Upload Playwright report on failure | |
| if: failure() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: workflow-runner-playwright-report | |
| path: packages/workflow-runner/playwright-report | |
| retention-days: 7 |