feat(office): autonomous agent management layer (#914)

This commit is contained in:
Carlos Florêncio
2026-05-16 20:07:57 +01:00
committed by GitHub
parent 4a517427ba
commit 0b2085688b
1433 changed files with 170986 additions and 3303 deletions
+15 -7
View File
@@ -32,7 +32,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -57,8 +57,9 @@ jobs:
- name: Build
run: go build -v ./cmd/kandev
- name: Check gofmt
- name: Resolve base SHA
shell: bash
working-directory: ${{ github.workspace }}
run: |
set -euo pipefail
@@ -72,6 +73,14 @@ jobs:
BASE_SHA="$(git rev-list --max-parents=0 HEAD)"
fi
echo "BASE_SHA=${BASE_SHA}" >> "$GITHUB_ENV"
echo "Base SHA: ${BASE_SHA}"
- name: Check gofmt
shell: bash
run: |
set -euo pipefail
CHANGED_GO_FILES="$(
git diff --name-only --diff-filter=ACMRT "${BASE_SHA}"..."${{ github.sha }}" -- apps/backend \
| grep -E '^apps/backend/.*\.go$' \
@@ -94,9 +103,8 @@ jobs:
uses: golangci/golangci-lint-action@v9
with:
version: v2.9
args: ./...
args: ./... --new-from-rev=${{ env.BASE_SHA }}
working-directory: apps/backend
only-new-issues: true
- name: Run tests
run: |
@@ -110,7 +118,7 @@ jobs:
fromJSONFile: apps/backend/test-results.json
- name: Upload test artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: always()
with:
name: test-results
@@ -134,7 +142,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
@@ -158,4 +166,4 @@ jobs:
# a self-hosting Go helper (see testmain_test.go) so they run on
# every platform.
- name: Test windows-sensitive packages
run: go test -race -v ./internal/agentctl/server/process/... ./internal/agentctl/client/launcher/...
run: go test -race -v ./internal/agentctl/server/process/... ./internal/agent/runtime/agentctl/launcher/...
+35 -30
View File
@@ -38,16 +38,16 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version-file: apps/backend/go.mod
cache-dependency-path: apps/backend/go.sum
- name: Set up pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -70,7 +70,7 @@ jobs:
run: make build-backend-linux-helpers
- name: Upload backend build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: e2e-backend-build
path: apps/backend/bin/
@@ -82,7 +82,7 @@ jobs:
run: tar -cf apps/web/next-build.tar -C apps/web .next
- name: Upload web build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: e2e-web-build
path: apps/web/next-build.tar
@@ -100,10 +100,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -121,7 +121,7 @@ jobs:
run: npx playwright install chromium --with-deps
- name: Download backend build
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
name: e2e-backend-build
path: apps/backend/bin/
@@ -130,7 +130,7 @@ jobs:
run: chmod +x apps/backend/bin/*
- name: Download web build
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
name: e2e-web-build
path: apps/web/
@@ -149,7 +149,7 @@ jobs:
- name: Upload blob report
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: blob-report-${{ matrix.shard }}
path: apps/web/e2e/blob-report/
@@ -157,32 +157,37 @@ jobs:
- name: Upload test results
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: test-results-${{ matrix.shard }}
path: apps/web/e2e/test-results/
retention-days: 7
# Real-Docker E2E: exercises the local_docker executor end-to-end. ubuntu-latest
# ships with Docker preinstalled, so no service container is required. The
# spec count is small (currently 1 active + 2 fixme) so we don't shard.
# Real-Docker E2E: exercises the local_docker executor end-to-end.
# ubuntu-latest ships with Docker preinstalled, so no service container is
# required. Container-bound tests are slow (~2 min each), so we shard across
# 6 runners — Playwright's --shard splits the project's tests into N groups.
# Cleans up any leftover kandev-managed containers at the end so a leaky
# process doesn't poison the next run on the same self-hosted runner.
e2e-docker:
name: E2E Docker
name: E2E Docker Shard ${{ matrix.shard }}/6
needs: build
runs-on: ubuntu-latest
timeout-minutes: 15
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4, 5, 6]
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Verify Docker is available
run: docker info
- name: Set up pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -200,7 +205,7 @@ jobs:
run: npx playwright install chromium --with-deps
- name: Download backend build
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
name: e2e-backend-build
path: apps/backend/bin/
@@ -209,7 +214,7 @@ jobs:
run: chmod +x apps/backend/bin/*
- name: Download web build
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
name: e2e-web-build
path: apps/web/
@@ -218,11 +223,11 @@ jobs:
working-directory: apps/web
run: tar -xf next-build.tar && rm next-build.tar
- name: Run Docker E2E tests
- name: Run Docker E2E tests (shard ${{ matrix.shard }}/6)
working-directory: apps/web
env:
KANDEV_E2E_DOCKER: "1"
run: npx playwright test --config e2e/playwright.config.ts --project=docker
run: npx playwright test --config e2e/playwright.config.ts --project=docker --shard=${{ matrix.shard }}/6
- name: Cleanup leftover kandev containers
if: always()
@@ -233,17 +238,17 @@ jobs:
# sharded chromium/mobile-chrome runs.
- name: Upload Docker blob report
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: blob-report-docker
name: blob-report-docker-${{ matrix.shard }}
path: apps/web/e2e/blob-report/
retention-days: 3
- name: Upload Docker E2E results
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: docker-e2e-test-results
name: docker-e2e-test-results-${{ matrix.shard }}
path: apps/web/e2e/test-results/
retention-days: 7
@@ -256,10 +261,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -273,7 +278,7 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Download blob reports
uses: actions/download-artifact@v4
uses: actions/download-artifact@v5
with:
path: apps/web/e2e/blob-reports
pattern: blob-report-*
@@ -284,7 +289,7 @@ jobs:
run: npx playwright merge-reports --reporter=html ./e2e/blob-reports
- name: Upload merged report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: playwright-report
path: apps/web/playwright-report/
+2 -2
View File
@@ -44,12 +44,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5
with:
version: "9.15.9"
+5 -5
View File
@@ -26,7 +26,7 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha }}
@@ -35,7 +35,7 @@ jobs:
go-version-file: apps/backend/go.mod
cache-dependency-path: apps/backend/go.sum
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -77,7 +77,7 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
# pull_request_target checks out base by default; explicitly use PR head.
# Safe: the preview CLI only reads files to build artifacts and posts comments.
@@ -92,7 +92,7 @@ jobs:
go-version-file: apps/backend/go.mod
cache-dependency-path: apps/backend/go.sum
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -156,7 +156,7 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
+19 -19
View File
@@ -53,12 +53,12 @@ jobs:
version: ${{ steps.compute.outputs.version }}
tag: ${{ steps.compute.outputs.tag }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -246,10 +246,10 @@ jobs:
if: ${{ !inputs.dry_run }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
version: "9.15.9"
- uses: actions/setup-node@v6
@@ -263,7 +263,7 @@ jobs:
run: pnpm -C apps --filter @kandev/web build
- name: Package web bundle
run: bash scripts/release/package-web.sh
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v5
with:
name: web-bundle
path: dist/web
@@ -275,10 +275,10 @@ jobs:
if: ${{ !inputs.dry_run }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
version: "9.15.9"
- uses: actions/setup-node@v6
@@ -288,7 +288,7 @@ jobs:
run: pnpm -C apps install --frozen-lockfile
- name: Build and bundle CLI
run: bash scripts/release/package-cli.sh
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v5
with:
name: cli-bundle
path: dist/kandev/cli
@@ -328,18 +328,18 @@ jobs:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
- uses: actions/setup-go@v6
with:
go-version-file: apps/backend/go.mod
cache-dependency-path: apps/backend/go.sum
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v5
with:
name: web-bundle
path: dist/web
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v5
with:
name: cli-bundle
path: dist/kandev/cli
@@ -391,7 +391,7 @@ jobs:
tar -czf "kandev-${{ matrix.platform }}.tar.gz" kandev
shasum -a 256 "kandev-${{ matrix.platform }}.tar.gz" > "kandev-${{ matrix.platform }}.tar.gz.sha256"
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v5
with:
name: bundle-${{ matrix.platform }}
path: |
@@ -407,7 +407,7 @@ jobs:
contents: read
packages: write # push to GHCR
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
@@ -467,7 +467,7 @@ jobs:
env:
STAGING_IMAGE: ghcr.io/kdlbs/kandev:universal-staging-${{ needs.prepare.outputs.tag }}-${{ github.run_id }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
@@ -553,7 +553,7 @@ jobs:
permissions:
contents: write # softprops/action-gh-release creates the release
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
fetch-depth: 0
@@ -566,7 +566,7 @@ jobs:
env:
OUTPUT: RELEASE_NOTES.md
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v5
with:
pattern: bundle-*
path: dist/release-assets
@@ -609,11 +609,11 @@ jobs:
id-token: write # Required for OIDC trusted publishing
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
version: "9.15.9"
@@ -639,7 +639,7 @@ jobs:
if: ${{ !inputs.dry_run }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
ref: ${{ needs.prepare.outputs.tag }}
+1 -1
View File
@@ -46,7 +46,7 @@ jobs:
env:
STAGING_IMAGE: ghcr.io/kdlbs/kandev:universal-staging-weekly-${{ github.run_id }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Compute date tag
id: date