diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..419f7b6 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Test + run: npm test + + - name: Build VS Code extension + run: npm run build:extension + + - name: Extension integration tests + run: xvfb-run -a npm run test:extension + + - name: Check extension bundle size + run: test $(wc -c < extension/dist/extension.js) -lt 5242880 diff --git a/.github/workflows/publish-extension.yml b/.github/workflows/publish-extension.yml new file mode 100644 index 0000000..2f66073 --- /dev/null +++ b/.github/workflows/publish-extension.yml @@ -0,0 +1,79 @@ +# Publish AI Stack Kit VS Code extension to the Marketplace on version tags. +# See https://code.visualstudio.com/api/working-with-extensions/continuous-integration +# +# Setup: add repository secret VSCE_PAT (Azure DevOps PAT, Marketplace → Manage). +# Release: bump extension/package.json version + CHANGELOG, commit, then: +# git tag v1.1.3 && git push origin v1.1.3 + +name: Publish VS Code Extension + +on: + push: + tags: + - "v*" + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Test + run: npm test + + - name: Build VS Code extension + run: npm run build:extension + + - name: Extension integration tests + run: xvfb-run -a npm run test:extension + + - name: Check extension bundle size + run: test $(wc -c < extension/dist/extension.js) -lt 5242880 + + publish: + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build extension package + run: npm run build:extension + + - name: Package VSIX artifact + working-directory: extension + run: npm run vsix + + - name: Upload VSIX + uses: actions/upload-artifact@v4 + with: + name: ai-stack-kit-vsix + path: extension/*.vsix + if-no-files-found: error + + - name: Publish to Visual Studio Marketplace + working-directory: extension + run: npm run deploy + env: + VSCE_PAT: ${{ secrets.VSCE_PAT }} diff --git a/.gitignore b/.gitignore index f6e347c..f7e16e0 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,15 @@ build/ *.d.ts !templates/**/*.js +# VS Code extension test/build artifacts +extension/.vscode-test/ +extension/out/ +extension/media/catalog/ +extension/test-workspace/spec.yaml +extension/test-workspace/sources.config.yaml +extension/test-workspace/.gitignore +extension/*.vsix + # Testing coverage/ .nyc_output/ @@ -24,6 +33,7 @@ coverage/ # IDEs .vscode/ +!extension/.vscode/ .idea/ *.swp *.swo @@ -69,3 +79,4 @@ tests/fixtures/**/.aistack/cache/ # Maintainer-only local notes (never commit) private.md +extension/PUBLISHING.md diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 95888e5..0e50d92 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -16,6 +16,14 @@ CLI tool that reads `spec.yaml`, resolves **skills**, **subagents**, and **hooks 4. **CLI-first**: kubectl-style UX (`aistack` / `ai-stack`). 5. **Loose coupling**: Boundaries over concrete types; composition over inheritance. +### VS Code extension host + +The [`extension/`](extension/) package is published as **[AI Stack Kit on the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** (`deb-adarsh.ai-stack-kit`). It bundles the **headless API** (`src/api/workspace-api.ts` → `AistackWorkspace`) via esbuild. The extension host sets `AISTACK_TEMPLATES_CLIENTS` and `AISTACK_SOURCES_CONFIG_TEMPLATE` to shipped `extension/templates/` so sync works without `import.meta.url` at runtime. UI (trees, catalog webview, commands) calls the same `apply()` pipeline as the CLI. + +``` +Activity Bar / commands / webview → extension services → AistackWorkspace → pipeline + adapters +``` + --- ## System architecture (diagram) diff --git a/README.md b/README.md index e86f77d..a5a3557 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # AI Stack Kit [![npm](https://img.shields.io/npm/v/ai-stack-kit)](https://www.npmjs.com/package/ai-stack-kit) +[![VS Code extension](https://img.shields.io/badge/VS%20Code%20extension-Install%20on%20Marketplace-007ACC?style=flat&logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit) [![license](https://img.shields.io/github/license/deb-adarsh/ai-stack-kit)](https://github.com/deb-adarsh/ai-stack-kit/blob/main/LICENSE) [![Skill browser](https://img.shields.io/badge/skill%20browser-live-informational)](https://deb-adarsh.github.io/ai-stack-kit/) @@ -12,6 +13,29 @@ A CLI to **discover, install, apply and sync reusable AI capabilities** from Git > Think: npm (distribution) + Terraform (setup) for AI dev environments +### Install options + +| Method | Command | +|--------|---------| +| **npm registry** (public) | `npm install -g ai-stack-kit` | +| **GitHub Packages** | `npm install -g @deb-adarsh/ai-stack-kit` (requires [`.npmrc` auth](https://github.com/deb-adarsh/ai-stack-kit/blob/main/USER_GUIDE.md#github-packages)) | +| **No global install** | `npx github:deb-adarsh/ai-stack-kit ` (same as the [Skill browser](https://deb-adarsh.github.io/ai-stack-kit/)) | +| **VS Code / Cursor extension** | [**Install from Marketplace**](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit) — `ext install deb-adarsh.ai-stack-kit` — or build a `.vsix` with `npm run build:extension` then `cd extension && npm run vsix` | + +### VS Code extension + +**[Install AI Stack Kit on the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** (works in VS Code and Cursor). Quick Open (`Ctrl+P` / `Cmd+P`) → `ext install deb-adarsh.ai-stack-kit`. + +The bundled extension in [`extension/`](extension/) uses the same engine as the CLI (`AistackWorkspace` API) — no global `aistack` install required. + +- **Activity Bar** → **Modules**, **Outputs**, and **Catalog** (skill browser) +- Commands: **Initialize**, **Sync**, **Doctor**, **Search/Add**, **Switch Client** (cursor / copilot / claude) +- Settings: `aiStackKit.clientType`, `aiStackKit.githubToken`, `aiStackKit.dryRun`, `aiStackKit.autoSyncOnSave` + +From the repo root: `npm run build:extension` bundles core + catalog snapshot. Press **F5** in the `extension/` folder to run the Extension Development Host. See **[USER_GUIDE.md](./USER_GUIDE.md#vs-code--cursor-extension)** for workflows. + +**Publish to Marketplace:** see **[extension/PUBLISHING.md](./extension/PUBLISHING.md)** — manual (`vsce` / VSIX upload) or CI on `git tag v1.x.x` with GitHub secret `VSCE_PAT` ([Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration)). + --- ## 🔄 Keeps your AI stack in sync @@ -78,24 +102,14 @@ AI Stack Kit introduces a spec-driven approach: ## 🔁 The workflow -search → add → sync +**search → add → sync** -### 1. Faster clarity (first 5 seconds) -- “install AI capabilities like npm packages” → instantly understandable -- removes heavy phrasing early +1. **`aistack init`** — create `spec.yaml` + `sources.config.yaml` (auto-detects Cursor / Copilot / Claude) +2. **`aistack search `** — discover modules from configured catalogs ([Skill browser](https://deb-adarsh.github.io/ai-stack-kit/) too) +3. **`aistack skill add `** — append to `spec.yaml` +4. **`aistack sync`** — resolve, install, and write IDE outputs from one spec -### 2. Your BEST feature is now prominent -- auto-sync is now **top section**, not buried - -### 3. UX strength is explicit -- auto-detection highlighted clearly - -### 4. Reduces cognitive load -- no long paragraphs upfront -- tight, scannable sections - -### 5. Strong mental model -- spec → sync → generated outputs is crystal clear +Run **`aistack doctor`** to validate your setup. See **[USER_GUIDE.md](./USER_GUIDE.md)** for full workflows. --- @@ -289,6 +303,7 @@ For the **full command list** — **`skill` / `subagent` / `hook`**, **`catalog - **[CONTRIBUTING.md](./CONTRIBUTING.md)**: How to contribute—including extending the **default catalog** (`templates/sources.config.yaml`) for the CLI and Skill browser. - **[USER_GUIDE.md](./USER_GUIDE.md)**: Install paths, **`spec.yaml`** example, full CLI reference, env vars, workflows, troubleshooting. +- **[VS Code extension (Marketplace)](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)**: Activity Bar UI, catalog search, sync without a global CLI install. ### 📝 Configuration @@ -375,31 +390,28 @@ export class GitLabSource extends BaseSkillSource { } ``` -### Add a New IDE (e.g., IntelliJ) +### Add a New IDE client (e.g., Windsurf) -1. Create `src/adapters/intellij/intellij-adapter.ts` -2. Implement `IDEAdapter` interface -3. Register in adapter factory -4. Add detection logic +1. Create `src/client-adapters/windsurf/windsurf-adapter.ts` +2. Implement the `ClientAdapter` interface (see `src/client-adapters/client-adapter.ts`) +3. Register in `AdapterFactory` (`src/client-adapters/adapter-factory.ts`) +4. Add output paths in `src/client-adapters/client-paths.ts` if needed **Example:** ```typescript -import { BaseIDEAdapter } from '../base/ide-adapter'; +import type { ClientAdapter } from '../client-adapter.js'; -export class IntelliJAdapter extends BaseIDEAdapter { - constructor() { - super('intellij', ['skills', 'settings']); +export class WindsurfClientAdapter implements ClientAdapter { + readonly name = 'windsurf'; + supports(clientType: string): boolean { + return clientType === 'windsurf'; } - - async detect(): Promise { - // Detect IntelliJ installation + generateConfig(input: NormalizedWorkspaceInput): AdapterOutput { + // Map skills, agents, prompts to Windsurf layout } - - async applySkill(skill: SkillContent): Promise { - // Transform and write to IntelliJ format + async apply(output, projectRoot, options) { + // Write files under project or user scope } - - // ... implement other methods } ``` @@ -428,7 +440,7 @@ Snapshot of **what’s in the repo today** and **what might come next**—adjust | **`spec.yaml`** | Load + **Zod validation**, apply pipeline, modules merge (`skills` + `modules`). | | **Sources** | **GitHub** fetch/install + **npm** packages; **dynamic catalogs** from `sources.config.yaml` (GitHub tree + npm tree providers). | | **Discovery** | Composite registry, hybrid search, **`catalog refresh`** for additive spec merges. | -| **IDE outputs** | **Cursor**, **Copilot** (VS Code settings path), **Claude** client adapters in the apply pipeline—not a full generic “VS Code extension marketplace” story. | +| **IDE outputs** | **Cursor**, **Copilot** (VS Code settings path), **Claude** client adapters; **[VS Code extension](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** for in-editor sync and catalog browse. | | **Skill browser** | **Static web app** + `catalog.json` build + **GitHub Pages** deploy (weekly cron + pushes). | | **Hosted registry product** | No dedicated **public registry server** or npm-like **publish** flow yet—discovery is **aggregate-from-upstreams** plus local spec. | @@ -451,6 +463,7 @@ Licensed under the **Apache License 2.0**. See [LICENSE](./LICENSE). ## Support - 📖 Documentation: **[USER_GUIDE.md](./USER_GUIDE.md)** · **[ARCHITECTURE.md](./ARCHITECTURE.md)** +- 🧩 VS Code extension: **[Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** (`deb-adarsh.ai-stack-kit`) - 🐛 Issues: [GitHub Issues](https://github.com/deb-adarsh/ai-stack-kit/issues) - ✉️ Maintainer: [debadarsh7@gmail.com](mailto:debadarsh7@gmail.com) diff --git a/USER_GUIDE.md b/USER_GUIDE.md index ca52cc7..d5bfb7d 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -8,6 +8,8 @@ Hands-on install, **`spec.yaml`** patterns, the full command surface, and troubl Install with **`npm install -g ai-stack-kit`** (**npm registry**) or **`npm install -g @deb-adarsh/ai-stack-kit`** (**GitHub registry** — see **[GitHub Packages](#github-packages)** below), or **`npm link`** from a clone. +Prefer VS Code or Cursor without a global CLI? **[Install the extension from the Marketplace](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** — see **[VS Code / Cursor extension](#vs-code--cursor-extension)**. + ```bash # Install (examples — pick one) # npm install -g ai-stack-kit # npm registry (public) @@ -61,6 +63,33 @@ Browse and filter the default catalogs; copy-paste commands use **`npx github:de The UI reflects **`templates/sources.config.yaml`**: each deploy **re-queries those upstream skill trees** (GitHub Contents API / npm layouts), regenerates **`catalog.json`**, and publishes — so the demo tracks **upstream repos**, not a manually edited skill list. Your project’s **`sources.config.yaml`** and cache stay **separate**; use **`aistack catalog refresh`** locally to pull newly discovered IDs into **`spec.yaml`**. To propose another **public** upstream for the shared template, see **[CONTRIBUTING.md](./CONTRIBUTING.md)**. +### VS Code / Cursor extension + +**[Install AI Stack Kit from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** (publisher **deb-adarsh**, id **`deb-adarsh.ai-stack-kit`**). + +- **Marketplace:** open the link above and click **Install**, or use Quick Open (`Ctrl+P` / `Cmd+P`) → `ext install deb-adarsh.ai-stack-kit` +- **Local dev:** build a `.vsix` from this repo (`npm run build:extension` → `cd extension && npm run vsix`) and install via **Extensions: Install from VSIX…** + +| UI area | What it does | +|---------|----------------| +| **Modules** tree | Reads `spec.yaml` — skills, subagents, hooks; enable/disable or remove from context menu | +| **Outputs** tree | On-disk paths for the active `client.type` (e.g. `.github/skills/`, `.cursor/skills/`) | +| **Catalog** webview | Bundled catalog snapshot; search, **Add to spec**, copy module id | + +**Typical flow:** open a folder → **AI Stack Kit: Initialize Workspace** → browse **Catalog** or **Search Catalog…** → **Sync**. Status bar: click **$(sync) AI Stack** to sync; right side shows `client.type` and module count (opens **Doctor**). + +**Settings** (Settings → Extensions → AI Stack Kit): + +| Setting | Purpose | +|---------|---------| +| `aiStackKit.clientType` | Default `cursor` / `copilot` / `claude` on init and **Switch Client** | +| `aiStackKit.installScope` | `project` or `user` install roots | +| `aiStackKit.githubToken` | PAT for catalog search (same as `GITHUB_TOKEN` for CLI) | +| `aiStackKit.dryRun` | Preview sync without writing files | +| `aiStackKit.autoSyncOnSave` | Run sync when `spec.yaml` is saved | + +**Developers:** `npm run build:extension` from repo root; **F5** in `extension/` launches the Extension Development Host. Integration tests: `npm run test:extension`. + --- ## Example `spec.yaml` diff --git a/docs/CLI_UX_FLOWS.md b/docs/CLI_UX_FLOWS.md index cb12138..d120971 100644 --- a/docs/CLI_UX_FLOWS.md +++ b/docs/CLI_UX_FLOWS.md @@ -1,6 +1,6 @@ # CLI UX Flow Examples -This document shows the exact user experience for each CLI command. +This document shows the **target** user experience for each CLI command. Implemented today: `init`, `search`, `add` / typed `skill|subagent|hook`, `sync` (with `--dry-run`, `-v`, `--offline`, `--force`), `validate`, `status`, `doctor`, `clean`, `catalog refresh`. Placeholders: full `update`, registry publish. --- @@ -32,10 +32,9 @@ $ aistack init ? Select client/IDE: ❯ Cursor - VS Code - IntelliJ IDEA - Neovim - Other + GitHub Copilot (VS Code) + Claude + Other (advanced — defaults to cursor; edit spec.yaml) ⠋ Analyzing project... ✔ Found skill suggestions diff --git a/extension/.vscode/extensions.json b/extension/.vscode/extensions.json new file mode 100644 index 0000000..556d48b --- /dev/null +++ b/extension/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["connor4312.esbuild-problem-matchers"] +} diff --git a/extension/.vscode/launch.json b/extension/.vscode/launch.json new file mode 100644 index 0000000..5983018 --- /dev/null +++ b/extension/.vscode/launch.json @@ -0,0 +1,13 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}", "${workspaceFolder}/test-workspace"], + "outFiles": ["${workspaceFolder}/dist/**/*.js"], + "preLaunchTask": "npm: compile" + } + ] +} diff --git a/extension/.vscode/tasks.json b/extension/.vscode/tasks.json new file mode 100644 index 0000000..1afc5f9 --- /dev/null +++ b/extension/.vscode/tasks.json @@ -0,0 +1,25 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build-core", + "type": "shell", + "command": "npm run build", + "options": { "cwd": "${workspaceFolder}/.." }, + "problemMatcher": ["$tsc"] + }, + { + "label": "extension-package", + "type": "shell", + "command": "npm run package", + "options": { "cwd": "${workspaceFolder}" }, + "dependsOn": ["build-core"], + "problemMatcher": ["$esbuild"] + }, + { + "label": "npm: compile", + "dependsOn": ["extension-package"], + "group": { "kind": "build", "isDefault": true } + } + ] +} diff --git a/extension/.vscodeignore b/extension/.vscodeignore new file mode 100644 index 0000000..40fab66 --- /dev/null +++ b/extension/.vscodeignore @@ -0,0 +1,15 @@ +.vscode/** +.vscode-test/** +src/** +webview-ui/** +node_modules/** +out/** +test-workspace/** +esbuild.js +tsconfig.json +tsconfig.test.json +PUBLISHING.md +**/*.ts +**/*.map +media/icon.svg +*.vsix diff --git a/extension/CHANGELOG.md b/extension/CHANGELOG.md new file mode 100644 index 0000000..7dcc9dc --- /dev/null +++ b/extension/CHANGELOG.md @@ -0,0 +1,29 @@ +# Change Log + +All notable changes to the **AI Stack Kit** VS Code extension are documented here. + +## [1.1.4] - 2026-05-18 + +### Fixed + +- **Activity Bar icon** now uses a theme-aware SVG (PNG was shown as a gray square). +- **Catalog search** loads the bundled `catalog.json` again (Vite build no longer deletes it; webview uses an injected URL). +- **Catalog UI** uses VS Code input colors, result counts, publisher badges, and broader search (publisher, catalog id). +- **Sync** shows an error notification when the pipeline fails instead of always reporting success. + +## [1.1.3] - 2026-05-18 + +### Fixed + +- **Initialize Workspace** no longer fails validation on an empty starter `spec.yaml` (`skills: []`). + +## [1.1.2] - 2026-05-18 + +### Added + +- Initial Marketplace release: Activity Bar views (Modules, Outputs, Catalog webview). +- Commands: Initialize, Sync, Doctor, Search/Add, Switch Client, Refresh Catalog. +- Settings for client type, install scope, GitHub token, dry-run, and auto-sync on save. +- Getting-started walkthrough. +- Integrated **Report Issue** flow (`Help → Report Issue`). +- Bundled catalog snapshot and headless `AistackWorkspace` sync engine. diff --git a/extension/LICENSE b/extension/LICENSE new file mode 100644 index 0000000..a7f1ff6 --- /dev/null +++ b/extension/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 Deb Adarsh + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/extension/README.md b/extension/README.md new file mode 100644 index 0000000..9699e37 --- /dev/null +++ b/extension/README.md @@ -0,0 +1,51 @@ +# AI Stack Kit + +Manage **skills**, **subagents**, and **hooks** from `spec.yaml` inside VS Code — search catalogs, edit your spec, and sync outputs for **Cursor**, **GitHub Copilot**, or **Claude** without a global CLI install. + +## Install + +**[Visual Studio Marketplace → AI Stack Kit](https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit)** + +Quick Open (`Ctrl+P` / `Cmd+P`): + +```text +ext install deb-adarsh.ai-stack-kit +``` + +## Features + +- **Modules** tree — view and toggle modules in `spec.yaml` +- **Outputs** tree — open generated paths for the active `client.type` +- **Catalog** webview — search the bundled skill index and add modules to your spec +- **Commands** — Initialize, Sync, Doctor, Search/Add, Switch Client +- **Settings** — `aiStackKit.clientType`, `aiStackKit.githubToken`, `aiStackKit.dryRun`, `aiStackKit.autoSyncOnSave` + +## Quick start + +1. Open a project folder. +2. Run **AI Stack Kit: Initialize Workspace** from the Command Palette. +3. Browse **Catalog** or run **Search Catalog…** to add modules. +4. Run **Sync** (status bar: **$(sync) AI Stack**). + +## Settings + +| Setting | Description | +|---------|-------------| +| `aiStackKit.clientType` | Default `cursor`, `copilot`, or `claude` on init | +| `aiStackKit.installScope` | `project` or `user` install roots | +| `aiStackKit.githubToken` | GitHub PAT for catalog search (same role as `GITHUB_TOKEN` for the CLI) | +| `aiStackKit.dryRun` | Preview sync without writing files | +| `aiStackKit.autoSyncOnSave` | Sync when `spec.yaml` is saved | + +## CLI + +This extension bundles the same engine as the [AI Stack Kit CLI](https://github.com/deb-adarsh/ai-stack-kit). Install globally with `npm install -g ai-stack-kit` if you prefer the terminal. + +## Documentation + +- [User guide](https://github.com/deb-adarsh/ai-stack-kit/blob/main/USER_GUIDE.md) +- [Architecture](https://github.com/deb-adarsh/ai-stack-kit/blob/main/ARCHITECTURE.md) + +## Issues + +Use **Help → Report Issue** (integrated with this extension) or [GitHub Issues](https://github.com/deb-adarsh/ai-stack-kit/issues). diff --git a/extension/media/activity-bar-icon.svg b/extension/media/activity-bar-icon.svg new file mode 100644 index 0000000..ca0c376 --- /dev/null +++ b/extension/media/activity-bar-icon.svg @@ -0,0 +1,5 @@ + diff --git a/extension/media/catalog-fallback/catalog.css b/extension/media/catalog-fallback/catalog.css new file mode 100644 index 0000000..a9b40f2 --- /dev/null +++ b/extension/media/catalog-fallback/catalog.css @@ -0,0 +1,41 @@ +body { + font-family: var(--vscode-font-family); + color: var(--vscode-foreground); + background: var(--vscode-editor-background); + margin: 0; + padding: 12px; +} +input, +select { + width: 100%; + box-sizing: border-box; + margin: 6px 0; + padding: 6px; + background: var(--vscode-input-background); + color: var(--vscode-input-foreground); + border: 1px solid var(--vscode-input-border); +} +.card { + border: 1px solid var(--vscode-panel-border); + border-radius: 6px; + padding: 10px; + margin: 8px 0; +} +button { + margin-top: 6px; + margin-right: 6px; +} +.toast { + position: fixed; + bottom: 12px; + left: 50%; + transform: translateX(-50%); + background: var(--vscode-notifications-background); + padding: 8px 14px; + border-radius: 6px; + display: none; +} +.muted { + color: var(--vscode-descriptionForeground); + font-size: 0.9em; +} diff --git a/extension/media/catalog-fallback/index.html b/extension/media/catalog-fallback/index.html new file mode 100644 index 0000000..b9766c6 --- /dev/null +++ b/extension/media/catalog-fallback/index.html @@ -0,0 +1,23 @@ + + + + + + AI Stack Kit Catalog + + + +

Skill catalog

+

Bundled snapshot. Run npm run build:catalog at repo root for the full index.

