Tighten cua-agent design seams: typed translator, declared channels #97
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| unit: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - run: npm ci | |
| - run: npm run build --workspace @onkernel/cua-ai | |
| - name: Unit tests | |
| run: npm test --workspace @onkernel/cua-ai | |
| - name: Pack tarball | |
| run: npm pack --workspace @onkernel/cua-ai --pack-destination "$RUNNER_TEMP" | |
| - name: ESM import smoke test | |
| run: | | |
| mkdir -p "$RUNNER_TEMP/esm-smoke" | |
| cd "$RUNNER_TEMP/esm-smoke" | |
| npm init -y | |
| npm install "$RUNNER_TEMP"/onkernel-cua-ai-*.tgz | |
| node --input-type=module -e "import('@onkernel/cua-ai').then((m) => { if (typeof m.getCuaModel !== 'function') process.exit(1); })" | |
| agent-unit: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - run: npm ci | |
| - run: npm run build --workspace @onkernel/cua-ai | |
| - name: Agent unit tests | |
| run: npm test --workspace @onkernel/cua-agent -- --exclude "**/*.live.test.ts" | |
| integration: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| # Only run on the main repo (not forks) so secrets are available. | |
| # Skip draft PRs; still run on every commit to non-draft PRs and on main pushes. | |
| if: github.event_name == 'push' || (github.event.pull_request.head.repo.full_name == github.repository && !github.event.pull_request.draft) | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - run: npm ci | |
| - run: npm run build --workspace @onkernel/cua-ai | |
| - name: Integration tests | |
| env: | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} | |
| TZAFON_API_KEY: ${{ secrets.TZAFON_API_KEY }} | |
| YUTORI_API_KEY: ${{ secrets.YUTORI_API_KEY }} | |
| run: npm run test:integration --workspace @onkernel/cua-ai | |
| agent-e2e: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| # Only run on the main repo (not forks) so secrets are available. | |
| # Skip draft PRs; still run on every commit to non-draft PRs and on main pushes. | |
| if: github.event_name == 'push' || (github.event.pull_request.head.repo.full_name == github.repository && !github.event.pull_request.draft) | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - run: npm ci | |
| - run: npm run build --workspace @onkernel/cua-ai | |
| - run: npm run build --workspace @onkernel/cua-agent | |
| - name: Agent live smoke tests (all providers) | |
| env: | |
| CUA_E2E_LIVE: "1" | |
| KERNEL_API_KEY: ${{ secrets.KERNEL_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} | |
| TZAFON_API_KEY: ${{ secrets.TZAFON_API_KEY }} | |
| YUTORI_API_KEY: ${{ secrets.YUTORI_API_KEY }} | |
| run: npm test --workspace @onkernel/cua-agent -- test/e2e.live.test.ts |