chore(release): release 0.1.0-beta.41 #3950
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
| # Schema/lint layer for the shipped agent plugin bundles. Mirrors: | |
| # https://github.com/cursor/plugins/blob/main/.github/workflows/validate-plugins.yml | |
| # | |
| # Rust contract tests already run in ci.yml. Keep this workflow to schema checks | |
| # and the SDK-backed MCP smoke, which needs a built binary plus npx. | |
| name: Plugin Validation | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| paths: | |
| - "plugin/**" | |
| - "plugin/cursor-native-extension/**" | |
| - "tests/fixtures/cursor-schemas/**" | |
| - "crates/tracedecay/tests/agent_suite/*plugin*" | |
| - "crates/tracedecay/tests/agent_suite/*skill*" | |
| - "scripts/mcp-conformance-smoke.sh" | |
| - "scripts/check-dashboard-bundle.py" | |
| - "crates/tracedecay/src/serve.rs" | |
| - "crates/tracedecay-cli/**" | |
| - "crates/tracedecay/src/lib.rs" | |
| - "crates/tracedecay/src/mcp/**" | |
| - "crates/tracedecay-mcp/**" | |
| - "Cargo.toml" | |
| - "Cargo.lock" | |
| - ".github/workflows/plugin-validation.yml" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| dashboard-assets: | |
| name: Build dashboard artifact | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| cache-dependency-path: dashboard/package-lock.json | |
| - name: Install dashboard dependencies | |
| working-directory: dashboard | |
| run: npm ci | |
| - name: Build dashboard | |
| working-directory: dashboard | |
| run: npm run build | |
| - name: Validate dashboard bundle | |
| run: python3 scripts/check-dashboard-bundle.py dashboard/app-dist | |
| - name: Upload dashboard artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: dashboard-app-dist | |
| path: dashboard/app-dist | |
| if-no-files-found: error | |
| include-hidden-files: true | |
| manifest-schema: | |
| name: Manifest schema | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Install ajv-cli | |
| run: npm install --no-save ajv-cli@5.0.0 ajv-formats@2.1.1 | |
| - name: Compile vendored schemas | |
| run: | | |
| set -euo pipefail | |
| npx --no-install ajv compile --spec=draft7 -c ajv-formats \ | |
| -s tests/fixtures/cursor-schemas/plugin.schema.json \ | |
| -s tests/fixtures/cursor-schemas/marketplace.schema.json \ | |
| -s tests/fixtures/cursor-schemas/mcp.schema.json \ | |
| -s tests/fixtures/cursor-schemas/hooks.schema.json | |
| - name: Validate Cursor plugin manifest | |
| run: | | |
| set -euo pipefail | |
| npx --no-install ajv validate --spec=draft7 -c ajv-formats --errors=text \ | |
| -s tests/fixtures/cursor-schemas/plugin.schema.json \ | |
| -d plugin/.cursor-plugin/plugin.json | |
| - name: Check bundle JSON files parse | |
| run: | | |
| set -euo pipefail | |
| find plugin -name '*.json' -print0 | | |
| while IFS= read -r -d '' f; do | |
| python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$f" \ | |
| || { echo "invalid JSON: $f" >&2; exit 1; } | |
| echo "ok: $f" | |
| done | |
| claude-native-validation: | |
| name: Claude native plugin validation | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install Claude Code | |
| run: | | |
| set -euo pipefail | |
| curl -fsSL https://claude.ai/install.sh | bash | |
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | |
| - name: Validate Claude plugin bundle | |
| run: claude plugin validate plugin --strict | |
| # Uses MCP Inspector's TypeScript SDK client to cover stdio handshake and | |
| # schema compatibility beyond the in-repo Rust MCP tests. | |
| mcp-conformance-smoke: | |
| name: MCP conformance smoke | |
| needs: dashboard-assets | |
| runs-on: ubuntu-latest | |
| # The only job here that compiles tracedecay-cli, so the skip flag is | |
| # scoped to it instead of the whole workflow. | |
| env: | |
| TRACEDECAY_SKIP_DASHBOARD_BUILD: "1" | |
| # Cold `cargo build -p tracedecay-cli --bin tracedecay` plus the SDK smoke has been | |
| # cancelled at exactly 20m during the compile step. 30 leaves | |
| # headroom without hiding a hung linker. | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Download dashboard artifact | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: dashboard-app-dist | |
| path: dashboard/app-dist | |
| - name: Validate downloaded dashboard bundle | |
| run: python3 scripts/check-dashboard-bundle.py dashboard/app-dist | |
| # Skip-mode CLI builds require the validated bundle's expected digest. | |
| - name: Export dashboard bundle digest for skip-mode builds | |
| run: | | |
| set -euo pipefail | |
| digest="$(python3 scripts/check-dashboard-bundle.py dashboard/app-dist --print-digest)" | |
| echo "TRACEDECAY_DASHBOARD_BUNDLE_SHA256=${digest}" >> "$GITHUB_ENV" | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Build tracedecay | |
| run: cargo build -p tracedecay-cli --bin tracedecay --locked | |
| - name: Run MCP conformance smoke | |
| run: scripts/mcp-conformance-smoke.sh | |
| env: | |
| TRACEDECAY_BIN: target/debug/tracedecay |