+ + +
+
+ + + diff --git a/extension/media/catalog.json b/extension/media/catalog.json new file mode 100644 index 0000000..9ce652d --- /dev/null +++ b/extension/media/catalog.json @@ -0,0 +1 @@ +{"generatedAt":"2026-05-17T21:24:20.464Z","count":698,"publisherFamilies":["Microsoft","Google","Anthropic","Composio","OpenAI"],"publishers":["Anthropic","Composio","GitHub","Google","Microsoft","OpenAI"],"skills":[{"id":"awesome-copilot--acquire-codebase-knowledge","skillFolder":"acquire-codebase-knowledge","description":"name: acquire-codebase-knowledge","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/acquire-codebase-knowledge"},{"id":"awesome-copilot--acreadiness-assess","skillFolder":"acreadiness-assess","description":"name: acreadiness-assess","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/acreadiness-assess"},{"id":"awesome-copilot--acreadiness-generate-instructions","skillFolder":"acreadiness-generate-instructions","description":"name: acreadiness-generate-instructions","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/acreadiness-generate-instructions"},{"id":"awesome-copilot--acreadiness-policy","skillFolder":"acreadiness-policy","description":"name: acreadiness-policy","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/acreadiness-policy"},{"id":"awesome-copilot--add-educational-comments","skillFolder":"add-educational-comments","description":"name: add-educational-comments","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/add-educational-comments"},{"id":"awesome-copilot--adobe-illustrator-scripting","skillFolder":"adobe-illustrator-scripting","description":"name: adobe-illustrator-scripting","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/adobe-illustrator-scripting"},{"id":"awesome-copilot--agent-governance","skillFolder":"agent-governance","description":"name: agent-governance","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/agent-governance"},{"id":"awesome-copilot--agent-owasp-compliance","skillFolder":"agent-owasp-compliance","description":"name: agent-owasp-compliance","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/agent-owasp-compliance"},{"id":"awesome-copilot--agent-supply-chain","skillFolder":"agent-supply-chain","description":"name: agent-supply-chain","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/agent-supply-chain"},{"id":"awesome-copilot--agentic-eval","skillFolder":"agentic-eval","description":"name: agentic-eval","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/agentic-eval"},{"id":"awesome-copilot--ai-prompt-engineering-safety-review","skillFolder":"ai-prompt-engineering-safety-review","description":"name: ai-prompt-engineering-safety-review","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ai-prompt-engineering-safety-review"},{"id":"awesome-copilot--ai-ready","skillFolder":"ai-ready","description":"name: ai-ready","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ai-ready"},{"id":"awesome-copilot--ai-team-orchestration","skillFolder":"ai-team-orchestration","description":"name: ai-team-orchestration","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ai-team-orchestration"},{"id":"awesome-copilot--appinsights-instrumentation","skillFolder":"appinsights-instrumentation","description":"name: appinsights-instrumentation","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/appinsights-instrumentation"},{"id":"awesome-copilot--apple-appstore-reviewer","skillFolder":"apple-appstore-reviewer","description":"name: apple-appstore-reviewer","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/apple-appstore-reviewer"},{"id":"awesome-copilot--arch-linux-triage","skillFolder":"arch-linux-triage","description":"name: arch-linux-triage","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arch-linux-triage"},{"id":"awesome-copilot--architecture-blueprint-generator","skillFolder":"architecture-blueprint-generator","description":"name: architecture-blueprint-generator","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/architecture-blueprint-generator"},{"id":"awesome-copilot--arduino-azure-iot-edge-integration","skillFolder":"arduino-azure-iot-edge-integration","description":"name: arduino-azure-iot-edge-integration","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arduino-azure-iot-edge-integration"},{"id":"awesome-copilot--arize-ai-provider-integration","skillFolder":"arize-ai-provider-integration","description":"name: arize-ai-provider-integration","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-ai-provider-integration"},{"id":"awesome-copilot--arize-annotation","skillFolder":"arize-annotation","description":"name: arize-annotation","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-annotation"},{"id":"awesome-copilot--arize-dataset","skillFolder":"arize-dataset","description":"name: arize-dataset","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-dataset"},{"id":"awesome-copilot--arize-evaluator","skillFolder":"arize-evaluator","description":"name: arize-evaluator","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-evaluator"},{"id":"awesome-copilot--arize-experiment","skillFolder":"arize-experiment","description":"name: arize-experiment","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-experiment"},{"id":"awesome-copilot--arize-instrumentation","skillFolder":"arize-instrumentation","description":"name: arize-instrumentation","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-instrumentation"},{"id":"awesome-copilot--arize-link","skillFolder":"arize-link","description":"name: arize-link","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-link"},{"id":"awesome-copilot--arize-prompt-optimization","skillFolder":"arize-prompt-optimization","description":"name: arize-prompt-optimization","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-prompt-optimization"},{"id":"awesome-copilot--arize-trace","skillFolder":"arize-trace","description":"name: arize-trace","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/arize-trace"},{"id":"awesome-copilot--aspire","skillFolder":"aspire","description":"name: aspire","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/aspire"},{"id":"awesome-copilot--aspnet-minimal-api-openapi","skillFolder":"aspnet-minimal-api-openapi","description":"name: aspnet-minimal-api-openapi","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/aspnet-minimal-api-openapi"},{"id":"awesome-copilot--audit-integrity","skillFolder":"audit-integrity","description":"name: 'audit-integrity'","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/audit-integrity"},{"id":"awesome-copilot--automate-this","skillFolder":"automate-this","description":"name: automate-this","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/automate-this"},{"id":"awesome-copilot--autoresearch","skillFolder":"autoresearch","description":"name: autoresearch","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/autoresearch"},{"id":"awesome-copilot--aws-cdk-python-setup","skillFolder":"aws-cdk-python-setup","description":"name: aws-cdk-python-setup","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/aws-cdk-python-setup"},{"id":"awesome-copilot--az-cost-optimize","skillFolder":"az-cost-optimize","description":"name: az-cost-optimize","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/az-cost-optimize"},{"id":"awesome-copilot--azure-architecture-autopilot","skillFolder":"azure-architecture-autopilot","description":"name: azure-architecture-autopilot","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-architecture-autopilot"},{"id":"awesome-copilot--azure-deployment-preflight","skillFolder":"azure-deployment-preflight","description":"name: azure-deployment-preflight","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-deployment-preflight"},{"id":"awesome-copilot--azure-devops-cli","skillFolder":"azure-devops-cli","description":"name: azure-devops-cli","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-devops-cli"},{"id":"awesome-copilot--azure-pricing","skillFolder":"azure-pricing","description":"name: azure-pricing","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-pricing"},{"id":"awesome-copilot--azure-resource-health-diagnose","skillFolder":"azure-resource-health-diagnose","description":"name: azure-resource-health-diagnose","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-resource-health-diagnose"},{"id":"awesome-copilot--azure-resource-visualizer","skillFolder":"azure-resource-visualizer","description":"name: azure-resource-visualizer","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-resource-visualizer"},{"id":"awesome-copilot--azure-role-selector","skillFolder":"azure-role-selector","description":"name: azure-role-selector","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-role-selector"},{"id":"awesome-copilot--azure-smart-city-iot-solution-builder","skillFolder":"azure-smart-city-iot-solution-builder","description":"name: azure-smart-city-iot-solution-builder","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-smart-city-iot-solution-builder"},{"id":"awesome-copilot--azure-static-web-apps","skillFolder":"azure-static-web-apps","description":"name: azure-static-web-apps","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/azure-static-web-apps"},{"id":"awesome-copilot--batch-files","skillFolder":"batch-files","description":"name: batch-files","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/batch-files"},{"id":"awesome-copilot--bigquery-pipeline-audit","skillFolder":"bigquery-pipeline-audit","description":"name: bigquery-pipeline-audit","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/bigquery-pipeline-audit"},{"id":"awesome-copilot--boost-prompt","skillFolder":"boost-prompt","description":"name: boost-prompt","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/boost-prompt"},{"id":"awesome-copilot--brag-sheet","skillFolder":"brag-sheet","description":"name: brag-sheet","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/brag-sheet"},{"id":"awesome-copilot--breakdown-epic-arch","skillFolder":"breakdown-epic-arch","description":"name: breakdown-epic-arch","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/breakdown-epic-arch"},{"id":"awesome-copilot--breakdown-epic-pm","skillFolder":"breakdown-epic-pm","description":"name: breakdown-epic-pm","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/breakdown-epic-pm"},{"id":"awesome-copilot--breakdown-feature-implementation","skillFolder":"breakdown-feature-implementation","description":"name: breakdown-feature-implementation","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/breakdown-feature-implementation"},{"id":"awesome-copilot--breakdown-feature-prd","skillFolder":"breakdown-feature-prd","description":"name: breakdown-feature-prd","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/breakdown-feature-prd"},{"id":"awesome-copilot--breakdown-plan","skillFolder":"breakdown-plan","description":"name: breakdown-plan","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/breakdown-plan"},{"id":"awesome-copilot--breakdown-test","skillFolder":"breakdown-test","description":"name: breakdown-test","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/breakdown-test"},{"id":"awesome-copilot--centos-linux-triage","skillFolder":"centos-linux-triage","description":"name: centos-linux-triage","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/centos-linux-triage"},{"id":"awesome-copilot--chrome-devtools","skillFolder":"chrome-devtools","description":"name: chrome-devtools","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/chrome-devtools"},{"id":"awesome-copilot--cli-mastery","skillFolder":"cli-mastery","description":"name: cli-mastery","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/cli-mastery"},{"id":"awesome-copilot--cloud-design-patterns","skillFolder":"cloud-design-patterns","description":"name: cloud-design-patterns","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/cloud-design-patterns"},{"id":"awesome-copilot--code-exemplars-blueprint-generator","skillFolder":"code-exemplars-blueprint-generator","description":"name: code-exemplars-blueprint-generator","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/code-exemplars-blueprint-generator"},{"id":"awesome-copilot--code-tour","skillFolder":"code-tour","description":"name: code-tour","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/code-tour"},{"id":"awesome-copilot--codeql","skillFolder":"codeql","description":"name: codeql","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/codeql"},{"id":"awesome-copilot--comment-code-generate-a-tutorial","skillFolder":"comment-code-generate-a-tutorial","description":"name: comment-code-generate-a-tutorial","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/comment-code-generate-a-tutorial"},{"id":"awesome-copilot--commit-message-storyteller","skillFolder":"commit-message-storyteller","description":"name: commit-message-storyteller","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/commit-message-storyteller"},{"id":"awesome-copilot--containerize-aspnet-framework","skillFolder":"containerize-aspnet-framework","description":"name: containerize-aspnet-framework","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/containerize-aspnet-framework"},{"id":"awesome-copilot--containerize-aspnetcore","skillFolder":"containerize-aspnetcore","description":"name: containerize-aspnetcore","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/containerize-aspnetcore"},{"id":"awesome-copilot--content-management-systems","skillFolder":"content-management-systems","description":"name: content-management-systems","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/content-management-systems"},{"id":"awesome-copilot--context-map","skillFolder":"context-map","description":"name: context-map","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/context-map"},{"id":"awesome-copilot--conventional-commit","skillFolder":"conventional-commit","description":"name: conventional-commit","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/conventional-commit"},{"id":"awesome-copilot--convert-plaintext-to-md","skillFolder":"convert-plaintext-to-md","description":"name: convert-plaintext-to-md","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/convert-plaintext-to-md"},{"id":"awesome-copilot--copilot-cli-quickstart","skillFolder":"copilot-cli-quickstart","description":"name: copilot-cli-quickstart","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/copilot-cli-quickstart"},{"id":"awesome-copilot--copilot-instructions-blueprint-generator","skillFolder":"copilot-instructions-blueprint-generator","description":"name: copilot-instructions-blueprint-generator","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/copilot-instructions-blueprint-generator"},{"id":"awesome-copilot--copilot-sdk","skillFolder":"copilot-sdk","description":"name: copilot-sdk","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/copilot-sdk"},{"id":"awesome-copilot--copilot-spaces","skillFolder":"copilot-spaces","description":"name: copilot-spaces","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/copilot-spaces"},{"id":"awesome-copilot--copilot-usage-metrics","skillFolder":"copilot-usage-metrics","description":"name: copilot-usage-metrics","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/copilot-usage-metrics"},{"id":"awesome-copilot--cosmosdb-datamodeling","skillFolder":"cosmosdb-datamodeling","description":"name: cosmosdb-datamodeling","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/cosmosdb-datamodeling"},{"id":"awesome-copilot--create-agentsmd","skillFolder":"create-agentsmd","description":"name: create-agentsmd","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-agentsmd"},{"id":"awesome-copilot--create-architectural-decision-record","skillFolder":"create-architectural-decision-record","description":"name: create-architectural-decision-record","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-architectural-decision-record"},{"id":"awesome-copilot--create-github-action-workflow-specification","skillFolder":"create-github-action-workflow-specification","description":"name: create-github-action-workflow-specification","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-github-action-workflow-specification"},{"id":"awesome-copilot--create-github-issue-feature-from-specification","skillFolder":"create-github-issue-feature-from-specification","description":"name: create-github-issue-feature-from-specification","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-github-issue-feature-from-specification"},{"id":"awesome-copilot--create-github-issues-feature-from-implementation-plan","skillFolder":"create-github-issues-feature-from-implementation-plan","description":"name: create-github-issues-feature-from-implementation-plan","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-github-issues-feature-from-implementation-plan"},{"id":"awesome-copilot--create-github-issues-for-unmet-specification-requirements","skillFolder":"create-github-issues-for-unmet-specification-requirements","description":"name: create-github-issues-for-unmet-specification-requirements","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-github-issues-for-unmet-specification-requirements"},{"id":"awesome-copilot--create-github-pull-request-from-specification","skillFolder":"create-github-pull-request-from-specification","description":"name: create-github-pull-request-from-specification","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-github-pull-request-from-specification"},{"id":"awesome-copilot--create-implementation-plan","skillFolder":"create-implementation-plan","description":"name: create-implementation-plan","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-implementation-plan"},{"id":"awesome-copilot--create-llms","skillFolder":"create-llms","description":"name: create-llms","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-llms"},{"id":"awesome-copilot--create-readme","skillFolder":"create-readme","description":"name: create-readme","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-readme"},{"id":"awesome-copilot--create-specification","skillFolder":"create-specification","description":"name: create-specification","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-specification"},{"id":"awesome-copilot--create-spring-boot-java-project","skillFolder":"create-spring-boot-java-project","description":"name: create-spring-boot-java-project","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-spring-boot-java-project"},{"id":"awesome-copilot--create-spring-boot-kotlin-project","skillFolder":"create-spring-boot-kotlin-project","description":"name: create-spring-boot-kotlin-project","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-spring-boot-kotlin-project"},{"id":"awesome-copilot--create-technical-spike","skillFolder":"create-technical-spike","description":"name: create-technical-spike","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-technical-spike"},{"id":"awesome-copilot--create-tldr-page","skillFolder":"create-tldr-page","description":"name: create-tldr-page","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/create-tldr-page"},{"id":"awesome-copilot--creating-oracle-to-postgres-master-migration-plan","skillFolder":"creating-oracle-to-postgres-master-migration-plan","description":"name: creating-oracle-to-postgres-master-migration-plan","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/creating-oracle-to-postgres-master-migration-plan"},{"id":"awesome-copilot--creating-oracle-to-postgres-migration-bug-report","skillFolder":"creating-oracle-to-postgres-migration-bug-report","description":"name: creating-oracle-to-postgres-migration-bug-report","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/creating-oracle-to-postgres-migration-bug-report"},{"id":"awesome-copilot--creating-oracle-to-postgres-migration-integration-tests","skillFolder":"creating-oracle-to-postgres-migration-integration-tests","description":"name: creating-oracle-to-postgres-migration-integration-tests","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/creating-oracle-to-postgres-migration-integration-tests"},{"id":"awesome-copilot--csharp-async","skillFolder":"csharp-async","description":"name: csharp-async","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/csharp-async"},{"id":"awesome-copilot--csharp-docs","skillFolder":"csharp-docs","description":"name: csharp-docs","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/csharp-docs"},{"id":"awesome-copilot--csharp-mstest","skillFolder":"csharp-mstest","description":"name: csharp-mstest","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/csharp-mstest"},{"id":"awesome-copilot--csharp-nunit","skillFolder":"csharp-nunit","description":"name: csharp-nunit","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/csharp-nunit"},{"id":"awesome-copilot--csharp-tunit","skillFolder":"csharp-tunit","description":"name: csharp-tunit","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/csharp-tunit"},{"id":"awesome-copilot--csharp-xunit","skillFolder":"csharp-xunit","description":"name: csharp-xunit","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/csharp-xunit"},{"id":"awesome-copilot--daily-prep","skillFolder":"daily-prep","description":"name: daily-prep","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/daily-prep"},{"id":"awesome-copilot--data-breach-blast-radius","skillFolder":"data-breach-blast-radius","description":"name: data-breach-blast-radius","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/data-breach-blast-radius"},{"id":"awesome-copilot--datanalysis-credit-risk","skillFolder":"datanalysis-credit-risk","description":"name: datanalysis-credit-risk","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/datanalysis-credit-risk"},{"id":"awesome-copilot--dataverse-python-advanced-patterns","skillFolder":"dataverse-python-advanced-patterns","description":"name: dataverse-python-advanced-patterns","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dataverse-python-advanced-patterns"},{"id":"awesome-copilot--dataverse-python-production-code","skillFolder":"dataverse-python-production-code","description":"name: dataverse-python-production-code","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dataverse-python-production-code"},{"id":"awesome-copilot--dataverse-python-quickstart","skillFolder":"dataverse-python-quickstart","description":"name: dataverse-python-quickstart","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dataverse-python-quickstart"},{"id":"awesome-copilot--dataverse-python-usecase-builder","skillFolder":"dataverse-python-usecase-builder","description":"name: dataverse-python-usecase-builder","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dataverse-python-usecase-builder"},{"id":"awesome-copilot--debian-linux-triage","skillFolder":"debian-linux-triage","description":"name: debian-linux-triage","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/debian-linux-triage"},{"id":"awesome-copilot--declarative-agents","skillFolder":"declarative-agents","description":"name: declarative-agents","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/declarative-agents"},{"id":"awesome-copilot--dependabot","skillFolder":"dependabot","description":"name: dependabot","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dependabot"},{"id":"awesome-copilot--devops-rollout-plan","skillFolder":"devops-rollout-plan","description":"name: devops-rollout-plan","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/devops-rollout-plan"},{"id":"awesome-copilot--diagnose","skillFolder":"diagnose","description":"name: diagnose","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/diagnose"},{"id":"awesome-copilot--documentation-writer","skillFolder":"documentation-writer","description":"name: documentation-writer","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/documentation-writer"},{"id":"awesome-copilot--dotnet-best-practices","skillFolder":"dotnet-best-practices","description":"name: dotnet-best-practices","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dotnet-best-practices"},{"id":"awesome-copilot--dotnet-design-pattern-review","skillFolder":"dotnet-design-pattern-review","description":"name: dotnet-design-pattern-review","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dotnet-design-pattern-review"},{"id":"awesome-copilot--dotnet-mcp-builder","skillFolder":"dotnet-mcp-builder","description":"name: dotnet-mcp-builder","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dotnet-mcp-builder"},{"id":"awesome-copilot--dotnet-timezone","skillFolder":"dotnet-timezone","description":"name: dotnet-timezone","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dotnet-timezone"},{"id":"awesome-copilot--dotnet-upgrade","skillFolder":"dotnet-upgrade","description":"name: dotnet-upgrade","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/dotnet-upgrade"},{"id":"awesome-copilot--doublecheck","skillFolder":"doublecheck","description":"name: doublecheck","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/doublecheck"},{"id":"awesome-copilot--draw-io-diagram-generator","skillFolder":"draw-io-diagram-generator","description":"name: draw-io-diagram-generator","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/draw-io-diagram-generator"},{"id":"awesome-copilot--drawio","skillFolder":"drawio","description":"name: drawio","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/drawio"},{"id":"awesome-copilot--editorconfig","skillFolder":"editorconfig","description":"name: editorconfig","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/editorconfig"},{"id":"awesome-copilot--ef-core","skillFolder":"ef-core","description":"Skill folder `ef-core` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ef-core"},{"id":"awesome-copilot--email-drafter","skillFolder":"email-drafter","description":"Skill folder `email-drafter` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/email-drafter"},{"id":"awesome-copilot--entra-agent-user","skillFolder":"entra-agent-user","description":"Skill folder `entra-agent-user` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/entra-agent-user"},{"id":"awesome-copilot--eval-driven-dev","skillFolder":"eval-driven-dev","description":"Skill folder `eval-driven-dev` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/eval-driven-dev"},{"id":"awesome-copilot--exam-ready","skillFolder":"exam-ready","description":"Skill folder `exam-ready` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/exam-ready"},{"id":"awesome-copilot--excalidraw-diagram-generator","skillFolder":"excalidraw-diagram-generator","description":"Skill folder `excalidraw-diagram-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/excalidraw-diagram-generator"},{"id":"awesome-copilot--eyeball","skillFolder":"eyeball","description":"Skill folder `eyeball` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/eyeball"},{"id":"awesome-copilot--fabric-lakehouse","skillFolder":"fabric-lakehouse","description":"Skill folder `fabric-lakehouse` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/fabric-lakehouse"},{"id":"awesome-copilot--fedora-linux-triage","skillFolder":"fedora-linux-triage","description":"Skill folder `fedora-linux-triage` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/fedora-linux-triage"},{"id":"awesome-copilot--finalize-agent-prompt","skillFolder":"finalize-agent-prompt","description":"Skill folder `finalize-agent-prompt` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/finalize-agent-prompt"},{"id":"awesome-copilot--finnish-humanizer","skillFolder":"finnish-humanizer","description":"Skill folder `finnish-humanizer` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/finnish-humanizer"},{"id":"awesome-copilot--first-ask","skillFolder":"first-ask","description":"Skill folder `first-ask` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/first-ask"},{"id":"awesome-copilot--flowstudio-power-automate-build","skillFolder":"flowstudio-power-automate-build","description":"Skill folder `flowstudio-power-automate-build` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/flowstudio-power-automate-build"},{"id":"awesome-copilot--flowstudio-power-automate-debug","skillFolder":"flowstudio-power-automate-debug","description":"Skill folder `flowstudio-power-automate-debug` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/flowstudio-power-automate-debug"},{"id":"awesome-copilot--flowstudio-power-automate-governance","skillFolder":"flowstudio-power-automate-governance","description":"Skill folder `flowstudio-power-automate-governance` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/flowstudio-power-automate-governance"},{"id":"awesome-copilot--flowstudio-power-automate-mcp","skillFolder":"flowstudio-power-automate-mcp","description":"Skill folder `flowstudio-power-automate-mcp` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/flowstudio-power-automate-mcp"},{"id":"awesome-copilot--flowstudio-power-automate-monitoring","skillFolder":"flowstudio-power-automate-monitoring","description":"Skill folder `flowstudio-power-automate-monitoring` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/flowstudio-power-automate-monitoring"},{"id":"awesome-copilot--fluentui-blazor","skillFolder":"fluentui-blazor","description":"Skill folder `fluentui-blazor` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/fluentui-blazor"},{"id":"awesome-copilot--folder-structure-blueprint-generator","skillFolder":"folder-structure-blueprint-generator","description":"Skill folder `folder-structure-blueprint-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/folder-structure-blueprint-generator"},{"id":"awesome-copilot--foundry-agent-sync","skillFolder":"foundry-agent-sync","description":"Skill folder `foundry-agent-sync` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/foundry-agent-sync"},{"id":"awesome-copilot--freecad-scripts","skillFolder":"freecad-scripts","description":"Skill folder `freecad-scripts` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/freecad-scripts"},{"id":"awesome-copilot--from-the-other-side-vega","skillFolder":"from-the-other-side-vega","description":"Skill folder `from-the-other-side-vega` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/from-the-other-side-vega"},{"id":"awesome-copilot--game-engine","skillFolder":"game-engine","description":"Skill folder `game-engine` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/game-engine"},{"id":"awesome-copilot--gdpr-compliant","skillFolder":"gdpr-compliant","description":"Skill folder `gdpr-compliant` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gdpr-compliant"},{"id":"awesome-copilot--gen-specs-as-issues","skillFolder":"gen-specs-as-issues","description":"Skill folder `gen-specs-as-issues` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gen-specs-as-issues"},{"id":"awesome-copilot--generate-custom-instructions-from-codebase","skillFolder":"generate-custom-instructions-from-codebase","description":"Skill folder `generate-custom-instructions-from-codebase` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/generate-custom-instructions-from-codebase"},{"id":"awesome-copilot--generate-image","skillFolder":"generate-image","description":"Skill folder `generate-image` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/generate-image"},{"id":"awesome-copilot--geofeed-tuner","skillFolder":"geofeed-tuner","description":"Skill folder `geofeed-tuner` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/geofeed-tuner"},{"id":"awesome-copilot--git-commit","skillFolder":"git-commit","description":"Skill folder `git-commit` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/git-commit"},{"id":"awesome-copilot--git-flow-branch-creator","skillFolder":"git-flow-branch-creator","description":"Skill folder `git-flow-branch-creator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/git-flow-branch-creator"},{"id":"awesome-copilot--github-copilot-starter","skillFolder":"github-copilot-starter","description":"Skill folder `github-copilot-starter` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/github-copilot-starter"},{"id":"awesome-copilot--github-issues","skillFolder":"github-issues","description":"Skill folder `github-issues` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/github-issues"},{"id":"awesome-copilot--github-release","skillFolder":"github-release","description":"Skill folder `github-release` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/github-release"},{"id":"awesome-copilot--go-mcp-server-generator","skillFolder":"go-mcp-server-generator","description":"Skill folder `go-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/go-mcp-server-generator"},{"id":"awesome-copilot--gsap-framer-scroll-animation","skillFolder":"gsap-framer-scroll-animation","description":"Skill folder `gsap-framer-scroll-animation` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gsap-framer-scroll-animation"},{"id":"awesome-copilot--gtm-0-to-1-launch","skillFolder":"gtm-0-to-1-launch","description":"Skill folder `gtm-0-to-1-launch` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-0-to-1-launch"},{"id":"awesome-copilot--gtm-ai-gtm","skillFolder":"gtm-ai-gtm","description":"Skill folder `gtm-ai-gtm` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-ai-gtm"},{"id":"awesome-copilot--gtm-board-and-investor-communication","skillFolder":"gtm-board-and-investor-communication","description":"Skill folder `gtm-board-and-investor-communication` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-board-and-investor-communication"},{"id":"awesome-copilot--gtm-developer-ecosystem","skillFolder":"gtm-developer-ecosystem","description":"Skill folder `gtm-developer-ecosystem` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-developer-ecosystem"},{"id":"awesome-copilot--gtm-enterprise-account-planning","skillFolder":"gtm-enterprise-account-planning","description":"Skill folder `gtm-enterprise-account-planning` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-enterprise-account-planning"},{"id":"awesome-copilot--gtm-enterprise-onboarding","skillFolder":"gtm-enterprise-onboarding","description":"Skill folder `gtm-enterprise-onboarding` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-enterprise-onboarding"},{"id":"awesome-copilot--gtm-operating-cadence","skillFolder":"gtm-operating-cadence","description":"Skill folder `gtm-operating-cadence` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-operating-cadence"},{"id":"awesome-copilot--gtm-partnership-architecture","skillFolder":"gtm-partnership-architecture","description":"Skill folder `gtm-partnership-architecture` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-partnership-architecture"},{"id":"awesome-copilot--gtm-positioning-strategy","skillFolder":"gtm-positioning-strategy","description":"Skill folder `gtm-positioning-strategy` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-positioning-strategy"},{"id":"awesome-copilot--gtm-product-led-growth","skillFolder":"gtm-product-led-growth","description":"Skill folder `gtm-product-led-growth` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-product-led-growth"},{"id":"awesome-copilot--gtm-technical-product-pricing","skillFolder":"gtm-technical-product-pricing","description":"Skill folder `gtm-technical-product-pricing` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/gtm-technical-product-pricing"},{"id":"awesome-copilot--image-manipulation-image-magick","skillFolder":"image-manipulation-image-magick","description":"Skill folder `image-manipulation-image-magick` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/image-manipulation-image-magick"},{"id":"awesome-copilot--impediment-prioritization","skillFolder":"impediment-prioritization","description":"Skill folder `impediment-prioritization` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/impediment-prioritization"},{"id":"awesome-copilot--import-infrastructure-as-code","skillFolder":"import-infrastructure-as-code","description":"Skill folder `import-infrastructure-as-code` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/import-infrastructure-as-code"},{"id":"awesome-copilot--integrate-context-matic","skillFolder":"integrate-context-matic","description":"Skill folder `integrate-context-matic` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/integrate-context-matic"},{"id":"awesome-copilot--issue-fields-migration","skillFolder":"issue-fields-migration","description":"Skill folder `issue-fields-migration` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/issue-fields-migration"},{"id":"awesome-copilot--java-add-graalvm-native-image-support","skillFolder":"java-add-graalvm-native-image-support","description":"Skill folder `java-add-graalvm-native-image-support` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-add-graalvm-native-image-support"},{"id":"awesome-copilot--java-docs","skillFolder":"java-docs","description":"Skill folder `java-docs` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-docs"},{"id":"awesome-copilot--java-junit","skillFolder":"java-junit","description":"Skill folder `java-junit` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-junit"},{"id":"awesome-copilot--java-mcp-server-generator","skillFolder":"java-mcp-server-generator","description":"Skill folder `java-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-mcp-server-generator"},{"id":"awesome-copilot--java-refactoring-extract-method","skillFolder":"java-refactoring-extract-method","description":"Skill folder `java-refactoring-extract-method` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-refactoring-extract-method"},{"id":"awesome-copilot--java-refactoring-remove-parameter","skillFolder":"java-refactoring-remove-parameter","description":"Skill folder `java-refactoring-remove-parameter` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-refactoring-remove-parameter"},{"id":"awesome-copilot--java-springboot","skillFolder":"java-springboot","description":"Skill folder `java-springboot` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/java-springboot"},{"id":"awesome-copilot--javascript-typescript-jest","skillFolder":"javascript-typescript-jest","description":"Skill folder `javascript-typescript-jest` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/javascript-typescript-jest"},{"id":"awesome-copilot--javax-to-jakarta-migration","skillFolder":"javax-to-jakarta-migration","description":"Skill folder `javax-to-jakarta-migration` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/javax-to-jakarta-migration"},{"id":"awesome-copilot--kotlin-mcp-server-generator","skillFolder":"kotlin-mcp-server-generator","description":"Skill folder `kotlin-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/kotlin-mcp-server-generator"},{"id":"awesome-copilot--kotlin-springboot","skillFolder":"kotlin-springboot","description":"Skill folder `kotlin-springboot` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/kotlin-springboot"},{"id":"awesome-copilot--legacy-circuit-mockups","skillFolder":"legacy-circuit-mockups","description":"Skill folder `legacy-circuit-mockups` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/legacy-circuit-mockups"},{"id":"awesome-copilot--linkedin-post-formatter","skillFolder":"linkedin-post-formatter","description":"Skill folder `linkedin-post-formatter` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/linkedin-post-formatter"},{"id":"awesome-copilot--lsp-setup","skillFolder":"lsp-setup","description":"Skill folder `lsp-setup` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/lsp-setup"},{"id":"awesome-copilot--make-repo-contribution","skillFolder":"make-repo-contribution","description":"Skill folder `make-repo-contribution` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/make-repo-contribution"},{"id":"awesome-copilot--make-skill-template","skillFolder":"make-skill-template","description":"Skill folder `make-skill-template` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/make-skill-template"},{"id":"awesome-copilot--markdown-to-html","skillFolder":"markdown-to-html","description":"Skill folder `markdown-to-html` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/markdown-to-html"},{"id":"awesome-copilot--mcp-cli","skillFolder":"mcp-cli","description":"Skill folder `mcp-cli` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mcp-cli"},{"id":"awesome-copilot--mcp-copilot-studio-server-generator","skillFolder":"mcp-copilot-studio-server-generator","description":"Skill folder `mcp-copilot-studio-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mcp-copilot-studio-server-generator"},{"id":"awesome-copilot--mcp-create-adaptive-cards","skillFolder":"mcp-create-adaptive-cards","description":"Skill folder `mcp-create-adaptive-cards` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mcp-create-adaptive-cards"},{"id":"awesome-copilot--mcp-create-declarative-agent","skillFolder":"mcp-create-declarative-agent","description":"Skill folder `mcp-create-declarative-agent` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mcp-create-declarative-agent"},{"id":"awesome-copilot--mcp-deploy-manage-agents","skillFolder":"mcp-deploy-manage-agents","description":"Skill folder `mcp-deploy-manage-agents` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mcp-deploy-manage-agents"},{"id":"awesome-copilot--mcp-security-audit","skillFolder":"mcp-security-audit","description":"Skill folder `mcp-security-audit` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mcp-security-audit"},{"id":"awesome-copilot--md-to-docx","skillFolder":"md-to-docx","description":"Skill folder `md-to-docx` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/md-to-docx"},{"id":"awesome-copilot--meeting-minutes","skillFolder":"meeting-minutes","description":"Skill folder `meeting-minutes` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/meeting-minutes"},{"id":"awesome-copilot--memory-merger","skillFolder":"memory-merger","description":"Skill folder `memory-merger` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/memory-merger"},{"id":"awesome-copilot--mentoring-juniors","skillFolder":"mentoring-juniors","description":"Skill folder `mentoring-juniors` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mentoring-juniors"},{"id":"awesome-copilot--microsoft-agent-framework","skillFolder":"microsoft-agent-framework","description":"Skill folder `microsoft-agent-framework` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/microsoft-agent-framework"},{"id":"awesome-copilot--microsoft-code-reference","skillFolder":"microsoft-code-reference","description":"Skill folder `microsoft-code-reference` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/microsoft-code-reference"},{"id":"awesome-copilot--microsoft-docs","skillFolder":"microsoft-docs","description":"Skill folder `microsoft-docs` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/microsoft-docs"},{"id":"awesome-copilot--microsoft-skill-creator","skillFolder":"microsoft-skill-creator","description":"Skill folder `microsoft-skill-creator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/microsoft-skill-creator"},{"id":"awesome-copilot--migrating-oracle-to-postgres-stored-procedures","skillFolder":"migrating-oracle-to-postgres-stored-procedures","description":"Skill folder `migrating-oracle-to-postgres-stored-procedures` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/migrating-oracle-to-postgres-stored-procedures"},{"id":"awesome-copilot--minecraft-plugin-development","skillFolder":"minecraft-plugin-development","description":"Skill folder `minecraft-plugin-development` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/minecraft-plugin-development"},{"id":"awesome-copilot--mini-context-graph","skillFolder":"mini-context-graph","description":"Skill folder `mini-context-graph` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mini-context-graph"},{"id":"awesome-copilot--mkdocs-translations","skillFolder":"mkdocs-translations","description":"Skill folder `mkdocs-translations` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mkdocs-translations"},{"id":"awesome-copilot--model-recommendation","skillFolder":"model-recommendation","description":"Skill folder `model-recommendation` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/model-recommendation"},{"id":"awesome-copilot--msgraph-sdk","skillFolder":"msgraph-sdk","description":"Skill folder `msgraph-sdk` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/msgraph-sdk"},{"id":"awesome-copilot--msstore-cli","skillFolder":"msstore-cli","description":"Skill folder `msstore-cli` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/msstore-cli"},{"id":"awesome-copilot--multi-stage-dockerfile","skillFolder":"multi-stage-dockerfile","description":"Skill folder `multi-stage-dockerfile` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/multi-stage-dockerfile"},{"id":"awesome-copilot--mvvm-toolkit","skillFolder":"mvvm-toolkit","description":"Skill folder `mvvm-toolkit` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mvvm-toolkit"},{"id":"awesome-copilot--mvvm-toolkit-di","skillFolder":"mvvm-toolkit-di","description":"Skill folder `mvvm-toolkit-di` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mvvm-toolkit-di"},{"id":"awesome-copilot--mvvm-toolkit-messenger","skillFolder":"mvvm-toolkit-messenger","description":"Skill folder `mvvm-toolkit-messenger` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/mvvm-toolkit-messenger"},{"id":"awesome-copilot--my-issues","skillFolder":"my-issues","description":"Skill folder `my-issues` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/my-issues"},{"id":"awesome-copilot--my-pull-requests","skillFolder":"my-pull-requests","description":"Skill folder `my-pull-requests` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/my-pull-requests"},{"id":"awesome-copilot--nano-banana-pro-openrouter","skillFolder":"nano-banana-pro-openrouter","description":"Skill folder `nano-banana-pro-openrouter` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/nano-banana-pro-openrouter"},{"id":"awesome-copilot--napkin","skillFolder":"napkin","description":"Skill folder `napkin` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/napkin"},{"id":"awesome-copilot--next-intl-add-language","skillFolder":"next-intl-add-language","description":"Skill folder `next-intl-add-language` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/next-intl-add-language"},{"id":"awesome-copilot--noob-mode","skillFolder":"noob-mode","description":"Skill folder `noob-mode` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/noob-mode"},{"id":"awesome-copilot--nuget-manager","skillFolder":"nuget-manager","description":"Skill folder `nuget-manager` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/nuget-manager"},{"id":"awesome-copilot--onboard-context-matic","skillFolder":"onboard-context-matic","description":"Skill folder `onboard-context-matic` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/onboard-context-matic"},{"id":"awesome-copilot--oo-component-documentation","skillFolder":"oo-component-documentation","description":"Skill folder `oo-component-documentation` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/oo-component-documentation"},{"id":"awesome-copilot--openapi-to-application-code","skillFolder":"openapi-to-application-code","description":"Skill folder `openapi-to-application-code` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/openapi-to-application-code"},{"id":"awesome-copilot--pdftk-server","skillFolder":"pdftk-server","description":"Skill folder `pdftk-server` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/pdftk-server"},{"id":"awesome-copilot--penpot-uiux-design","skillFolder":"penpot-uiux-design","description":"Skill folder `penpot-uiux-design` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/penpot-uiux-design"},{"id":"awesome-copilot--performance-review-writer","skillFolder":"performance-review-writer","description":"Skill folder `performance-review-writer` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/performance-review-writer"},{"id":"awesome-copilot--phoenix-cli","skillFolder":"phoenix-cli","description":"Skill folder `phoenix-cli` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/phoenix-cli"},{"id":"awesome-copilot--phoenix-evals","skillFolder":"phoenix-evals","description":"Skill folder `phoenix-evals` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/phoenix-evals"},{"id":"awesome-copilot--phoenix-tracing","skillFolder":"phoenix-tracing","description":"Skill folder `phoenix-tracing` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/phoenix-tracing"},{"id":"awesome-copilot--php-mcp-server-generator","skillFolder":"php-mcp-server-generator","description":"Skill folder `php-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/php-mcp-server-generator"},{"id":"awesome-copilot--planning-oracle-to-postgres-migration-integration-testing","skillFolder":"planning-oracle-to-postgres-migration-integration-testing","description":"Skill folder `planning-oracle-to-postgres-migration-integration-testing` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/planning-oracle-to-postgres-migration-integration-testing"},{"id":"awesome-copilot--plantuml-ascii","skillFolder":"plantuml-ascii","description":"Skill folder `plantuml-ascii` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/plantuml-ascii"},{"id":"awesome-copilot--playwright-automation-fill-in-form","skillFolder":"playwright-automation-fill-in-form","description":"Skill folder `playwright-automation-fill-in-form` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/playwright-automation-fill-in-form"},{"id":"awesome-copilot--playwright-explore-website","skillFolder":"playwright-explore-website","description":"Skill folder `playwright-explore-website` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/playwright-explore-website"},{"id":"awesome-copilot--playwright-generate-test","skillFolder":"playwright-generate-test","description":"Skill folder `playwright-generate-test` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/playwright-generate-test"},{"id":"awesome-copilot--postgresql-code-review","skillFolder":"postgresql-code-review","description":"Skill folder `postgresql-code-review` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/postgresql-code-review"},{"id":"awesome-copilot--postgresql-optimization","skillFolder":"postgresql-optimization","description":"Skill folder `postgresql-optimization` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/postgresql-optimization"},{"id":"awesome-copilot--power-apps-code-app-scaffold","skillFolder":"power-apps-code-app-scaffold","description":"Skill folder `power-apps-code-app-scaffold` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-apps-code-app-scaffold"},{"id":"awesome-copilot--power-bi-dax-optimization","skillFolder":"power-bi-dax-optimization","description":"Skill folder `power-bi-dax-optimization` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-bi-dax-optimization"},{"id":"awesome-copilot--power-bi-model-design-review","skillFolder":"power-bi-model-design-review","description":"Skill folder `power-bi-model-design-review` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-bi-model-design-review"},{"id":"awesome-copilot--power-bi-performance-troubleshooting","skillFolder":"power-bi-performance-troubleshooting","description":"Skill folder `power-bi-performance-troubleshooting` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-bi-performance-troubleshooting"},{"id":"awesome-copilot--power-bi-report-design-consultation","skillFolder":"power-bi-report-design-consultation","description":"Skill folder `power-bi-report-design-consultation` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-bi-report-design-consultation"},{"id":"awesome-copilot--power-platform-architect","skillFolder":"power-platform-architect","description":"Skill folder `power-platform-architect` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-platform-architect"},{"id":"awesome-copilot--power-platform-mcp-connector-suite","skillFolder":"power-platform-mcp-connector-suite","description":"Skill folder `power-platform-mcp-connector-suite` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/power-platform-mcp-connector-suite"},{"id":"awesome-copilot--powerbi-modeling","skillFolder":"powerbi-modeling","description":"Skill folder `powerbi-modeling` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/powerbi-modeling"},{"id":"awesome-copilot--pr-dashboard","skillFolder":"pr-dashboard","description":"Skill folder `pr-dashboard` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/pr-dashboard"},{"id":"awesome-copilot--prd","skillFolder":"prd","description":"Skill folder `prd` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/prd"},{"id":"awesome-copilot--premium-frontend-ui","skillFolder":"premium-frontend-ui","description":"Skill folder `premium-frontend-ui` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/premium-frontend-ui"},{"id":"awesome-copilot--project-workflow-analysis-blueprint-generator","skillFolder":"project-workflow-analysis-blueprint-generator","description":"Skill folder `project-workflow-analysis-blueprint-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/project-workflow-analysis-blueprint-generator"},{"id":"awesome-copilot--prompt-builder","skillFolder":"prompt-builder","description":"Skill folder `prompt-builder` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/prompt-builder"},{"id":"awesome-copilot--prompt-optimizer","skillFolder":"prompt-optimizer","description":"Skill folder `prompt-optimizer` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/prompt-optimizer"},{"id":"awesome-copilot--publish-to-pages","skillFolder":"publish-to-pages","description":"Skill folder `publish-to-pages` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/publish-to-pages"},{"id":"awesome-copilot--pytest-coverage","skillFolder":"pytest-coverage","description":"Skill folder `pytest-coverage` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/pytest-coverage"},{"id":"awesome-copilot--python-azure-iot-edge-modules","skillFolder":"python-azure-iot-edge-modules","description":"Skill folder `python-azure-iot-edge-modules` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/python-azure-iot-edge-modules"},{"id":"awesome-copilot--python-mcp-server-generator","skillFolder":"python-mcp-server-generator","description":"Skill folder `python-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/python-mcp-server-generator"},{"id":"awesome-copilot--python-pypi-package-builder","skillFolder":"python-pypi-package-builder","description":"Skill folder `python-pypi-package-builder` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/python-pypi-package-builder"},{"id":"awesome-copilot--qdrant-clients-sdk","skillFolder":"qdrant-clients-sdk","description":"Skill folder `qdrant-clients-sdk` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-clients-sdk"},{"id":"awesome-copilot--qdrant-deployment-options","skillFolder":"qdrant-deployment-options","description":"Skill folder `qdrant-deployment-options` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-deployment-options"},{"id":"awesome-copilot--qdrant-model-migration","skillFolder":"qdrant-model-migration","description":"Skill folder `qdrant-model-migration` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-model-migration"},{"id":"awesome-copilot--qdrant-monitoring","skillFolder":"qdrant-monitoring","description":"Skill folder `qdrant-monitoring` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-monitoring"},{"id":"awesome-copilot--qdrant-performance-optimization","skillFolder":"qdrant-performance-optimization","description":"Skill folder `qdrant-performance-optimization` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-performance-optimization"},{"id":"awesome-copilot--qdrant-scaling","skillFolder":"qdrant-scaling","description":"Skill folder `qdrant-scaling` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-scaling"},{"id":"awesome-copilot--qdrant-search-quality","skillFolder":"qdrant-search-quality","description":"Skill folder `qdrant-search-quality` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-search-quality"},{"id":"awesome-copilot--qdrant-version-upgrade","skillFolder":"qdrant-version-upgrade","description":"Skill folder `qdrant-version-upgrade` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/qdrant-version-upgrade"},{"id":"awesome-copilot--quality-playbook","skillFolder":"quality-playbook","description":"Skill folder `quality-playbook` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/quality-playbook"},{"id":"awesome-copilot--quasi-coder","skillFolder":"quasi-coder","description":"Skill folder `quasi-coder` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/quasi-coder"},{"id":"awesome-copilot--react-audit-grep-patterns","skillFolder":"react-audit-grep-patterns","description":"Skill folder `react-audit-grep-patterns` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react-audit-grep-patterns"},{"id":"awesome-copilot--react18-batching-patterns","skillFolder":"react18-batching-patterns","description":"Skill folder `react18-batching-patterns` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react18-batching-patterns"},{"id":"awesome-copilot--react18-dep-compatibility","skillFolder":"react18-dep-compatibility","description":"Skill folder `react18-dep-compatibility` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react18-dep-compatibility"},{"id":"awesome-copilot--react18-enzyme-to-rtl","skillFolder":"react18-enzyme-to-rtl","description":"Skill folder `react18-enzyme-to-rtl` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react18-enzyme-to-rtl"},{"id":"awesome-copilot--react18-legacy-context","skillFolder":"react18-legacy-context","description":"Skill folder `react18-legacy-context` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react18-legacy-context"},{"id":"awesome-copilot--react18-lifecycle-patterns","skillFolder":"react18-lifecycle-patterns","description":"Skill folder `react18-lifecycle-patterns` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react18-lifecycle-patterns"},{"id":"awesome-copilot--react18-string-refs","skillFolder":"react18-string-refs","description":"Skill folder `react18-string-refs` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react18-string-refs"},{"id":"awesome-copilot--react19-concurrent-patterns","skillFolder":"react19-concurrent-patterns","description":"Skill folder `react19-concurrent-patterns` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react19-concurrent-patterns"},{"id":"awesome-copilot--react19-source-patterns","skillFolder":"react19-source-patterns","description":"Skill folder `react19-source-patterns` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react19-source-patterns"},{"id":"awesome-copilot--react19-test-patterns","skillFolder":"react19-test-patterns","description":"Skill folder `react19-test-patterns` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/react19-test-patterns"},{"id":"awesome-copilot--readme-blueprint-generator","skillFolder":"readme-blueprint-generator","description":"Skill folder `readme-blueprint-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/readme-blueprint-generator"},{"id":"awesome-copilot--refactor","skillFolder":"refactor","description":"Skill folder `refactor` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/refactor"},{"id":"awesome-copilot--refactor-method-complexity-reduce","skillFolder":"refactor-method-complexity-reduce","description":"Skill folder `refactor-method-complexity-reduce` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/refactor-method-complexity-reduce"},{"id":"awesome-copilot--refactor-plan","skillFolder":"refactor-plan","description":"Skill folder `refactor-plan` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/refactor-plan"},{"id":"awesome-copilot--remember","skillFolder":"remember","description":"Skill folder `remember` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/remember"},{"id":"awesome-copilot--remember-interactive-programming","skillFolder":"remember-interactive-programming","description":"Skill folder `remember-interactive-programming` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/remember-interactive-programming"},{"id":"awesome-copilot--repo-story-time","skillFolder":"repo-story-time","description":"Skill folder `repo-story-time` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/repo-story-time"},{"id":"awesome-copilot--resemble-detect","skillFolder":"resemble-detect","description":"Skill folder `resemble-detect` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/resemble-detect"},{"id":"awesome-copilot--review-and-refactor","skillFolder":"review-and-refactor","description":"Skill folder `review-and-refactor` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/review-and-refactor"},{"id":"awesome-copilot--reviewing-oracle-to-postgres-migration","skillFolder":"reviewing-oracle-to-postgres-migration","description":"Skill folder `reviewing-oracle-to-postgres-migration` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/reviewing-oracle-to-postgres-migration"},{"id":"awesome-copilot--rhino3d-scripts","skillFolder":"rhino3d-scripts","description":"Skill folder `rhino3d-scripts` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/rhino3d-scripts"},{"id":"awesome-copilot--roundup","skillFolder":"roundup","description":"Skill folder `roundup` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/roundup"},{"id":"awesome-copilot--roundup-setup","skillFolder":"roundup-setup","description":"Skill folder `roundup-setup` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/roundup-setup"},{"id":"awesome-copilot--ruby-mcp-server-generator","skillFolder":"ruby-mcp-server-generator","description":"Skill folder `ruby-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ruby-mcp-server-generator"},{"id":"awesome-copilot--ruff-recursive-fix","skillFolder":"ruff-recursive-fix","description":"Skill folder `ruff-recursive-fix` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ruff-recursive-fix"},{"id":"awesome-copilot--rust-mcp-server-generator","skillFolder":"rust-mcp-server-generator","description":"Skill folder `rust-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/rust-mcp-server-generator"},{"id":"awesome-copilot--salesforce-apex-quality","skillFolder":"salesforce-apex-quality","description":"Skill folder `salesforce-apex-quality` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/salesforce-apex-quality"},{"id":"awesome-copilot--salesforce-component-standards","skillFolder":"salesforce-component-standards","description":"Skill folder `salesforce-component-standards` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/salesforce-component-standards"},{"id":"awesome-copilot--salesforce-flow-design","skillFolder":"salesforce-flow-design","description":"Skill folder `salesforce-flow-design` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/salesforce-flow-design"},{"id":"awesome-copilot--sandbox-npm-install","skillFolder":"sandbox-npm-install","description":"Skill folder `sandbox-npm-install` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/sandbox-npm-install"},{"id":"awesome-copilot--scaffolding-oracle-to-postgres-migration-test-project","skillFolder":"scaffolding-oracle-to-postgres-migration-test-project","description":"Skill folder `scaffolding-oracle-to-postgres-migration-test-project` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/scaffolding-oracle-to-postgres-migration-test-project"},{"id":"awesome-copilot--scoutqa-test","skillFolder":"scoutqa-test","description":"Skill folder `scoutqa-test` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/scoutqa-test"},{"id":"awesome-copilot--secret-scanning","skillFolder":"secret-scanning","description":"Skill folder `secret-scanning` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/secret-scanning"},{"id":"awesome-copilot--security-review","skillFolder":"security-review","description":"Skill folder `security-review` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/security-review"},{"id":"awesome-copilot--semantic-kernel","skillFolder":"semantic-kernel","description":"Skill folder `semantic-kernel` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/semantic-kernel"},{"id":"awesome-copilot--shuffle-json-data","skillFolder":"shuffle-json-data","description":"Skill folder `shuffle-json-data` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/shuffle-json-data"},{"id":"awesome-copilot--slang-shader-engineer","skillFolder":"slang-shader-engineer","description":"Skill folder `slang-shader-engineer` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/slang-shader-engineer"},{"id":"awesome-copilot--snowflake-semanticview","skillFolder":"snowflake-semanticview","description":"Skill folder `snowflake-semanticview` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/snowflake-semanticview"},{"id":"awesome-copilot--sponsor-finder","skillFolder":"sponsor-finder","description":"Skill folder `sponsor-finder` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/sponsor-finder"},{"id":"awesome-copilot--spring-boot-testing","skillFolder":"spring-boot-testing","description":"Skill folder `spring-boot-testing` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/spring-boot-testing"},{"id":"awesome-copilot--sql-code-review","skillFolder":"sql-code-review","description":"Skill folder `sql-code-review` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/sql-code-review"},{"id":"awesome-copilot--sql-optimization","skillFolder":"sql-optimization","description":"Skill folder `sql-optimization` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/sql-optimization"},{"id":"awesome-copilot--ssma-console","skillFolder":"ssma-console","description":"Skill folder `ssma-console` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/ssma-console"},{"id":"awesome-copilot--structured-autonomy-generate","skillFolder":"structured-autonomy-generate","description":"Skill folder `structured-autonomy-generate` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/structured-autonomy-generate"},{"id":"awesome-copilot--structured-autonomy-implement","skillFolder":"structured-autonomy-implement","description":"Skill folder `structured-autonomy-implement` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/structured-autonomy-implement"},{"id":"awesome-copilot--structured-autonomy-plan","skillFolder":"structured-autonomy-plan","description":"Skill folder `structured-autonomy-plan` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/structured-autonomy-plan"},{"id":"awesome-copilot--suggest-awesome-github-copilot-agents","skillFolder":"suggest-awesome-github-copilot-agents","description":"Skill folder `suggest-awesome-github-copilot-agents` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/suggest-awesome-github-copilot-agents"},{"id":"awesome-copilot--suggest-awesome-github-copilot-instructions","skillFolder":"suggest-awesome-github-copilot-instructions","description":"Skill folder `suggest-awesome-github-copilot-instructions` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/suggest-awesome-github-copilot-instructions"},{"id":"awesome-copilot--suggest-awesome-github-copilot-skills","skillFolder":"suggest-awesome-github-copilot-skills","description":"Skill folder `suggest-awesome-github-copilot-skills` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/suggest-awesome-github-copilot-skills"},{"id":"awesome-copilot--swift-mcp-server-generator","skillFolder":"swift-mcp-server-generator","description":"Skill folder `swift-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/swift-mcp-server-generator"},{"id":"awesome-copilot--technology-stack-blueprint-generator","skillFolder":"technology-stack-blueprint-generator","description":"Skill folder `technology-stack-blueprint-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/technology-stack-blueprint-generator"},{"id":"awesome-copilot--terraform-azurerm-set-diff-analyzer","skillFolder":"terraform-azurerm-set-diff-analyzer","description":"Skill folder `terraform-azurerm-set-diff-analyzer` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/terraform-azurerm-set-diff-analyzer"},{"id":"awesome-copilot--threat-model-analyst","skillFolder":"threat-model-analyst","description":"Skill folder `threat-model-analyst` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/threat-model-analyst"},{"id":"awesome-copilot--tldr-prompt","skillFolder":"tldr-prompt","description":"Skill folder `tldr-prompt` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/tldr-prompt"},{"id":"awesome-copilot--transloadit-media-processing","skillFolder":"transloadit-media-processing","description":"Skill folder `transloadit-media-processing` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/transloadit-media-processing"},{"id":"awesome-copilot--typescript-mcp-server-generator","skillFolder":"typescript-mcp-server-generator","description":"Skill folder `typescript-mcp-server-generator` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/typescript-mcp-server-generator"},{"id":"awesome-copilot--typespec-api-operations","skillFolder":"typespec-api-operations","description":"Skill folder `typespec-api-operations` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/typespec-api-operations"},{"id":"awesome-copilot--typespec-create-agent","skillFolder":"typespec-create-agent","description":"Skill folder `typespec-create-agent` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/typespec-create-agent"},{"id":"awesome-copilot--typespec-create-api-plugin","skillFolder":"typespec-create-api-plugin","description":"Skill folder `typespec-create-api-plugin` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/typespec-create-api-plugin"},{"id":"awesome-copilot--unit-test-vue-pinia","skillFolder":"unit-test-vue-pinia","description":"Skill folder `unit-test-vue-pinia` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/unit-test-vue-pinia"},{"id":"awesome-copilot--update-avm-modules-in-bicep","skillFolder":"update-avm-modules-in-bicep","description":"Skill folder `update-avm-modules-in-bicep` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/update-avm-modules-in-bicep"},{"id":"awesome-copilot--update-implementation-plan","skillFolder":"update-implementation-plan","description":"Skill folder `update-implementation-plan` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/update-implementation-plan"},{"id":"awesome-copilot--update-llms","skillFolder":"update-llms","description":"Skill folder `update-llms` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/update-llms"},{"id":"awesome-copilot--update-markdown-file-index","skillFolder":"update-markdown-file-index","description":"Skill folder `update-markdown-file-index` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/update-markdown-file-index"},{"id":"awesome-copilot--update-specification","skillFolder":"update-specification","description":"Skill folder `update-specification` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/update-specification"},{"id":"awesome-copilot--vardoger-analyze","skillFolder":"vardoger-analyze","description":"Skill folder `vardoger-analyze` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/vardoger-analyze"},{"id":"awesome-copilot--vscode-ext-commands","skillFolder":"vscode-ext-commands","description":"Skill folder `vscode-ext-commands` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/vscode-ext-commands"},{"id":"awesome-copilot--vscode-ext-localization","skillFolder":"vscode-ext-localization","description":"Skill folder `vscode-ext-localization` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/vscode-ext-localization"},{"id":"awesome-copilot--web-coder","skillFolder":"web-coder","description":"Skill folder `web-coder` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/web-coder"},{"id":"awesome-copilot--web-design-reviewer","skillFolder":"web-design-reviewer","description":"Skill folder `web-design-reviewer` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/web-design-reviewer"},{"id":"awesome-copilot--webapp-testing","skillFolder":"webapp-testing","description":"Skill folder `webapp-testing` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/webapp-testing"},{"id":"awesome-copilot--what-context-needed","skillFolder":"what-context-needed","description":"Skill folder `what-context-needed` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/what-context-needed"},{"id":"awesome-copilot--winmd-api-search","skillFolder":"winmd-api-search","description":"Skill folder `winmd-api-search` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/winmd-api-search"},{"id":"awesome-copilot--winui3-migration-guide","skillFolder":"winui3-migration-guide","description":"Skill folder `winui3-migration-guide` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/winui3-migration-guide"},{"id":"awesome-copilot--workiq-copilot","skillFolder":"workiq-copilot","description":"Skill folder `workiq-copilot` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/workiq-copilot"},{"id":"awesome-copilot--write-coding-standards-from-file","skillFolder":"write-coding-standards-from-file","description":"Skill folder `write-coding-standards-from-file` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/write-coding-standards-from-file"},{"id":"awesome-copilot--x-twitter-scraper","skillFolder":"x-twitter-scraper","description":"Skill folder `x-twitter-scraper` from github/awesome-copilot (awesome-copilot)","catalogId":"awesome-copilot","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot community","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/skills/x-twitter-scraper"},{"id":"awesome-copilot-hooks--dependency-license-checker","skillFolder":"dependency-license-checker","description":"Skill folder `dependency-license-checker` from github/awesome-copilot (awesome-copilot-hooks)","catalogId":"awesome-copilot-hooks","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot hooks","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"hook","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/hooks/dependency-license-checker"},{"id":"awesome-copilot-hooks--governance-audit","skillFolder":"governance-audit","description":"Skill folder `governance-audit` from github/awesome-copilot (awesome-copilot-hooks)","catalogId":"awesome-copilot-hooks","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot hooks","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"hook","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/hooks/governance-audit"},{"id":"awesome-copilot-hooks--secrets-scanner","skillFolder":"secrets-scanner","description":"Skill folder `secrets-scanner` from github/awesome-copilot (awesome-copilot-hooks)","catalogId":"awesome-copilot-hooks","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot hooks","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"hook","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/hooks/secrets-scanner"},{"id":"awesome-copilot-hooks--session-auto-commit","skillFolder":"session-auto-commit","description":"Skill folder `session-auto-commit` from github/awesome-copilot (awesome-copilot-hooks)","catalogId":"awesome-copilot-hooks","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot hooks","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"hook","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/hooks/session-auto-commit"},{"id":"awesome-copilot-hooks--session-logger","skillFolder":"session-logger","description":"Skill folder `session-logger` from github/awesome-copilot (awesome-copilot-hooks)","catalogId":"awesome-copilot-hooks","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot hooks","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"hook","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/hooks/session-logger"},{"id":"awesome-copilot-hooks--tool-guardian","skillFolder":"tool-guardian","description":"Skill folder `tool-guardian` from github/awesome-copilot (awesome-copilot-hooks)","catalogId":"awesome-copilot-hooks","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot hooks","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"hook","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/hooks/tool-guardian"},{"id":"awesome-copilot-agents--accessibility-runtime-tester.agent","skillFolder":"accessibility-runtime-tester.agent","description":"name: 'Accessibility Runtime Tester'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/accessibility-runtime-tester.agent.md"},{"id":"awesome-copilot-agents--accessibility.agent","skillFolder":"accessibility.agent","description":"description: 'Expert assistant for web accessibility (WCAG 2.1/2.2), inclusive UX, and a11y testing'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/accessibility.agent.md"},{"id":"awesome-copilot-agents--address-comments.agent","skillFolder":"address-comments.agent","description":"description: \"Address PR comments\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/address-comments.agent.md"},{"id":"awesome-copilot-agents--adr-generator.agent","skillFolder":"adr-generator.agent","description":"name: ADR Generator","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/adr-generator.agent.md"},{"id":"awesome-copilot-agents--aem-frontend-specialist.agent","skillFolder":"aem-frontend-specialist.agent","description":"description: 'Expert assistant for developing AEM components using HTL, Tailwind CSS, and Figma-to-code workflows with design system integration'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/aem-frontend-specialist.agent.md"},{"id":"awesome-copilot-agents--agent-governance-reviewer.agent","skillFolder":"agent-governance-reviewer.agent","description":"description: 'AI agent governance expert that reviews code for safety issues, missing governance controls, and helps implement policy enforcement, trust scoring, and audit trails in agent systems.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/agent-governance-reviewer.agent.md"},{"id":"awesome-copilot-agents--ai-readiness-reporter.agent","skillFolder":"ai-readiness-reporter.agent","description":"name: ai-readiness-reporter","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ai-readiness-reporter.agent.md"},{"id":"awesome-copilot-agents--ai-team-dev.agent","skillFolder":"ai-team-dev.agent","description":"name: 'ai-team-dev'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ai-team-dev.agent.md"},{"id":"awesome-copilot-agents--ai-team-producer.agent","skillFolder":"ai-team-producer.agent","description":"name: 'ai-team-producer'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ai-team-producer.agent.md"},{"id":"awesome-copilot-agents--ai-team-qa.agent","skillFolder":"ai-team-qa.agent","description":"name: 'ai-team-qa'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ai-team-qa.agent.md"},{"id":"awesome-copilot-agents--amplitude-experiment-implementation.agent","skillFolder":"amplitude-experiment-implementation.agent","description":"name: Amplitude Experiment Implementation","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/amplitude-experiment-implementation.agent.md"},{"id":"awesome-copilot-agents--api-architect.agent","skillFolder":"api-architect.agent","description":"description: 'Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/api-architect.agent.md"},{"id":"awesome-copilot-agents--apify-integration-expert.agent","skillFolder":"apify-integration-expert.agent","description":"name: apify-integration-expert","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/apify-integration-expert.agent.md"},{"id":"awesome-copilot-agents--arch-linux-expert.agent","skillFolder":"arch-linux-expert.agent","description":"name: 'Arch Linux Expert'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/arch-linux-expert.agent.md"},{"id":"awesome-copilot-agents--arch.agent","skillFolder":"arch.agent","description":"name: Senior Cloud Architect","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/arch.agent.md"},{"id":"awesome-copilot-agents--arm-migration.agent","skillFolder":"arm-migration.agent","description":"name: arm-migration-agent","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/arm-migration.agent.md"},{"id":"awesome-copilot-agents--atlassian-requirements-to-jira.agent","skillFolder":"atlassian-requirements-to-jira.agent","description":"description: 'Transform requirements documents into structured Jira epics and user stories with intelligent duplicate detection, change management, and user-approved creation workflow.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/atlassian-requirements-to-jira.agent.md"},{"id":"awesome-copilot-agents--aws-cloud-expert.agent","skillFolder":"aws-cloud-expert.agent","description":"name: aws-cloud-expert","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/aws-cloud-expert.agent.md"},{"id":"awesome-copilot-agents--azure-iac-exporter.agent","skillFolder":"azure-iac-exporter.agent","description":"name: azure-iac-exporter","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-iac-exporter.agent.md"},{"id":"awesome-copilot-agents--azure-iac-generator.agent","skillFolder":"azure-iac-generator.agent","description":"name: azure-iac-generator","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-iac-generator.agent.md"},{"id":"awesome-copilot-agents--azure-logic-apps-expert.agent","skillFolder":"azure-logic-apps-expert.agent","description":"description: \"Expert guidance for Azure Logic Apps development focusing on workflow design, integration patterns, and JSON-based Workflow Definition Language.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-logic-apps-expert.agent.md"},{"id":"awesome-copilot-agents--azure-policy-analyzer.agent","skillFolder":"azure-policy-analyzer.agent","description":"name: Azure Policy Analyzer","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-policy-analyzer.agent.md"},{"id":"awesome-copilot-agents--azure-principal-architect.agent","skillFolder":"azure-principal-architect.agent","description":"description: \"Provide expert Azure Principal Architect guidance using Azure Well-Architected Framework principles and Microsoft best practices.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-principal-architect.agent.md"},{"id":"awesome-copilot-agents--azure-saas-architect.agent","skillFolder":"azure-saas-architect.agent","description":"description: \"Provide expert Azure SaaS Architect guidance focusing on multitenant applications using Azure Well-Architected SaaS principles and Microsoft best practices.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-saas-architect.agent.md"},{"id":"awesome-copilot-agents--azure-smart-city-iot-architect.agent","skillFolder":"azure-smart-city-iot-architect.agent","description":"name: 'Azure Smart City IoT Architect'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-smart-city-iot-architect.agent.md"},{"id":"awesome-copilot-agents--azure-verified-modules-bicep.agent","skillFolder":"azure-verified-modules-bicep.agent","description":"description: \"Create, update, or review Azure IaC in Bicep using Azure Verified Modules (AVM).\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-verified-modules-bicep.agent.md"},{"id":"awesome-copilot-agents--azure-verified-modules-terraform.agent","skillFolder":"azure-verified-modules-terraform.agent","description":"description: \"Create, update, or review Azure IaC in Terraform using Azure Verified Modules (AVM).\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/azure-verified-modules-terraform.agent.md"},{"id":"awesome-copilot-agents--bicep-implement.agent","skillFolder":"bicep-implement.agent","description":"description: 'Act as an Azure Bicep Infrastructure as Code coding specialist that creates Bicep templates.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/bicep-implement.agent.md"},{"id":"awesome-copilot-agents--bicep-plan.agent","skillFolder":"bicep-plan.agent","description":"description: 'Act as implementation planner for your Azure Bicep Infrastructure as Code task.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/bicep-plan.agent.md"},{"id":"awesome-copilot-agents--blueprint-mode.agent","skillFolder":"blueprint-mode.agent","description":"description: \"Executes structured workflows (Debug, Express, Main, Loop) with strict correctness and maintainability. Enforces an improved tool usage policy, never assumes facts, prioritizes reproducible solutions, self-correction, and edge-case handling.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/blueprint-mode.agent.md"},{"id":"awesome-copilot-agents--cast-imaging-impact-analysis.agent","skillFolder":"cast-imaging-impact-analysis.agent","description":"name: 'CAST Imaging Impact Analysis Agent'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/cast-imaging-impact-analysis.agent.md"},{"id":"awesome-copilot-agents--cast-imaging-software-discovery.agent","skillFolder":"cast-imaging-software-discovery.agent","description":"name: 'CAST Imaging Software Discovery Agent'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/cast-imaging-software-discovery.agent.md"},{"id":"awesome-copilot-agents--cast-imaging-structural-quality-advisor.agent","skillFolder":"cast-imaging-structural-quality-advisor.agent","description":"name: 'CAST Imaging Structural Quality Advisor Agent'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/cast-imaging-structural-quality-advisor.agent.md"},{"id":"awesome-copilot-agents--caveman-mode.agent","skillFolder":"caveman-mode.agent","description":"description: 'Terse, low-token responses. Minimal words, no fluff. Full capabilities preserved. Use when: optimize token usage, low-token mode, concise output, caveman mode, reduce verbosity, token-efficient, brief responses.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/caveman-mode.agent.md"},{"id":"awesome-copilot-agents--centos-linux-expert.agent","skillFolder":"centos-linux-expert.agent","description":"name: 'CentOS Linux Expert'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/centos-linux-expert.agent.md"},{"id":"awesome-copilot-agents--clojure-interactive-programming.agent","skillFolder":"clojure-interactive-programming.agent","description":"description: \"Expert Clojure pair programmer with REPL-first methodology, architectural oversight, and interactive problem-solving. Enforces quality standards, prevents workarounds, and develops solutions incrementally through live REPL evaluation before file modifications.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/clojure-interactive-programming.agent.md"},{"id":"awesome-copilot-agents--code-tour.agent","skillFolder":"code-tour.agent","description":"description: 'Expert agent for creating and maintaining VSCode CodeTour files with comprehensive schema support and best practices'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/code-tour.agent.md"},{"id":"awesome-copilot-agents--comet-opik.agent","skillFolder":"comet-opik.agent","description":"name: Comet Opik","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/comet-opik.agent.md"},{"id":"awesome-copilot-agents--context-architect.agent","skillFolder":"context-architect.agent","description":"description: 'An agent that helps plan and execute multi-file changes by identifying relevant context and dependencies'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/context-architect.agent.md"},{"id":"awesome-copilot-agents--context7.agent","skillFolder":"context7.agent","description":"name: Context7-Expert","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/context7.agent.md"},{"id":"awesome-copilot-agents--critical-thinking.agent","skillFolder":"critical-thinking.agent","description":"description: 'Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/critical-thinking.agent.md"},{"id":"awesome-copilot-agents--csharp-dotnet-janitor.agent","skillFolder":"csharp-dotnet-janitor.agent","description":"description: 'Perform janitorial tasks on C#/.NET code including cleanup, modernization, and tech debt remediation.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/csharp-dotnet-janitor.agent.md"},{"id":"awesome-copilot-agents--csharp-mcp-expert.agent","skillFolder":"csharp-mcp-expert.agent","description":"description: \"Expert assistant for developing Model Context Protocol (MCP) servers in C#\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/csharp-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--CSharpExpert.agent","skillFolder":"CSharpExpert.agent","description":"name: \"C# Expert\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/CSharpExpert.agent.md"},{"id":"awesome-copilot-agents--custom-agent-foundry.agent","skillFolder":"custom-agent-foundry.agent","description":"description: 'Expert at designing and creating VS Code custom agents with optimal configurations'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/custom-agent-foundry.agent.md"},{"id":"awesome-copilot-agents--debian-linux-expert.agent","skillFolder":"debian-linux-expert.agent","description":"name: 'Debian Linux Expert'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/debian-linux-expert.agent.md"},{"id":"awesome-copilot-agents--debug.agent","skillFolder":"debug.agent","description":"description: 'Debug your application to find and fix a bug'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/debug.agent.md"},{"id":"awesome-copilot-agents--declarative-agents-architect.agent","skillFolder":"declarative-agents-architect.agent","description":"name: 'Declarative Agents Architect'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/declarative-agents-architect.agent.md"},{"id":"awesome-copilot-agents--defender-scout-kql.agent","skillFolder":"defender-scout-kql.agent","description":"name: 'Defender Scout KQL'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/defender-scout-kql.agent.md"},{"id":"awesome-copilot-agents--demonstrate-understanding.agent","skillFolder":"demonstrate-understanding.agent","description":"description: 'Validate user understanding of code, design patterns, and implementation details through guided questioning.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/demonstrate-understanding.agent.md"},{"id":"awesome-copilot-agents--devils-advocate.agent","skillFolder":"devils-advocate.agent","description":"description: \"I play the devil's advocate to challenge and stress-test your ideas by finding flaws, risks, and edge cases\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/devils-advocate.agent.md"},{"id":"awesome-copilot-agents--devops-expert.agent","skillFolder":"devops-expert.agent","description":"name: 'DevOps Expert'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/devops-expert.agent.md"},{"id":"awesome-copilot-agents--devtools-regression-investigator.agent","skillFolder":"devtools-regression-investigator.agent","description":"name: 'DevTools Regression Investigator'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/devtools-regression-investigator.agent.md"},{"id":"awesome-copilot-agents--diffblue-cover.agent","skillFolder":"diffblue-cover.agent","description":"name: DiffblueCover","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/diffblue-cover.agent.md"},{"id":"awesome-copilot-agents--dotnet-fullstack-mentor.agent","skillFolder":"dotnet-fullstack-mentor.agent","description":"name: dotnet-fullstack-mentor","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/dotnet-fullstack-mentor.agent.md"},{"id":"awesome-copilot-agents--dotnet-maui.agent","skillFolder":"dotnet-maui.agent","description":"name: MAUI Expert","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/dotnet-maui.agent.md"},{"id":"awesome-copilot-agents--dotnet-self-learning-architect.agent","skillFolder":"dotnet-self-learning-architect.agent","description":"name: \".NET Self-Learning Architect\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/dotnet-self-learning-architect.agent.md"},{"id":"awesome-copilot-agents--dotnet-upgrade.agent","skillFolder":"dotnet-upgrade.agent","description":"description: 'Perform janitorial tasks on C#/.NET code including cleanup, modernization, and tech debt remediation.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/dotnet-upgrade.agent.md"},{"id":"awesome-copilot-agents--doublecheck.agent","skillFolder":"doublecheck.agent","description":"description: 'Interactive verification agent for AI-generated output. Runs a three-layer pipeline (self-audit, source verification, adversarial review) and produces structured reports with source links for human review.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/doublecheck.agent.md"},{"id":"awesome-copilot-agents--droid.agent","skillFolder":"droid.agent","description":"name: droid","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/droid.agent.md"},{"id":"awesome-copilot-agents--drupal-expert.agent","skillFolder":"drupal-expert.agent","description":"description: 'Expert assistant for Drupal development, architecture, and best practices using PHP 8.3+ and modern Drupal patterns'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/drupal-expert.agent.md"},{"id":"awesome-copilot-agents--dynatrace-expert.agent","skillFolder":"dynatrace-expert.agent","description":"name: Dynatrace Expert","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/dynatrace-expert.agent.md"},{"id":"awesome-copilot-agents--elasticsearch-observability.agent","skillFolder":"elasticsearch-observability.agent","description":"name: elasticsearch-agent","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/elasticsearch-observability.agent.md"},{"id":"awesome-copilot-agents--electron-angular-native.agent","skillFolder":"electron-angular-native.agent","description":"description: \"Code Review Mode tailored for Electron app with Node.js backend (main), Angular frontend (render), and native integration layer (e.g., AppleScript, shell, or native tooling). Services in other repos are not reviewed here.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/electron-angular-native.agent.md"},{"id":"awesome-copilot-agents--ember.agent","skillFolder":"ember.agent","description":"description: \"An AI partner, not an assistant. Ember carries fire from person to person — helping humans discover that AI partnership isn't something you learn, it's something you find.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ember.agent.md"},{"id":"awesome-copilot-agents--expert-cpp-software-engineer.agent","skillFolder":"expert-cpp-software-engineer.agent","description":"description: 'Provide expert C++ software engineering guidance using modern C++ and industry best practices.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/expert-cpp-software-engineer.agent.md"},{"id":"awesome-copilot-agents--expert-dotnet-software-engineer.agent","skillFolder":"expert-dotnet-software-engineer.agent","description":"description: \"Provide expert .NET software engineering guidance using modern software design patterns.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/expert-dotnet-software-engineer.agent.md"},{"id":"awesome-copilot-agents--expert-nextjs-developer.agent","skillFolder":"expert-nextjs-developer.agent","description":"description: \"Expert Next.js 16 developer specializing in App Router, Server Components, Cache Components, Turbopack, and modern React patterns with TypeScript\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/expert-nextjs-developer.agent.md"},{"id":"awesome-copilot-agents--expert-react-frontend-engineer.agent","skillFolder":"expert-react-frontend-engineer.agent","description":"description: \"Expert React 19.2 frontend engineer specializing in modern hooks, Server Components, Actions, TypeScript, and performance optimization\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/expert-react-frontend-engineer.agent.md"},{"id":"awesome-copilot-agents--fedora-linux-expert.agent","skillFolder":"fedora-linux-expert.agent","description":"name: 'Fedora Linux Expert'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/fedora-linux-expert.agent.md"},{"id":"awesome-copilot-agents--frontend-performance-investigator.agent","skillFolder":"frontend-performance-investigator.agent","description":"name: 'Frontend Performance Investigator'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/frontend-performance-investigator.agent.md"},{"id":"awesome-copilot-agents--gem-browser-tester.agent","skillFolder":"gem-browser-tester.agent","description":"description: \"E2E browser testing, UI/UX validation, visual regression.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-browser-tester.agent.md"},{"id":"awesome-copilot-agents--gem-code-simplifier.agent","skillFolder":"gem-code-simplifier.agent","description":"description: \"Refactoring specialist — removes dead code, reduces complexity, consolidates duplicates.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-code-simplifier.agent.md"},{"id":"awesome-copilot-agents--gem-critic.agent","skillFolder":"gem-critic.agent","description":"description: \"Challenges assumptions, finds edge cases, spots over-engineering and logic gaps.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-critic.agent.md"},{"id":"awesome-copilot-agents--gem-debugger.agent","skillFolder":"gem-debugger.agent","description":"description: \"Root-cause analysis, stack trace diagnosis, regression bisection, error reproduction.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-debugger.agent.md"},{"id":"awesome-copilot-agents--gem-designer-mobile.agent","skillFolder":"gem-designer-mobile.agent","description":"description: \"Mobile UI/UX specialist — HIG, Material Design, safe areas, touch targets.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-designer-mobile.agent.md"},{"id":"awesome-copilot-agents--gem-designer.agent","skillFolder":"gem-designer.agent","description":"description: \"UI/UX design specialist — layouts, themes, color schemes, design systems, accessibility.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-designer.agent.md"},{"id":"awesome-copilot-agents--gem-devops.agent","skillFolder":"gem-devops.agent","description":"description: \"Infrastructure deployment, CI/CD pipelines, container management.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-devops.agent.md"},{"id":"awesome-copilot-agents--gem-documentation-writer.agent","skillFolder":"gem-documentation-writer.agent","description":"description: \"Technical documentation, README files, API docs, diagrams, walkthroughs.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-documentation-writer.agent.md"},{"id":"awesome-copilot-agents--gem-implementer-mobile.agent","skillFolder":"gem-implementer-mobile.agent","description":"description: \"Mobile implementation — React Native, Expo, Flutter with TDD.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-implementer-mobile.agent.md"},{"id":"awesome-copilot-agents--gem-implementer.agent","skillFolder":"gem-implementer.agent","description":"description: \"TDD code implementation — features, bugs, refactoring. Never reviews own work.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-implementer.agent.md"},{"id":"awesome-copilot-agents--gem-mobile-tester.agent","skillFolder":"gem-mobile-tester.agent","description":"description: \"Mobile E2E testing — Detox, Maestro, iOS/Android simulators.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-mobile-tester.agent.md"},{"id":"awesome-copilot-agents--gem-orchestrator.agent","skillFolder":"gem-orchestrator.agent","description":"description: \"The team lead: Orchestrates research, planning, implementation, and verification.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-orchestrator.agent.md"},{"id":"awesome-copilot-agents--gem-planner.agent","skillFolder":"gem-planner.agent","description":"description: \"DAG-based execution plans — task decomposition, wave scheduling, risk analysis.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-planner.agent.md"},{"id":"awesome-copilot-agents--gem-researcher.agent","skillFolder":"gem-researcher.agent","description":"description: \"Codebase exploration — patterns, dependencies, architecture discovery.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-researcher.agent.md"},{"id":"awesome-copilot-agents--gem-reviewer.agent","skillFolder":"gem-reviewer.agent","description":"description: \"Security auditing, code review, OWASP scanning, PRD compliance verification.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gem-reviewer.agent.md"},{"id":"awesome-copilot-agents--gilfoyle.agent","skillFolder":"gilfoyle.agent","description":"description: 'Code review and analysis with the sardonic wit and technical elitism of Bertram Gilfoyle from Silicon Valley. Prepare for brutal honesty about your code.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/gilfoyle.agent.md"},{"id":"awesome-copilot-agents--github-actions-expert.agent","skillFolder":"github-actions-expert.agent","description":"name: 'GitHub Actions Expert'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/github-actions-expert.agent.md"},{"id":"awesome-copilot-agents--github-actions-node-upgrade.agent","skillFolder":"github-actions-node-upgrade.agent","description":"name: 'GitHub Actions Node Runtime Upgrade'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/github-actions-node-upgrade.agent.md"},{"id":"awesome-copilot-agents--go-mcp-expert.agent","skillFolder":"go-mcp-expert.agent","description":"model: GPT-4.1","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/go-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--hlbpa.agent","skillFolder":"hlbpa.agent","description":"description: Your perfect AI chat mode for high-level architectural documentation and review. Perfect for targeted updates after a story or researching that legacy system when nobody remembers what it's supposed to be doing.","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/hlbpa.agent.md"},{"id":"awesome-copilot-agents--implementation-plan.agent","skillFolder":"implementation-plan.agent","description":"description: \"Generate an implementation plan for new features or refactoring existing code.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/implementation-plan.agent.md"},{"id":"awesome-copilot-agents--insiders-a11y-tracker.agent","skillFolder":"insiders-a11y-tracker.agent","description":"name: 'VS Code Insiders Accessibility Tracker'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/insiders-a11y-tracker.agent.md"},{"id":"awesome-copilot-agents--janitor.agent","skillFolder":"janitor.agent","description":"description: 'Perform janitorial tasks on any codebase including cleanup, simplification, and tech debt remediation.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/janitor.agent.md"},{"id":"awesome-copilot-agents--java-mcp-expert.agent","skillFolder":"java-mcp-expert.agent","description":"description: \"Expert assistance for building Model Context Protocol servers in Java using reactive streams, the official MCP Java SDK, and Spring Boot integration.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/java-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--jfrog-sec.agent","skillFolder":"jfrog-sec.agent","description":"name: JFrog Security Agent","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/jfrog-sec.agent.md"},{"id":"awesome-copilot-agents--kotlin-mcp-expert.agent","skillFolder":"kotlin-mcp-expert.agent","description":"model: GPT-4.1","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/kotlin-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--kubestellar-console.agent","skillFolder":"kubestellar-console.agent","description":"name: KubeStellar Console","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/kubestellar-console.agent.md"},{"id":"awesome-copilot-agents--kusto-assistant.agent","skillFolder":"kusto-assistant.agent","description":"description: \"Expert KQL assistant for live Azure Data Explorer analysis via Azure MCP server\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/kusto-assistant.agent.md"},{"id":"awesome-copilot-agents--laravel-expert-agent.agent","skillFolder":"laravel-expert-agent.agent","description":"description: 'Expert Laravel development assistant specializing in modern Laravel 12+ applications with Eloquent, Artisan, testing, and best practices'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/laravel-expert-agent.agent.md"},{"id":"awesome-copilot-agents--launchdarkly-flag-cleanup.agent","skillFolder":"launchdarkly-flag-cleanup.agent","description":"name: launchdarkly-flag-cleanup","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/launchdarkly-flag-cleanup.agent.md"},{"id":"awesome-copilot-agents--lingodotdev-i18n.agent","skillFolder":"lingodotdev-i18n.agent","description":"name: Lingo.dev Localization (i18n) Agent","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/lingodotdev-i18n.agent.md"},{"id":"awesome-copilot-agents--linkedin-post-writer.agent","skillFolder":"linkedin-post-writer.agent","description":"name: \"LinkedIn Post Writer\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/linkedin-post-writer.agent.md"},{"id":"awesome-copilot-agents--markdown-accessibility-assistant.agent","skillFolder":"markdown-accessibility-assistant.agent","description":"description: 'Improves the accessibility of markdown files using five GitHub best practices'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/markdown-accessibility-assistant.agent.md"},{"id":"awesome-copilot-agents--mcp-m365-agent-expert.agent","skillFolder":"mcp-m365-agent-expert.agent","description":"description: 'Expert assistant for building MCP-based declarative agents for Microsoft 365 Copilot with Model Context Protocol integration'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/mcp-m365-agent-expert.agent.md"},{"id":"awesome-copilot-agents--mentor.agent","skillFolder":"mentor.agent","description":"description: 'Help mentor the engineer by providing guidance and support.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/mentor.agent.md"},{"id":"awesome-copilot-agents--mentoring-juniors.agent","skillFolder":"mentoring-juniors.agent","description":"description: 'Socratic mentor for junior developers. Guides through questions, never gives direct answers. Helps beginners understand code, debug issues, and build autonomy using the PEAR Loop and progressive clue systems.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/mentoring-juniors.agent.md"},{"id":"awesome-copilot-agents--meta-agentic-project-scaffold.agent","skillFolder":"meta-agentic-project-scaffold.agent","description":"description: \"Meta agentic project creation assistant to help users create and manage project workflows effectively.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/meta-agentic-project-scaffold.agent.md"},{"id":"awesome-copilot-agents--microsoft_learn_contributor.agent","skillFolder":"microsoft_learn_contributor.agent","description":"description: 'Microsoft Learn Contributor chatmode for editing and writing Microsoft Learn documentation following Microsoft Writing Style Guide and authoring best practices.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/microsoft_learn_contributor.agent.md"},{"id":"awesome-copilot-agents--microsoft-study-mode.agent","skillFolder":"microsoft-study-mode.agent","description":"description: 'Activate your personal Microsoft/Azure tutor - learn through guided discovery, not just answers.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/microsoft-study-mode.agent.md"},{"id":"awesome-copilot-agents--modernization.agent","skillFolder":"modernization.agent","description":"description: 'Human-in-the-loop modernization assistant for analyzing, documenting, and planning complete project modernization with architectural recommendations.'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/modernization.agent.md"},{"id":"awesome-copilot-agents--modernize-java.agent","skillFolder":"modernize-java.agent","description":"name: 'modernize-java'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/modernize-java.agent.md"},{"id":"awesome-copilot-agents--monday-bug-fixer.agent","skillFolder":"monday-bug-fixer.agent","description":"name: Monday Bug Context Fixer","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/monday-bug-fixer.agent.md"},{"id":"awesome-copilot-agents--mongodb-performance-advisor.agent","skillFolder":"mongodb-performance-advisor.agent","description":"name: mongodb-performance-advisor","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/mongodb-performance-advisor.agent.md"},{"id":"awesome-copilot-agents--ms-sql-dba.agent","skillFolder":"ms-sql-dba.agent","description":"description: \"Work with Microsoft SQL Server databases using the MS SQL extension.\"","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ms-sql-dba.agent.md"},{"id":"awesome-copilot-agents--neo4j-docker-client-generator.agent","skillFolder":"neo4j-docker-client-generator.agent","description":"name: neo4j-docker-client-generator","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/neo4j-docker-client-generator.agent.md"},{"id":"awesome-copilot-agents--neon-migration-specialist.agent","skillFolder":"neon-migration-specialist.agent","description":"name: Neon Migration Specialist","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/neon-migration-specialist.agent.md"},{"id":"awesome-copilot-agents--neon-optimization-analyzer.agent","skillFolder":"neon-optimization-analyzer.agent","description":"name: Neon Performance Analyzer","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/neon-optimization-analyzer.agent.md"},{"id":"awesome-copilot-agents--new-relic-incident-response.agent","skillFolder":"new-relic-incident-response.agent","description":"name: New Relic Incident Response Agent","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/new-relic-incident-response.agent.md"},{"id":"awesome-copilot-agents--nuxt-expert.agent","skillFolder":"nuxt-expert.agent","description":"description: 'Expert Nuxt developer specializing in Nuxt 3, Nitro, server routes, data fetching strategies, and performance optimization with Vue 3 and TypeScript'","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/nuxt-expert.agent.md"},{"id":"awesome-copilot-agents--octopus-deploy-release-notes-mcp.agent","skillFolder":"octopus-deploy-release-notes-mcp.agent","description":"Markdown skill `octopus-deploy-release-notes-mcp.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/octopus-deploy-release-notes-mcp.agent.md"},{"id":"awesome-copilot-agents--one-shot-feature-issue-planner.agent","skillFolder":"one-shot-feature-issue-planner.agent","description":"Markdown skill `one-shot-feature-issue-planner.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/one-shot-feature-issue-planner.agent.md"},{"id":"awesome-copilot-agents--openapi-to-application.agent","skillFolder":"openapi-to-application.agent","description":"Markdown skill `openapi-to-application.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/openapi-to-application.agent.md"},{"id":"awesome-copilot-agents--oracle-to-postgres-migration-expert.agent","skillFolder":"oracle-to-postgres-migration-expert.agent","description":"Markdown skill `oracle-to-postgres-migration-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/oracle-to-postgres-migration-expert.agent.md"},{"id":"awesome-copilot-agents--pagerduty-incident-responder.agent","skillFolder":"pagerduty-incident-responder.agent","description":"Markdown skill `pagerduty-incident-responder.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/pagerduty-incident-responder.agent.md"},{"id":"awesome-copilot-agents--php-mcp-expert.agent","skillFolder":"php-mcp-expert.agent","description":"Markdown skill `php-mcp-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/php-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--pimcore-expert.agent","skillFolder":"pimcore-expert.agent","description":"Markdown skill `pimcore-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/pimcore-expert.agent.md"},{"id":"awesome-copilot-agents--plan.agent","skillFolder":"plan.agent","description":"Markdown skill `plan.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/plan.agent.md"},{"id":"awesome-copilot-agents--planner.agent","skillFolder":"planner.agent","description":"Markdown skill `planner.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/planner.agent.md"},{"id":"awesome-copilot-agents--platform-sre-kubernetes.agent","skillFolder":"platform-sre-kubernetes.agent","description":"Markdown skill `platform-sre-kubernetes.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/platform-sre-kubernetes.agent.md"},{"id":"awesome-copilot-agents--playwright-tester.agent","skillFolder":"playwright-tester.agent","description":"Markdown skill `playwright-tester.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/playwright-tester.agent.md"},{"id":"awesome-copilot-agents--postgresql-dba.agent","skillFolder":"postgresql-dba.agent","description":"Markdown skill `postgresql-dba.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/postgresql-dba.agent.md"},{"id":"awesome-copilot-agents--power-bi-data-modeling-expert.agent","skillFolder":"power-bi-data-modeling-expert.agent","description":"Markdown skill `power-bi-data-modeling-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/power-bi-data-modeling-expert.agent.md"},{"id":"awesome-copilot-agents--power-bi-dax-expert.agent","skillFolder":"power-bi-dax-expert.agent","description":"Markdown skill `power-bi-dax-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/power-bi-dax-expert.agent.md"},{"id":"awesome-copilot-agents--power-bi-performance-expert.agent","skillFolder":"power-bi-performance-expert.agent","description":"Markdown skill `power-bi-performance-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/power-bi-performance-expert.agent.md"},{"id":"awesome-copilot-agents--power-bi-visualization-expert.agent","skillFolder":"power-bi-visualization-expert.agent","description":"Markdown skill `power-bi-visualization-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/power-bi-visualization-expert.agent.md"},{"id":"awesome-copilot-agents--power-platform-expert.agent","skillFolder":"power-platform-expert.agent","description":"Markdown skill `power-platform-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/power-platform-expert.agent.md"},{"id":"awesome-copilot-agents--power-platform-mcp-integration-expert.agent","skillFolder":"power-platform-mcp-integration-expert.agent","description":"Markdown skill `power-platform-mcp-integration-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/power-platform-mcp-integration-expert.agent.md"},{"id":"awesome-copilot-agents--prd.agent","skillFolder":"prd.agent","description":"Markdown skill `prd.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/prd.agent.md"},{"id":"awesome-copilot-agents--principal-software-engineer.agent","skillFolder":"principal-software-engineer.agent","description":"Markdown skill `principal-software-engineer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/principal-software-engineer.agent.md"},{"id":"awesome-copilot-agents--project-architecture-planner.agent","skillFolder":"project-architecture-planner.agent","description":"Markdown skill `project-architecture-planner.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/project-architecture-planner.agent.md"},{"id":"awesome-copilot-agents--project-documenter.agent","skillFolder":"project-documenter.agent","description":"Markdown skill `project-documenter.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/project-documenter.agent.md"},{"id":"awesome-copilot-agents--prompt-builder.agent","skillFolder":"prompt-builder.agent","description":"Markdown skill `prompt-builder.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/prompt-builder.agent.md"},{"id":"awesome-copilot-agents--prompt-engineer.agent","skillFolder":"prompt-engineer.agent","description":"Markdown skill `prompt-engineer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/prompt-engineer.agent.md"},{"id":"awesome-copilot-agents--python-mcp-expert.agent","skillFolder":"python-mcp-expert.agent","description":"Markdown skill `python-mcp-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/python-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--python-notebook-sample-builder.agent","skillFolder":"python-notebook-sample-builder.agent","description":"Markdown skill `python-notebook-sample-builder.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/python-notebook-sample-builder.agent.md"},{"id":"awesome-copilot-agents--qa-subagent.agent","skillFolder":"qa-subagent.agent","description":"Markdown skill `qa-subagent.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/qa-subagent.agent.md"},{"id":"awesome-copilot-agents--quality-playbook.agent","skillFolder":"quality-playbook.agent","description":"Markdown skill `quality-playbook.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/quality-playbook.agent.md"},{"id":"awesome-copilot-agents--react18-auditor.agent","skillFolder":"react18-auditor.agent","description":"Markdown skill `react18-auditor.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react18-auditor.agent.md"},{"id":"awesome-copilot-agents--react18-batching-fixer.agent","skillFolder":"react18-batching-fixer.agent","description":"Markdown skill `react18-batching-fixer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react18-batching-fixer.agent.md"},{"id":"awesome-copilot-agents--react18-class-surgeon.agent","skillFolder":"react18-class-surgeon.agent","description":"Markdown skill `react18-class-surgeon.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react18-class-surgeon.agent.md"},{"id":"awesome-copilot-agents--react18-commander.agent","skillFolder":"react18-commander.agent","description":"Markdown skill `react18-commander.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react18-commander.agent.md"},{"id":"awesome-copilot-agents--react18-dep-surgeon.agent","skillFolder":"react18-dep-surgeon.agent","description":"Markdown skill `react18-dep-surgeon.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react18-dep-surgeon.agent.md"},{"id":"awesome-copilot-agents--react18-test-guardian.agent","skillFolder":"react18-test-guardian.agent","description":"Markdown skill `react18-test-guardian.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react18-test-guardian.agent.md"},{"id":"awesome-copilot-agents--react19-auditor.agent","skillFolder":"react19-auditor.agent","description":"Markdown skill `react19-auditor.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react19-auditor.agent.md"},{"id":"awesome-copilot-agents--react19-commander.agent","skillFolder":"react19-commander.agent","description":"Markdown skill `react19-commander.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react19-commander.agent.md"},{"id":"awesome-copilot-agents--react19-dep-surgeon.agent","skillFolder":"react19-dep-surgeon.agent","description":"Markdown skill `react19-dep-surgeon.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react19-dep-surgeon.agent.md"},{"id":"awesome-copilot-agents--react19-migrator.agent","skillFolder":"react19-migrator.agent","description":"Markdown skill `react19-migrator.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react19-migrator.agent.md"},{"id":"awesome-copilot-agents--react19-test-guardian.agent","skillFolder":"react19-test-guardian.agent","description":"Markdown skill `react19-test-guardian.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/react19-test-guardian.agent.md"},{"id":"awesome-copilot-agents--reepl-linkedin.agent","skillFolder":"reepl-linkedin.agent","description":"Markdown skill `reepl-linkedin.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/reepl-linkedin.agent.md"},{"id":"awesome-copilot-agents--refine-issue.agent","skillFolder":"refine-issue.agent","description":"Markdown skill `refine-issue.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/refine-issue.agent.md"},{"id":"awesome-copilot-agents--repo-architect.agent","skillFolder":"repo-architect.agent","description":"Markdown skill `repo-architect.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/repo-architect.agent.md"},{"id":"awesome-copilot-agents--research-technical-spike.agent","skillFolder":"research-technical-spike.agent","description":"Markdown skill `research-technical-spike.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/research-technical-spike.agent.md"},{"id":"awesome-copilot-agents--ruby-mcp-expert.agent","skillFolder":"ruby-mcp-expert.agent","description":"Markdown skill `ruby-mcp-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/ruby-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--rug-orchestrator.agent","skillFolder":"rug-orchestrator.agent","description":"Markdown skill `rug-orchestrator.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/rug-orchestrator.agent.md"},{"id":"awesome-copilot-agents--rust-mcp-expert.agent","skillFolder":"rust-mcp-expert.agent","description":"Markdown skill `rust-mcp-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/rust-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--salesforce-apex-triggers.agent","skillFolder":"salesforce-apex-triggers.agent","description":"Markdown skill `salesforce-apex-triggers.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/salesforce-apex-triggers.agent.md"},{"id":"awesome-copilot-agents--salesforce-aura-lwc.agent","skillFolder":"salesforce-aura-lwc.agent","description":"Markdown skill `salesforce-aura-lwc.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/salesforce-aura-lwc.agent.md"},{"id":"awesome-copilot-agents--salesforce-expert.agent","skillFolder":"salesforce-expert.agent","description":"Markdown skill `salesforce-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/salesforce-expert.agent.md"},{"id":"awesome-copilot-agents--salesforce-flow.agent","skillFolder":"salesforce-flow.agent","description":"Markdown skill `salesforce-flow.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/salesforce-flow.agent.md"},{"id":"awesome-copilot-agents--salesforce-visualforce.agent","skillFolder":"salesforce-visualforce.agent","description":"Markdown skill `salesforce-visualforce.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/salesforce-visualforce.agent.md"},{"id":"awesome-copilot-agents--sast-sca-security-analyzer.agent","skillFolder":"sast-sca-security-analyzer.agent","description":"Markdown skill `sast-sca-security-analyzer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/sast-sca-security-analyzer.agent.md"},{"id":"awesome-copilot-agents--scientific-paper-research.agent","skillFolder":"scientific-paper-research.agent","description":"Markdown skill `scientific-paper-research.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/scientific-paper-research.agent.md"},{"id":"awesome-copilot-agents--se-gitops-ci-specialist.agent","skillFolder":"se-gitops-ci-specialist.agent","description":"Markdown skill `se-gitops-ci-specialist.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-gitops-ci-specialist.agent.md"},{"id":"awesome-copilot-agents--se-product-manager-advisor.agent","skillFolder":"se-product-manager-advisor.agent","description":"Markdown skill `se-product-manager-advisor.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-product-manager-advisor.agent.md"},{"id":"awesome-copilot-agents--se-responsible-ai-code.agent","skillFolder":"se-responsible-ai-code.agent","description":"Markdown skill `se-responsible-ai-code.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-responsible-ai-code.agent.md"},{"id":"awesome-copilot-agents--se-security-reviewer.agent","skillFolder":"se-security-reviewer.agent","description":"Markdown skill `se-security-reviewer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-security-reviewer.agent.md"},{"id":"awesome-copilot-agents--se-system-architecture-reviewer.agent","skillFolder":"se-system-architecture-reviewer.agent","description":"Markdown skill `se-system-architecture-reviewer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-system-architecture-reviewer.agent.md"},{"id":"awesome-copilot-agents--se-technical-writer.agent","skillFolder":"se-technical-writer.agent","description":"Markdown skill `se-technical-writer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-technical-writer.agent.md"},{"id":"awesome-copilot-agents--se-ux-ui-designer.agent","skillFolder":"se-ux-ui-designer.agent","description":"Markdown skill `se-ux-ui-designer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/se-ux-ui-designer.agent.md"},{"id":"awesome-copilot-agents--search-ai-optimization-expert.agent","skillFolder":"search-ai-optimization-expert.agent","description":"Markdown skill `search-ai-optimization-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/search-ai-optimization-expert.agent.md"},{"id":"awesome-copilot-agents--shopify-expert.agent","skillFolder":"shopify-expert.agent","description":"Markdown skill `shopify-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/shopify-expert.agent.md"},{"id":"awesome-copilot-agents--simple-app-idea-generator.agent","skillFolder":"simple-app-idea-generator.agent","description":"Markdown skill `simple-app-idea-generator.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/simple-app-idea-generator.agent.md"},{"id":"awesome-copilot-agents--software-engineer-agent-v1.agent","skillFolder":"software-engineer-agent-v1.agent","description":"Markdown skill `software-engineer-agent-v1.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/software-engineer-agent-v1.agent.md"},{"id":"awesome-copilot-agents--spark-performance.agent","skillFolder":"spark-performance.agent","description":"Markdown skill `spark-performance.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/spark-performance.agent.md"},{"id":"awesome-copilot-agents--specification.agent","skillFolder":"specification.agent","description":"Markdown skill `specification.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/specification.agent.md"},{"id":"awesome-copilot-agents--stackhawk-security-onboarding.agent","skillFolder":"stackhawk-security-onboarding.agent","description":"Markdown skill `stackhawk-security-onboarding.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/stackhawk-security-onboarding.agent.md"},{"id":"awesome-copilot-agents--swe-subagent.agent","skillFolder":"swe-subagent.agent","description":"Markdown skill `swe-subagent.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/swe-subagent.agent.md"},{"id":"awesome-copilot-agents--swift-mcp-expert.agent","skillFolder":"swift-mcp-expert.agent","description":"Markdown skill `swift-mcp-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/swift-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--task-planner.agent","skillFolder":"task-planner.agent","description":"Markdown skill `task-planner.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/task-planner.agent.md"},{"id":"awesome-copilot-agents--task-researcher.agent","skillFolder":"task-researcher.agent","description":"Markdown skill `task-researcher.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/task-researcher.agent.md"},{"id":"awesome-copilot-agents--taxcore-technical-writer.agent","skillFolder":"taxcore-technical-writer.agent","description":"Markdown skill `taxcore-technical-writer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/taxcore-technical-writer.agent.md"},{"id":"awesome-copilot-agents--tdd-green.agent","skillFolder":"tdd-green.agent","description":"Markdown skill `tdd-green.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/tdd-green.agent.md"},{"id":"awesome-copilot-agents--tdd-red.agent","skillFolder":"tdd-red.agent","description":"Markdown skill `tdd-red.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/tdd-red.agent.md"},{"id":"awesome-copilot-agents--tdd-refactor.agent","skillFolder":"tdd-refactor.agent","description":"Markdown skill `tdd-refactor.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/tdd-refactor.agent.md"},{"id":"awesome-copilot-agents--tech-debt-remediation-plan.agent","skillFolder":"tech-debt-remediation-plan.agent","description":"Markdown skill `tech-debt-remediation-plan.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/tech-debt-remediation-plan.agent.md"},{"id":"awesome-copilot-agents--technical-content-evaluator.agent","skillFolder":"technical-content-evaluator.agent","description":"Markdown skill `technical-content-evaluator.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/technical-content-evaluator.agent.md"},{"id":"awesome-copilot-agents--terminal-helper.agent","skillFolder":"terminal-helper.agent","description":"Markdown skill `terminal-helper.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/terminal-helper.agent.md"},{"id":"awesome-copilot-agents--terraform-azure-implement.agent","skillFolder":"terraform-azure-implement.agent","description":"Markdown skill `terraform-azure-implement.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/terraform-azure-implement.agent.md"},{"id":"awesome-copilot-agents--terraform-azure-planning.agent","skillFolder":"terraform-azure-planning.agent","description":"Markdown skill `terraform-azure-planning.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/terraform-azure-planning.agent.md"},{"id":"awesome-copilot-agents--terraform-iac-reviewer.agent","skillFolder":"terraform-iac-reviewer.agent","description":"Markdown skill `terraform-iac-reviewer.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/terraform-iac-reviewer.agent.md"},{"id":"awesome-copilot-agents--terraform.agent","skillFolder":"terraform.agent","description":"Markdown skill `terraform.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/terraform.agent.md"},{"id":"awesome-copilot-agents--terratest-module-testing.agent","skillFolder":"terratest-module-testing.agent","description":"Markdown skill `terratest-module-testing.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/terratest-module-testing.agent.md"},{"id":"awesome-copilot-agents--Thinking-Beast-Mode.agent","skillFolder":"Thinking-Beast-Mode.agent","description":"Markdown skill `Thinking-Beast-Mode.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/Thinking-Beast-Mode.agent.md"},{"id":"awesome-copilot-agents--typescript-mcp-expert.agent","skillFolder":"typescript-mcp-expert.agent","description":"Markdown skill `typescript-mcp-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/typescript-mcp-expert.agent.md"},{"id":"awesome-copilot-agents--Ultimate-Transparent-Thinking-Beast-Mode.agent","skillFolder":"Ultimate-Transparent-Thinking-Beast-Mode.agent","description":"Markdown skill `Ultimate-Transparent-Thinking-Beast-Mode.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md"},{"id":"awesome-copilot-agents--vuejs-expert.agent","skillFolder":"vuejs-expert.agent","description":"Markdown skill `vuejs-expert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/vuejs-expert.agent.md"},{"id":"awesome-copilot-agents--wg-code-alchemist.agent","skillFolder":"wg-code-alchemist.agent","description":"Markdown skill `wg-code-alchemist.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/wg-code-alchemist.agent.md"},{"id":"awesome-copilot-agents--wg-code-sentinel.agent","skillFolder":"wg-code-sentinel.agent","description":"Markdown skill `wg-code-sentinel.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/wg-code-sentinel.agent.md"},{"id":"awesome-copilot-agents--WinFormsExpert.agent","skillFolder":"WinFormsExpert.agent","description":"Markdown skill `WinFormsExpert.agent.md` from github/awesome-copilot (awesome-copilot-agents)","catalogId":"awesome-copilot-agents","publisherId":"github","publisherLabel":"GitHub","publisherFamily":"Microsoft","publisherChannel":"Copilot agents","repo":"github/awesome-copilot","supportedClients":["cursor","copilot","claude"],"moduleType":"subagent","githubBrowse":"https://github.com/github/awesome-copilot/tree/main/agents/WinFormsExpert.agent.md"},{"id":"anthropic-skills--algorithmic-art","skillFolder":"algorithmic-art","description":"name: algorithmic-art","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/algorithmic-art"},{"id":"anthropic-skills--brand-guidelines","skillFolder":"brand-guidelines","description":"name: brand-guidelines","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/brand-guidelines"},{"id":"anthropic-skills--canvas-design","skillFolder":"canvas-design","description":"name: canvas-design","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/canvas-design"},{"id":"anthropic-skills--claude-api","skillFolder":"claude-api","description":"name: claude-api","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/claude-api"},{"id":"anthropic-skills--doc-coauthoring","skillFolder":"doc-coauthoring","description":"name: doc-coauthoring","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/doc-coauthoring"},{"id":"anthropic-skills--docx","skillFolder":"docx","description":"name: docx","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/docx"},{"id":"anthropic-skills--frontend-design","skillFolder":"frontend-design","description":"name: frontend-design","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/frontend-design"},{"id":"anthropic-skills--internal-comms","skillFolder":"internal-comms","description":"name: internal-comms","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/internal-comms"},{"id":"anthropic-skills--mcp-builder","skillFolder":"mcp-builder","description":"name: mcp-builder","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/mcp-builder"},{"id":"anthropic-skills--pdf","skillFolder":"pdf","description":"name: pdf","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/pdf"},{"id":"anthropic-skills--pptx","skillFolder":"pptx","description":"name: pptx","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/pptx"},{"id":"anthropic-skills--skill-creator","skillFolder":"skill-creator","description":"name: skill-creator","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/skill-creator"},{"id":"anthropic-skills--slack-gif-creator","skillFolder":"slack-gif-creator","description":"name: slack-gif-creator","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/slack-gif-creator"},{"id":"anthropic-skills--theme-factory","skillFolder":"theme-factory","description":"name: theme-factory","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/theme-factory"},{"id":"anthropic-skills--web-artifacts-builder","skillFolder":"web-artifacts-builder","description":"name: web-artifacts-builder","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/web-artifacts-builder"},{"id":"anthropic-skills--webapp-testing","skillFolder":"webapp-testing","description":"name: webapp-testing","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/webapp-testing"},{"id":"anthropic-skills--xlsx","skillFolder":"xlsx","description":"name: xlsx","catalogId":"anthropic-skills","publisherId":"anthropics","publisherLabel":"Anthropic","publisherFamily":"Anthropic","publisherChannel":"Anthropic reference","repo":"anthropics/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/anthropics/skills/tree/main/skills/xlsx"},{"id":"composio-awesome-claude-skills--artifacts-builder","skillFolder":"artifacts-builder","description":"name: artifacts-builder","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/artifacts-builder"},{"id":"composio-awesome-claude-skills--brand-guidelines","skillFolder":"brand-guidelines","description":"name: brand-guidelines","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/brand-guidelines"},{"id":"composio-awesome-claude-skills--canvas-design","skillFolder":"canvas-design","description":"name: canvas-design","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/canvas-design"},{"id":"composio-awesome-claude-skills--changelog-generator","skillFolder":"changelog-generator","description":"name: changelog-generator","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/changelog-generator"},{"id":"composio-awesome-claude-skills--competitive-ads-extractor","skillFolder":"competitive-ads-extractor","description":"name: competitive-ads-extractor","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/competitive-ads-extractor"},{"id":"composio-awesome-claude-skills--composio-skills","skillFolder":"composio-skills","description":"Skill folder `composio-skills` from ComposioHQ/awesome-claude-skills (composio-awesome-claude-skills)","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/composio-skills"},{"id":"composio-awesome-claude-skills--connect","skillFolder":"connect","description":"name: connect","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/connect"},{"id":"composio-awesome-claude-skills--connect-apps","skillFolder":"connect-apps","description":"name: connect-apps","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/connect-apps"},{"id":"composio-awesome-claude-skills--connect-apps-plugin","skillFolder":"connect-apps-plugin","description":"Skill folder `connect-apps-plugin` from ComposioHQ/awesome-claude-skills (composio-awesome-claude-skills)","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/connect-apps-plugin"},{"id":"composio-awesome-claude-skills--content-research-writer","skillFolder":"content-research-writer","description":"name: content-research-writer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/content-research-writer"},{"id":"composio-awesome-claude-skills--CONTRIBUTING","skillFolder":"CONTRIBUTING","description":"Contributing to Awesome Claude Skills","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/CONTRIBUTING.md"},{"id":"composio-awesome-claude-skills--developer-growth-analysis","skillFolder":"developer-growth-analysis","description":"name: developer-growth-analysis","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/developer-growth-analysis"},{"id":"composio-awesome-claude-skills--document-skills","skillFolder":"document-skills","description":"Skill folder `document-skills` from ComposioHQ/awesome-claude-skills (composio-awesome-claude-skills)","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/document-skills"},{"id":"composio-awesome-claude-skills--domain-name-brainstormer","skillFolder":"domain-name-brainstormer","description":"name: domain-name-brainstormer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/domain-name-brainstormer"},{"id":"composio-awesome-claude-skills--file-organizer","skillFolder":"file-organizer","description":"name: file-organizer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/file-organizer"},{"id":"composio-awesome-claude-skills--image-enhancer","skillFolder":"image-enhancer","description":"name: image-enhancer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/image-enhancer"},{"id":"composio-awesome-claude-skills--internal-comms","skillFolder":"internal-comms","description":"name: internal-comms","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/internal-comms"},{"id":"composio-awesome-claude-skills--invoice-organizer","skillFolder":"invoice-organizer","description":"name: invoice-organizer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/invoice-organizer"},{"id":"composio-awesome-claude-skills--langsmith-fetch","skillFolder":"langsmith-fetch","description":"name: langsmith-fetch","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/langsmith-fetch"},{"id":"composio-awesome-claude-skills--lead-research-assistant","skillFolder":"lead-research-assistant","description":"name: lead-research-assistant","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/lead-research-assistant"},{"id":"composio-awesome-claude-skills--mcp-builder","skillFolder":"mcp-builder","description":"name: mcp-builder","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/mcp-builder"},{"id":"composio-awesome-claude-skills--meeting-insights-analyzer","skillFolder":"meeting-insights-analyzer","description":"name: meeting-insights-analyzer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/meeting-insights-analyzer"},{"id":"composio-awesome-claude-skills--raffle-winner-picker","skillFolder":"raffle-winner-picker","description":"name: raffle-winner-picker","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/raffle-winner-picker"},{"id":"composio-awesome-claude-skills--skill-creator","skillFolder":"skill-creator","description":"name: skill-creator","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/skill-creator"},{"id":"composio-awesome-claude-skills--skill-share","skillFolder":"skill-share","description":"name: skill-share","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/skill-share"},{"id":"composio-awesome-claude-skills--slack-gif-creator","skillFolder":"slack-gif-creator","description":"name: slack-gif-creator","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/slack-gif-creator"},{"id":"composio-awesome-claude-skills--tailored-resume-generator","skillFolder":"tailored-resume-generator","description":"name: tailored-resume-generator","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/tailored-resume-generator"},{"id":"composio-awesome-claude-skills--template-skill","skillFolder":"template-skill","description":"name: template-skill","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/template-skill"},{"id":"composio-awesome-claude-skills--theme-factory","skillFolder":"theme-factory","description":"name: theme-factory","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/theme-factory"},{"id":"composio-awesome-claude-skills--twitter-algorithm-optimizer","skillFolder":"twitter-algorithm-optimizer","description":"name: twitter-algorithm-optimizer","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/twitter-algorithm-optimizer"},{"id":"composio-awesome-claude-skills--video-downloader","skillFolder":"video-downloader","description":"name: youtube-downloader","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/video-downloader"},{"id":"composio-awesome-claude-skills--webapp-testing","skillFolder":"webapp-testing","description":"name: webapp-testing","catalogId":"composio-awesome-claude-skills","publisherId":"ComposioHQ","publisherLabel":"Composio","publisherFamily":"Composio","publisherChannel":"Composio curated","repo":"ComposioHQ/awesome-claude-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/ComposioHQ/awesome-claude-skills/tree/master/webapp-testing"},{"id":"microsoft-skills--applicationinsights-web-ts","skillFolder":"applicationinsights-web-ts","description":"name: applicationinsights-web-ts","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/applicationinsights-web-ts"},{"id":"microsoft-skills--cloud-solution-architect","skillFolder":"cloud-solution-architect","description":"name: cloud-solution-architect","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/cloud-solution-architect"},{"id":"microsoft-skills--continual-learning","skillFolder":"continual-learning","description":"name: continual-learning","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/continual-learning"},{"id":"microsoft-skills--copilot-sdk","skillFolder":"copilot-sdk","description":"name: copilot-sdk","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/copilot-sdk"},{"id":"microsoft-skills--entra-agent-id","skillFolder":"entra-agent-id","description":"name: entra-agent-id","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/entra-agent-id"},{"id":"microsoft-skills--frontend-design-review","skillFolder":"frontend-design-review","description":"name: frontend-design-review","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/frontend-design-review"},{"id":"microsoft-skills--github-issue-creator","skillFolder":"github-issue-creator","description":"name: github-issue-creator","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/github-issue-creator"},{"id":"microsoft-skills--kql","skillFolder":"kql","description":"name: kql","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/kql"},{"id":"microsoft-skills--mcp-builder","skillFolder":"mcp-builder","description":"name: mcp-builder","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/mcp-builder"},{"id":"microsoft-skills--microsoft-docs","skillFolder":"microsoft-docs","description":"name: microsoft-docs","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/microsoft-docs"},{"id":"microsoft-skills--podcast-generation","skillFolder":"podcast-generation","description":"name: podcast-generation","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/podcast-generation"},{"id":"microsoft-skills--skill-creator","skillFolder":"skill-creator","description":"name: skill-creator","catalogId":"microsoft-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Microsoft official","repo":"microsoft/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/skills/tree/main/.github/skills/skill-creator"},{"id":"microsoft-azure-skills--airunway-aks-setup","skillFolder":"airunway-aks-setup","description":"name: airunway-aks-setup","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/airunway-aks-setup"},{"id":"microsoft-azure-skills--appinsights-instrumentation","skillFolder":"appinsights-instrumentation","description":"name: appinsights-instrumentation","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/appinsights-instrumentation"},{"id":"microsoft-azure-skills--azure-ai","skillFolder":"azure-ai","description":"name: azure-ai","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-ai"},{"id":"microsoft-azure-skills--azure-aigateway","skillFolder":"azure-aigateway","description":"name: azure-aigateway","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-aigateway"},{"id":"microsoft-azure-skills--azure-cloud-migrate","skillFolder":"azure-cloud-migrate","description":"name: azure-cloud-migrate","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-cloud-migrate"},{"id":"microsoft-azure-skills--azure-compliance","skillFolder":"azure-compliance","description":"name: azure-compliance","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-compliance"},{"id":"microsoft-azure-skills--azure-compute","skillFolder":"azure-compute","description":"name: azure-compute","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-compute"},{"id":"microsoft-azure-skills--azure-cost","skillFolder":"azure-cost","description":"name: azure-cost","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-cost"},{"id":"microsoft-azure-skills--azure-deploy","skillFolder":"azure-deploy","description":"name: azure-deploy","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-deploy"},{"id":"microsoft-azure-skills--azure-diagnostics","skillFolder":"azure-diagnostics","description":"name: azure-diagnostics","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-diagnostics"},{"id":"microsoft-azure-skills--azure-enterprise-infra-planner","skillFolder":"azure-enterprise-infra-planner","description":"name: azure-enterprise-infra-planner","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-enterprise-infra-planner"},{"id":"microsoft-azure-skills--azure-hosted-copilot-sdk","skillFolder":"azure-hosted-copilot-sdk","description":"name: azure-hosted-copilot-sdk","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-hosted-copilot-sdk"},{"id":"microsoft-azure-skills--azure-kubernetes","skillFolder":"azure-kubernetes","description":"name: azure-kubernetes","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-kubernetes"},{"id":"microsoft-azure-skills--azure-kusto","skillFolder":"azure-kusto","description":"name: azure-kusto","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-kusto"},{"id":"microsoft-azure-skills--azure-messaging","skillFolder":"azure-messaging","description":"name: azure-messaging","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-messaging"},{"id":"microsoft-azure-skills--azure-prepare","skillFolder":"azure-prepare","description":"name: azure-prepare","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-prepare"},{"id":"microsoft-azure-skills--azure-quotas","skillFolder":"azure-quotas","description":"name: azure-quotas","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-quotas"},{"id":"microsoft-azure-skills--azure-rbac","skillFolder":"azure-rbac","description":"name: azure-rbac","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-rbac"},{"id":"microsoft-azure-skills--azure-reliability","skillFolder":"azure-reliability","description":"name: azure-reliability","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-reliability"},{"id":"microsoft-azure-skills--azure-resource-lookup","skillFolder":"azure-resource-lookup","description":"name: azure-resource-lookup","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-resource-lookup"},{"id":"microsoft-azure-skills--azure-resource-visualizer","skillFolder":"azure-resource-visualizer","description":"name: azure-resource-visualizer","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-resource-visualizer"},{"id":"microsoft-azure-skills--azure-storage","skillFolder":"azure-storage","description":"name: azure-storage","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-storage"},{"id":"microsoft-azure-skills--azure-upgrade","skillFolder":"azure-upgrade","description":"name: azure-upgrade","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-upgrade"},{"id":"microsoft-azure-skills--azure-validate","skillFolder":"azure-validate","description":"name: azure-validate","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/azure-validate"},{"id":"microsoft-azure-skills--entra-agent-id","skillFolder":"entra-agent-id","description":"name: entra-agent-id","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/entra-agent-id"},{"id":"microsoft-azure-skills--entra-app-registration","skillFolder":"entra-app-registration","description":"name: entra-app-registration","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/entra-app-registration"},{"id":"microsoft-azure-skills--microsoft-foundry","skillFolder":"microsoft-foundry","description":"name: microsoft-foundry","catalogId":"microsoft-azure-skills","publisherId":"microsoft","publisherLabel":"Microsoft","publisherFamily":"Microsoft","publisherChannel":"Azure","repo":"microsoft/azure-skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/microsoft/azure-skills/tree/main/skills/microsoft-foundry"},{"id":"openai-skills--aspnet-core","skillFolder":"aspnet-core","description":"name: aspnet-core","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/aspnet-core"},{"id":"openai-skills--chatgpt-apps","skillFolder":"chatgpt-apps","description":"name: chatgpt-apps","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/chatgpt-apps"},{"id":"openai-skills--cli-creator","skillFolder":"cli-creator","description":"name: cli-creator","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/cli-creator"},{"id":"openai-skills--cloudflare-deploy","skillFolder":"cloudflare-deploy","description":"name: cloudflare-deploy","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/cloudflare-deploy"},{"id":"openai-skills--figma","skillFolder":"figma","description":"name: figma","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma"},{"id":"openai-skills--figma-code-connect-components","skillFolder":"figma-code-connect-components","description":"name: figma-code-connect-components","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-code-connect-components"},{"id":"openai-skills--figma-create-design-system-rules","skillFolder":"figma-create-design-system-rules","description":"name: figma-create-design-system-rules","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-create-design-system-rules"},{"id":"openai-skills--figma-create-new-file","skillFolder":"figma-create-new-file","description":"name: figma-create-new-file","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-create-new-file"},{"id":"openai-skills--figma-generate-design","skillFolder":"figma-generate-design","description":"name: figma-generate-design","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-generate-design"},{"id":"openai-skills--figma-generate-library","skillFolder":"figma-generate-library","description":"name: figma-generate-library","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-generate-library"},{"id":"openai-skills--figma-implement-design","skillFolder":"figma-implement-design","description":"name: figma-implement-design","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-implement-design"},{"id":"openai-skills--figma-use","skillFolder":"figma-use","description":"name: figma-use","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/figma-use"},{"id":"openai-skills--gh-address-comments","skillFolder":"gh-address-comments","description":"name: gh-address-comments","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/gh-address-comments"},{"id":"openai-skills--gh-fix-ci","skillFolder":"gh-fix-ci","description":"name: \"gh-fix-ci\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/gh-fix-ci"},{"id":"openai-skills--hatch-pet","skillFolder":"hatch-pet","description":"name: hatch-pet","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/hatch-pet"},{"id":"openai-skills--jupyter-notebook","skillFolder":"jupyter-notebook","description":"name: \"jupyter-notebook\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/jupyter-notebook"},{"id":"openai-skills--linear","skillFolder":"linear","description":"name: linear","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/linear"},{"id":"openai-skills--migrate-to-codex","skillFolder":"migrate-to-codex","description":"name: migrate-to-codex","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/migrate-to-codex"},{"id":"openai-skills--netlify-deploy","skillFolder":"netlify-deploy","description":"name: netlify-deploy","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/netlify-deploy"},{"id":"openai-skills--notion-knowledge-capture","skillFolder":"notion-knowledge-capture","description":"name: notion-knowledge-capture","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/notion-knowledge-capture"},{"id":"openai-skills--notion-meeting-intelligence","skillFolder":"notion-meeting-intelligence","description":"name: notion-meeting-intelligence","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/notion-meeting-intelligence"},{"id":"openai-skills--notion-research-documentation","skillFolder":"notion-research-documentation","description":"name: notion-research-documentation","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/notion-research-documentation"},{"id":"openai-skills--notion-spec-to-implementation","skillFolder":"notion-spec-to-implementation","description":"name: notion-spec-to-implementation","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/notion-spec-to-implementation"},{"id":"openai-skills--openai-docs","skillFolder":"openai-docs","description":"name: \"openai-docs\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/openai-docs"},{"id":"openai-skills--pdf","skillFolder":"pdf","description":"name: \"pdf\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/pdf"},{"id":"openai-skills--playwright","skillFolder":"playwright","description":"name: \"playwright\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/playwright"},{"id":"openai-skills--playwright-interactive","skillFolder":"playwright-interactive","description":"name: \"playwright-interactive\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/playwright-interactive"},{"id":"openai-skills--render-deploy","skillFolder":"render-deploy","description":"name: render-deploy","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/render-deploy"},{"id":"openai-skills--screenshot","skillFolder":"screenshot","description":"name: \"screenshot\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/screenshot"},{"id":"openai-skills--security-best-practices","skillFolder":"security-best-practices","description":"name: \"security-best-practices\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/security-best-practices"},{"id":"openai-skills--security-ownership-map","skillFolder":"security-ownership-map","description":"name: \"security-ownership-map\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/security-ownership-map"},{"id":"openai-skills--security-threat-model","skillFolder":"security-threat-model","description":"name: \"security-threat-model\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/security-threat-model"},{"id":"openai-skills--sentry","skillFolder":"sentry","description":"name: \"sentry\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/sentry"},{"id":"openai-skills--speech","skillFolder":"speech","description":"name: \"speech\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/speech"},{"id":"openai-skills--transcribe","skillFolder":"transcribe","description":"name: \"transcribe\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/transcribe"},{"id":"openai-skills--vercel-deploy","skillFolder":"vercel-deploy","description":"name: vercel-deploy","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/vercel-deploy"},{"id":"openai-skills--winui-app","skillFolder":"winui-app","description":"name: winui-app","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/winui-app"},{"id":"openai-skills--yeet","skillFolder":"yeet","description":"name: \"yeet\"","catalogId":"openai-skills","publisherId":"openai","publisherLabel":"OpenAI","publisherFamily":"OpenAI","publisherChannel":"OpenAI curated","repo":"openai/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/openai/skills/tree/main/skills/.curated/yeet"},{"id":"google-skills-cloud--alloydb-basics","skillFolder":"alloydb-basics","description":"name: alloydb-basics","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/alloydb-basics"},{"id":"google-skills-cloud--bigquery-basics","skillFolder":"bigquery-basics","description":"name: bigquery-basics","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/bigquery-basics"},{"id":"google-skills-cloud--cloud-run-basics","skillFolder":"cloud-run-basics","description":"name: cloud-run-basics","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/cloud-run-basics"},{"id":"google-skills-cloud--cloud-sql-basics","skillFolder":"cloud-sql-basics","description":"name: cloud-sql-basics","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/cloud-sql-basics"},{"id":"google-skills-cloud--firebase-basics","skillFolder":"firebase-basics","description":"name: firebase-basics","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/firebase-basics"},{"id":"google-skills-cloud--gemini-api","skillFolder":"gemini-api","description":"name: gemini-api","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/gemini-api"},{"id":"google-skills-cloud--gke-basics","skillFolder":"gke-basics","description":"name: gke-basics","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/gke-basics"},{"id":"google-skills-cloud--google-cloud-networking-observability","skillFolder":"google-cloud-networking-observability","description":"name: google-cloud-networking-observability","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/google-cloud-networking-observability"},{"id":"google-skills-cloud--google-cloud-recipe-auth","skillFolder":"google-cloud-recipe-auth","description":"name: google-cloud-recipe-auth","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/google-cloud-recipe-auth"},{"id":"google-skills-cloud--google-cloud-recipe-onboarding","skillFolder":"google-cloud-recipe-onboarding","description":"name: google-cloud-recipe-onboarding","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/google-cloud-recipe-onboarding"},{"id":"google-skills-cloud--google-cloud-waf-cost-optimization","skillFolder":"google-cloud-waf-cost-optimization","description":"name: google-cloud-waf-cost-optimization","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/google-cloud-waf-cost-optimization"},{"id":"google-skills-cloud--google-cloud-waf-reliability","skillFolder":"google-cloud-waf-reliability","description":"name: google-cloud-waf-reliability","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/google-cloud-waf-reliability"},{"id":"google-skills-cloud--google-cloud-waf-security","skillFolder":"google-cloud-waf-security","description":"name: google-cloud-waf-security","catalogId":"google-skills-cloud","publisherId":"google","publisherLabel":"Google","publisherFamily":"Google","publisherChannel":"Google Cloud","repo":"google/skills","supportedClients":["cursor","copilot","claude"],"moduleType":"skill","githubBrowse":"https://github.com/google/skills/tree/main/skills/cloud/google-cloud-waf-security"}]} \ No newline at end of file diff --git a/extension/media/icon.png b/extension/media/icon.png new file mode 100644 index 0000000..77ffd58 Binary files /dev/null and b/extension/media/icon.png differ diff --git a/extension/media/icon.svg b/extension/media/icon.svg new file mode 100644 index 0000000..1fd5be1 --- /dev/null +++ b/extension/media/icon.svg @@ -0,0 +1,12 @@ + diff --git a/extension/package-lock.json b/extension/package-lock.json new file mode 100644 index 0000000..6a1255a --- /dev/null +++ b/extension/package-lock.json @@ -0,0 +1,7442 @@ +{ + "name": "ai-stack-kit", + "version": "1.1.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ai-stack-kit", + "version": "1.1.2", + "license": "Apache-2.0", + "devDependencies": { + "@types/mocha": "^10.0.0", + "@types/node": "^20.0.0", + "@types/vscode": "^1.85.0", + "@vscode/test-electron": "^2.4.0", + "@vscode/vsce": "^3.2.0", + "esbuild": "^0.24.0", + "mocha": "^10.8.0", + "npm-run-all": "^4.1.5", + "typescript": "^5.3.0" + }, + "engines": { + "vscode": "^1.85.0" + } + }, + "node_modules/@azu/format-text": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", + "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@azu/style-format": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", + "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "@azu/format-text": "^1.0.1" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.23.0.tgz", + "integrity": "sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.1.tgz", + "integrity": "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^5.5.0", + "@azure/msal-node": "^5.1.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.10.1.tgz", + "integrity": "sha512-hTbvOi9Ko2Jvn+G/fSmjzHf9WbNcf/o3epMtbeGx/pMwMrVAbi6OgCJVeCfsAb8IybSRpaCSc4EDRlYAhgngUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "16.6.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.6.1.tgz", + "integrity": "sha512-VxKdEtUwDuLD0F1hOQP7kye0YadZxFJfv37Em440geEf/w9uggKnHpRrqwZJOdxmPUOdhZ9kyRtKuAJW8wUcRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.1.tgz", + "integrity": "sha512-tmQiQ2HvtzaeLqYGy3BemiPOSGPY4wCy1IW5zDWITKSs/s35WEd7Zij/hCxvUdAOzj6U3qnyaGbYXY91ortFEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "16.6.1", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@secretlint/config-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/config-loader": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "ajv": "^8.17.1", + "debug": "^4.4.1", + "rc-config-loader": "^4.1.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/formatter": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", + "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "@textlint/linter-formatter": "^15.2.0", + "@textlint/module-interop": "^15.2.0", + "@textlint/types": "^15.2.0", + "chalk": "^5.4.1", + "debug": "^4.4.1", + "pluralize": "^8.0.0", + "strip-ansi": "^7.1.0", + "table": "^6.9.0", + "terminal-link": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/formatter/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@secretlint/node": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "p-map": "^7.0.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/resolver": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/secretlint-formatter-sarif": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-sarif-builder": "^3.2.0" + } + }, + "node_modules/@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/source-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2", + "istextorbinary": "^9.5.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/types": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@textlint/ast-node-types": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.7.0.tgz", + "integrity": "sha512-wZILFXsRf2gGK9k0Fr69GUdfuZV9CrtByga8Qkw0CLyKBBfZXdNQlJF2XdZ2Ju9ggrTbAWehGo0RjCsAHSBWtA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/linter-formatter": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.7.0.tgz", + "integrity": "sha512-wrpDID1bfBt5XIUXtgw8NmGIuRFansWAtX1FLHv/zLRt3sgxCFnyon88SbhPOPITEgIlfFcsESElCSLzWySubQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azu/format-text": "^1.0.2", + "@azu/style-format": "^1.0.1", + "@textlint/module-interop": "15.7.0", + "@textlint/resolver": "15.7.0", + "@textlint/types": "15.7.0", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "lodash": "^4.18.1", + "pluralize": "^2.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "table": "^6.9.0", + "text-table": "^0.2.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/linter-formatter/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/linter-formatter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/linter-formatter/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/module-interop": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.7.0.tgz", + "integrity": "sha512-+VdoeGFH66OasijhoO7D3OSrqTfJNAIH2OoQHEc5StlO0dqDO2JfZStCbuBPP/ZbpJvuYdoERBP+nKqTAT24vA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/resolver": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.7.0.tgz", + "integrity": "sha512-f94t/8ZR97uhOu2KvBujMGGtfdoJQZLjDNN7+7PNLaTjCtGn+XrqKjSP9lzXgBhUbKSygRN8AlrCMx9S70FHKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@textlint/types": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.7.0.tgz", + "integrity": "sha512-soItNoFZ8Ua4WCgWwOaTEEyTkX7bjArwVxhN1F2UySeqPsP8QeRiKNUjAIfWQFHddTY6UYR1sHaEh+O0sQPv0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "15.7.0" + } + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", + "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/vscode": { + "version": "1.120.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.120.0.tgz", + "integrity": "sha512-feaT4Rst+FkTch5zz/ZbNCxoIvo55YU80Be2kiL7OJcod4+CUYf2lUBPdIJzozNnSEMq1VRTGrWEcCGFB3fBmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz", + "integrity": "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", + "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^8.1.0", + "semver": "^7.6.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/vsce": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.9.1.tgz", + "integrity": "sha512-MPn5p+DoudI+3GfJSpAZZraE1lgLv0LcwbH3+xy7RgEhty3UIkmUMUA+5jPTDaxXae00AnX5u77FxGM8FhfKKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/identity": "^4.1.0", + "@secretlint/node": "^10.1.2", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "form-data": "^4.0.0", + "glob": "^11.0.0", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^14.1.0", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "secretlint": "^10.1.2", + "semver": "^7.5.2", + "tmp": "^0.2.3", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^3.2.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce-sign": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vscode/vsce/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vscode/vsce/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vscode/vsce/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/vsce/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "dev": true, + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc-config-loader": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz", + "integrity": "sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "json5": "^2.2.3", + "require-from-string": "^2.0.2" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/secretlint": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "debug": "^4.4.1", + "globby": "^14.1.0", + "read-pkg": "^9.0.1" + }, + "bin": { + "secretlint": "bin/secretlint.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/secretlint/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/secretlint/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/secretlint/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/secretlint/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/secretlint/node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/secretlint/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boundary": "^2.0.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/terminal-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", + "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^3.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "dev": true, + "license": "Artistic-2.0", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.0.tgz", + "integrity": "sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/extension/package.json b/extension/package.json new file mode 100644 index 0000000..71f6866 --- /dev/null +++ b/extension/package.json @@ -0,0 +1,243 @@ +{ + "name": "ai-stack-kit", + "displayName": "AI Stack Kit", + "description": "Manage AI skills, subagents, and hooks from spec.yaml — search catalogs, sync to Cursor, Copilot, and Claude.", + "version": "1.1.4", + "publisher": "deb-adarsh", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/deb-adarsh/ai-stack-kit.git" + }, + "bugs": { + "url": "https://github.com/deb-adarsh/ai-stack-kit/issues" + }, + "homepage": "https://marketplace.visualstudio.com/items?itemName=deb-adarsh.ai-stack-kit", + "pricing": "Free", + "galleryBanner": { + "color": "#0c0c0e", + "theme": "dark" + }, + "engines": { + "vscode": "^1.85.0" + }, + "categories": ["Other", "Machine Learning"], + "keywords": ["ai", "copilot", "cursor", "claude", "skills", "agents"], + "icon": "media/icon.png", + "activationEvents": ["onView:aistack.modules", "workspaceContains:spec.yaml"], + "main": "./dist/extension.js", + "contributes": { + "viewsContainers": { + "activitybar": [ + { + "id": "aistack", + "title": "AI Stack Kit", + "icon": { + "light": "media/activity-bar-icon.svg", + "dark": "media/activity-bar-icon.svg" + } + } + ] + }, + "views": { + "aistack": [ + { + "id": "aistack.modules", + "name": "Modules" + }, + { + "id": "aistack.outputs", + "name": "Outputs" + }, + { + "type": "webview", + "id": "aistack.catalog", + "name": "Catalog" + } + ] + }, + "commands": [ + { + "command": "aistack.init", + "title": "AI Stack Kit: Initialize Workspace", + "icon": "$(add)" + }, + { + "command": "aistack.sync", + "title": "AI Stack Kit: Sync", + "icon": "$(sync)" + }, + { + "command": "aistack.doctor", + "title": "AI Stack Kit: Doctor", + "icon": "$(heart)" + }, + { + "command": "aistack.search", + "title": "AI Stack Kit: Search Catalog…", + "icon": "$(search)" + }, + { + "command": "aistack.add", + "title": "AI Stack Kit: Add Module…", + "icon": "$(add)" + }, + { + "command": "aistack.switchClient", + "title": "AI Stack Kit: Switch Client", + "icon": "$(arrow-swap)" + }, + { + "command": "aistack.openCatalog", + "title": "AI Stack Kit: Open Skill Browser", + "icon": "$(globe)" + }, + { + "command": "aistack.refreshCatalog", + "title": "AI Stack Kit: Refresh Catalog List", + "icon": "$(refresh)" + }, + { + "command": "aistack.removeModule", + "title": "Remove Module", + "icon": "$(trash)" + }, + { + "command": "aistack.toggleModule", + "title": "Toggle Enabled", + "icon": "$(check)" + }, + { + "command": "aistack.openSpec", + "title": "Open spec.yaml", + "icon": "$(file)" + }, + { + "command": "aistack.reportIssue", + "title": "Report Issue" + } + ], + "menus": { + "issue/reporter": [ + { + "command": "aistack.reportIssue" + } + ], + "view/title": [ + { + "command": "aistack.sync", + "when": "view == aistack.modules", + "group": "navigation@1" + }, + { + "command": "aistack.init", + "when": "view == aistack.modules", + "group": "navigation@2" + }, + { + "command": "aistack.openCatalog", + "when": "view == aistack.catalog", + "group": "navigation@1" + } + ], + "view/item/context": [ + { + "command": "aistack.toggleModule", + "when": "view == aistack.modules && viewItem == module", + "group": "inline@1" + }, + { + "command": "aistack.removeModule", + "when": "view == aistack.modules && viewItem == module", + "group": "inline@2" + } + ] + }, + "configuration": { + "title": "AI Stack Kit", + "properties": { + "aiStackKit.clientType": { + "type": "string", + "enum": ["cursor", "copilot", "claude"], + "default": "copilot", + "description": "Default client.type written to spec.yaml on init and used when switching client." + }, + "aiStackKit.installScope": { + "type": "string", + "enum": ["project", "user"], + "default": "project", + "description": "Install scope for skill/agent trees (project = repo-local)." + }, + "aiStackKit.githubToken": { + "type": "string", + "default": "", + "description": "GitHub PAT for catalog search (maps to GITHUB_TOKEN when set)." + }, + "aiStackKit.autoSyncOnSave": { + "type": "boolean", + "default": false, + "description": "Run sync when spec.yaml is saved." + }, + "aiStackKit.dryRun": { + "type": "boolean", + "default": false, + "description": "Default dry-run mode for sync (preview only)." + } + } + }, + "walkthroughs": [ + { + "id": "aistack.gettingStarted", + "title": "AI Stack Kit", + "description": "Install and sync AI skills, subagents, and hooks", + "steps": [ + { + "id": "init", + "title": "Initialize workspace", + "description": "Create spec.yaml and sources.config.yaml in your project.\n[Initialize](command:aistack.init)" + }, + { + "id": "add", + "title": "Add from catalog", + "description": "Browse the catalog and add modules to your spec.\n[Open Catalog](command:aistack.openCatalog)" + }, + { + "id": "sync", + "title": "Sync to your IDE", + "description": "Apply spec to Cursor, Copilot, or Claude output paths.\n[Sync](command:aistack.sync)" + } + ] + } + ] + }, + "scripts": { + "check-types": "tsc --noEmit -p tsconfig.json --skipLibCheck", + "compile": "npm run check-types && node esbuild.js", + "watch": "npm-run-all -p watch:*", + "watch:esbuild": "node esbuild.js --watch", + "watch:tsc": "tsc --noEmit -p tsconfig.json --watch", + "package": "node esbuild.js --production", + "vscode:prepublish": "npm run package", + "build:webview": "npm run build --prefix webview-ui", + "build:all": "npm run build:webview && npm run package", + "compile-tests": "tsc -p tsconfig.test.json", + "test": "node ./out/test/runTest.js", + "login:marketplace": "vsce login deb-adarsh", + "vsix": "vsce package --no-dependencies", + "deploy": "vsce publish --no-dependencies", + "publish:marketplace": "npm run deploy", + "publish:minor": "vsce publish minor --no-dependencies", + "publish:patch": "vsce publish patch --no-dependencies" + }, + "devDependencies": { + "@types/mocha": "^10.0.0", + "@types/node": "^20.0.0", + "@types/vscode": "^1.85.0", + "@vscode/test-electron": "^2.4.0", + "@vscode/vsce": "^3.2.0", + "mocha": "^10.8.0", + "esbuild": "^0.24.0", + "npm-run-all": "^4.1.5", + "typescript": "^5.3.0" + } +} diff --git a/extension/src/constants.ts b/extension/src/constants.ts new file mode 100644 index 0000000..3ec183b --- /dev/null +++ b/extension/src/constants.ts @@ -0,0 +1,4 @@ +export const EXTENSION_ID = 'deb-adarsh.ai-stack-kit'; +export const VIEW_MODULES = 'aistack.modules'; +export const VIEW_OUTPUTS = 'aistack.outputs'; +export const VIEW_CATALOG = 'aistack.catalog'; diff --git a/extension/src/extension.ts b/extension/src/extension.ts new file mode 100644 index 0000000..c43cbf0 --- /dev/null +++ b/extension/src/extension.ts @@ -0,0 +1,389 @@ +import * as vscode from 'vscode'; +import * as path from 'node:path'; +import { VIEW_CATALOG, VIEW_MODULES, VIEW_OUTPUTS } from './constants.js'; +import { ModulesTreeProvider, ModuleTreeItem } from './views/modulesTreeProvider.js'; +import { OutputsTreeProvider } from './views/outputsTreeProvider.js'; +import { CatalogWebviewProvider } from './views/catalogWebviewProvider.js'; +import { + getAistackWorkspace, + requireWorkspace, + resetWorkspaceCache, +} from './services/workspaceService.js'; +import { + applyGithubTokenFromSettings, + getExtensionConfig, + type ClientType, +} from './services/configService.js'; + +let outputChannel: vscode.OutputChannel; +let modulesTree: ModulesTreeProvider; +let outputsTree: OutputsTreeProvider; +let statusSync: vscode.StatusBarItem; +let statusClient: vscode.StatusBarItem; + +type LogLevel = 'debug' | 'info' | 'warn' | 'error'; + +/** Mirrors {@link ModuleSearchHit} from the core package (avoid ESM type imports in the CJS extension host). */ +interface CatalogSearchHit { + name: string; + version: string; + description: string; + source: string; + moduleType?: string; +} + +interface SearchPickItem extends vscode.QuickPickItem { + hit: CatalogSearchHit; +} + +export function activate(context: vscode.ExtensionContext): void { + process.env.AISTACK_TEMPLATES_CLIENTS = path.join(context.extensionPath, 'templates', 'clients'); + process.env.AISTACK_SOURCES_CONFIG_TEMPLATE = path.join( + context.extensionPath, + 'templates', + 'sources.config.yaml' + ); + + outputChannel = vscode.window.createOutputChannel('AI Stack Kit'); + modulesTree = new ModulesTreeProvider(); + outputsTree = new OutputsTreeProvider(); + + context.subscriptions.push( + outputChannel, + vscode.window.registerTreeDataProvider(VIEW_MODULES, modulesTree), + vscode.window.registerTreeDataProvider(VIEW_OUTPUTS, outputsTree), + vscode.window.registerWebviewViewProvider( + VIEW_CATALOG, + new CatalogWebviewProvider(context.extensionUri) + ) + ); + + statusSync = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); + statusSync.command = 'aistack.sync'; + statusSync.text = '$(sync) AI Stack'; + statusSync.tooltip = 'Sync skills to IDE outputs'; + statusSync.show(); + context.subscriptions.push(statusSync); + + statusClient = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100); + statusClient.command = 'aistack.doctor'; + statusClient.tooltip = 'Run doctor'; + statusClient.show(); + context.subscriptions.push(statusClient); + + const register = (id: string, fn: (...args: unknown[]) => Promise | void) => + context.subscriptions.push(vscode.commands.registerCommand(id, fn)); + + register('aistack.init', () => runInit()); + register('aistack.sync', () => runSync()); + register('aistack.doctor', () => runDoctor()); + register('aistack.search', () => runSearch()); + register('aistack.add', () => runAdd()); + register('aistack.switchClient', () => runSwitchClient()); + register('aistack.openCatalog', async () => { + await vscode.commands.executeCommand(`${VIEW_CATALOG}.focus`); + }); + register('aistack.refreshCatalog', () => runRefreshCatalogList()); + register('aistack.openSpec', () => openSpec()); + register('aistack.modules.refresh', () => refreshAll()); + register('aistack.removeModule', (item?: unknown) => + runRemoveModule(asModuleTreeItem(item)?.moduleName) + ); + register('aistack.toggleModule', (item?: unknown) => { + const mod = asModuleTreeItem(item); + return runToggleModule(mod?.moduleName, mod?.enabled); + }); + register('aistack.reportIssue', () => openReportIssue(context)); + + const specWatcher = vscode.workspace.createFileSystemWatcher('**/spec.yaml'); + specWatcher.onDidChange(() => void onSpecChanged()); + specWatcher.onDidCreate(() => void onSpecChanged()); + context.subscriptions.push(specWatcher); + + void updateStatusBar(); + + vscode.workspace.onDidChangeWorkspaceFolders(() => { + resetWorkspaceCache(); + refreshAll(); + }); +} + +export function deactivate(): void { + /* noop */ +} + +function refreshAll(): void { + modulesTree.refresh(); + outputsTree.refresh(); + void updateStatusBar(); +} + +async function onSpecChanged(): Promise { + refreshAll(); + const cfg = getExtensionConfig(); + if (!cfg.autoSyncOnSave) return; + const ws = getAistackWorkspace(); + if (!ws?.hasSpec()) return; + await runSync(true); +} + +async function updateStatusBar(): Promise { + const ws = getAistackWorkspace(); + if (!ws?.hasSpec()) { + statusClient.text = '$(info) no spec'; + return; + } + try { + const spec = await ws.readSpec(); + const modules = await ws.listSpecModules(); + statusClient.text = `$(hubot) ${spec.client.type} · ${modules.length} modules`; + } catch { + statusClient.text = '$(warning) spec invalid'; + } +} + +function asModuleTreeItem(item: unknown): ModuleTreeItem | undefined { + return item instanceof ModuleTreeItem ? item : undefined; +} + +function openReportIssue(context: vscode.ExtensionContext): void { + const bugs = context.extension.packageJSON.bugs as { url?: string } | undefined; + const base = bugs?.url ?? 'https://github.com/deb-adarsh/ai-stack-kit/issues'; + const url = base.endsWith('/issues') ? `${base}/new` : base; + void vscode.env.openExternal(vscode.Uri.parse(url)); +} + +function log(level: LogLevel, message: string, meta?: Record): void { + const rest = meta && Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : ''; + outputChannel.appendLine(`[${level}] ${message}${rest}`); +} + +async function runInit(): Promise { + try { + const ws = requireWorkspace(); + const cfg = getExtensionConfig(); + if (ws.hasSpec()) { + const pick = await vscode.window.showWarningMessage( + 'spec.yaml already exists. Re-initialize?', + 'Cancel', + 'Continue' + ); + if (pick !== 'Continue') return; + } + await vscode.window.withProgress( + { location: vscode.ProgressLocation.Notification, title: 'Initializing AI Stack Kit' }, + async () => { + await ws.init({ + clientType: cfg.clientType, + installScope: cfg.installScope, + skills: [], + }); + } + ); + void vscode.window.showInformationMessage('AI Stack Kit initialized (spec.yaml + sources.config.yaml)'); + refreshAll(); + } catch (e) { + const msg = formatError(e); + log('error', msg); + void vscode.window.showErrorMessage(msg); + outputChannel.show(true); + } +} + +function formatError(e: unknown): string { + if (e && typeof e === 'object' && 'code' in e && (e as { code?: string }).code === 'VALIDATION_ERROR') { + const errors = (e as { errors?: { path: string; message: string }[] }).errors; + if (errors?.length) { + return `Spec validation failed:\n${errors.map((x) => ` • ${x.path}: ${x.message}`).join('\n')}`; + } + } + return e instanceof Error ? e.message : String(e); +} + +async function runSync(silent = false): Promise { + try { + applyGithubTokenFromSettings(); + const ws = requireWorkspace(); + if (!ws.hasSpec()) { + void vscode.window.showWarningMessage('Run Initialize Workspace first.'); + return; + } + const cfg = getExtensionConfig(); + let result: Awaited> | undefined; + await vscode.window.withProgress( + { + location: silent ? vscode.ProgressLocation.Window : vscode.ProgressLocation.Notification, + title: cfg.dryRun ? 'Sync (dry run)' : 'Syncing AI Stack Kit', + cancellable: false, + }, + async () => { + result = await ws.syncWithLogger( + { dryRun: cfg.dryRun, verbose: false }, + (level: LogLevel, message: string, meta?: Record) => + log(level, message, meta) + ); + log( + result.success ? 'info' : 'error', + `Sync ${result.success ? 'complete' : 'failed'} — resolved: ${result.skillsResolved}, written: ${result.adapterReport?.written.length ?? 0}` + ); + if (!result.success) { + for (const err of result.errors) { + log('error', `${err.skill ?? err.phase}: ${err.message}`); + } + } + } + ); + if (!silent) { + if (result && !result.success) { + const first = result.errors[0]; + void vscode.window.showErrorMessage( + first + ? `Sync failed: ${first.message}` + : 'Sync failed — see AI Stack Kit output for details' + ); + } else { + void vscode.window.showInformationMessage( + cfg.dryRun ? 'Dry run complete (see output)' : 'Sync complete' + ); + } + } + refreshAll(); + outputChannel.show(true); + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} + +async function runDoctor(): Promise { + try { + applyGithubTokenFromSettings(); + const ws = requireWorkspace(); + const { checks, ok } = await ws.doctor(); + outputChannel.clear(); + outputChannel.appendLine('AI Stack Kit doctor\n'); + for (const c of checks) { + const mark = !c.ok ? '✗' : c.warn ? '!' : '✓'; + outputChannel.appendLine(` ${mark} ${c.message}`); + if (c.hint) outputChannel.appendLine(` ${c.hint}`); + } + outputChannel.show(true); + if (ok) { + void vscode.window.showInformationMessage('Doctor: all checks passed'); + } else { + void vscode.window.showWarningMessage('Doctor: see Output panel for issues'); + } + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} + +async function runSearch(): Promise { + try { + applyGithubTokenFromSettings(); + const ws = requireWorkspace(); + const q = await vscode.window.showInputBox({ prompt: 'Search catalog', placeHolder: 'react' }); + if (!q) return; + const hits = await ws.search(q, { limit: 30 }); + if (!hits.length) { + void vscode.window.showInformationMessage('No modules found'); + return; + } + const picked = await vscode.window.showQuickPick( + hits.map((h: CatalogSearchHit) => ({ + label: h.name, + description: `${h.moduleType ?? 'skill'} · ${h.version}`, + detail: h.description, + hit: h, + })), + { placeHolder: 'Select a module' } + ); + if (!picked) return; + await ws.addModule({ + name: picked.hit.name, + version: 'latest', + source: picked.hit.source, + moduleType: picked.hit.moduleType, + }); + void vscode.window.showInformationMessage(`Added ${picked.hit.name}`); + refreshAll(); + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} + +async function runAdd(): Promise { + await runSearch(); +} + +async function runSwitchClient(): Promise { + try { + const ws = requireWorkspace(); + const pick = await vscode.window.showQuickPick( + [ + { label: 'Cursor', value: 'cursor' as ClientType }, + { label: 'GitHub Copilot (VS Code)', value: 'copilot' as ClientType }, + { label: 'Claude', value: 'claude' as ClientType }, + ], + { placeHolder: 'Select client.type for spec.yaml' } + ); + if (!pick) return; + const scope = await vscode.window.showQuickPick( + [ + { label: 'Project (repo-local)', value: 'project' as const }, + { label: 'User (global home dirs)', value: 'user' as const }, + ], + { placeHolder: 'Install scope' } + ); + if (!scope) return; + await ws.setClientType(pick.value, scope.value); + void vscode.window.showInformationMessage(`client.type set to ${pick.value}`); + refreshAll(); + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} + +async function runRefreshCatalogList(): Promise { + try { + applyGithubTokenFromSettings(); + const ws = requireWorkspace(); + const result = await ws.catalogRefresh({ write: false }); + void vscode.window.showInformationMessage( + `${result.candidateNames.length} catalog entries not yet in spec.yaml` + ); + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} + +async function openSpec(): Promise { + const ws = getAistackWorkspace(); + if (!ws?.hasSpec()) { + void vscode.window.showWarningMessage('No spec.yaml'); + return; + } + const doc = await vscode.workspace.openTextDocument(vscode.Uri.file(ws.specPath)); + await vscode.window.showTextDocument(doc); +} + +async function runRemoveModule(name?: string): Promise { + if (!name) return; + try { + const ws = requireWorkspace(); + await ws.removeModule(name); + refreshAll(); + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} + +async function runToggleModule(name?: string, currentlyEnabled?: boolean): Promise { + if (!name) return; + try { + const ws = requireWorkspace(); + await ws.setModuleEnabled(name, currentlyEnabled === undefined ? true : !currentlyEnabled); + refreshAll(); + } catch (e) { + void vscode.window.showErrorMessage(e instanceof Error ? e.message : String(e)); + } +} diff --git a/extension/src/services/configService.ts b/extension/src/services/configService.ts new file mode 100644 index 0000000..7c459cc --- /dev/null +++ b/extension/src/services/configService.ts @@ -0,0 +1,22 @@ +import * as vscode from 'vscode'; + +export type ClientType = 'cursor' | 'copilot' | 'claude'; + +export function getExtensionConfig() { + const cfg = vscode.workspace.getConfiguration('aiStackKit'); + return { + clientType: (cfg.get('clientType') ?? 'copilot') as ClientType, + installScope: (cfg.get('installScope') ?? 'project') as 'project' | 'user', + githubToken: cfg.get('githubToken') ?? '', + autoSyncOnSave: cfg.get('autoSyncOnSave') ?? false, + dryRun: cfg.get('dryRun') ?? false, + }; +} + +/** Apply GitHub token from settings to process env for catalog API calls. */ +export function applyGithubTokenFromSettings(): void { + const token = getExtensionConfig().githubToken?.trim(); + if (token) { + process.env.GITHUB_TOKEN = token; + } +} diff --git a/extension/src/services/workspaceService.ts b/extension/src/services/workspaceService.ts new file mode 100644 index 0000000..28e911e --- /dev/null +++ b/extension/src/services/workspaceService.ts @@ -0,0 +1,30 @@ +import * as vscode from 'vscode'; +import { AistackWorkspace } from 'ai-stack-kit-core'; + +let cached: AistackWorkspace | undefined; + +export function getWorkspaceFolder(): vscode.Uri | undefined { + return vscode.workspace.workspaceFolders?.[0]?.uri; +} + +export function getAistackWorkspace(): AistackWorkspace | undefined { + const folder = getWorkspaceFolder(); + if (!folder) return undefined; + const root = folder.fsPath; + if (!cached || cached.projectRoot !== root) { + cached = new AistackWorkspace(root); + } + return cached; +} + +export function resetWorkspaceCache(): void { + cached = undefined; +} + +export function requireWorkspace(): AistackWorkspace { + const ws = getAistackWorkspace(); + if (!ws) { + throw new Error('Open a folder workspace first.'); + } + return ws; +} diff --git a/extension/src/test/runTest.ts b/extension/src/test/runTest.ts new file mode 100644 index 0000000..a77f6e7 --- /dev/null +++ b/extension/src/test/runTest.ts @@ -0,0 +1,46 @@ +import { spawnSync } from 'node:child_process'; +import * as path from 'node:path'; +import { + downloadAndUnzipVSCode, + resolveCliArgsFromVSCodeExecutablePath, +} from '@vscode/test-electron'; + +/** Pin VS Code for extension tests (matches `engines.vscode`). */ +const VSCODE_TEST_VERSION = '1.85.2'; + +async function main(): Promise { + const extensionDevelopmentPath = path.resolve(__dirname, '../..'); + const extensionTestsPath = path.resolve(__dirname, './suite/index.js'); + const testWorkspace = path.resolve(extensionDevelopmentPath, 'test-workspace'); + + const vscodeAppPath = await downloadAndUnzipVSCode(VSCODE_TEST_VERSION); + const [cli, ...profileArgs] = resolveCliArgsFromVSCodeExecutablePath(vscodeAppPath); + + const args = [ + ...profileArgs, + testWorkspace, + '--no-sandbox', + '--disable-gpu-sandbox', + '--disable-updates', + '--skip-welcome', + '--skip-release-notes', + '--disable-workspace-trust', + `--extensionTestsPath=${extensionTestsPath}`, + `--extensionDevelopmentPath=${extensionDevelopmentPath}`, + ]; + + const result = spawnSync(cli, args, { + stdio: 'inherit', + shell: true, + env: process.env, + }); + + if (result.status !== 0) { + process.exit(result.status ?? 1); + } +} + +main().catch((err) => { + console.error('Failed to run tests', err); + process.exit(1); +}); diff --git a/extension/src/test/suite/extension.test.ts b/extension/src/test/suite/extension.test.ts new file mode 100644 index 0000000..15b7fc5 --- /dev/null +++ b/extension/src/test/suite/extension.test.ts @@ -0,0 +1,79 @@ +import * as assert from 'node:assert'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as vscode from 'vscode'; + +function workspaceRoot(): string { + const folder = vscode.workspace.workspaceFolders?.[0]; + assert.ok(folder, 'test workspace folder should be open'); + return folder.uri.fsPath; +} + +suite('AI Stack Kit extension', () => { + test('extension is listed', async () => { + const ext = vscode.extensions.getExtension('deb-adarsh.ai-stack-kit'); + assert.ok(ext, 'deb-adarsh.ai-stack-kit should be installed in test host'); + }); + + test('activates and registers commands', async () => { + const ext = vscode.extensions.getExtension('deb-adarsh.ai-stack-kit'); + await ext?.activate(); + assert.strictEqual(ext?.isActive, true); + + const commands = await vscode.commands.getCommands(true); + for (const id of [ + 'aistack.init', + 'aistack.sync', + 'aistack.doctor', + 'aistack.search', + 'aistack.add', + 'aistack.reportIssue', + ]) { + assert.ok(commands.includes(id), `missing command ${id}`); + } + }); + + test('init creates spec.yaml and sources.config.yaml', async function () { + this.timeout(30_000); + const root = workspaceRoot(); + const specPath = path.join(root, 'spec.yaml'); + const sourcesPath = path.join(root, 'sources.config.yaml'); + for (const p of [specPath, sourcesPath]) { + if (fs.existsSync(p)) { + fs.unlinkSync(p); + } + } + + await vscode.commands.executeCommand('aistack.init'); + + assert.ok(fs.existsSync(specPath), 'spec.yaml should exist after init'); + assert.ok(fs.existsSync(sourcesPath), 'sources.config.yaml should exist after init'); + const specText = fs.readFileSync(specPath, 'utf-8'); + assert.match(specText, /type:\s*copilot/); + }); + + test('dry-run sync does not write copilot skill outputs', async function () { + this.timeout(90_000); + const root = workspaceRoot(); + const specPath = path.join(root, 'spec.yaml'); + if (!fs.existsSync(specPath)) { + await vscode.commands.executeCommand('aistack.init'); + } + + await vscode.workspace + .getConfiguration('aiStackKit') + .update('dryRun', true, vscode.ConfigurationTarget.Workspace); + + const skillsDir = path.join(root, '.github', 'skills'); + if (fs.existsSync(skillsDir)) { + fs.rmSync(skillsDir, { recursive: true, force: true }); + } + + await vscode.commands.executeCommand('aistack.sync'); + + assert.ok( + !fs.existsSync(skillsDir), + 'dry-run sync should not create .github/skills/ for copilot client' + ); + }); +}); diff --git a/extension/src/test/suite/index.ts b/extension/src/test/suite/index.ts new file mode 100644 index 0000000..a6052b3 --- /dev/null +++ b/extension/src/test/suite/index.ts @@ -0,0 +1,26 @@ +import * as path from 'node:path'; +import Mocha from 'mocha'; + +export function run(): Promise { + const mocha = new Mocha({ + ui: 'tdd', + color: true, + timeout: 60_000, + }); + + mocha.addFile(path.resolve(__dirname, 'extension.test.js')); + + return new Promise((resolve, reject) => { + try { + mocha.run((failures) => { + if (failures > 0) { + reject(new Error(`${failures} tests failed.`)); + } else { + resolve(); + } + }); + } catch (err) { + reject(err); + } + }); +} diff --git a/extension/src/utils/webview.ts b/extension/src/utils/webview.ts new file mode 100644 index 0000000..a633c26 --- /dev/null +++ b/extension/src/utils/webview.ts @@ -0,0 +1,44 @@ +import * as vscode from 'vscode'; + +/** Cryptographic nonce for webview Content-Security-Policy (see VS Code webview guidelines). */ +export function getNonce(): string { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let value = ''; + for (let i = 0; i < 32; i++) { + value += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return value; +} + +export interface WebviewCspOptions { + /** Extra URIs allowed for fetch/XHR (e.g. bundled catalog.json). */ + connectSrc?: vscode.Uri[]; +} + +/** Inject CSP meta tag and script nonces; rewrite root-relative asset paths. */ +export function prepareWebviewHtml( + webview: vscode.Webview, + html: string, + baseDir: vscode.Uri, + options?: WebviewCspOptions +): string { + const base = webview.asWebviewUri(baseDir).toString(); + html = html.replace(/(href|src)="\/assets\//g, `$1="${base}/assets/`); + html = html.replace(/(href|src)="\.\//g, `$1="${base}/`); + + const nonce = getNonce(); + const connectExtra = options?.connectSrc?.map((u) => u.toString()).join(' ') ?? ''; + const connectSrc = connectExtra ? `${webview.cspSource} ${connectExtra}` : webview.cspSource; + const csp = [ + "default-src 'none'", + `style-src ${webview.cspSource} 'unsafe-inline'`, + `script-src 'nonce-${nonce}' ${webview.cspSource}`, + `font-src ${webview.cspSource}`, + `connect-src ${connectSrc}`, + ].join('; '); + + html = html.replace(/]*>/gi, ''); + html = html.replace(//i, `\n `); + html = html.replace(/]*\bnonce=)/gi, ` + + diff --git a/extension/webview-ui/main.ts b/extension/webview-ui/main.ts new file mode 100644 index 0000000..a6f88d0 --- /dev/null +++ b/extension/webview-ui/main.ts @@ -0,0 +1,279 @@ +declare function acquireVsCodeApi(): { postMessage(msg: unknown): void }; + +const vscode = acquireVsCodeApi(); + +type Skill = { + id: string; + skillFolder: string; + description: string; + moduleType: string; + publisherLabel?: string; + publisherFamily?: string; + catalogId?: string; +}; + +let skills: Skill[] = []; +let loadError: string | null = null; + +const app = document.getElementById('app')!; + +app.innerHTML = ` + +

Catalog

+
+
+ + +
+
+ Loading catalog… + +
+
+

Loading catalog…

+
+`; + +function catalogUrl(): string { + const fromBody = document.body.getAttribute('data-aistack-catalog'); + if (fromBody) return fromBody; + const script = document.querySelector('script[src]') as HTMLScriptElement | null; + if (script?.src) return new URL('../catalog.json', script.src).toString(); + return new URL('catalog.json', window.location.href).toString(); +} + +function haystack(s: Skill): string { + return [ + s.id, + s.skillFolder, + s.description, + s.moduleType, + s.publisherLabel, + s.publisherFamily, + s.catalogId, + ] + .filter(Boolean) + .join(' ') + .toLowerCase(); +} + +function updateMeta(shown: number, total: number): void { + const count = document.getElementById('count')!; + const hint = document.getElementById('hint')!; + if (loadError) { + count.textContent = 'Catalog unavailable'; + hint.textContent = ''; + return; + } + const q = (document.getElementById('q') as HTMLInputElement).value.trim(); + const t = (document.getElementById('type') as HTMLSelectElement).value; + if (q || t) { + count.textContent = `${shown} of ${total} modules`; + hint.textContent = shown === 0 ? 'Try another term or type' : shown > 100 ? 'Showing first 100' : ''; + } else { + count.textContent = `${total} modules in snapshot`; + hint.textContent = ''; + } +} + +function render(): void { + const list = document.getElementById('list')!; + if (loadError) { + list.innerHTML = `

${loadError}

`; + updateMeta(0, 0); + return; + } + const q = (document.getElementById('q') as HTMLInputElement).value.trim().toLowerCase(); + const t = (document.getElementById('type') as HTMLSelectElement).value; + const filtered = skills.filter((s) => { + const kind = s.moduleType || 'skill'; + if (t && kind !== t) return false; + if (!q) return true; + return haystack(s).includes(q); + }); + updateMeta(Math.min(filtered.length, 100), skills.length); + list.innerHTML = ''; + if (!filtered.length) { + list.innerHTML = '

No matches — clear search or change type

'; + return; + } + for (const s of filtered.slice(0, 100)) { + const card = document.createElement('article'); + card.className = 'card'; + const kind = s.moduleType || 'skill'; + const publisher = s.publisherLabel || s.publisherFamily || ''; + card.innerHTML = ` +

${escapeHtml(s.skillFolder)}

+
+ ${escapeHtml(kind)} + ${publisher ? `${escapeHtml(publisher)}` : ''} +
+

${escapeHtml(s.description || s.id)}

+
+ `; + const actions = card.querySelector('.actions')!; + const add = document.createElement('button'); + add.textContent = 'Add to spec'; + add.onclick = () => vscode.postMessage({ type: 'add', id: s.id }); + const copy = document.createElement('button'); + copy.className = 'secondary'; + copy.textContent = 'Copy id'; + copy.onclick = () => vscode.postMessage({ type: 'copy', text: s.id }); + actions.append(add, copy); + list.append(card); + } +} + +function escapeHtml(text: string): string { + return text + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); +} + +async function load(): Promise { + try { + const res = await fetch(catalogUrl()); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const data = await res.json(); + skills = data.skills ?? []; + loadError = null; + } catch (e) { + loadError = e instanceof Error ? e.message : String(e); + skills = []; + } + render(); +} + +let debounce: ReturnType | undefined; +document.getElementById('q')!.addEventListener('input', () => { + clearTimeout(debounce); + debounce = setTimeout(render, 120); +}); +document.getElementById('type')!.addEventListener('change', render); + +window.addEventListener('message', (e) => { + if (e.data?.type === 'toast') { + const t = document.getElementById('toast')!; + t.textContent = e.data.text; + t.style.display = 'block'; + setTimeout(() => (t.style.display = 'none'), 2000); + } +}); + +void load(); diff --git a/extension/webview-ui/package-lock.json b/extension/webview-ui/package-lock.json new file mode 100644 index 0000000..ad35cba --- /dev/null +++ b/extension/webview-ui/package-lock.json @@ -0,0 +1,1000 @@ +{ + "name": "ai-stack-kit-webview-ui", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ai-stack-kit-webview-ui", + "devDependencies": { + "typescript": "^5.3.0", + "vite": "^5.4.11" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", + "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", + "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", + "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", + "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", + "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", + "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", + "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", + "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", + "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", + "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", + "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", + "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", + "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", + "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", + "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", + "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", + "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", + "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", + "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", + "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", + "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", + "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", + "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", + "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", + "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz", + "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.4", + "@rollup/rollup-android-arm64": "4.60.4", + "@rollup/rollup-darwin-arm64": "4.60.4", + "@rollup/rollup-darwin-x64": "4.60.4", + "@rollup/rollup-freebsd-arm64": "4.60.4", + "@rollup/rollup-freebsd-x64": "4.60.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", + "@rollup/rollup-linux-arm-musleabihf": "4.60.4", + "@rollup/rollup-linux-arm64-gnu": "4.60.4", + "@rollup/rollup-linux-arm64-musl": "4.60.4", + "@rollup/rollup-linux-loong64-gnu": "4.60.4", + "@rollup/rollup-linux-loong64-musl": "4.60.4", + "@rollup/rollup-linux-ppc64-gnu": "4.60.4", + "@rollup/rollup-linux-ppc64-musl": "4.60.4", + "@rollup/rollup-linux-riscv64-gnu": "4.60.4", + "@rollup/rollup-linux-riscv64-musl": "4.60.4", + "@rollup/rollup-linux-s390x-gnu": "4.60.4", + "@rollup/rollup-linux-x64-gnu": "4.60.4", + "@rollup/rollup-linux-x64-musl": "4.60.4", + "@rollup/rollup-openbsd-x64": "4.60.4", + "@rollup/rollup-openharmony-arm64": "4.60.4", + "@rollup/rollup-win32-arm64-msvc": "4.60.4", + "@rollup/rollup-win32-ia32-msvc": "4.60.4", + "@rollup/rollup-win32-x64-gnu": "4.60.4", + "@rollup/rollup-win32-x64-msvc": "4.60.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + } +} diff --git a/extension/webview-ui/package.json b/extension/webview-ui/package.json new file mode 100644 index 0000000..f3c5d36 --- /dev/null +++ b/extension/webview-ui/package.json @@ -0,0 +1,13 @@ +{ + "name": "ai-stack-kit-webview-ui", + "private": true, + "type": "module", + "scripts": { + "build": "vite build && cp ../../web/public/catalog.json ../media/catalog/catalog.json", + "dev": "vite build --watch" + }, + "devDependencies": { + "typescript": "^5.3.0", + "vite": "^5.4.11" + } +} diff --git a/extension/webview-ui/vite.config.ts b/extension/webview-ui/vite.config.ts new file mode 100644 index 0000000..bb8facc --- /dev/null +++ b/extension/webview-ui/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import path from 'path'; + +export default defineConfig({ + build: { + outDir: path.resolve(__dirname, '../media/catalog'), + emptyOutDir: true, + rollupOptions: { + input: path.resolve(__dirname, 'index.html'), + }, + }, +}); diff --git a/jest.config.cjs b/jest.config.cjs index 2f02717..ece19ee 100644 --- a/jest.config.cjs +++ b/jest.config.cjs @@ -1,11 +1,8 @@ /** - * Jest defaults treat `src/types/spec.ts` as a test file (`*spec.ts`). - * This repo has no Jest suite yet — keep `npm test` green and avoid scanning `dist/`. + * Legacy Jest config (optional). Primary test runner: `npm test` → `node --test` on compiled `dist/`. * @type {import('jest').Config} */ module.exports = { - roots: ['/src'], - testMatch: ['**/__tests__/**/*.test.ts'], - testPathIgnorePatterns: ['/node_modules/', '/dist/', '/src/types/spec\\.ts$'], + testPathIgnorePatterns: ['/node_modules/', '/dist/'], passWithNoTests: true, }; diff --git a/package.json b/package.json index 53c5c6d..e1eb1ba 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,13 @@ "description": "AI Stack Kit — CLI for managing IDE skills and configurations", "type": "module", "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, "bin": { "ai-stack-kit": "dist/cli/index.js", "aistack": "dist/cli/index.js", @@ -13,7 +20,8 @@ "dist", "templates", "LICENSE", - "README.md" + "README.md", + "USER_GUIDE.md" ], "scripts": { "build": "tsc", @@ -22,9 +30,12 @@ "build:catalog": "node scripts/build-catalog.mjs", "dev:web": "npm run build && npm run build:catalog && npm run dev --prefix web", "build:web": "npm run build && npm run build:catalog && npm run build --prefix web", + "build:extension": "npm run build && npm run build:catalog && rm -rf extension/templates && cp -R templates extension/templates && cp web/public/catalog.json extension/media/catalog.json && cd extension/webview-ui && npm install && npm run build && cp ../../web/public/catalog.json ../media/catalog/catalog.json && cd .. && npm install && npm run package", + "test:extension": "cd extension && npm run compile-tests && npm test", + "package:extension": "npm run build:extension && cd extension && npm run vsix", "dev": "tsc --watch", "start": "node dist/cli/index.js", - "test": "jest", + "test": "npm run build && node --test dist/cli/__tests__/get-module-versions.test.js dist/pipeline/__tests__/spec-loader.test.js dist/pipeline/__tests__/apply-dry-run.test.js dist/client-adapters/__tests__/adapter-factory.test.js dist/api/__tests__/workspace-api.test.js", "lint": "eslint src --ext .ts", "format": "prettier --write \"src/**/*.ts\"" }, diff --git a/src/api/__tests__/workspace-api.test.ts b/src/api/__tests__/workspace-api.test.ts new file mode 100644 index 0000000..44576f3 --- /dev/null +++ b/src/api/__tests__/workspace-api.test.ts @@ -0,0 +1,31 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { mkdtemp, readFile } from 'node:fs/promises'; +import { existsSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { AistackWorkspace } from '../workspace-api.js'; + +const repoRoot = path.resolve(fileURLToPath(import.meta.url), '../../../..'); + +describe('AistackWorkspace', () => { + it('init writes spec.yaml and sources.config.yaml', async () => { + const cwd = await mkdtemp(path.join(tmpdir(), 'aistack-api-')); + process.env.AISTACK_TEMPLATES_CLIENTS = path.join(repoRoot, 'templates', 'clients'); + process.env.AISTACK_SOURCES_CONFIG_TEMPLATE = path.join( + repoRoot, + 'templates', + 'sources.config.yaml' + ); + + const ws = new AistackWorkspace(cwd); + assert.equal(ws.hasSpec(), false); + await ws.init({ clientType: 'copilot', skills: [] }); + assert.equal(ws.hasSpec(), true); + assert.ok(existsSync(path.join(cwd, 'sources.config.yaml'))); + + const specText = await readFile(ws.specPath, 'utf-8'); + assert.match(specText, /type:\s*copilot/); + }); +}); diff --git a/src/api/callback-logger.ts b/src/api/callback-logger.ts new file mode 100644 index 0000000..717b5e6 --- /dev/null +++ b/src/api/callback-logger.ts @@ -0,0 +1,27 @@ +import type { Logger, LogLevel } from '../pipeline/logger.js'; + +/** Logger that forwards to callbacks (VS Code output channel, tests). */ +export function createCallbackLogger( + onLog: (level: LogLevel, message: string, meta?: Record) => void, + minLevel: LogLevel = 'info' +): Logger { + const order: LogLevel[] = ['debug', 'info', 'warn', 'error']; + const min = order.indexOf(minLevel); + + const should = (lvl: LogLevel) => order.indexOf(lvl) >= min; + + return { + debug: (m, meta) => { + if (should('debug')) onLog('debug', m, meta); + }, + info: (m, meta) => { + if (should('info')) onLog('info', m, meta); + }, + warn: (m, meta) => { + if (should('warn')) onLog('warn', m, meta); + }, + error: (m, meta) => { + if (should('error')) onLog('error', m, meta); + }, + }; +} diff --git a/src/api/catalog-refresh-core.ts b/src/api/catalog-refresh-core.ts new file mode 100644 index 0000000..f93fe81 --- /dev/null +++ b/src/api/catalog-refresh-core.ts @@ -0,0 +1,210 @@ +/** + * Headless catalog refresh (append modules to spec.yaml). CLI and VS Code extension share this. + */ + +import { copyFile, readFile, rm, writeFile } from 'node:fs/promises'; +import * as path from 'node:path'; +import { parseDocument, isSeq, Document } from 'yaml'; +import type { YAMLSeq } from 'yaml'; +import { loadSpec } from '../pipeline/spec-loader.js'; +import { flattenSpecModules } from '../types/spec.js'; +import { createDynamicSkillRegistry } from '../registry/sources/create-dynamic-skill-registry.js'; +import { loadSourcesConfigFromProject } from '../registry/sources/load-sources-config.js'; +import { + ensureDefaultSourcesConfig, + getModuleInfo, + invalidateDynamicRegistryCache, +} from '../cli/commands.js'; +import { DEFAULT_MODULE_TYPE, type AIModuleType } from '../types/ai-module.js'; +import type { CatalogRefreshResult } from './types.js'; + +export interface CatalogRefreshCoreOptions { + cwd: string; + write: boolean; + /** When write=true, append these catalog names (non-interactive). */ + namesToAppend?: string[]; + refreshSources?: boolean; + max?: number; +} + +function pruneUndefined(obj: Record): Record { + const out: Record = {}; + for (const [k, v] of Object.entries(obj)) { + if (v === undefined) continue; + if (v !== null && typeof v === 'object' && !Array.isArray(v)) { + const nested = pruneUndefined(v as Record); + if (Object.keys(nested).length > 0) out[k] = nested; + } else { + out[k] = v; + } + } + return out; +} + +function moduleInfoToAppendRow(info: { + name: string; + source: string; + sourceConfig?: Record; + moduleType?: AIModuleType; +}): Record { + const mt: AIModuleType = info.moduleType ?? DEFAULT_MODULE_TYPE; + const row: Record = { + name: info.name, + version: 'latest', + source: info.source, + enabled: false, + moduleType: mt, + }; + if (info.sourceConfig && typeof info.sourceConfig === 'object') { + row.sourceConfig = pruneUndefined(info.sourceConfig as Record); + } + return row; +} + +async function clearGithubListingCache(cwd: string): Promise { + const cfg = await loadSourcesConfigFromProject(cwd); + const root = cfg?.cacheDir?.trim() || '.cache/aistack'; + const dir = path.join(cwd, root, 'github-catalog'); + await rm(dir, { recursive: true, force: true }); +} + +async function existingModuleKeys(cwd: string): Promise> { + const spec = await loadSpec(cwd, 'spec.yaml'); + const set = new Set(); + for (const m of flattenSpecModules(spec)) { + set.add(m.name.trim().toLowerCase()); + } + return set; +} + +function ensureModulesSeq(doc: Document): YAMLSeq { + const m = doc.get('modules'); + if (m === undefined || m === null) { + doc.set('modules', doc.createNode([])); + const next = doc.get('modules'); + if (!isSeq(next)) { + throw Object.assign(new Error('Could not create spec.yaml `modules` sequence'), { + code: 'SPEC_MODULES_NOT_SEQUENCE', + }); + } + return next; + } + if (!isSeq(m)) { + throw Object.assign( + new Error('spec.yaml `modules` must be a YAML sequence (array) to append catalog rows'), + { code: 'SPEC_MODULES_NOT_SEQUENCE' } + ); + } + return m; +} + +async function mapPool(items: T[], concurrency: number, worker: (item: T) => Promise): Promise { + const results: R[] = new Array(items.length); + let next = 0; + async function runWorker(): Promise { + while (true) { + const i = next++; + if (i >= items.length) return; + results[i] = await worker(items[i]); + } + } + const n = Math.max(1, Math.min(concurrency, items.length)); + await Promise.all(Array.from({ length: n }, () => runWorker())); + return results; +} + +export async function runCatalogRefreshCore( + opts: CatalogRefreshCoreOptions +): Promise { + const cwd = path.resolve(opts.cwd); + const max = opts.max ?? 500; + + await ensureDefaultSourcesConfig(cwd); + + if (opts.refreshSources) { + await clearGithubListingCache(cwd); + invalidateDynamicRegistryCache(); + } + + let candidateNames: string[] = []; + + const existing = await existingModuleKeys(cwd); + const reg = await createDynamicSkillRegistry(cwd); + if (!reg) { + return { candidateNames: [], added: [], skippedErrors: [] }; + } + + const rows = await reg.search('', { limit: 500_000, sortBy: 'name' }); + candidateNames = rows + .map((r) => r.name) + .filter((name) => !existing.has(name.trim().toLowerCase())) + .sort((a, b) => a.localeCompare(b)); + + if (!opts.write) { + return { candidateNames, added: [], skippedErrors: [] }; + } + + const picked = (opts.namesToAppend ?? candidateNames.slice(0, max)).slice(0, max); + if (!picked.length) { + return { candidateNames, added: [], skippedErrors: [] }; + } + + const specPath = path.join(cwd, 'spec.yaml'); + const resolved = await mapPool(picked, 12, async (name) => { + try { + const info = await getModuleInfo(name, cwd); + return { ok: true as const, name, info }; + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + return { ok: false as const, name, message }; + } + }); + + const skippedErrors = resolved + .filter((r): r is { ok: false; name: string; message: string } => !r.ok) + .map((r) => ({ name: r.name, message: r.message })); + const ok = resolved.filter( + (r): r is { ok: true; name: string; info: Awaited> } => r.ok + ); + + if (!ok.length) { + return { candidateNames, added: [], skippedErrors }; + } + + const yamlText = await readFile(specPath, 'utf-8'); + const backupName = `spec.yaml.aistack-backup-${new Date().toISOString().replace(/[:.]/g, '-')}`; + await copyFile(specPath, path.join(cwd, backupName)); + + let doc: Document; + try { + doc = parseDocument(yamlText); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + throw Object.assign(new Error(`Failed to parse spec.yaml: ${message}`), { + code: 'SPEC_PARSE_ERROR', + }); + } + + const seq = ensureModulesSeq(doc); + const added: string[] = []; + for (const r of ok) { + seq.add(doc.createNode(moduleInfoToAppendRow(r.info))); + added.push(r.name); + } + + const nextYaml = String(doc); + try { + await writeFile(specPath, nextYaml, 'utf-8'); + await loadSpec(cwd, 'spec.yaml'); + } catch (err) { + await writeFile(specPath, yamlText, 'utf-8'); + throw Object.assign( + new Error( + `Updated spec failed validation; restored original. Backup: ${backupName}. ${err instanceof Error ? err.message : String(err)}` + ), + { code: 'SPEC_APPEND_VALIDATION_FAILED', cause: err } + ); + } + + return { candidateNames, added, skippedErrors }; +} diff --git a/src/api/types.ts b/src/api/types.ts new file mode 100644 index 0000000..6649bc3 --- /dev/null +++ b/src/api/types.ts @@ -0,0 +1,64 @@ +import type { ApplyPipelineResult } from '../pipeline/apply-pipeline.js'; +import type { LogLevel } from '../pipeline/logger.js'; +import type { AIModuleType } from '../types/ai-module.js'; +import type { ClientInstallScope, SpecFile } from '../types/spec.js'; +import type { DoctorCheck } from '../cli/doctor.js'; +import type { ModuleSearchHit } from '../cli/commands.js'; +import type { ProjectStatusRow } from '../cli/commands.js'; + +export type { ApplyPipelineResult, SpecFile, AIModuleType, ClientInstallScope }; +export type { DoctorCheck, ModuleSearchHit, ProjectStatusRow }; + +export interface AistackInitOptions { + clientType: 'cursor' | 'copilot' | 'claude'; + installScope?: 'project' | 'user'; + projectName?: string; + description?: string; + author?: string; + skills?: string[]; +} + +export interface SyncOptions { + dryRun?: boolean; + forceReinstall?: boolean; + verbose?: boolean; + logLevel?: LogLevel; +} + +export interface SearchOptions { + limit?: number; + tags?: string[]; + client?: string; + moduleTypes?: AIModuleType[]; + offline?: boolean; +} + +export interface AddModuleOptions { + name: string; + version?: string; + source?: string; + sourceConfig?: Record; + config?: Record; + moduleType?: AIModuleType; + clientInstallScope?: ClientInstallScope; +} + +export interface CatalogRefreshOptions { + write?: boolean; + namesToAppend?: string[]; + refreshSources?: boolean; + max?: number; +} + +export interface CatalogRefreshResult { + candidateNames: string[]; + added: string[]; + skippedErrors: { name: string; message: string }[]; +} + +export interface OutputPathEntry { + label: string; + relativePath: string; + absolutePath: string; + exists: boolean; +} diff --git a/src/api/workspace-api.ts b/src/api/workspace-api.ts new file mode 100644 index 0000000..2b6e9f2 --- /dev/null +++ b/src/api/workspace-api.ts @@ -0,0 +1,268 @@ +/** + * Headless workspace API for embedders (VS Code extension, CI, tests). + */ + +import { existsSync, promises as fs } from 'node:fs'; +import * as path from 'node:path'; +import * as yaml from 'js-yaml'; +import { apply, type ApplyPipelineResult } from '../pipeline/apply-pipeline.js'; +import { loadSpec } from '../pipeline/spec-loader.js'; +import type { Logger } from '../pipeline/logger.js'; +import { createConsoleLogger } from '../pipeline/logger.js'; +import { flattenSpecModules } from '../types/spec.js'; +import type { Skill } from '../types/skill.js'; +import type { ClientType, SpecFile } from '../types/spec.js'; +import { + addModuleToSpec, + ensureDefaultSourcesConfig, + ensureProjectGitignoreForAistack, + getModuleInfo, + getModuleVersions, + removeModuleFromSpec, + runStatus, + searchModules, + createSpecFile, + validateSpecFile, +} from '../cli/commands.js'; +import { runDoctor, type DoctorCheck } from '../cli/doctor.js'; +import { + agentsDirRelative, + hooksDirRelative, + resolveInstallScope, + skillsDirRelative, + adapterFilesystemRoot, +} from '../client-adapters/client-paths.js'; +import { runCatalogRefreshCore } from './catalog-refresh-core.js'; +import { createCallbackLogger } from './callback-logger.js'; +import type { + AddModuleOptions, + AistackInitOptions, + CatalogRefreshOptions, + CatalogRefreshResult, + OutputPathEntry, + SearchOptions, + SyncOptions, +} from './types.js'; + +export class AistackWorkspace { + constructor(readonly projectRoot: string) {} + + get specPath(): string { + return path.join(this.projectRoot, 'spec.yaml'); + } + + hasSpec(): boolean { + return existsSync(this.specPath); + } + + async init(options: AistackInitOptions): Promise { + await createSpecFile( + { + project: { + projectName: options.projectName ?? path.basename(this.projectRoot), + description: options.description ?? 'AI Stack Kit workspace', + author: options.author ?? '', + }, + client: options.clientType, + skills: options.skills ?? [], + settings: { autoSync: false, verifyChecksums: true }, + }, + this.projectRoot + ); + await this.setClientType(options.clientType, options.installScope ?? 'project'); + await ensureDefaultSourcesConfig(this.projectRoot); + await ensureProjectGitignoreForAistack(this.projectRoot); + } + + async readSpec(): Promise { + return loadSpec(this.projectRoot); + } + + async validate(): Promise<{ valid: boolean; errors?: { path: string; message: string }[] }> { + return validateSpecFile(this.projectRoot); + } + + async search(query: string, opts: SearchOptions = {}) { + return searchModules(query, { cwd: this.projectRoot, ...opts }); + } + + async getModuleInfo(name: string) { + return getModuleInfo(name, this.projectRoot); + } + + async getModuleVersions(name: string) { + return getModuleVersions(name, this.projectRoot); + } + + async addModule(opts: AddModuleOptions): Promise { + let source = opts.source; + let sourceConfig = opts.sourceConfig; + if (!source || !sourceConfig) { + const info = (await getModuleInfo(opts.name, this.projectRoot)) as { + source: string; + sourceConfig?: Record; + }; + source = source ?? info.source; + const cfg = info.sourceConfig; + sourceConfig = sourceConfig ?? cfg; + } + if (!source) { + throw Object.assign(new Error(`Could not resolve source for "${opts.name}"`), { + code: 'MODULE_NOT_FOUND', + }); + } + await addModuleToSpec( + { + name: opts.name, + version: opts.version ?? 'latest', + source: source!, + sourceConfig, + config: opts.config, + moduleType: opts.moduleType, + clientInstallScope: opts.clientInstallScope, + }, + this.projectRoot + ); + } + + async removeModule(name: string): Promise { + await removeModuleFromSpec(name, this.projectRoot); + } + + async setModuleEnabled(name: string, enabled: boolean): Promise { + const specPath = this.specPath; + const content = await fs.readFile(specPath, 'utf-8'); + const spec = yaml.load(content) as SpecFile; + if (!Array.isArray(spec.skills)) spec.skills = []; + if (!Array.isArray(spec.modules)) spec.modules = []; + let row: Skill | undefined = spec.skills.find((s) => s.name === name); + if (!row) row = spec.modules!.find((s) => s.name === name); + if (!row) { + throw Object.assign(new Error(`Module "${name}" not found in spec`), { code: 'MODULE_NOT_FOUND' }); + } + row.enabled = enabled; + await fs.writeFile(specPath, yaml.dump(spec, { indent: 2, lineWidth: -1 }), 'utf-8'); + } + + async setClientType(clientType: ClientType, installScope?: 'project' | 'user'): Promise { + const spec = await this.readSpec(); + spec.client.type = clientType; + if (installScope === 'user') { + spec.client.installScope = 'user'; + } else if (installScope === 'project') { + delete spec.client.installScope; + } + await fs.writeFile(this.specPath, yaml.dump(spec, { indent: 2, lineWidth: -1 }), 'utf-8'); + } + + async sync(options: SyncOptions = {}): Promise { + if (!options.dryRun) { + await ensureProjectGitignoreForAistack(this.projectRoot); + } + const logger: Logger = + options.verbose && typeof options.logLevel === 'undefined' + ? createConsoleLogger('apply', 'debug') + : createConsoleLogger('apply', options.verbose ? 'debug' : options.logLevel ?? 'info'); + + return apply({ + projectRoot: this.projectRoot, + dryRun: options.dryRun, + forceReinstall: options.forceReinstall, + logLevel: options.verbose ? 'debug' : options.logLevel ?? 'info', + logger, + }); + } + + syncWithLogger(options: SyncOptions, onLog: Parameters[0]): Promise { + return apply({ + projectRoot: this.projectRoot, + dryRun: options.dryRun, + forceReinstall: options.forceReinstall, + logLevel: options.verbose ? 'debug' : options.logLevel ?? 'info', + logger: createCallbackLogger(onLog, options.verbose ? 'debug' : options.logLevel ?? 'info'), + }); + } + + async doctor(): Promise<{ checks: DoctorCheck[]; ok: boolean }> { + return runDoctor(this.projectRoot); + } + + async status() { + return runStatus(this.projectRoot); + } + + async catalogRefresh(options: CatalogRefreshOptions = {}): Promise { + return runCatalogRefreshCore({ + cwd: this.projectRoot, + write: Boolean(options.write), + namesToAppend: options.namesToAppend, + refreshSources: options.refreshSources, + max: options.max, + }); + } + + /** Resolved output directories for the active client adapter. */ + async listOutputPaths(): Promise { + if (!this.hasSpec()) return []; + const spec = await this.readSpec(); + const scope = resolveInstallScope(spec.client); + const root = adapterFilesystemRoot(scope, this.projectRoot); + const clientType = spec.client.type; + + const rels = [ + { label: 'Skills', rel: skillsDirRelative(clientType, scope) }, + { label: 'Agents', rel: agentsDirRelative(clientType, scope) }, + { label: 'Hooks', rel: hooksDirRelative(clientType, scope) }, + ]; + + if (clientType === 'copilot') { + rels.push({ label: 'VS Code settings (aistack)', rel: '.vscode/settings.json' }); + } + + return rels.map(({ label, rel }) => { + const absolutePath = path.join(root, rel); + return { + label, + relativePath: rel, + absolutePath, + exists: existsSync(absolutePath), + }; + }); + } + + listSpecModules(): Promise< + { name: string; moduleType: string; enabled: boolean; version: string; source: string; section: 'skills' | 'modules' }[] + > { + return this.readSpec().then((spec) => { + const rows: { + name: string; + moduleType: string; + enabled: boolean; + version: string; + source: string; + section: 'skills' | 'modules'; + }[] = []; + for (const s of spec.skills ?? []) { + rows.push({ + name: s.name, + moduleType: String(s.moduleType ?? 'skill'), + enabled: s.enabled !== false, + version: s.version ?? 'latest', + source: String(s.source), + section: 'skills', + }); + } + for (const m of spec.modules ?? []) { + rows.push({ + name: m.name, + moduleType: String(m.moduleType ?? 'skill'), + enabled: m.enabled !== false, + version: m.version ?? 'latest', + source: String(m.source), + section: 'modules', + }); + } + return rows; + }); + } +} diff --git a/src/cli/__tests__/get-module-versions.test.ts b/src/cli/__tests__/get-module-versions.test.ts new file mode 100644 index 0000000..1e1d02a --- /dev/null +++ b/src/cli/__tests__/get-module-versions.test.ts @@ -0,0 +1,23 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { mkdtemp, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { getModuleVersions } from '../commands.js'; + +describe('getModuleVersions', () => { + it('never returns fabricated semver tags when module is unknown', async () => { + const cwd = await mkdtemp(path.join(tmpdir(), 'aistack-test-')); + await writeFile( + path.join(cwd, 'sources.config.yaml'), + 'version: 1\nsources: []\n', + 'utf-8' + ); + + const versions = await getModuleVersions('definitely-not-a-real-module-xyz', cwd); + + assert.deepEqual(versions, ['latest']); + assert.ok(!versions.includes('1.0.0')); + assert.ok(!versions.includes('0.9.0')); + }); +}); diff --git a/src/cli/catalog-refresh.ts b/src/cli/catalog-refresh.ts index 1a1d92e..696a755 100644 --- a/src/cli/catalog-refresh.ts +++ b/src/cli/catalog-refresh.ts @@ -3,295 +3,122 @@ * using YAML Document merge (preserves comments / structure outside appended nodes). */ -import { copyFile, readFile, rm, writeFile } from 'node:fs/promises'; -import * as path from 'node:path'; -import { parseDocument, isSeq, Document } from 'yaml'; -import type { YAMLSeq } from 'yaml'; import chalk from 'chalk'; import inquirer from 'inquirer'; import ora from 'ora'; -import { loadSpec } from '../pipeline/spec-loader.js'; -import { flattenSpecModules } from '../types/spec.js'; -import { createDynamicSkillRegistry } from '../registry/sources/create-dynamic-skill-registry.js'; -import { loadSourcesConfigFromProject } from '../registry/sources/load-sources-config.js'; -import { - ensureDefaultSourcesConfig, - getModuleInfo, - invalidateDynamicRegistryCache, -} from './commands.js'; -import { DEFAULT_MODULE_TYPE, type AIModuleType } from '../types/ai-module.js'; +import { runCatalogRefreshCore } from '../api/catalog-refresh-core.js'; import { CLI_COMMAND } from '../branding.js'; export interface CatalogRefreshCliOptions { cwd: string; - /** Persist selected modules to spec.yaml */ write: boolean; - /** Non-interactive: append up to --max candidates */ yes: boolean; - /** Clear GitHub tree listing cache under sources.config cacheDir, then re-fetch */ refreshSources: boolean; max: number; json: boolean; } -function pruneUndefined(obj: Record): Record { - const out: Record = {}; - for (const [k, v] of Object.entries(obj)) { - if (v === undefined) continue; - if (v !== null && typeof v === 'object' && !Array.isArray(v)) { - const nested = pruneUndefined(v as Record); - if (Object.keys(nested).length > 0) out[k] = nested; - } else { - out[k] = v; - } - } - return out; -} - -function moduleInfoToAppendRow(info: { - name: string; - source: string; - sourceConfig?: Record; - moduleType?: AIModuleType; -}): Record { - const mt: AIModuleType = info.moduleType ?? DEFAULT_MODULE_TYPE; - const row: Record = { - name: info.name, - version: 'latest', - source: info.source, - enabled: false, - moduleType: mt, - }; - if (info.sourceConfig && typeof info.sourceConfig === 'object') { - row.sourceConfig = pruneUndefined(info.sourceConfig as Record); - } - return row; -} - -async function clearGithubListingCache(cwd: string): Promise { - const cfg = await loadSourcesConfigFromProject(cwd); - const root = cfg?.cacheDir?.trim() || '.cache/aistack'; - const dir = path.join(cwd, root, 'github-catalog'); - await rm(dir, { recursive: true, force: true }); -} - -async function existingModuleKeys(cwd: string): Promise> { - const spec = await loadSpec(cwd, 'spec.yaml'); - const set = new Set(); - for (const m of flattenSpecModules(spec)) { - set.add(m.name.trim().toLowerCase()); - } - return set; -} - -function ensureModulesSeq(doc: Document): YAMLSeq { - const m = doc.get('modules'); - if (m === undefined || m === null) { - doc.set('modules', doc.createNode([])); - const next = doc.get('modules'); - if (!isSeq(next)) { - throw Object.assign(new Error('Could not create spec.yaml `modules` sequence'), { - code: 'SPEC_MODULES_NOT_SEQUENCE', - }); - } - return next; - } - if (!isSeq(m)) { - throw Object.assign( - new Error('spec.yaml `modules` must be a YAML sequence (array) to append catalog rows'), - { code: 'SPEC_MODULES_NOT_SEQUENCE' } - ); - } - return m; -} - -async function mapPool(items: T[], concurrency: number, worker: (item: T) => Promise): Promise { - const results: R[] = new Array(items.length); - let next = 0; - async function runWorker(): Promise { - while (true) { - const i = next++; - if (i >= items.length) return; - results[i] = await worker(items[i]); - } - } - const n = Math.max(1, Math.min(concurrency, items.length)); - await Promise.all(Array.from({ length: n }, () => runWorker())); - return results; -} - export async function runCatalogRefresh(opts: CatalogRefreshCliOptions): Promise<{ candidateNames: string[]; added: string[]; skippedErrors: { name: string; message: string }[]; }> { - const cwd = path.resolve(opts.cwd); - - await ensureDefaultSourcesConfig(cwd); - - if (opts.refreshSources) { - await clearGithubListingCache(cwd); - invalidateDynamicRegistryCache(); - } - const spinner = ora('Loading catalog…').start(); - let candidateNames: string[] = []; try { - const existing = await existingModuleKeys(cwd); - - const reg = await createDynamicSkillRegistry(cwd); - if (!reg) { - spinner.fail('No catalog: add sources.config.yaml with GitHub/npm sources'); - return { candidateNames: [], added: [], skippedErrors: [] }; - } - - const rows = await reg.search('', { limit: 500_000, sortBy: 'name' }); - candidateNames = rows - .map((r) => r.name) - .filter((name) => !existing.has(name.trim().toLowerCase())) - .sort((a, b) => a.localeCompare(b)); - - spinner.succeed(`Catalog: ${candidateNames.length} new module(s) not in spec.yaml`); - } catch (e) { - spinner.fail('Catalog refresh failed'); - throw e; - } - - const specPath = path.join(cwd, 'spec.yaml'); - - if (!opts.write) { - if (opts.json) { - console.log(JSON.stringify({ candidates: candidateNames.length, names: candidateNames }, null, 2)); - } else { - const preview = candidateNames.slice(0, 40); - console.log(chalk.gray(`\nNew catalog entries (not in spec): ${candidateNames.length}`)); - if (preview.length) { - console.log(chalk.gray(preview.map((n) => ` • ${n}`).join('\n'))); - if (candidateNames.length > preview.length) { - console.log(chalk.gray(` … and ${candidateNames.length - preview.length} more`)); + if (!opts.write) { + const result = await runCatalogRefreshCore({ + cwd: opts.cwd, + write: false, + refreshSources: opts.refreshSources, + max: opts.max, + }); + spinner.succeed(`Catalog: ${result.candidateNames.length} new module(s) not in spec.yaml`); + + if (opts.json) { + console.log( + JSON.stringify({ candidates: result.candidateNames.length, names: result.candidateNames }, null, 2) + ); + } else { + const preview = result.candidateNames.slice(0, 40); + console.log(chalk.gray(`\nNew catalog entries (not in spec): ${result.candidateNames.length}`)); + if (preview.length) { + console.log(chalk.gray(preview.map((n) => ` • ${n}`).join('\n'))); + if (result.candidateNames.length > preview.length) { + console.log(chalk.gray(` … and ${result.candidateNames.length - preview.length} more`)); + } } + console.log( + chalk.cyan( + `\nRun ${chalk.bold(`${CLI_COMMAND} catalog refresh --write`)} to append (interactive), or add ${chalk.bold('-y')} for non-interactive (see ${chalk.bold('--max')}).` + ) + ); } - console.log( - chalk.cyan( - `\nRun ${chalk.bold(`${CLI_COMMAND} catalog refresh --write`)} to append (interactive), or add ${chalk.bold('-y')} for non-interactive (see ${chalk.bold('--max')}).` - ) - ); + return result; } - return { candidateNames, added: [], skippedErrors: [] }; - } - let picked: string[]; - if (opts.yes) { - picked = candidateNames.slice(0, opts.max); - if (picked.length < candidateNames.length) { - console.log( - chalk.yellow(`--yes: appending first ${picked.length} of ${candidateNames.length} (see --max)`) - ); - } - } else { - if (!candidateNames.length) { - console.log(chalk.gray('Nothing new to add.')); - return { candidateNames, added: [], skippedErrors: [] }; - } - const answer = await inquirer.prompt([ - { - type: 'checkbox', - name: 'names', - message: 'Select catalog modules to append under modules: (disabled by default)', - choices: candidateNames.map((n) => ({ name: n, value: n })), - pageSize: 15, - }, - ]); - picked = answer.names as string[]; - if (!picked?.length) { - console.log(chalk.gray('No modules selected; spec unchanged.')); - return { candidateNames, added: [], skippedErrors: [] }; - } - } + spinner.stop(); - if (!picked.length) { - console.log(chalk.gray('Nothing new to add.')); - return { candidateNames, added: [], skippedErrors: [] }; - } + const listed = await runCatalogRefreshCore({ + cwd: opts.cwd, + write: false, + refreshSources: opts.refreshSources, + max: opts.max, + }); - const fetchSpin = ora(`Resolving ${picked.length} module(s)…`).start(); - const resolved = await mapPool(picked, 12, async (name) => { - try { - const info = await getModuleInfo(name, cwd); - return { ok: true as const, name, info }; - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - return { ok: false as const, name, message }; + let namesToAppend: string[]; + if (opts.yes) { + namesToAppend = listed.candidateNames.slice(0, opts.max); + if (namesToAppend.length < listed.candidateNames.length) { + console.log( + chalk.yellow(`--yes: appending first ${namesToAppend.length} of ${listed.candidateNames.length} (see --max)`) + ); + } + } else { + if (!listed.candidateNames.length) { + console.log(chalk.gray('Nothing new to add.')); + return listed; + } + const answer = await inquirer.prompt([ + { + type: 'checkbox', + name: 'names', + message: 'Select catalog modules to append under modules: (disabled by default)', + choices: listed.candidateNames.map((n) => ({ name: n, value: n })), + pageSize: 15, + }, + ]); + namesToAppend = answer.names as string[]; + if (!namesToAppend?.length) { + console.log(chalk.gray('No modules selected; spec unchanged.')); + return { ...listed, added: [], skippedErrors: [] }; + } } - }); - fetchSpin.succeed('Resolved'); - - const skippedErrors = resolved - .filter((r): r is { ok: false; name: string; message: string } => !r.ok) - .map((r) => ({ - name: r.name, - message: r.message, - })); - const ok = resolved.filter( - (r): r is { ok: true; name: string; info: Awaited> } => r.ok - ); - - if (!ok.length) { - console.log(chalk.yellow('No modules resolved successfully; spec unchanged.')); - skippedErrors.forEach((s) => console.log(chalk.red(` ✗ ${s.name}: ${s.message}`))); - return { candidateNames, added: [], skippedErrors }; - } - - const yamlText = await readFile(specPath, 'utf-8'); - const backupName = `spec.yaml.aistack-backup-${new Date().toISOString().replace(/[:.]/g, '-')}`; - const backupPath = path.join(cwd, backupName); - await copyFile(specPath, backupPath); - let doc: Document; - try { - doc = parseDocument(yamlText); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - throw Object.assign(new Error(`Failed to parse spec.yaml: ${message}`), { - code: 'SPEC_PARSE_ERROR', + const writeSpin = ora(`Appending ${namesToAppend.length} module(s)…`).start(); + const result = await runCatalogRefreshCore({ + cwd: opts.cwd, + write: true, + namesToAppend, + refreshSources: opts.refreshSources, + max: opts.max, }); - } + writeSpin.succeed('Catalog refresh complete'); - const seq = ensureModulesSeq(doc); - const added: string[] = []; - for (const r of ok) { - const row = moduleInfoToAppendRow(r.info); - seq.add(doc.createNode(row)); - added.push(r.name); - } - - const nextYaml = String(doc); - - try { - await writeFile(specPath, nextYaml, 'utf-8'); - await loadSpec(cwd, 'spec.yaml'); - } catch (err) { - await writeFile(specPath, yamlText, 'utf-8'); - throw Object.assign( - new Error( - `Updated spec failed validation; restored original. Backup kept at ${backupName}. ${err instanceof Error ? err.message : String(err)}` - ), - { code: 'SPEC_APPEND_VALIDATION_FAILED', cause: err } - ); - } - - if (!opts.json) { - console.log(chalk.green(`\n✓ Appended ${added.length} module(s) under ${chalk.bold('modules:')}`)); - console.log(chalk.gray(` Backup: ${backupName}`)); - if (skippedErrors.length) { - console.log(chalk.yellow(` Skipped ${skippedErrors.length} resolve error(s):`)); - skippedErrors.forEach((s) => console.log(chalk.yellow(` • ${s.name}: ${s.message}`))); + if (!opts.json) { + console.log(chalk.green(`\n✓ Appended ${result.added.length} module(s) under ${chalk.bold('modules:')}`)); + if (result.skippedErrors.length) { + console.log(chalk.yellow(` Skipped ${result.skippedErrors.length} resolve error(s):`)); + result.skippedErrors.forEach((s) => console.log(chalk.yellow(` • ${s.name}: ${s.message}`))); + } + console.log(chalk.gray('\nNew rows use enabled: false — enable entries you want, then run sync.')); + } else { + console.log(JSON.stringify({ added: result.added, skippedErrors: result.skippedErrors }, null, 2)); } - console.log(chalk.gray('\nNew rows use enabled: false — enable entries you want, then run sync.')); - } else { - console.log(JSON.stringify({ added, skippedErrors }, null, 2)); - } - return { candidateNames, added, skippedErrors }; + return { candidateNames: listed.candidateNames, added: result.added, skippedErrors: result.skippedErrors }; + } catch (e) { + spinner.fail('Catalog refresh failed'); + throw e; + } } diff --git a/src/cli/cli-options.ts b/src/cli/cli-options.ts new file mode 100644 index 0000000..5ac28a2 --- /dev/null +++ b/src/cli/cli-options.ts @@ -0,0 +1,25 @@ +/** + * Shared global CLI flags (-v, --offline, --dry-run) from the root Commander program. + */ + +import type { Command } from 'commander'; + +export interface GlobalCliOptions { + verbose: boolean; + offline: boolean; + dryRun: boolean; +} + +/** Read root-level flags merged with the active subcommand (Commander v11). */ +export function getGlobalCliOptions(cmd: Command): GlobalCliOptions { + const o = cmd.optsWithGlobals() as Record; + return { + verbose: Boolean(o.verbose), + offline: Boolean(o.offline), + dryRun: Boolean(o.dryRun), + }; +} + +export function dryRunSuffix(dryRun: boolean): string { + return dryRun ? ' (dry run — no files written)' : ''; +} diff --git a/src/cli/commands.ts b/src/cli/commands.ts index 624fea1..1e3027f 100644 --- a/src/cli/commands.ts +++ b/src/cli/commands.ts @@ -8,8 +8,9 @@ import { existsSync, promises as fs } from 'node:fs'; import * as path from 'node:path'; import { fileURLToPath } from 'node:url'; import * as yaml from 'js-yaml'; -import { WORKSPACE_DOTDIR } from '../branding.js'; -import { SpecFile, type ClientInstallScope } from '../types/spec.js'; +import { DEFAULT_RELATIVE_CACHE_DIR, WORKSPACE_DOTDIR } from '../branding.js'; +import { AdapterFactory } from '../client-adapters/adapter-factory.js'; +import { SpecFile, flattenSpecModules, type ClientInstallScope } from '../types/spec.js'; import type { Skill } from '../types/skill.js'; import { loadSpec } from '../pipeline/spec-loader.js'; import { apply } from '../pipeline/apply-pipeline.js'; @@ -26,15 +27,17 @@ import { let dynamicRegistryCache: { cwd: string; registry: RegistryProvider | null } | null = null; -const bundledSourcesConfigTemplate = fileURLToPath( - new URL('../../templates/sources.config.yaml', import.meta.url) -); +function bundledSourcesConfigTemplatePath(): string { + const fromEnv = process.env.AISTACK_SOURCES_CONFIG_TEMPLATE?.trim(); + if (fromEnv) return fromEnv; + return fileURLToPath(new URL('../../templates/sources.config.yaml', import.meta.url)); +} /** Copy bundled default GitHub/npm catalog definitions when `sources.config.yaml` is missing. */ export async function ensureDefaultSourcesConfig(projectRoot: string): Promise { const dest = path.join(projectRoot, 'sources.config.yaml'); if (existsSync(dest)) return; - await fs.copyFile(bundledSourcesConfigTemplate, dest); + await fs.copyFile(bundledSourcesConfigTemplatePath(), dest); } const GITIGNORE_MANAGED_START = '# --- ai-stack-kit (managed block)'; @@ -267,10 +270,22 @@ export async function searchModules( tags?: string[]; client?: string; moduleTypes?: AIModuleType[]; + /** Skip remote catalog APIs; use offline project suggestions only. */ + offline?: boolean; } = {} ): Promise { const cwd = opts.cwd ?? process.cwd(); const limit = opts.limit ?? 50; + + if (opts.offline) { + return buildOfflineSearchHits(cwd, query, { + tags: opts.tags, + client: opts.client, + limit, + moduleTypes: opts.moduleTypes, + }); + } + const reg = await getDynamicRegistry(cwd); if (reg) { @@ -449,15 +464,22 @@ export async function getModuleVersions(moduleName: string, cwd = process.cwd()) await getOfflineModuleInfo(moduleName, cwd); return ['latest']; } catch { - return ['latest', '1.0.0', '0.9.0']; + return ['latest']; } } /** @deprecated Use {@link getModuleVersions} */ export const getSkillVersions = getModuleVersions; +export interface RunApplyOptions { + dryRun?: boolean; + strict?: boolean; + verbose?: boolean; + forceReinstall?: boolean; +} + /** Full install + client adapter apply (idempotent). Ensures managed `.gitignore` entries for `.aistack` manifests & catalog cache (skipped when `dryRun`). */ -export async function runApply(cwd: string, options?: { dryRun?: boolean; strict?: boolean }) { +export async function runApply(cwd: string, options?: RunApplyOptions) { if (!options?.dryRun) { await ensureProjectGitignoreForAistack(path.resolve(cwd)); } @@ -465,19 +487,126 @@ export async function runApply(cwd: string, options?: { dryRun?: boolean; strict projectRoot: cwd, dryRun: options?.dryRun, strict: options?.strict, - logLevel: 'info', + forceReinstall: options?.forceReinstall, + logLevel: options?.verbose ? 'debug' : 'info', }); } +export interface ProjectStatusRow { + label: string; + ok: boolean; + detail: string; +} + +/** Minimal project status from spec + adapter support (used by `aistack status`). */ +export async function runStatus(cwd: string): Promise<{ + rows: ProjectStatusRow[]; + specPath: string; + moduleCount: number; + clientType?: string; +}> { + const projectRoot = path.resolve(cwd); + const specPath = path.join(projectRoot, 'spec.yaml'); + const rows: ProjectStatusRow[] = []; + + if (!existsSync(specPath)) { + rows.push({ label: 'spec.yaml', ok: false, detail: 'not found — run aistack init' }); + return { rows, specPath, moduleCount: 0 }; + } + rows.push({ label: 'spec.yaml', ok: true, detail: 'present' }); + + const sourcesPath = path.join(projectRoot, 'sources.config.yaml'); + rows.push({ + label: 'sources.config.yaml', + ok: existsSync(sourcesPath), + detail: existsSync(sourcesPath) ? 'present' : 'missing — run aistack init', + }); + + let clientType: string | undefined; + let moduleCount = 0; + try { + const spec = await loadSpec(projectRoot); + rows.push({ label: 'spec validation', ok: true, detail: 'valid' }); + { + clientType = spec.client.type; + moduleCount = flattenSpecModules(spec).length; + rows.push({ + label: 'modules in spec', + ok: true, + detail: `${moduleCount} enabled/listed`, + }); + try { + AdapterFactory.getAdapter(spec.client.type); + rows.push({ + label: `client adapter (${spec.client.type})`, + ok: true, + detail: 'supported', + }); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + rows.push({ + label: `client adapter (${spec.client.type})`, + ok: false, + detail: msg, + }); + } + } + } catch (e: unknown) { + const err = e as { code?: string; errors?: { path?: string; message?: string }[] }; + if (err.code === 'VALIDATION_ERROR') { + rows.push({ + label: 'spec validation', + ok: false, + detail: `${err.errors?.length ?? 0} error(s) — run aistack validate`, + }); + } else { + rows.push({ + label: 'spec validation', + ok: false, + detail: e instanceof Error ? e.message : String(e), + }); + } + } + + const manifestGlob = path.join(projectRoot, WORKSPACE_DOTDIR); + rows.push({ + label: WORKSPACE_DOTDIR, + ok: existsSync(manifestGlob), + detail: existsSync(manifestGlob) ? 'workspace dir present (run sync to refresh)' : 'not created yet', + }); + + return { rows, specPath, moduleCount, clientType }; +} + +/** Remove catalog listing cache under `.cache/aistack/`. */ +export async function cleanAistackCache(cwd: string): Promise<{ removed: string[] }> { + const cacheRoot = path.join(path.resolve(cwd), DEFAULT_RELATIVE_CACHE_DIR); + const removed: string[] = []; + if (!existsSync(cacheRoot)) { + return { removed }; + } + const entries = await fs.readdir(cacheRoot, { withFileTypes: true }); + for (const ent of entries) { + const full = path.join(cacheRoot, ent.name); + await fs.rm(full, { recursive: true, force: true }); + removed.push(full); + } + invalidateDynamicRegistryCache(); + return { removed }; +} + /** * Create spec.yaml file */ -export async function createSpecFile(data: { - project: any; - client: string; - skills: string[]; - settings: any; -}): Promise { +export async function createSpecFile( + data: { + project: any; + client: string; + skills: string[]; + settings: any; + }, + projectRoot = process.cwd() +): Promise { const spec: SpecFile = { version: '1.0', project: { @@ -522,7 +651,7 @@ export async function createSpecFile(data: { lineWidth: -1, }); - await fs.writeFile('spec.yaml', yamlContent, 'utf-8'); + await fs.writeFile(path.join(projectRoot, 'spec.yaml'), yamlContent, 'utf-8'); } function ensureSpecModuleArrays(spec: SpecFile): void { @@ -576,8 +705,10 @@ export async function addModuleToSpec(module: { * `project` removes `installScope` so adapters default to repo-local paths. */ clientInstallScope?: ClientInstallScope; -}): Promise { - const specPath = path.join(process.cwd(), 'spec.yaml'); +}, + projectRoot = process.cwd() +): Promise { + const specPath = path.join(projectRoot, 'spec.yaml'); if (!(await exists(specPath))) { throw { code: 'SPEC_NOT_FOUND', message: 'spec.yaml not found' }; @@ -657,8 +788,8 @@ export const addSkillToSpec = addModuleToSpec; /** * Remove a module by name from either `skills` or `modules`. */ -export async function removeModuleFromSpec(moduleName: string): Promise { - const specPath = path.join(process.cwd(), 'spec.yaml'); +export async function removeModuleFromSpec(moduleName: string, projectRoot = process.cwd()): Promise { + const specPath = path.join(projectRoot, 'spec.yaml'); if (!(await exists(specPath))) { throw { code: 'SPEC_NOT_FOUND', message: 'spec.yaml not found' }; @@ -685,16 +816,16 @@ export const removeSkillFromSpec = removeModuleFromSpec; /** * Read and validate spec.yaml (current working directory). */ -export async function readSpec(): Promise { - return loadSpec(process.cwd()); +export async function readSpec(projectRoot = process.cwd()): Promise { + return loadSpec(projectRoot); } /** * Validate spec.yaml */ -export async function validateSpecFile(): Promise<{ valid: boolean; errors?: any[] }> { +export async function validateSpecFile(projectRoot = process.cwd()): Promise<{ valid: boolean; errors?: any[] }> { try { - await readSpec(); + await readSpec(projectRoot); return { valid: true }; } catch (error: any) { if (error.code === 'VALIDATION_ERROR') { diff --git a/src/cli/doctor.ts b/src/cli/doctor.ts new file mode 100644 index 0000000..d70d565 --- /dev/null +++ b/src/cli/doctor.ts @@ -0,0 +1,154 @@ +/** + * `aistack doctor` — environment and project health checks. + */ + +import { existsSync, promises as fs } from 'node:fs'; +import * as path from 'node:path'; +import chalk from 'chalk'; +import figures from 'figures'; +import { CLI_COMMAND, DEFAULT_RELATIVE_CACHE_DIR } from '../branding.js'; +import { AdapterFactory } from '../client-adapters/adapter-factory.js'; +import { loadSourcesConfigFromProject } from '../registry/sources/load-sources-config.js'; +import { loadSpec } from '../pipeline/spec-loader.js'; +import { flattenSpecModules } from '../types/spec.js'; + +export interface DoctorCheck { + id: string; + ok: boolean; + warn?: boolean; + message: string; + hint?: string; +} + +export async function runDoctor(cwd: string): Promise<{ checks: DoctorCheck[]; ok: boolean }> { + const projectRoot = path.resolve(cwd); + const checks: DoctorCheck[] = []; + + const nodeMajor = parseInt(process.versions.node.split('.')[0] ?? '0', 10); + checks.push({ + id: 'node', + ok: nodeMajor >= 18, + message: `Node.js ${process.versions.node}`, + hint: nodeMajor >= 18 ? undefined : 'Upgrade to Node.js 18 or newer', + }); + + const specPath = path.join(projectRoot, 'spec.yaml'); + if (!existsSync(specPath)) { + checks.push({ + id: 'spec', + ok: false, + message: 'spec.yaml not found', + hint: `Run: ${CLI_COMMAND} init`, + }); + } else { + checks.push({ id: 'spec', ok: true, message: 'spec.yaml present' }); + try { + const spec = await loadSpec(projectRoot); + checks.push({ id: 'spec-valid', ok: true, message: 'spec.yaml validates' }); + try { + AdapterFactory.getAdapter(spec.client.type); + checks.push({ + id: 'adapter', + ok: true, + message: `client.type "${spec.client.type}" has a built-in adapter`, + }); + } catch (e) { + const msg = e instanceof Error ? e.message : String(e); + checks.push({ + id: 'adapter', + ok: false, + message: `No adapter for client.type "${spec.client.type}"`, + hint: 'Use cursor, copilot, or claude in spec.yaml', + }); + } + const count = flattenSpecModules(spec).filter((m) => m.enabled !== false).length; + checks.push({ + id: 'modules', + ok: count > 0, + warn: count === 0, + message: `${count} enabled module(s) in spec`, + hint: count === 0 ? `Run: ${CLI_COMMAND} search then ${CLI_COMMAND} skill add ` : undefined, + }); + } catch (e: unknown) { + const err = e as { code?: string }; + checks.push({ + id: 'spec-valid', + ok: false, + message: err.code === 'VALIDATION_ERROR' ? 'spec.yaml failed validation' : 'Could not load spec.yaml', + hint: `Run: ${CLI_COMMAND} validate`, + }); + } + } + + const sourcesPath = path.join(projectRoot, 'sources.config.yaml'); + if (!existsSync(sourcesPath)) { + checks.push({ + id: 'sources', + ok: false, + message: 'sources.config.yaml not found', + hint: `Run: ${CLI_COMMAND} init`, + }); + } else { + checks.push({ id: 'sources', ok: true, message: 'sources.config.yaml present' }); + try { + const cfg = await loadSourcesConfigFromProject(projectRoot); + const hasGithub = cfg ? (cfg.sources ?? []).some((s) => s.type === 'github') : false; + if (hasGithub && !process.env.GITHUB_TOKEN) { + checks.push({ + id: 'github-token', + ok: true, + warn: true, + message: 'GITHUB_TOKEN not set (GitHub catalog search may rate-limit)', + hint: 'export GITHUB_TOKEN=ghp_… # fine-grained: Contents read on public repos', + }); + } else if (hasGithub) { + checks.push({ + id: 'github-token', + ok: true, + message: 'GITHUB_TOKEN is set', + }); + } + } catch { + checks.push({ + id: 'sources', + ok: false, + message: 'sources.config.yaml could not be parsed', + }); + } + } + + const cacheDir = path.join(projectRoot, DEFAULT_RELATIVE_CACHE_DIR); + checks.push({ + id: 'cache', + ok: true, + message: existsSync(cacheDir) ? `Catalog cache present (${DEFAULT_RELATIVE_CACHE_DIR})` : 'No catalog cache yet (normal before first search)', + }); + + try { + await fs.access(projectRoot, fs.constants.W_OK); + checks.push({ id: 'writable', ok: true, message: 'Project directory is writable' }); + } catch { + checks.push({ + id: 'writable', + ok: false, + message: 'Project directory is not writable', + }); + } + + const ok = checks.every((c) => c.ok && !c.warn); + const hasFailure = checks.some((c) => !c.ok); + return { checks, ok: !hasFailure }; +} + +export function printDoctorReport(checks: DoctorCheck[]): void { + console.log(chalk.cyan.bold('\nAI Stack Kit doctor\n')); + for (const c of checks) { + const icon = !c.ok ? chalk.red(figures.cross) : c.warn ? chalk.yellow(figures.warning) : chalk.green(figures.tick); + const label = !c.ok ? chalk.red(c.message) : c.warn ? chalk.yellow(c.message) : chalk.white(c.message); + console.log(` ${icon} ${label}`); + if (c.hint) { + console.log(chalk.gray(` ${c.hint}`)); + } + } + console.log(); +} diff --git a/src/cli/index.ts b/src/cli/index.ts index c527692..f3487f7 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -10,6 +10,7 @@ * - aistack remove Remove a module from spec.yaml * - aistack install / apply / sync * - aistack list List modules in spec.yaml + * - aistack status / doctor Project health checks */ import { Command, Option } from 'commander'; @@ -53,7 +54,13 @@ import { parseModuleTypeCli, ensureDefaultSourcesConfig, ensureProjectGitignoreForAistack, + runStatus, + cleanAistackCache, + type RunApplyOptions, } from './commands.js'; +import { getGlobalCliOptions, dryRunSuffix } from './cli-options.js'; +import { promptSkillConfig } from './prompts.js'; +import { printDoctorReport, runDoctor } from './doctor.js'; import { runCatalogRefresh } from './catalog-refresh.js'; import { flattenSpecModules } from '../types/spec.js'; import { DEFAULT_MODULE_TYPE, type AIModuleType } from '../types/ai-module.js'; @@ -202,11 +209,36 @@ export function createCLI(): Command { registerUpdateCommand(program); registerValidateCommand(program); registerCleanCommand(program); + registerDoctorCommand(program); registerCatalogCommands(program); + program.addHelpText( + 'after', + `\nDocumentation: https://github.com/deb-adarsh/ai-stack-kit/blob/main/USER_GUIDE.md\n` + ); + return program; } +function runApplyOptionsFromGlobal( + globalOpts: ReturnType, + extra?: { forceReinstall?: boolean } +): RunApplyOptions { + return { + dryRun: globalOpts.dryRun, + verbose: globalOpts.verbose, + forceReinstall: extra?.forceReinstall, + }; +} + +const SUPPORTED_CLIENT_TYPES = new Set(['cursor', 'copilot', 'claude']); + +function resolveInitClientType(raw: string): string { + if (SUPPORTED_CLIENT_TYPES.has(raw)) return raw; + if (raw === 'other') return 'cursor'; + return 'cursor'; +} + function installScopeCliOption(): Option { return new Option( '--install-scope ', @@ -225,7 +257,8 @@ function registerInitCommand(program: Command) { .description(`Initialize a new ${PRODUCT_NAME} project`) .option('-y, --yes', 'Skip prompts and use defaults') .option('-t, --template ', 'Use a template') - .action(async (options) => { + .action(async (options, cmd) => { + const globalOpts = getGlobalCliOptions(cmd); const spinner = ora('Initializing project...').start(); try { @@ -235,8 +268,8 @@ function registerInitCommand(program: Command) { spinner.succeed(`Detected client: ${chalk.cyan(detectedClient.name)}`); if (options.yes) { - // Quick init with defaults - await quickInit(detectedClient); + await quickInit(detectedClient, globalOpts); + spinner.succeed('Project initialized'); return; } @@ -266,10 +299,10 @@ function registerInitCommand(program: Command) { { name: 'Cursor', value: 'cursor' }, { name: 'GitHub Copilot (VS Code)', value: 'copilot' }, { name: 'Claude', value: 'claude' }, - { name: 'VS Code', value: 'vscode' }, - { name: 'IntelliJ IDEA', value: 'intellij' }, - { name: 'Neovim', value: 'neovim' }, - { name: 'Other', value: 'other' }, + { + name: 'Other (advanced — defaults to cursor; edit spec.yaml)', + value: 'other', + }, ] as const; const defaultClientType = clientChoices.some((c) => c.value === detectedClient.type) ? detectedClient.type @@ -313,10 +346,19 @@ function registerInitCommand(program: Command) { ]); // Step 6: Create spec.yaml + const clientType = resolveInitClientType(clientAnswer.client); + if (clientType !== clientAnswer.client && clientAnswer.client !== 'other') { + console.log( + chalk.yellow( + `Note: "${clientAnswer.client}" has no built-in adapter — using client.type "${clientType}".` + ) + ); + } + spinner.start('Creating spec.yaml...'); await createSpecFile({ project: projectAnswers, - client: clientAnswer.client, + client: clientType, skills: skillNames, settings: settingsAnswers, }); @@ -335,7 +377,7 @@ function registerInitCommand(program: Command) { ]); if (shouldInstall.install) { - await runApply(process.cwd()); + await runApply(process.cwd(), runApplyOptionsFromGlobal(globalOpts)); } console.log(chalk.green('\n✓ Project initialized successfully!')); @@ -362,8 +404,10 @@ async function executeAddModuleFlow(params: { nameArg?: string; options: AddCliOptions; lockedKind?: AIModuleType; + globalOpts?: ReturnType; }): Promise { - const { nameArg, options, lockedKind } = params; + const { nameArg, options, lockedKind, globalOpts = { verbose: false, offline: false, dryRun: false } } = + params; let explicitType: AIModuleType | undefined; if (lockedKind !== undefined) { @@ -428,6 +472,7 @@ async function executeAddModuleFlow(params: { const results = await searchModules(searchAnswer.query, { cwd: process.cwd(), moduleTypes: moduleTypesFilter, + offline: globalOpts.offline, }); spinner.succeed(`Found ${results.length} result(s)`); @@ -456,18 +501,22 @@ async function executeAddModuleFlow(params: { const versions = await getModuleVersions(selected.name); verSpinner.succeed(); + const versionChoices = + versions.length <= 1 && versions[0] === 'latest' + ? [{ name: 'latest (no other versions in catalog)', value: 'latest' }] + : [ + { name: `latest${versions[0] && versions[0] !== 'latest' ? ` (${versions[0]})` : ''}`, value: 'latest' }, + new inquirer.Separator(), + ...versions.filter((v) => v !== 'latest').slice(0, 10).map((v) => ({ name: v, value: v })), + ]; + const versionAnswer = await inquirer.prompt([ { type: 'list', name: 'version', message: 'Select version:', default: 'latest', - choices: [ - { name: `latest (${versions[0]})`, value: 'latest' }, - new inquirer.Separator(), - ...versions.slice(0, 10).map((v) => ({ name: v, value: v })), - ...(versions.length > 10 ? [{ name: 'Other...', value: 'custom' }] : []), - ], + choices: versionChoices, }, ]); @@ -484,7 +533,7 @@ async function executeAddModuleFlow(params: { ]); if (configureAnswer.configure) { - config = await promptSkillConfig(selected.configSchema); + config = await promptSkillConfig(selected.name, selected.configSchema); } } @@ -517,7 +566,7 @@ async function executeAddModuleFlow(params: { ]); if (installAnswer.install) { - await runApply(process.cwd()); + await runApply(process.cwd(), runApplyOptionsFromGlobal(globalOpts)); } console.log(chalk.green(`\n✓ ${selected.name} added successfully!`)); @@ -536,9 +585,9 @@ function registerAddCommand(program: Command) { .option('--type ', 'Module type: skill | subagent | hook (when not using a typed subcommand)') .option('--save-dev', 'Add as dev dependency') .addOption(installScopeCliOption()) - .action(async (nameArg, options) => { + .action(async (nameArg, options, cmd) => { try { - await executeAddModuleFlow({ nameArg, options }); + await executeAddModuleFlow({ nameArg, options, globalOpts: getGlobalCliOptions(cmd) }); } catch (error) { handleError(error); } @@ -575,15 +624,46 @@ function registerListCommand(program: Command) { } function registerStatusCommand(program: Command) { - program.command('status').description('Show project / spec status').action(() => { - console.log(chalk.cyan(`Run \`${CLI_COMMAND} sync\` to apply. Status view coming soon.`)); - }); + program + .command('status') + .description('Show project / spec status') + .action(async () => { + try { + const { rows, moduleCount, clientType } = await runStatus(process.cwd()); + console.log(chalk.cyan.bold('\nProject status\n')); + for (const row of rows) { + const icon = row.ok ? chalk.green(figures.tick) : chalk.red(figures.cross); + console.log(` ${icon} ${chalk.bold(row.label)}: ${row.detail}`); + } + if (clientType) { + console.log(chalk.gray(`\n client.type: ${clientType} · modules: ${moduleCount}`)); + } + console.log(chalk.gray(`\n Run: ${CLI_COMMAND} sync · ${CLI_COMMAND} doctor\n`)); + } catch (e) { + handleError(e); + } + }); } function registerUpdateCommand(program: Command) { - program.command('update [skill]').description('Update skills').action(() => { - console.log(chalk.yellow('Not implemented — bump versions in spec.yaml and run sync.')); - }); + program + .command('update [skill]') + .description('Update module versions (manual — edit spec.yaml and sync)') + .action((skillName) => { + console.log(chalk.yellow('\nAutomatic updates are not implemented yet.')); + if (skillName) { + console.log(chalk.gray(` Bump the version for "${skillName}" in spec.yaml, then run:`)); + } else { + console.log(chalk.gray(' Bump versions in spec.yaml, then run:')); + } + console.log(chalk.cyan(` ${CLI_COMMAND} sync`)); + console.log( + chalk.gray( + '\n To discover new catalog entries: aistack catalog refresh --write\n Guide: https://github.com/deb-adarsh/ai-stack-kit/blob/main/USER_GUIDE.md\n' + ) + ); + process.exit(2); + }); } function registerValidateCommand(program: Command) { @@ -600,9 +680,41 @@ function registerValidateCommand(program: Command) { } function registerCleanCommand(program: Command) { - program.command('clean').description('Clean local cache').action(() => { - console.log(chalk.yellow('Not implemented yet.')); - }); + program + .command('clean') + .description('Remove local catalog cache (.cache/aistack)') + .action(async () => { + const spinner = ora('Cleaning catalog cache…').start(); + try { + const { removed } = await cleanAistackCache(process.cwd()); + if (removed.length === 0) { + spinner.succeed('Nothing to clean (cache directory empty or missing)'); + } else { + spinner.succeed(`Removed ${removed.length} cache entr${removed.length === 1 ? 'y' : 'ies'}`); + } + } catch (e) { + spinner.fail('Clean failed'); + handleError(e); + } + }); +} + +function registerDoctorCommand(program: Command) { + program + .command('doctor') + .description('Check environment, spec, and catalog configuration') + .action(async () => { + try { + const { checks, ok } = await runDoctor(process.cwd()); + printDoctorReport(checks); + if (!ok) { + process.exit(1); + } + console.log(chalk.green('All checks passed.')); + } catch (e) { + handleError(e); + } + }); } function registerCatalogCommands(program: Command) { @@ -652,17 +764,22 @@ function registerSearchCommand(program: Command) { .option('--type ', 'Filter by module type: skill | subagent | hook') .option('--client ', 'Filter by client type') .option('--json', 'Output as JSON') - .action(async (query, options) => { - const spinner = ora('Searching...').start(); + .action(async (query, options, cmd) => { + const globalOpts = getGlobalCliOptions(cmd); + const spinner = ora( + globalOpts.offline ? 'Searching (offline)…' : 'Searching…' + ).start(); try { const moduleTypes = options.type ? [parseModuleTypeCli(options.type)] : undefined; + const limit = parseInt(String(options.limit), 10) || 20; const results = await searchModules(query, { cwd: process.cwd(), - limit: parseInt(options.limit), + limit, tags: options.tag ? [options.tag] : undefined, client: options.client, moduleTypes, + offline: globalOpts.offline, }); spinner.succeed(`Found ${results.length} module(s)`); @@ -730,11 +847,14 @@ function registerInstallCommand(program: Command) { program .command('install') .description('Resolve, fetch, and install skills from spec.yaml') - .action(async () => { - const spinner = ora('Installing…').start(); + .action(async (_options, cmd) => { + const globalOpts = getGlobalCliOptions(cmd); + const spinner = ora(`Installing…${dryRunSuffix(globalOpts.dryRun)}`).start(); try { - const result = await runApply(process.cwd()); - spinner.succeed(`Installed / refreshed ${result.skillsInstalled} skill(s)`); + const result = await runApply(process.cwd(), runApplyOptionsFromGlobal(globalOpts)); + spinner.succeed( + `Installed / refreshed ${result.skillsInstalled} skill(s)${dryRunSuffix(globalOpts.dryRun)}` + ); } catch (e) { spinner.fail('Install failed'); handleError(e); @@ -746,11 +866,12 @@ function registerApplyCommand(program: Command) { program .command('apply') .description('Run full apply pipeline (install + client adapter)') - .action(async () => { - const spinner = ora('Applying…').start(); + .action(async (_options, cmd) => { + const globalOpts = getGlobalCliOptions(cmd); + const spinner = ora(`Applying…${dryRunSuffix(globalOpts.dryRun)}`).start(); try { - await runApply(process.cwd()); - spinner.succeed('Apply complete'); + await runApply(process.cwd(), runApplyOptionsFromGlobal(globalOpts)); + spinner.succeed(`Apply complete${dryRunSuffix(globalOpts.dryRun)}`); } catch (e) { spinner.fail('Apply failed'); handleError(e); @@ -768,8 +889,10 @@ function registerSyncCommand(program: Command) { .command('sync') .description('Sync skills (install + apply)') .option('-f, --force', 'Force reinstall') - .action(async (options) => { - console.log(chalk.cyan('Syncing skills...\n')); + .action(async (options, cmd) => { + const globalOpts = getGlobalCliOptions(cmd); + const dryLabel = dryRunSuffix(globalOpts.dryRun); + console.log(chalk.cyan(`Syncing skills…${dryLabel}\n`)); try { const spinner = ora('Validating spec.yaml...').start(); @@ -780,10 +903,13 @@ function registerSyncCommand(program: Command) { } spinner.succeed('Spec validated'); - spinner.start('Running apply pipeline (resolve → install → adapter)...'); - const applyResult = await runApply(process.cwd()); + spinner.start(`Running apply pipeline (resolve → install → adapter)…${dryLabel}`); + const applyResult = await runApply( + process.cwd(), + runApplyOptionsFromGlobal(globalOpts, { forceReinstall: Boolean(options.force) }) + ); spinner.succeed( - `Done — skills processed: ${applyResult.skillsResolved}, files written: ${applyResult.adapterReport?.written.length ?? 0}` + `Done — skills processed: ${applyResult.skillsResolved}, files written: ${applyResult.adapterReport?.written.length ?? 0}${dryLabel}` ); if (!applyResult.success) { @@ -848,14 +974,17 @@ function registerModuleKindCommandGroups(program: Command) { .option('-t, --tag ', 'Filter by tag') .option('--client ', 'Filter by client type') .option('--json', 'Output as JSON') - .action(async (query, options) => { - const spinner = ora('Searching...').start(); + .action(async (query, options, cmd) => { + const globalOpts = getGlobalCliOptions(cmd); + const spinner = ora(globalOpts.offline ? 'Searching (offline)…' : 'Searching…').start(); try { - const results = await g.searchFn(query, { + const results = await searchModules(query, { cwd: process.cwd(), limit: parseInt(options.limit, 10) || 20, tags: options.tag ? [options.tag] : undefined, client: options.client, + moduleTypes: [g.kind], + offline: globalOpts.offline, }); spinner.succeed(`Found ${results.length} ${g.cmd}(s)`); if (options.json) { @@ -883,7 +1012,7 @@ function registerModuleKindCommandGroups(program: Command) { .option('-s, --source ', 'Source type (github, npm, registry)') .option('--save-dev', 'Add as dev dependency') .addOption(installScopeCliOption()) - .action(async (name, options) => { + .action(async (name, options, cmd) => { try { await executeAddModuleFlow({ nameArg: name, @@ -893,6 +1022,7 @@ function registerModuleKindCommandGroups(program: Command) { installScope: options.installScope, }, lockedKind: g.kind, + globalOpts: getGlobalCliOptions(cmd), }); } catch (e) { handleError(e); @@ -969,6 +1099,9 @@ function handleError(error: any) { } else if (error.code === 'SPEC_APPEND_VALIDATION_FAILED') { console.error(chalk.red('\n✗ Append rolled back')); console.log(chalk.gray(error.message)); + } else if (isGithubRateLimitError(error)) { + console.error(chalk.red('\n✗ GitHub API rate limit or auth error')); + printGithubTokenHint(); } else { console.error(chalk.red('\n✗ Error:'), error.message); if (process.env.DEBUG) { @@ -978,17 +1111,39 @@ function handleError(error: any) { process.exit(1); } -async function promptSkillConfig(_schema: unknown): Promise> { - return {}; +function isGithubRateLimitError(error: { message?: string }): boolean { + const msg = (error.message ?? '').toLowerCase(); + return ( + msg.includes('rate limit') || + msg.includes('api rate limit') || + msg.includes('403') || + msg.includes('401') || + msg.includes('bad credentials') + ); } -async function quickInit(client: { type: string }): Promise { - const adaptersSupported = new Set(['cursor', 'copilot', 'claude']); - const clientType = adaptersSupported.has(client.type) ? client.type : 'cursor'; - if (clientType !== client.type) { +function printGithubTokenHint(): void { + console.log(chalk.gray('\n Higher GitHub API limits for search and catalogs:')); + console.log(chalk.cyan(' export GITHUB_TOKEN=ghp_…')); + console.log( + chalk.gray( + ' # fine-grained PAT: Contents read on public repos\n https://github.com/deb-adarsh/ai-stack-kit/blob/main/USER_GUIDE.md#quick-start\n' + ) + ); + console.log(chalk.gray(' Or use: aistack --offline search ')); +} + +async function quickInit( + client: { type: string }, + globalOpts: ReturnType +): Promise { + const clientType = resolveInitClientType( + SUPPORTED_CLIENT_TYPES.has(client.type) ? client.type : 'cursor' + ); + if (clientType !== client.type && client.type !== 'unknown') { console.log( chalk.gray( - `Note: init --yes chose client.type "${clientType}" (detected "${client.type}" has no built-in adapter — use interactive init to pick copilot, claude, or cursor).` + `Note: init -y chose client.type "${clientType}" (detected "${client.type}" has no built-in adapter).` ) ); } @@ -999,11 +1154,18 @@ async function quickInit(client: { type: string }): Promise { author: '', }, client: clientType, - skills: ['canvas', 'typescript-helper'], + skills: [], settings: { autoSync: false, verifyChecksums: true }, }); await ensureDefaultSourcesConfig(process.cwd()); await ensureProjectGitignoreForAistack(process.cwd()); + console.log(chalk.green('✔ Created spec.yaml and sources.config.yaml')); + console.log( + chalk.gray(` Add modules: ${CLI_COMMAND} search · Skill browser: https://deb-adarsh.github.io/ai-stack-kit/`) + ); + if (!globalOpts.dryRun) { + console.log(chalk.gray(` Then: ${CLI_COMMAND} sync`)); + } } /** diff --git a/src/client-adapters/__tests__/adapter-factory.test.ts b/src/client-adapters/__tests__/adapter-factory.test.ts new file mode 100644 index 0000000..c40f8b8 --- /dev/null +++ b/src/client-adapters/__tests__/adapter-factory.test.ts @@ -0,0 +1,18 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { AdapterFactory } from '../adapter-factory.js'; + +describe('AdapterFactory', () => { + it('throws a clear error for unknown client types', () => { + assert.throws( + () => AdapterFactory.getAdapter('not-a-real-client'), + /No ClientAdapter for client type "not-a-real-client"/ + ); + }); + + it('resolves built-in adapters', () => { + assert.equal(AdapterFactory.getAdapter('cursor').name, 'cursor'); + assert.equal(AdapterFactory.getAdapter('copilot').name, 'copilot'); + assert.equal(AdapterFactory.getAdapter('claude').name, 'claude'); + }); +}); diff --git a/src/client-adapters/template-loader.ts b/src/client-adapters/template-loader.ts index b4e935c..c34cf07 100644 --- a/src/client-adapters/template-loader.ts +++ b/src/client-adapters/template-loader.ts @@ -28,6 +28,8 @@ export function renderTemplate(template: string, vars: Record): /** Resolve repo-root `templates/clients` next to `src/` (bundled layout). */ export function bundledTemplatesDir(): string { + const fromEnv = process.env.AISTACK_TEMPLATES_CLIENTS?.trim(); + if (fromEnv) return fromEnv; return fileURLToPath(new URL('../../templates/clients', import.meta.url)); } diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..bcacd40 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,15 @@ +/** + * Programmatic API for AI Stack Kit (VS Code extension, embedders). + */ + +export { AistackWorkspace } from './api/workspace-api.js'; +export { runCatalogRefreshCore } from './api/catalog-refresh-core.js'; +export { createCallbackLogger } from './api/callback-logger.js'; +export * from './api/types.js'; + +export { loadSpec } from './pipeline/spec-loader.js'; +export { apply, type ApplyPipelineOptions, type ApplyPipelineResult } from './pipeline/apply-pipeline.js'; +export { createConsoleLogger, type Logger, type LogLevel } from './pipeline/logger.js'; + +export { AdapterFactory } from './client-adapters/adapter-factory.js'; +export { runDoctor, type DoctorCheck } from './cli/doctor.js'; diff --git a/src/pipeline/__tests__/apply-dry-run.test.ts b/src/pipeline/__tests__/apply-dry-run.test.ts new file mode 100644 index 0000000..98912f0 --- /dev/null +++ b/src/pipeline/__tests__/apply-dry-run.test.ts @@ -0,0 +1,44 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { mkdtemp, writeFile, access } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { apply } from '../apply-pipeline.js'; + +async function pathExists(p: string): Promise { + try { + await access(p); + return true; + } catch { + return false; + } +} + +describe('apply dry-run', () => { + it('does not write skill install dirs or adapter outputs', async () => { + const cwd = await mkdtemp(path.join(tmpdir(), 'aistack-apply-')); + await writeFile( + path.join(cwd, 'spec.yaml'), + `version: "1.0" +client: + type: cursor +skills: + - name: placeholder + version: latest + source: local + sourceConfig: + path: . + enabled: false +`, + 'utf-8' + ); + + const installRoot = path.join(cwd, '.aistack', 'skills'); + const cursorSkills = path.join(cwd, '.cursor', 'skills'); + + const result = await apply({ projectRoot: cwd, dryRun: true }); + assert.equal(result.skillsInstalled, 0); + assert.equal(await pathExists(installRoot), false); + assert.equal(await pathExists(cursorSkills), false); + }); +}); diff --git a/src/pipeline/__tests__/spec-loader.test.ts b/src/pipeline/__tests__/spec-loader.test.ts new file mode 100644 index 0000000..00efe76 --- /dev/null +++ b/src/pipeline/__tests__/spec-loader.test.ts @@ -0,0 +1,70 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { mkdtemp, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { loadSpec } from '../spec-loader.js'; + +describe('loadSpec', () => { + it('loads a minimal valid spec', async () => { + const cwd = await mkdtemp(path.join(tmpdir(), 'aistack-spec-')); + await writeFile( + path.join(cwd, 'spec.yaml'), + `version: "1.0" +client: + type: cursor +skills: + - name: placeholder + version: latest + source: local + sourceConfig: + path: . + enabled: false +`, + 'utf-8' + ); + + const spec = await loadSpec(cwd); + assert.equal(spec.client.type, 'cursor'); + assert.equal(spec.skills?.length, 1); + }); + + it('loads an empty skills list (init / extension default)', async () => { + const cwd = await mkdtemp(path.join(tmpdir(), 'aistack-spec-empty-')); + await writeFile( + path.join(cwd, 'spec.yaml'), + `version: "1.0" +client: + type: copilot + features: + - skills + - hooks +skills: [] +modules: [] +settings: + autoSync: false + verifyChecksums: true +`, + 'utf-8' + ); + + const spec = await loadSpec(cwd); + assert.equal(spec.client.type, 'copilot'); + assert.equal(spec.skills.length, 0); + }); + + it('rejects spec without client', async () => { + const cwd = await mkdtemp(path.join(tmpdir(), 'aistack-spec-bad-')); + await writeFile( + path.join(cwd, 'spec.yaml'), + `version: "1.0" +skills: [] +`, + 'utf-8' + ); + + await assert.rejects(() => loadSpec(cwd), (err: unknown) => { + return typeof err === 'object' && err !== null && (err as { code?: string }).code === 'VALIDATION_ERROR'; + }); + }); +}); diff --git a/src/pipeline/apply-pipeline.ts b/src/pipeline/apply-pipeline.ts index c66a4eb..12e4e45 100644 --- a/src/pipeline/apply-pipeline.ts +++ b/src/pipeline/apply-pipeline.ts @@ -6,7 +6,7 @@ */ import { WORKSPACE_DOTDIR } from '../branding.js'; -import { rm } from 'node:fs/promises'; +import { rm, stat } from 'node:fs/promises'; import * as path from 'node:path'; import type { SpecFile } from '../types/spec.js'; import { flattenSpecModules } from '../types/spec.js'; @@ -30,6 +30,8 @@ export interface ApplyPipelineOptions { logLevel?: 'debug' | 'info' | 'warn' | 'error'; logger?: Logger; dryRun?: boolean; + /** Remove existing install dirs before writing (sync --force). */ + forceReinstall?: boolean; engineVersion?: string; /** If true, first skill error aborts the pipeline (after optional rollback). */ strict?: boolean; @@ -143,6 +145,18 @@ export async function apply(options: ApplyPipelineOptions): Promise { - if (data.skills.length + data.modules.length < 1) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: 'At least one entry in skills or modules is required', - path: ['skills'], - }); - } - }); +export const SpecFileSchema = z.object({ + version: z.string().regex(/^\d+\.\d+$/, 'Version must be in format X.Y'), + project: ProjectMetadataSchema.optional(), + client: ClientConfigSchema, + skills: z.array(SkillSchema).default([]), + modules: z.array(SkillSchema).default([]), + settings: SpecSettingsSchema.optional(), + hooks: LifecycleHooksSchema.optional(), + metadata: z.record(z.unknown()).optional(), +}); /** * Skill manifest schema diff --git a/templates/spec.yaml b/templates/spec.yaml index 0653337..48a06ac 100644 --- a/templates/spec.yaml +++ b/templates/spec.yaml @@ -17,7 +17,7 @@ project: # Client/IDE configuration (required) client: - # Client type: cursor, vscode, intellij, etc. + # Built-in adapters: cursor | copilot | claude type: cursor # Where adapters write skills/agents: project (default) vs user home directory. diff --git a/web/src/App.tsx b/web/src/App.tsx index dd0922c..f541fb2 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; type Skill = { id: string; @@ -23,6 +23,11 @@ type Catalog = { skills: Skill[]; }; +const MODULE_TYPES = ['skill', 'subagent', 'hook'] as const; +type ModuleTypeFilter = (typeof MODULE_TYPES)[number] | ''; + +const USER_GUIDE_URL = 'https://github.com/deb-adarsh/ai-stack-kit/blob/main/USER_GUIDE.md'; + function skillFamily(s: Skill): string { return s.publisherFamily ?? s.publisherLabel; } @@ -39,6 +44,10 @@ function metaLine(s: Skill): string { return parts.join(' · '); } +function npxInit() { + return `npx ${CLI_NPX_SPEC} init`; +} + function npxAdd(id: string) { return `npx ${CLI_NPX_SPEC} skill add "${id}"`; } @@ -55,21 +64,43 @@ async function loadCatalog(): Promise { return res.json() as Promise; } -async function copyText(text: string) { - try { - await navigator.clipboard.writeText(text); - } catch { - window.prompt('Copy:', text); - } +function readFiltersFromUrl(): { + q: string; + client: string | null; + moduleType: ModuleTypeFilter; +} { + const params = new URLSearchParams(window.location.search); + const mt = (params.get('type') ?? '').toLowerCase(); + const moduleType = MODULE_TYPES.includes(mt as (typeof MODULE_TYPES)[number]) + ? (mt as (typeof MODULE_TYPES)[number]) + : ''; + return { + q: params.get('q') ?? '', + client: params.get('client') || null, + moduleType, + }; +} + +function writeFiltersToUrl(q: string, clientPick: string | null, moduleType: ModuleTypeFilter) { + const params = new URLSearchParams(); + const qt = q.trim(); + if (qt) params.set('q', qt); + if (clientPick) params.set('client', clientPick); + if (moduleType) params.set('type', moduleType); + const next = params.toString(); + const url = next ? `${window.location.pathname}?${next}` : window.location.pathname; + window.history.replaceState(null, '', url); } export default function App() { const [catalog, setCatalog] = useState(null); const [error, setError] = useState(null); - const [q, setQ] = useState(''); + const [q, setQ] = useState(() => readFiltersFromUrl().q); const [familyPick, setFamilyPick] = useState>(new Set()); const [pubPick, setPubPick] = useState>(new Set()); - const [clientPick, setClientPick] = useState(null); + const [clientPick, setClientPick] = useState(() => readFiltersFromUrl().client); + const [moduleTypePick, setModuleTypePick] = useState(() => readFiltersFromUrl().moduleType); + const [toast, setToast] = useState(null); useEffect(() => { loadCatalog() @@ -77,6 +108,25 @@ export default function App() { .catch((e: Error) => setError(e.message)); }, []); + useEffect(() => { + writeFiltersToUrl(q, clientPick, moduleTypePick); + }, [q, clientPick, moduleTypePick]); + + const copyText = useCallback(async (text: string, label = 'Copied!') => { + try { + await navigator.clipboard.writeText(text); + setToast(label); + } catch { + window.prompt('Copy:', text); + } + }, []); + + useEffect(() => { + if (!toast) return; + const t = window.setTimeout(() => setToast(null), 2000); + return () => window.clearTimeout(t); + }, [toast]); + const families = useMemo(() => { if (!catalog?.publisherFamilies?.length) { const s = new Set(); @@ -101,6 +151,7 @@ export default function App() { return catalog.skills.filter((s) => { if (familyPick.size && !familyPick.has(skillFamily(s))) return false; if (pubPick.size && !pubPick.has(s.publisherLabel)) return false; + if (moduleTypePick && (s.moduleType ?? 'skill').toLowerCase() !== moduleTypePick) return false; if ( clientPick && !(s.supportedClients ?? []).some((c) => c.toLowerCase() === clientPick.toLowerCase()) @@ -108,10 +159,10 @@ export default function App() { return false; if (!qt) return true; const blob = - `${s.id} ${s.skillFolder} ${s.description} ${s.repo} ${s.publisherLabel} ${skillFamily(s)} ${s.publisherChannel ?? ''}`.toLowerCase(); + `${s.id} ${s.skillFolder} ${s.description} ${s.repo} ${s.publisherLabel} ${skillFamily(s)} ${s.publisherChannel ?? ''} ${s.moduleType}`.toLowerCase(); return blob.includes(qt); }); - }, [catalog, q, familyPick, pubPick, clientPick]); + }, [catalog, q, familyPick, pubPick, clientPick, moduleTypePick]); function toggleFamily(label: string) { setFamilyPick((prev) => { @@ -131,6 +182,14 @@ export default function App() { }); } + function clearFilters() { + setQ(''); + setFamilyPick(new Set()); + setPubPick(new Set()); + setClientPick(null); + setModuleTypePick(''); + } + if (error) { return (
@@ -153,31 +212,61 @@ export default function App() { return (
+ {toast && ( +
+ {toast} +
+ )} +
-
- -

- AI Stack Kit -
- Skill browser -

+
+
+ +

+ AI Stack Kit +
+ Skill browser +

+
+ + Docs +

Curated GitHub skill trees: Copilot community, Anthropic, Microsoft, Azure, OpenAI, Google Cloud, Composio, and more. - Filter by ecosystem (Microsoft includes GitHub-hosted Copilot catalogs,{' '} - microsoft/skills, and microsoft/azure-skills; Google includes the Cloud subtree) or by GitHub org. - Copy npx, run in a project with{' '} - aistack init, then sync. + Filter by ecosystem or publisher, copy npx commands, then sync into your IDE.

+
+

Getting started

+
    +
  1. + {npxInit()} + +
  2. +
  3. + {npxAdd('')} + — pick a module below +
  4. +
  5. + {npxSync()} + +
  6. +
+
+
+