From f1b62db4ce08449c4fca031688863b1631a8255f Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Mon, 5 Oct 2026 18:05:26 +0000 Subject: [PATCH 1/6] fix(cli): Regenerate skill versions for 0.48.0 Co-Authored-By: GPT-6 Sol --- packages/cli/plugins/sentry-cli/skills/sentry-cli/SKILL.md | 2 +- .../skills/sentry-cli/references/agent-conversation.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/alert.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/api.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/auth.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/build.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/cli.md | 2 +- .../sentry-cli/skills/sentry-cli/references/code-mappings.md | 2 +- .../sentry-cli/skills/sentry-cli/references/dart-symbol-map.md | 2 +- .../sentry-cli/skills/sentry-cli/references/dashboard.md | 2 +- .../sentry-cli/skills/sentry-cli/references/debug-files.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/docs.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/dsn.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/event.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/explore.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/feedback.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/info.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/init.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/issue.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/local.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/log.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/monitor.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/org.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/platform.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/proguard.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/project.md | 2 +- .../sentry-cli/skills/sentry-cli/references/react-native.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/release.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/replay.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/repo.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/schema.md | 2 +- .../sentry-cli/skills/sentry-cli/references/snapshots.md | 2 +- .../sentry-cli/skills/sentry-cli/references/sourcemap.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/span.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/status.md | 2 +- .../cli/plugins/sentry-cli/skills/sentry-cli/references/team.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/trace.md | 2 +- .../plugins/sentry-cli/skills/sentry-cli/references/trial.md | 2 +- .../sentry-cli/skills/sentry-cli/references/wasm-split.md | 2 +- 39 files changed, 39 insertions(+), 39 deletions(-) diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/SKILL.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/SKILL.md index 30fceeb72..6b015b47b 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/SKILL.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/SKILL.md @@ -1,6 +1,6 @@ --- name: sentry-cli -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Guide for using the Sentry CLI to interact with Sentry from the command line. Use when the user asks about viewing issues, events, projects, organizations, making API calls, or authenticating with Sentry via CLI. requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/agent-conversation.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/agent-conversation.md index ca7e7bb2a..0ba3bdab8 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/agent-conversation.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/agent-conversation.md @@ -1,6 +1,6 @@ --- name: sentry-cli-agent-conversation -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: List and view agent conversations requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/alert.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/alert.md index 7ce0e7ef7..e742f6276 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/alert.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/alert.md @@ -1,6 +1,6 @@ --- name: sentry-cli-alert -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage Sentry alert rules requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/api.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/api.md index 9cee33e99..6fe3ff6e3 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/api.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/api.md @@ -1,6 +1,6 @@ --- name: sentry-cli-api -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Make an authenticated API request requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/auth.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/auth.md index 4d930876f..43fbe9eee 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/auth.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/auth.md @@ -1,6 +1,6 @@ --- name: sentry-cli-auth -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Authenticate with Sentry requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/build.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/build.md index 7ad9177be..4064f1e2a 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/build.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/build.md @@ -1,6 +1,6 @@ --- name: sentry-cli-build -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage mobile build artifacts requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/cli.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/cli.md index 0f67cf10f..8798683ce 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/cli.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/cli.md @@ -1,6 +1,6 @@ --- name: sentry-cli-cli -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: CLI-related commands requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/code-mappings.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/code-mappings.md index 220d58afe..dd8b92ed6 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/code-mappings.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/code-mappings.md @@ -1,6 +1,6 @@ --- name: sentry-cli-code-mappings -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage code mappings for stack trace linking requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dart-symbol-map.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dart-symbol-map.md index 12e3a2025..5179747fa 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dart-symbol-map.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dart-symbol-map.md @@ -1,6 +1,6 @@ --- name: sentry-cli-dart-symbol-map -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Dart/Flutter symbol maps requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dashboard.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dashboard.md index a750cc782..64660543a 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dashboard.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dashboard.md @@ -1,6 +1,6 @@ --- name: sentry-cli-dashboard -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage Sentry dashboards requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/debug-files.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/debug-files.md index 7fa5f931f..06ad6b1dd 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/debug-files.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/debug-files.md @@ -1,6 +1,6 @@ --- name: sentry-cli-debug-files -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with debug information files requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/docs.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/docs.md index 28ef7d857..0c523242d 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/docs.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/docs.md @@ -1,6 +1,6 @@ --- name: sentry-cli-docs -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Search and query current Sentry documentation requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dsn.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dsn.md index 840f93395..042f65e72 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dsn.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dsn.md @@ -1,6 +1,6 @@ --- name: sentry-cli-dsn -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Find Sentry DSNs requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/event.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/event.md index 9150610c0..0c5da357d 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/event.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/event.md @@ -1,6 +1,6 @@ --- name: sentry-cli-event -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: View, list, and send Sentry events requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/explore.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/explore.md index 4644b453b..745ab082f 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/explore.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/explore.md @@ -1,6 +1,6 @@ --- name: sentry-cli-explore -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Query aggregate event data (Explore) requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/feedback.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/feedback.md index 4b5715ed1..f6822c432 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/feedback.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/feedback.md @@ -1,6 +1,6 @@ --- name: sentry-cli-feedback -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage User Feedback requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/info.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/info.md index 62a6f7771..3d81d9d71 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/info.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/info.md @@ -1,6 +1,6 @@ --- name: sentry-cli-info -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Print configuration and verify authentication requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/init.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/init.md index c2e487800..491f3c1c3 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/init.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/init.md @@ -1,6 +1,6 @@ --- name: sentry-cli-init -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Initialize Sentry in your project (experimental) requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/issue.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/issue.md index 865f8906d..057719eae 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/issue.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/issue.md @@ -1,6 +1,6 @@ --- name: sentry-cli-issue -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage Sentry issues requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/local.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/local.md index 9e173e55c..df92efaab 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/local.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/local.md @@ -1,6 +1,6 @@ --- name: sentry-cli-local -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Sentry for local development requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/log.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/log.md index aeb34e043..c49af07c6 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/log.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/log.md @@ -1,6 +1,6 @@ --- name: sentry-cli-log -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: View Sentry logs requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/monitor.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/monitor.md index 4b13cbcc1..5288bd644 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/monitor.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/monitor.md @@ -1,6 +1,6 @@ --- name: sentry-cli-monitor -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Sentry cron monitors requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/org.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/org.md index c6f52b78c..285a19849 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/org.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/org.md @@ -1,6 +1,6 @@ --- name: sentry-cli-org -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Sentry organizations requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/platform.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/platform.md index 461689158..c684a5a08 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/platform.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/platform.md @@ -1,6 +1,6 @@ --- name: sentry-cli-platform -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: List valid Sentry platform identifiers requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/proguard.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/proguard.md index 8e8e08a0b..98d82f876 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/proguard.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/proguard.md @@ -1,6 +1,6 @@ --- name: sentry-cli-proguard -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with ProGuard/R8 mapping files requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/project.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/project.md index d0d83dc54..4609b61ec 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/project.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/project.md @@ -1,6 +1,6 @@ --- name: sentry-cli-project -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Sentry projects requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/react-native.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/react-native.md index e3d808e24..3ab79f766 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/react-native.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/react-native.md @@ -1,6 +1,6 @@ --- name: sentry-cli-react-native -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Upload React Native sourcemaps from build steps requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/release.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/release.md index 244b27a20..51b33b3d3 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/release.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/release.md @@ -1,6 +1,6 @@ --- name: sentry-cli-release -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Sentry releases requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/replay.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/replay.md index 39bf76aa7..ebb72a753 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/replay.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/replay.md @@ -1,6 +1,6 @@ --- name: sentry-cli-replay -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Search and inspect Session Replays requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/repo.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/repo.md index 6621aaeba..03ff3b504 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/repo.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/repo.md @@ -1,6 +1,6 @@ --- name: sentry-cli-repo -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Sentry repositories requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/schema.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/schema.md index c56b69d73..4d4f4abb8 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/schema.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/schema.md @@ -1,6 +1,6 @@ --- name: sentry-cli-schema -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Browse the Sentry API schema requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/snapshots.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/snapshots.md index 43f584ec1..332f5b68a 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/snapshots.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/snapshots.md @@ -1,6 +1,6 @@ --- name: sentry-cli-snapshots -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage and compare snapshots requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/sourcemap.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/sourcemap.md index 749e45d3d..0998bdd9a 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/sourcemap.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/sourcemap.md @@ -1,6 +1,6 @@ --- name: sentry-cli-sourcemap -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage sourcemaps requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/span.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/span.md index b204a11c1..3e9b03334 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/span.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/span.md @@ -1,6 +1,6 @@ --- name: sentry-cli-span -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: List and view spans in projects or traces requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/status.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/status.md index 452742129..86ce11bcd 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/status.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/status.md @@ -1,6 +1,6 @@ --- name: sentry-cli-status -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Check Sentry service status requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/team.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/team.md index dac91fe16..a074f709b 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/team.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/team.md @@ -1,6 +1,6 @@ --- name: sentry-cli-team -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Work with Sentry teams requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trace.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trace.md index 65d392b5d..67112896a 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trace.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trace.md @@ -1,6 +1,6 @@ --- name: sentry-cli-trace -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: View distributed traces requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trial.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trial.md index 333cafd7c..3b857dddc 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trial.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/trial.md @@ -1,6 +1,6 @@ --- name: sentry-cli-trial -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Manage product trials requires: bins: ["sentry"] diff --git a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/wasm-split.md b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/wasm-split.md index 3ed78dca8..33179e2cb 100644 --- a/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/wasm-split.md +++ b/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/wasm-split.md @@ -1,6 +1,6 @@ --- name: sentry-cli-wasm-split -version: 0.47.0-dev.0 +version: 0.48.0-dev.0 description: Add build ids to WebAssembly modules and split out debug data requires: bins: ["sentry"] From 8671ccc52d905408c505ab0080f1e76e092f2787 Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Mon, 5 Oct 2026 20:40:44 +0000 Subject: [PATCH 2/6] chore(lint): Adopt Oxc for MCP and root files Keep the CLI's Biome rules until their custom Grit checks have equivalents. Run Oxfmt and Oxlint for the remaining workspaces, and preserve accessibility linting and staged-file isolation. Co-Authored-By: GPT-6 Sol --- .oxfmtrc.json | 13 + .oxlintrc.json | 26 + .vscode/extensions.json | 2 +- biome.json | 74 --- docs/contributing/coding-guidelines.md | 33 +- package.json | 17 +- .../animation/terminal-ui/StepsList.tsx | 2 +- .../components/fragments/install-tabs.tsx | 2 +- packages/mcp-core/package.json | 2 +- packages/mcp-core/src/telem/logging.ts | 2 +- packages/mcp-server/src/cli/parse.ts | 8 +- pnpm-lock.yaml | 546 ++++++++++++++---- pnpm-workspace.yaml | 75 ++- scripts/check-doc-links.mjs | 2 +- 14 files changed, 588 insertions(+), 216 deletions(-) create mode 100644 .oxfmtrc.json create mode 100644 .oxlintrc.json delete mode 100644 biome.json diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 000000000..36248fb0c --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,13 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "printWidth": 80, + "tabWidth": 2, + "sortPackageJson": false, + "ignorePatterns": [ + "apps/cli-docs/**", + "packages/cli/**", + "packages/mcp-server-mocks/src/fixtures/**", + "**/worker-configuration.d.ts", + "**/tsconfig*.json" + ] +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 000000000..1a97589b6 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,26 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["jsx-a11y"], + "categories": { + "correctness": "error" + }, + "ignorePatterns": [ + "apps/cli-docs/**", + "packages/cli/**", + "**/worker-configuration.d.ts", + "**/tsconfig*.json", + "packages/mcp-server-mocks/src/fixtures/**" + ], + "rules": { + "no-unused-vars": "off", + "jsx-a11y/interactive-supports-focus": "off" + }, + "overrides": [ + { + "files": ["packages/mcp-cloudflare/src/client/**/*.tsx"], + "rules": { + "jsx-a11y/no-static-element-interactions": "off" + } + } + ] +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 996634d12..bdf5bcbe5 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,4 +1,4 @@ { - "recommendations": ["biomejs.biome"], + "recommendations": ["oxc.oxc-vscode", "biomejs.biome"], "unwantedRecommendations": [] } diff --git a/biome.json b/biome.json deleted file mode 100644 index f2719d59b..000000000 --- a/biome.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", - "assist": { "actions": { "source": { "organizeImports": "on" } } }, - "files": { - "includes": [ - "**", - "!!apps/cli-docs", - "!!packages/cli", - "!**/worker-configuration.d.ts", - "!**/tsconfig*.json", - "!**/packages/mcp-server-mocks/src/fixtures" - ] - }, - "vcs": { - "enabled": true, - "clientKind": "git", - "useIgnoreFile": true - }, - "linter": { - "enabled": true, - "rules": { - "preset": "recommended", - "correctness": { - "noUnusedImports": "warn", - "noUnusedVariables": "off", - "noUnusedFunctionParameters": "off" - }, - "suspicious": { - "noExplicitAny": "off", - "noDebugger": "off", - "noConfusingVoidType": "off", - "noPrototypeBuiltins": "off", - "noConsole": { "level": "off", "options": { "allow": ["log"] } } - }, - "style": { - "noNonNullAssertion": "off", - "noUnusedTemplateLiteral": "off" - }, - "security": { - "noDangerouslySetInnerHtml": "off" - }, - "complexity": { - "noUselessFragments": "off", - "useOptionalChain": "off", - "noImportantStyles": "off", - "noUselessUndefinedInitialization": "off", - "noUselessEscapeInRegex": "off" - } - } - }, - "formatter": { - "enabled": true, - "indentWidth": 2, - "indentStyle": "space" - }, - "css": { - "parser": { - "tailwindDirectives": true - } - }, - "overrides": [ - { - "includes": ["packages/mcp-cloudflare/src/client/**/*.tsx"], - "linter": { - "rules": { - "a11y": { - "noStaticElementInteractions": "off", - "useAriaPropsSupportedByRole": "off" - } - } - } - } - ] -} diff --git a/docs/contributing/coding-guidelines.md b/docs/contributing/coding-guidelines.md index 3c4ea012c..5da10ab14 100644 --- a/docs/contributing/coding-guidelines.md +++ b/docs/contributing/coding-guidelines.md @@ -20,18 +20,24 @@ Essential patterns and standards for Sentry MCP development. ## Code Style -### Biome Configuration +### Formatting and linting + - 2 spaces, double quotes, semicolons -- Max line: 100 chars +- Formatter width: 80 characters - Trailing commas in multiline +- MCP and root files use Oxfmt and Oxlint; CLI files still use their own Biome rules. +- CLI's custom Grit rules and inline suppressions remain active until their + equivalents are available in the new linter. ### Naming Conventions + - Files: `kebab-case.ts` - Functions: `camelCase` - Types/Classes: `PascalCase` - Constants: `UPPER_SNAKE_CASE` ### Import Order + ```typescript // 1. Node built-ins import { readFile } from "node:fs/promises"; @@ -50,14 +56,14 @@ export const toolName = { description: "Clear, concise description", parameters: z.object({ required: z.string().describe("Description"), - optional: z.string().optional() + optional: z.string().optional(), }), execute: async (params, context) => { // 1. Validate inputs // 2. Call API // 3. Format output return formatResponse(data); - } + }, }; ``` @@ -68,10 +74,10 @@ describe("Component", () => { it("handles normal case", async () => { // Arrange const input = createTestInput(); - + // Act const result = await method(input); - + // Assert expect(result).toMatchInlineSnapshot(); }); @@ -79,6 +85,7 @@ describe("Component", () => { ``` Key practices: + - Use inline snapshots for formatting - Mock with MSW - Test success and error paths @@ -87,9 +94,12 @@ Key practices: ## Quality Checklist Before committing: + ```bash -pnpm -w run lint # Biome check +pnpm -w run lint # Oxlint and ast-grep checks for MCP and root files pnpm -w run lint:fix # Fix issues +pnpm -w run format # Format MCP and root files with Oxfmt +pnpm --filter sentry run lint # CLI Biome rules pnpm tsc --noEmit # Type check pnpm test # Run tests pnpm -w run build # Build all @@ -97,19 +107,19 @@ pnpm -w run build # Build all ## JSDoc Pattern -```typescript +````typescript /** * Brief description. - * + * * @param param - Description * @returns What it returns - * + * * @example * ```typescript * const result = func(param); * ``` */ -``` +```` ## Security Essentials @@ -121,6 +131,7 @@ pnpm -w run build # Build all ## Common Patterns For shared patterns see: + - Error handling: [common-patterns.md](common-patterns.md#error-handling) - Zod schemas: [common-patterns.md](common-patterns.md#zod-schema-patterns) - API usage: [api-patterns.md](api-patterns.md) diff --git a/package.json b/package.json index 44283d879..f6d4e0600 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,10 @@ "deploy:docs": "pnpm --filter sentry run generate:schema && pnpm --filter sentry run generate:docs && pnpm --filter sentry-cli-docs run build && pnpm --filter sentry-cli-docs run deploy", "eval": "pnpm --filter '@sentry/mcp-server-evals...' --if-present run build && dotenv -e .env -e .env.local -- pnpm --filter @sentry/mcp-server-evals run eval", "eval:ci": "pnpm --filter '@sentry/mcp-server-evals...' --if-present run build && CI=true dotenv -e .env -e .env.local -- pnpm --stream -r run eval:ci", - "format": "biome format --write", - "lint": "biome lint && pnpm run lint:ast-grep", + "format": "oxfmt --write", + "lint": "oxlint . && pnpm run lint:ast-grep", "lint:ast-grep": "ast-grep scan && ast-grep test --skip-snapshot-tests", - "lint:fix": "biome lint --fix", + "lint:fix": "oxlint --fix .", "pre-commit:generated": "node scripts/pre-commit-generated.mjs", "inspector": "pnpx @modelcontextprotocol/inspector@latest", "inspector:stdio": "pnpx @modelcontextprotocol/inspector@latest -- tsx packages/mcp-server/src/index.ts", @@ -50,11 +50,12 @@ }, "dependencies": { "@ast-grep/cli": "catalog:", - "@biomejs/biome": "catalog:", "@types/node": "catalog:", "dotenv": "catalog:", "dotenv-cli": "catalog:", "lint-staged": "catalog:", + "oxfmt": "catalog:", + "oxlint": "catalog:", "simple-git-hooks": "catalog:", "tsdown": "catalog:", "tsx": "catalog:", @@ -68,8 +69,12 @@ }, "lint-staged": { "*": [ - "biome format --write --no-errors-on-unmatched --files-ignore-unknown=true", - "biome lint --fix --no-errors-on-unmatched --files-ignore-unknown=true" + "oxfmt --write --no-error-on-unmatched-pattern", + "oxlint --fix --no-error-on-unmatched-pattern" + ], + "packages/cli/**/*": [ + "pnpm --filter sentry exec biome format --write --no-errors-on-unmatched --files-ignore-unknown=true", + "pnpm --filter sentry exec biome lint --fix --no-errors-on-unmatched --files-ignore-unknown=true" ] }, "devDependencies": { diff --git a/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx b/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx index 56d588777..11ecce0de 100644 --- a/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx +++ b/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx @@ -109,7 +109,7 @@ export default function StepsList({ if (e.key === "Enter" || e.key === " ") { e.preventDefault(); if (globalIndex === 6) { - typeof restart === "function" && restart(); + if (typeof restart === "function") restart(); } else { onSelectAction(Math.min(globalIndex + 1, steps.length - 1)); } diff --git a/packages/mcp-cloudflare/src/client/components/fragments/install-tabs.tsx b/packages/mcp-cloudflare/src/client/components/fragments/install-tabs.tsx index b5f6a561f..dbf2ad9e3 100644 --- a/packages/mcp-cloudflare/src/client/components/fragments/install-tabs.tsx +++ b/packages/mcp-cloudflare/src/client/components/fragments/install-tabs.tsx @@ -109,7 +109,7 @@ export default function InstallTabs({ const from = c.offsetHeight; const to = next.offsetHeight; c.style.height = `${from}px`; - c.offsetHeight; + void c.offsetHeight; c.style.transition = "height 300ms cubic-bezier(0.2, 0.8, 0.2, 1)"; c.style.height = `${to}px`; const done = () => { diff --git a/packages/mcp-core/package.json b/packages/mcp-core/package.json index 8bbff8828..b15c0100b 100644 --- a/packages/mcp-core/package.json +++ b/packages/mcp-core/package.json @@ -151,7 +151,7 @@ "test:ci": "pnpm run generate-definitions && pnpm run validate-skills && vitest run --reporter=default --reporter=junit --outputFile=tests.junit.xml", "test:watch": "pnpm run generate-definitions && vitest", "tsc": "tsc --noEmit", - "generate-definitions": "tsx scripts/generate-definitions.ts && biome format --write src/toolDefinitions.json src/skillDefinitions.json", + "generate-definitions": "tsx scripts/generate-definitions.ts && oxfmt --write src/toolDefinitions.json src/skillDefinitions.json", "generate-otel-namespaces": "tsx scripts/generate-otel-namespaces.ts", "measure-tokens": "tsx scripts/measure-token-cost.ts", "validate-skills": "tsx scripts/validate-skills-mapping.ts" diff --git a/packages/mcp-core/src/telem/logging.ts b/packages/mcp-core/src/telem/logging.ts index ff5159a91..c0a5262f1 100644 --- a/packages/mcp-core/src/telem/logging.ts +++ b/packages/mcp-core/src/telem/logging.ts @@ -408,7 +408,7 @@ export function logIssue( const { attachments, ...baseOptions } = options; const extra: LogContext = { - ...(baseOptions.extra ?? {}), + ...baseOptions.extra, ...(attachments && Object.keys(attachments).length > 0 ? { attachments: Object.keys(attachments) } : {}), diff --git a/packages/mcp-server/src/cli/parse.ts b/packages/mcp-server/src/cli/parse.ts index dc5be6fea..85b379e80 100644 --- a/packages/mcp-server/src/cli/parse.ts +++ b/packages/mcp-server/src/cli/parse.ts @@ -33,11 +33,11 @@ export function parseArgv(argv: string[]): CliArgs { }); const knownLong = new Set(Object.keys(options)); - const knownShort = new Set([ - ...(Object.values(options) + const knownShort = new Set( + Object.values(options) .map((o) => ("short" in o ? (o.short as string | undefined) : undefined)) - .filter(Boolean) as string[]), - ]); + .filter(Boolean) as string[], + ); const unknownArgs: string[] = []; for (const t of (tokens as any[]) || []) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8c5e4f64..64d2eb02c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,9 +21,6 @@ catalogs: '@ast-grep/cli': specifier: ^0.43.0 version: 0.43.0 - '@biomejs/biome': - specifier: ^2.5.5 - version: 2.5.5 '@cloudflare/vitest-pool-workers': specifier: 0.14.1 version: 0.14.1 @@ -120,6 +117,12 @@ catalogs: open: specifier: ^10.1.2 version: 10.1.2 + oxfmt: + specifier: 0.72.0 + version: 0.72.0 + oxlint: + specifier: 1.87.0 + version: 1.87.0 react: specifier: ^19.2.8 version: 19.2.8 @@ -194,9 +197,6 @@ importers: '@ast-grep/cli': specifier: 'catalog:' version: 0.43.0 - '@biomejs/biome': - specifier: 'catalog:' - version: 2.5.5 '@types/node': specifier: 'catalog:' version: 22.16.0 @@ -209,6 +209,12 @@ importers: lint-staged: specifier: 'catalog:' version: 15.5.2 + oxfmt: + specifier: 'catalog:' + version: 0.72.0 + oxlint: + specifier: 'catalog:' + version: 1.87.0 simple-git-hooks: specifier: 'catalog:' version: 2.13.1 @@ -1319,35 +1325,18 @@ packages: engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/biome@2.5.5': - resolution: {integrity: sha512-r1S8nFsAG1MY+vJFZALzIvwXAJv6ejDQ0mxP21Tgr9YK3ZFtjrvbBwDdNhx1rUqvccEIeNg20cYCNzl6Cr69pQ==} - engines: {node: '>=14.21.3'} - hasBin: true - '@biomejs/cli-darwin-arm64@2.3.8': resolution: {integrity: sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-arm64@2.5.5': - resolution: {integrity: sha512-kUrAhXVWUrwmAUnV2iXSK7umxKFysTwvqK+Ty6ptUcLY/7T3SnCAjUowE4uvwaEej6nXZ7hu/dTtbokKdsPeag==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - '@biomejs/cli-darwin-x64@2.3.8': resolution: {integrity: sha512-lUDQ03D7y/qEao7RgdjWVGCu+BLYadhKTm40HkpJIi6kn8LSv5PAwRlew/DmwP4YZ9ke9XXoTIQDO1vAnbRZlA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.5': - resolution: {integrity: sha512-DamiYc5bUYZ2uxlfc+RLEPtz1Abb6PO5eTbOkufLpSGwd/7AMQAdxhFYiXmwwkJL8IsT8S7GvdgwDHqaMFAvKw==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.3.8': resolution: {integrity: sha512-PShR4mM0sjksUMyxbyPNMxoKFPVF48fU8Qe8Sfx6w6F42verbwRLbz+QiKNiDPRJwUoMG1nPM50OBL3aOnTevA==} engines: {node: '>=14.21.3'} @@ -1355,13 +1344,6 @@ packages: os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64-musl@2.5.5': - resolution: {integrity: sha512-U4WMl/sy/E/Q73vf15VspakLRRs2LDFcCeBxJnQfXzssb88zpV6PJPaQ3ezhQ7H6Ht2/8bvuZeHgJWzmoxllZg==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - libc: [musl] - '@biomejs/cli-linux-arm64@2.3.8': resolution: {integrity: sha512-Uo1OJnIkJgSgF+USx970fsM/drtPcQ39I+JO+Fjsaa9ZdCN1oysQmy6oAGbyESlouz+rzEckLTF6DS7cWse95g==} engines: {node: '>=14.21.3'} @@ -1369,13 +1351,6 @@ packages: os: [linux] libc: [glibc] - '@biomejs/cli-linux-arm64@2.5.5': - resolution: {integrity: sha512-lRKF/pH/1RiYiBKExi3TCZVAtvzEm77aifrvcNiDFrR9WxeAnDUjDnseb6y2XV85mjitLs6SILGm2XG77cHtSQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.3.8': resolution: {integrity: sha512-YGLkqU91r1276uwSjiUD/xaVikdxgV1QpsicT0bIA1TaieM6E5ibMZeSyjQ/izBn4tKQthUSsVZacmoJfa3pDA==} engines: {node: '>=14.21.3'} @@ -1383,13 +1358,6 @@ packages: os: [linux] libc: [musl] - '@biomejs/cli-linux-x64-musl@2.5.5': - resolution: {integrity: sha512-m7wC7tjX5Lrmo69dc4md8FeKpPU1NTCY1v7xUoQQ2vadWwNnBS0KZOG8471otFPHrTHihQJAjQPgMObpLvDe6A==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - libc: [musl] - '@biomejs/cli-linux-x64@2.3.8': resolution: {integrity: sha512-QDPMD5bQz6qOVb3kiBui0zKZXASLo0NIQ9JVJio5RveBEFgDgsvJFUvZIbMbUZT3T00M/1wdzwWXk4GIh0KaAw==} engines: {node: '>=14.21.3'} @@ -1397,37 +1365,18 @@ packages: os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64@2.5.5': - resolution: {integrity: sha512-H/O39nJEw/2Zm/fm7hrmxxoF8kK/aU1uCoPp70ruXVbomaAdLpJJnCmL11Q2JotT8QVHH06So04Oq53lCSwSwQ==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - libc: [glibc] - '@biomejs/cli-win32-arm64@2.3.8': resolution: {integrity: sha512-H4IoCHvL1fXKDrTALeTKMiE7GGWFAraDwBYFquE/L/5r1927Te0mYIGseXi4F+lrrwhSWbSGt5qPFswNoBaCxg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-arm64@2.5.5': - resolution: {integrity: sha512-7BryINPuYypLUAH3o/o5ZdgomJ4zn3EDR0ChZJst7n32S6ZhKbgHXuYydLu+YAnx59ehGFR0z/MG6qnzQi3Yyw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - '@biomejs/cli-win32-x64@2.3.8': resolution: {integrity: sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@biomejs/cli-win32-x64@2.5.5': - resolution: {integrity: sha512-bIBFo+n6MIxdNcVFy5CrurbKiZQiUciK3bt8+O9I4wjFZNTfXLpi+giq47522eXqW5NBc9ulx7dR1SlZKi2J5g==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - '@bruits/satteri-darwin-arm64@0.10.5': resolution: {integrity: sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==} cpu: [arm64] @@ -2948,6 +2897,250 @@ packages: '@oxc-project/types@0.75.0': resolution: {integrity: sha512-QMW+06WOXs7+F301Y3X0VpmWhwuQVc/X/RP2zF9OIwvSMmsif3xURS2wxbakFIABYsytgBcHpUcFepVS0Qnd3A==} + '@oxfmt/binding-android-arm-eabi@0.72.0': + resolution: {integrity: sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.72.0': + resolution: {integrity: sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.72.0': + resolution: {integrity: sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.72.0': + resolution: {integrity: sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.72.0': + resolution: {integrity: sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.72.0': + resolution: {integrity: sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.72.0': + resolution: {integrity: sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.72.0': + resolution: {integrity: sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.72.0': + resolution: {integrity: sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.72.0': + resolution: {integrity: sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.72.0': + resolution: {integrity: sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.72.0': + resolution: {integrity: sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.72.0': + resolution: {integrity: sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.72.0': + resolution: {integrity: sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.72.0': + resolution: {integrity: sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.72.0': + resolution: {integrity: sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.72.0': + resolution: {integrity: sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.72.0': + resolution: {integrity: sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.72.0': + resolution: {integrity: sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.87.0': + resolution: {integrity: sha512-22tVIHlB9898OYsBKmYB6He1MCSqdTmK1BVWuSNUTVrpS0KWNege+U9uEYqGJ+KatQag0r/oU44i3OOs46z7HQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.87.0': + resolution: {integrity: sha512-JfZQ3MWf74n8ov0DojZpkOduIubYJvZL5tbTMMhDutsal6u1xH1QuNpN+lK+EQwF8AeAfgwTR2fgh5U2br27XA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.87.0': + resolution: {integrity: sha512-rkx6Xvvw93z2GImVOyvbZwAZcoY0Z6MJW177XNsSB+i/CBsH7ANyelTp01VZyIkM3iSXtqKVb4+ptBgPHap5pQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.87.0': + resolution: {integrity: sha512-cw5nYw7L/pQ2SgGBgOcg/Qo89llQre3vIc/kuBLhSICzu1r5s8L76H3ug6AIFsD98WpROj8/z5JVzkf4daxHaQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.87.0': + resolution: {integrity: sha512-x/SuznE6loRZK9gz9AS4ZmzNzSu+5KdeoCS+sVHhnrE8HM6AD8UyTjwldQTTqlXGvkwHASgB0NiTNOc3o3PdAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.87.0': + resolution: {integrity: sha512-+JEDmCAXiiFmKhAjZhgAOwaHWY6WENOQ5QA+lFuY59tgsUCDOTRi46B+lENK6CWvtxsXpwkZXNOgpjAQcpIpnA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.87.0': + resolution: {integrity: sha512-/uC9XqXLAC9AHFLNycwmSQEvKqGrOCgU+uXALI7gNW0DG81TJ/3T2eHnKdRvcb5R1gFEfjxDwI4e4zIa29rICQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.87.0': + resolution: {integrity: sha512-FTRYPsBy/M728vnUv7l+KAwSAa3Qi4BQbhVvy7NYuMTZ0sUa/OWsbMx79HVFw6u/5KWcaYayDsoOiv7xbevzDg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.87.0': + resolution: {integrity: sha512-6sC+N7IY0h1egd8SrYUGNN7CUyKJZ4bIZakKa7V7hfinf4jfi8Kq4+klJvFp5DqXcwMn44I5MeBwmJluO1odFg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.87.0': + resolution: {integrity: sha512-d5Mnn+ICbhoJPi37Ccjy+86T5qfH2+mSTrTMBXNPfB+wqSWOayBBLLIrCXdUy1YssluCVdGkl+DO9w5r5ODmUA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.87.0': + resolution: {integrity: sha512-sf5YWuUo1Dx9loqWCgF8P278MycfcD4JHjDC/LV5j11L3Lqa4PFiwCjD6B8kP4AjsgZZkLn3xbpJEtZBaccs4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.87.0': + resolution: {integrity: sha512-+aCraYbmK3uU3P0rFojjeaK9pGY6JvBDXh/0CM+gPyWKmNmXmnFe0qj4qj02U4ibFpbd9Pa9CmDvIdjJUd29rA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.87.0': + resolution: {integrity: sha512-7rzbZQIljo6VLWVPqUyLa2P/WV3VFsJB4M52R4NCUJn1A50yjtUsHxiMHFL9opEKGFIiTbZ3VQzmtcJOPUq4NQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.87.0': + resolution: {integrity: sha512-Dry46Fa+AXE/xt9J/YriujU1pU9mzfNWHGQwtOYibAFH8HLrKWCi93AhIGnuUMiwn2JbuBkRyz51f50Ly4r4ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.87.0': + resolution: {integrity: sha512-f/HMZez74gJvnRpGz+b5sdGyWrEgRLmFTXg9sNoqjPWogGxYHUhXKTKyMiYsu9rUGR2ciYqL3fk+Ua4JhMJbRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.87.0': + resolution: {integrity: sha512-lEC6ZfPZm/07JlB7FsOWX9o1RiHlXiBW594LSUGuXmekC8LZmvUPP9XzE2WZcNxJi5cHA/Fw56o02c3JxgMA5g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.87.0': + resolution: {integrity: sha512-afBWKOD36dUiA9AenaiWpCg8xfyUVPYznyAAVXu413brK4RA5UI/Xoc4yfeGIT8G1a44MV+JR7hioryerBDzGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.87.0': + resolution: {integrity: sha512-daptNsEOuru4/nJTxV4DBHNJ5GepzmaBVQf+jjgKQGi9NRlZKik+RFq4hUL7ewsF1pwjKM+SkYaMbF82UwFGnw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.87.0': + resolution: {integrity: sha512-k+m/EShyXE29J/r1fjk0HlAzhN5JhIvj044oSJkXTEkCLrWZQgXb/3r4q5LTw/eaKW/4GuMXG2xmiJs3s5rPNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@pagefind/darwin-arm64@1.5.2': resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} cpu: [arm64] @@ -6783,6 +6976,32 @@ packages: resolution: {integrity: sha512-ov0NzaDCOInknS7mP1cwKdJERt3utPW8ldjtdUXQ8Ty0GEFD08wk422vCUN0d7pST6kqtV7dxoI9w1Zi0l/9TA==} engines: {node: ^20.19.0 || >=22.12.0} + oxfmt@0.72.0: + resolution: {integrity: sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true + + oxlint@1.87.0: + resolution: {integrity: sha512-drxVlaW7Oqq7wSy1CN25znRu00aRq8n57Q2wniJRxCmtYVz07ufCm7EVDPQFZURrTgQIjzKrVEHAD/HcvJXObg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=7.0.2003' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -7717,6 +7936,10 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + tinypool@2.2.0: + resolution: {integrity: sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==} + engines: {node: ^20.0.0 || >=22.0.0} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -9123,65 +9346,30 @@ snapshots: '@biomejs/cli-win32-arm64': 2.3.8 '@biomejs/cli-win32-x64': 2.3.8 - '@biomejs/biome@2.5.5': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.5 - '@biomejs/cli-darwin-x64': 2.5.5 - '@biomejs/cli-linux-arm64': 2.5.5 - '@biomejs/cli-linux-arm64-musl': 2.5.5 - '@biomejs/cli-linux-x64': 2.5.5 - '@biomejs/cli-linux-x64-musl': 2.5.5 - '@biomejs/cli-win32-arm64': 2.5.5 - '@biomejs/cli-win32-x64': 2.5.5 - '@biomejs/cli-darwin-arm64@2.3.8': optional: true - '@biomejs/cli-darwin-arm64@2.5.5': - optional: true - '@biomejs/cli-darwin-x64@2.3.8': optional: true - '@biomejs/cli-darwin-x64@2.5.5': - optional: true - '@biomejs/cli-linux-arm64-musl@2.3.8': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.5': - optional: true - '@biomejs/cli-linux-arm64@2.3.8': optional: true - '@biomejs/cli-linux-arm64@2.5.5': - optional: true - '@biomejs/cli-linux-x64-musl@2.3.8': optional: true - '@biomejs/cli-linux-x64-musl@2.5.5': - optional: true - '@biomejs/cli-linux-x64@2.3.8': optional: true - '@biomejs/cli-linux-x64@2.5.5': - optional: true - '@biomejs/cli-win32-arm64@2.3.8': optional: true - '@biomejs/cli-win32-arm64@2.5.5': - optional: true - '@biomejs/cli-win32-x64@2.3.8': optional: true - '@biomejs/cli-win32-x64@2.5.5': - optional: true - '@bruits/satteri-darwin-arm64@0.10.5': optional: true @@ -10436,6 +10624,120 @@ snapshots: '@oxc-project/types@0.75.0': {} + '@oxfmt/binding-android-arm-eabi@0.72.0': + optional: true + + '@oxfmt/binding-android-arm64@0.72.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.72.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.72.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.72.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.72.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.72.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.72.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.72.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.72.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.72.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.87.0': + optional: true + + '@oxlint/binding-android-arm64@1.87.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.87.0': + optional: true + + '@oxlint/binding-darwin-x64@1.87.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.87.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.87.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.87.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.87.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.87.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.87.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.87.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.87.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.87.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.87.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.87.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.87.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.87.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.87.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.87.0': + optional: true + '@pagefind/darwin-arm64@1.5.2': optional: true @@ -14714,6 +15016,52 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.143.0 '@oxc-parser/binding-win32-x64-msvc': 0.143.0 + oxfmt@0.72.0: + dependencies: + tinypool: 2.2.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.72.0 + '@oxfmt/binding-android-arm64': 0.72.0 + '@oxfmt/binding-darwin-arm64': 0.72.0 + '@oxfmt/binding-darwin-x64': 0.72.0 + '@oxfmt/binding-freebsd-x64': 0.72.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.72.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.72.0 + '@oxfmt/binding-linux-arm64-gnu': 0.72.0 + '@oxfmt/binding-linux-arm64-musl': 0.72.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.72.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.72.0 + '@oxfmt/binding-linux-riscv64-musl': 0.72.0 + '@oxfmt/binding-linux-s390x-gnu': 0.72.0 + '@oxfmt/binding-linux-x64-gnu': 0.72.0 + '@oxfmt/binding-linux-x64-musl': 0.72.0 + '@oxfmt/binding-openharmony-arm64': 0.72.0 + '@oxfmt/binding-win32-arm64-msvc': 0.72.0 + '@oxfmt/binding-win32-ia32-msvc': 0.72.0 + '@oxfmt/binding-win32-x64-msvc': 0.72.0 + + oxlint@1.87.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.87.0 + '@oxlint/binding-android-arm64': 1.87.0 + '@oxlint/binding-darwin-arm64': 1.87.0 + '@oxlint/binding-darwin-x64': 1.87.0 + '@oxlint/binding-freebsd-x64': 1.87.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.87.0 + '@oxlint/binding-linux-arm-musleabihf': 1.87.0 + '@oxlint/binding-linux-arm64-gnu': 1.87.0 + '@oxlint/binding-linux-arm64-musl': 1.87.0 + '@oxlint/binding-linux-ppc64-gnu': 1.87.0 + '@oxlint/binding-linux-riscv64-gnu': 1.87.0 + '@oxlint/binding-linux-riscv64-musl': 1.87.0 + '@oxlint/binding-linux-s390x-gnu': 1.87.0 + '@oxlint/binding-linux-x64-gnu': 1.87.0 + '@oxlint/binding-linux-x64-musl': 1.87.0 + '@oxlint/binding-openharmony-arm64': 1.87.0 + '@oxlint/binding-win32-arm64-msvc': 1.87.0 + '@oxlint/binding-win32-ia32-msvc': 1.87.0 + '@oxlint/binding-win32-x64-msvc': 1.87.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -15866,6 +16214,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 + tinypool@2.2.0: {} + tinyrainbow@3.1.0: {} tmp-promise@3.0.3: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index aec5e43f7..c70f58705 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -38,7 +38,6 @@ catalog: "@ai-sdk/mcp": ^1.0.16 "@ai-sdk/openai": ^3.0.23 "@ai-sdk/react": ^3.0.232 - "@biomejs/biome": ^2.5.5 "@cloudflare/vite-plugin": ^1.31.0 "@cloudflare/vitest-pool-workers": 0.14.1 "@cloudflare/workers-oauth-provider": ^0.10.3 @@ -74,6 +73,8 @@ catalog: miniflare: 4.20260401.0 msw: ^2.10.2 open: ^10.1.2 + oxfmt: 0.72.0 + oxlint: 1.87.0 react: ^19.2.8 react-dom: ^19.2.8 react-markdown: ^9.1.0 @@ -94,21 +95,61 @@ catalog: zod: ^4.4.3 minimumReleaseAgeExclude: - - '@ai-sdk/gateway@3.0.153' - - '@ai-sdk/provider-utils@4.0.40' - - '@ai-sdk/react@3.0.232' + - "@ai-sdk/gateway@3.0.153" + - "@ai-sdk/provider-utils@4.0.40" + - "@ai-sdk/react@3.0.232" - ai@6.0.230 - agents@0.20.1 - - '@sentry/browser-utils@11.1.0' - - '@sentry/browser@11.1.0' - - '@sentry/bundler-plugins@11.1.0' - - '@sentry/cloudflare@11.1.0' - - '@sentry/core@11.1.0' - - '@sentry/feedback@11.1.0' - - '@sentry/node@11.1.0' - - '@sentry/opentelemetry@11.1.0' - - '@sentry/react@11.1.0' - - '@sentry/replay-canvas@11.1.0' - - '@sentry/replay@11.1.0' - - '@sentry/server-runtime-injection@11.1.0' - - '@sentry/server-utils@11.1.0' + - "@sentry/browser-utils@11.1.0" + - "@sentry/browser@11.1.0" + - "@sentry/bundler-plugins@11.1.0" + - "@sentry/cloudflare@11.1.0" + - "@sentry/core@11.1.0" + - "@sentry/feedback@11.1.0" + - "@sentry/node@11.1.0" + - "@sentry/opentelemetry@11.1.0" + - "@sentry/react@11.1.0" + - "@sentry/replay-canvas@11.1.0" + - "@sentry/replay@11.1.0" + - "@sentry/server-runtime-injection@11.1.0" + - "@sentry/server-utils@11.1.0" + - "@oxfmt/binding-android-arm-eabi@0.72.0" + - "@oxfmt/binding-android-arm64@0.72.0" + - "@oxfmt/binding-darwin-arm64@0.72.0" + - "@oxfmt/binding-darwin-x64@0.72.0" + - "@oxfmt/binding-freebsd-x64@0.72.0" + - "@oxfmt/binding-linux-arm-gnueabihf@0.72.0" + - "@oxfmt/binding-linux-arm-musleabihf@0.72.0" + - "@oxfmt/binding-linux-arm64-gnu@0.72.0" + - "@oxfmt/binding-linux-arm64-musl@0.72.0" + - "@oxfmt/binding-linux-ppc64-gnu@0.72.0" + - "@oxfmt/binding-linux-riscv64-gnu@0.72.0" + - "@oxfmt/binding-linux-riscv64-musl@0.72.0" + - "@oxfmt/binding-linux-s390x-gnu@0.72.0" + - "@oxfmt/binding-linux-x64-gnu@0.72.0" + - "@oxfmt/binding-linux-x64-musl@0.72.0" + - "@oxfmt/binding-openharmony-arm64@0.72.0" + - "@oxfmt/binding-win32-arm64-msvc@0.72.0" + - "@oxfmt/binding-win32-ia32-msvc@0.72.0" + - "@oxfmt/binding-win32-x64-msvc@0.72.0" + - "@oxlint/binding-android-arm-eabi@1.87.0" + - "@oxlint/binding-android-arm64@1.87.0" + - "@oxlint/binding-darwin-arm64@1.87.0" + - "@oxlint/binding-darwin-x64@1.87.0" + - "@oxlint/binding-freebsd-x64@1.87.0" + - "@oxlint/binding-linux-arm-gnueabihf@1.87.0" + - "@oxlint/binding-linux-arm-musleabihf@1.87.0" + - "@oxlint/binding-linux-arm64-gnu@1.87.0" + - "@oxlint/binding-linux-arm64-musl@1.87.0" + - "@oxlint/binding-linux-ppc64-gnu@1.87.0" + - "@oxlint/binding-linux-riscv64-gnu@1.87.0" + - "@oxlint/binding-linux-riscv64-musl@1.87.0" + - "@oxlint/binding-linux-s390x-gnu@1.87.0" + - "@oxlint/binding-linux-x64-gnu@1.87.0" + - "@oxlint/binding-linux-x64-musl@1.87.0" + - "@oxlint/binding-openharmony-arm64@1.87.0" + - "@oxlint/binding-win32-arm64-msvc@1.87.0" + - "@oxlint/binding-win32-ia32-msvc@1.87.0" + - "@oxlint/binding-win32-x64-msvc@1.87.0" + - oxfmt@0.72.0 + - oxlint@1.87.0 diff --git a/scripts/check-doc-links.mjs b/scripts/check-doc-links.mjs index 201175bed..b5a6ab15b 100644 --- a/scripts/check-doc-links.mjs +++ b/scripts/check-doc-links.mjs @@ -71,7 +71,7 @@ for (const file of files) { // 2) Flag at-prefixed repo-local references. These can force some agents to // inline the entire target file. const atPathRe = - /@(?:docs|packages|scripts)\/[A-Za-z0-9_.\-\/]+\.(?:mdc|md|ts|tsx|js|json)|@(?:AGENTS|README|TELEMETRY)\.md/g; + /@(?:docs|packages|scripts)\/[A-Za-z0-9_.\-/]+\.(?:mdc|md|ts|tsx|js|json)|@(?:AGENTS|README|TELEMETRY)\.md/g; for (const m of contentNoFences.matchAll(atPathRe)) { problems.push({ file: rel, From 4fb792a08d75d8bd7aacf12b252aeb75baabcd2e Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Mon, 5 Oct 2026 21:29:00 +0000 Subject: [PATCH 3/6] fix(cli): Sync skill versions after releases Update tracked skill frontmatter in Craft's post-release version bump without depending on the ignored API schema or a network fetch. Exercise the real script with isolated npm and git stubs to prove the files change before the commit. Co-Authored-By: GPT-6 Sol --- packages/cli/script/bump-version.ts | 43 ++++++++- packages/cli/test/script/bump-version.test.ts | 93 +++++++++++++++++++ 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 packages/cli/test/script/bump-version.test.ts diff --git a/packages/cli/script/bump-version.ts b/packages/cli/script/bump-version.ts index 89179b702..2e386415f 100644 --- a/packages/cli/script/bump-version.ts +++ b/packages/cli/script/bump-version.ts @@ -20,9 +20,12 @@ */ import { execSync, spawnSync } from "node:child_process"; -import { readFileSync, writeFileSync } from "node:fs"; +import { readdirSync, readFileSync, writeFileSync } from "node:fs"; +import { join } from "node:path"; const PLUGIN_PATH = "plugins/sentry-cli/.claude-plugin/plugin.json"; +const SKILL_PATH = "plugins/sentry-cli/skills/sentry-cli"; +const SKILL_VERSION_LINE = /^version: [^\r\n]+$/gm; /** Regex to match prerelease suffix (e.g., -dev.0, -alpha.1) */ const PRERELEASE_SUFFIX_REGEX = /-.*$/; @@ -55,6 +58,39 @@ function stripPrerelease(version: string): string { return version.replace(PRERELEASE_SUFFIX_REGEX, ""); } +/** Update the tracked skill frontmatter without requiring a network-backed schema build. */ +function syncSkillVersions(version: string): void { + const references = readdirSync(join(SKILL_PATH, "references")) + .filter((name) => name.endsWith(".md")) + .map((name) => join(SKILL_PATH, "references", name)); + if (references.length === 0) { + throw new Error("Generated CLI skill references are missing"); + } + + const files = [join(SKILL_PATH, "SKILL.md"), ...references].map((path) => { + const content = readFileSync(path, "utf-8"); + const end = content.indexOf("\n---\n", 4); + if (!content.startsWith("---\n") || end === -1) { + throw new Error(`Invalid CLI skill frontmatter: ${path}`); + } + const frontmatter = content.slice(0, end); + const versions = frontmatter.match(SKILL_VERSION_LINE); + if (versions?.length !== 1) { + throw new Error(`Expected one CLI skill version: ${path}`); + } + return { + path, + content: + frontmatter.replace(SKILL_VERSION_LINE, `version: ${version}`) + + content.slice(end), + }; + }); + + for (const { path, content } of files) { + writeFileSync(path, content); + } +} + /** * Execute a shell command with output inherited to stdout/stderr */ @@ -106,6 +142,11 @@ function postRelease(): void { writePluginJson(plugin); console.log(`Updated plugin.json to ${plugin.version}`); + // The generator embeds package.json's version in every tracked skill file. + // Sync only its frontmatter here: the full generator needs an API schema that + // is gitignored and may not exist in Craft's post-release checkout. + syncSkillVersions(pkg.version); + // Commit and push if there are changes // Use spawnSync to check exit code without throwing const diffResult = spawnSync("git", ["diff", "--quiet"], { diff --git a/packages/cli/test/script/bump-version.test.ts b/packages/cli/test/script/bump-version.test.ts new file mode 100644 index 000000000..296a232d7 --- /dev/null +++ b/packages/cli/test/script/bump-version.test.ts @@ -0,0 +1,93 @@ +import { spawnSync } from "node:child_process"; +import { + chmodSync, + mkdirSync, + mkdtempSync, + readFileSync, + rmSync, + writeFileSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { afterEach, expect, test } from "vitest"; + +const script = resolve( + dirname(fileURLToPath(import.meta.url)), + "../../script/bump-version.ts" +); +const fixtures: string[] = []; + +afterEach(() => { + for (const fixture of fixtures.splice(0)) + rmSync(fixture, { recursive: true, force: true }); +}); + +test("post-release bump updates tracked skill versions before committing", () => { + const cwd = mkdtempSync(join(tmpdir(), "cli-bump-version-")); + fixtures.push(cwd); + const bin = join(cwd, "bin"); + const skill = "plugins/sentry-cli/skills/sentry-cli"; + mkdirSync(bin); + mkdirSync(join(cwd, skill, "references"), { recursive: true }); + mkdirSync(join(cwd, "plugins/sentry-cli/.claude-plugin"), { + recursive: true, + }); + writeFileSync(join(cwd, "package.json"), '{"version":"0.47.0"}\n'); + writeFileSync( + join(cwd, "plugins/sentry-cli/.claude-plugin/plugin.json"), + '{"version":"0.47.0"}\n' + ); + for (const path of ["SKILL.md", "references/auth.md"]) { + writeFileSync( + join(cwd, skill, path), + "---\nname: sentry-cli\nversion: 0.47.0-dev.0\n---\n\nContent\n" + ); + } + + writeFileSync( + join(bin, "npm"), + '#!/usr/bin/env node\nrequire("node:fs").writeFileSync("package.json", JSON.stringify({ version: "0.48.0-dev.0" }) + "\\n");\n' + ); + writeFileSync( + join(bin, "git"), + `#!/usr/bin/env node +const fs = require("node:fs"); +if (process.argv[2] === "diff") process.exit(1); +if (process.argv[2] === "commit") { + for (const path of ["SKILL.md", "references/auth.md"]) { + const content = fs.readFileSync(${JSON.stringify(skill)} + "/" + path, "utf8"); + if (!content.includes("version: 0.48.0-dev.0")) process.exit(2); + } +} +fs.appendFileSync("git-commands", process.argv[2] + "\\n"); +` + ); + chmodSync(join(bin, "npm"), 0o755); + chmodSync(join(bin, "git"), 0o755); + + const result = spawnSync( + process.execPath, + ["--experimental-strip-types", script, "--post"], + { + cwd, + encoding: "utf8", + env: { + HOME: cwd, + PATH: `${bin}:${process.env.PATH ?? ""}`, + XDG_CONFIG_HOME: cwd, + }, + timeout: 15_000, + } + ); + + expect(result.status, result.stderr).toBe(0); + for (const path of ["SKILL.md", "references/auth.md"]) { + expect(readFileSync(join(cwd, skill, path), "utf8")).toContain( + "version: 0.48.0-dev.0" + ); + } + expect(readFileSync(join(cwd, "git-commands"), "utf8")).toBe( + "commit\npull\npush\n" + ); +}); From 6570087e828b9bd34674204b6b881823f5158b4b Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Tue, 6 Oct 2026 07:51:36 +0000 Subject: [PATCH 4/6] fix(lint): Preserve Oxc rules and editor formatting Co-Authored-By: GPT-6 Sol --- .oxlintrc.json | 2 +- .vscode/settings.json | 13 ++++---- docs/contributing/coding-guidelines.md | 3 ++ package.json | 2 +- scripts/oxc-config.test.mjs | 41 ++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 scripts/oxc-config.test.mjs diff --git a/.oxlintrc.json b/.oxlintrc.json index 1a97589b6..ca44a1eda 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,6 +1,6 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["jsx-a11y"], + "plugins": ["eslint", "typescript", "unicorn", "oxc", "jsx-a11y"], "categories": { "correctness": "error" }, diff --git a/.vscode/settings.json b/.vscode/settings.json index f2649bfbc..8daad2ef7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,21 +1,18 @@ { + "editor.defaultFormatter": "oxc.oxc-vscode", "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file", "editor.codeActionsOnSave": { - "source.fixAll.biome": "explicit" + "source.fixAll.oxc": "explicit" }, "files.trimTrailingWhitespace": false, "files.trimFinalNewlines": false, "files.insertFinalNewline": true, "cursor.general.enableShadowWorkspace": true, "[json]": { - "editor.tabSize": 2, - "editor.defaultFormatter": "biomejs.biome" + "editor.tabSize": 2 }, "[typescript]": { - "editor.tabSize": 2, - "editor.defaultFormatter": "biomejs.biome" - }, - "[typescriptreact]": { - "editor.defaultFormatter": "biomejs.biome" + "editor.tabSize": 2 } } diff --git a/docs/contributing/coding-guidelines.md b/docs/contributing/coding-guidelines.md index 5da10ab14..498833fb6 100644 --- a/docs/contributing/coding-guidelines.md +++ b/docs/contributing/coding-guidelines.md @@ -28,6 +28,9 @@ Essential patterns and standards for Sentry MCP development. - MCP and root files use Oxfmt and Oxlint; CLI files still use their own Biome rules. - CLI's custom Grit rules and inline suppressions remain active until their equivalents are available in the new linter. +- VS Code uses Oxc for root and MCP files. Oxfmt ignores `packages/cli/**`; + use `pnpm --filter sentry exec biome format --write ` to format a CLI + file and keep CLI's Biome checks in the pre-commit hook. ### Naming Conventions diff --git a/package.json b/package.json index f6d4e0600..55c307482 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "scripts": { "docs:check": "node scripts/check-doc-links.mjs", - "test:ci-projects": "node --test scripts/ci-projects.test.mjs scripts/cli-nightly-version.test.mjs scripts/cloudflare-deployment.test.mjs scripts/deploy-workflow.test.mjs scripts/migrate-cloudflare-token.test.mjs", + "test:ci-projects": "node --test scripts/ci-projects.test.mjs scripts/cli-nightly-version.test.mjs scripts/cloudflare-deployment.test.mjs scripts/deploy-workflow.test.mjs scripts/migrate-cloudflare-token.test.mjs scripts/oxc-config.test.mjs", "dev": "pnpm --filter '@sentry/mcp-cloudflare...' --if-present run build && dotenv -e .env -e .env.local -- pnpm --parallel --filter @sentry/mcp-cloudflare --filter @sentry/mcp-core --filter @sentry/mcp-server-mocks --if-present run dev", "dev:stdio": "pnpm --filter '@sentry/mcp-server...' --if-present run build && dotenv -e .env -e .env.local -- pnpm --parallel --filter @sentry/mcp-server --filter @sentry/mcp-core --filter @sentry/mcp-server-mocks --if-present run dev", "build": "dotenv -e .env -e .env.local -- pnpm -r --filter '!sentry' --filter '!sentry-cli-docs' --if-present run build", diff --git a/scripts/oxc-config.test.mjs b/scripts/oxc-config.test.mjs new file mode 100644 index 000000000..31939e322 --- /dev/null +++ b/scripts/oxc-config.test.mjs @@ -0,0 +1,41 @@ +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { test } from "node:test"; + +function readRootJson(path) { + return JSON.parse( + readFileSync(new URL(`../${path}`, import.meta.url), "utf8"), + ); +} + +test("Oxlint retains its default correctness plugins alongside accessibility", () => { + const { plugins } = readRootJson(".oxlintrc.json"); + for (const plugin of ["eslint", "typescript", "unicorn", "oxc", "jsx-a11y"]) { + assert.ok(plugins.includes(plugin), `${plugin} plugin must remain enabled`); + } +}); + +test("editor uses Oxc for root and MCP while CLI retains Biome", () => { + const settings = readRootJson(".vscode/settings.json"); + const formatter = readRootJson(".oxfmtrc.json"); + const extensions = readRootJson(".vscode/extensions.json"); + + assert.equal(settings["editor.defaultFormatter"], "oxc.oxc-vscode"); + assert.equal( + settings["editor.codeActionsOnSave"]["source.fixAll.oxc"], + "explicit", + ); + assert.equal( + settings["editor.codeActionsOnSave"]["source.fixAll.biome"], + undefined, + ); + for (const language of ["[json]", "[typescript]", "[typescriptreact]"]) { + assert.notEqual( + settings[language]?.["editor.defaultFormatter"], + "biomejs.biome", + ); + } + assert.ok(formatter.ignorePatterns.includes("packages/cli/**")); + assert.ok(extensions.recommendations.includes("oxc.oxc-vscode")); + assert.ok(extensions.recommendations.includes("biomejs.biome")); +}); From c024ba654716086a98c93cc0be9dda108cc0a113 Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Tue, 6 Oct 2026 07:58:43 +0000 Subject: [PATCH 5/6] fix(lint): Document intentional token padding regex Co-Authored-By: GPT-6 Sol --- packages/toolkit-core/src/auth-token.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolkit-core/src/auth-token.ts b/packages/toolkit-core/src/auth-token.ts index 59f6c24b1..c4118cba2 100644 --- a/packages/toolkit-core/src/auth-token.ts +++ b/packages/toolkit-core/src/auth-token.ts @@ -1,6 +1,6 @@ /** A valid bearer credential contains only visible ASCII bytes. */ const INVALID_TOKEN_CHARACTER_PATTERN = /[^\x21-\x7e]/; -// biome-ignore lint/suspicious/noControlCharactersInRegex: copied ASCII controls are removable edge padding. +// oxlint-disable-next-line no-control-regex -- copied ASCII controls are removable edge padding. const TOKEN_PADDING_PATTERN = /[\s\x00-\x1f\x7f]/; /** Strip padding at the edges without changing bytes within the token. */ From d944a44f08645856725eab07127ad9164c6bd913 Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Tue, 6 Oct 2026 08:40:45 +0000 Subject: [PATCH 6/6] fix(ui): Restart terminal animation from keyboard Co-Authored-By: GPT-6 Sol --- .../animation/terminal-ui/StepsList.test.ts | 44 +++++++++++++++++++ .../animation/terminal-ui/StepsList.tsx | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.test.ts diff --git a/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.test.ts b/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.test.ts new file mode 100644 index 000000000..7858c6720 --- /dev/null +++ b/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.test.ts @@ -0,0 +1,44 @@ +import { + Children, + isValidElement, + type KeyboardEvent, + type KeyboardEventHandler, +} from "react"; +import { describe, expect, it, vi } from "vitest"; +import StepsList from "./StepsList"; + +const steps = Array.from({ length: 6 }, (_, index) => ({ + label: `Step ${index}`, + description: "", + startTime: 0, + pauseMs: null, +})); + +describe("StepsList keyboard navigation", () => { + it.each(["Enter", " "])("restarts from the final step with %j", (key) => { + const restart = vi.fn(); + const onSelectAction = vi.fn(); + const element = StepsList({ + steps, + globalIndex: steps.length - 1, + onSelectAction, + restart, + }); + const button = Children.toArray(element.props.children).find( + (child) => isValidElement(child) && child.type === "button", + ); + if (!isValidElement<{ onKeyDown: KeyboardEventHandler }>(button)) { + throw new Error("Step navigation button is missing"); + } + + const preventDefault = vi.fn(); + button.props.onKeyDown({ + key, + preventDefault, + } as unknown as KeyboardEvent); + + expect(preventDefault).toHaveBeenCalledOnce(); + expect(restart).toHaveBeenCalledOnce(); + expect(onSelectAction).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx b/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx index 11ecce0de..898de8516 100644 --- a/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx +++ b/packages/mcp-cloudflare/src/client/components/animation/terminal-ui/StepsList.tsx @@ -108,7 +108,7 @@ export default function StepsList({ onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); - if (globalIndex === 6) { + if (globalIndex === 5) { if (typeof restart === "function") restart(); } else { onSelectAction(Math.min(globalIndex + 1, steps.length - 1));