From 55c866241f081f98c87d221901514619d1fc07f7 Mon Sep 17 00:00:00 2001 From: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Date: Wed, 30 Sep 2026 15:53:22 -0700 Subject: [PATCH 1/5] Keep skill links inside each skill directory Marketplace link validation (vally valid-refs, used by awesome-copilot) rejects markdown links that resolve outside a skill's own folder. Name sibling skills and the shared source-generator reference in plain text instead, and add the same check to the plugin validator so CI catches regressions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/pr-validation.yml | 21 ++++++++++++++++++- CHANGELOG.md | 4 ++++ .../skills/winui-code-review/SKILL.md | 6 +++--- .../agent-plugin/skills/winui-design/SKILL.md | 2 +- .../skills/winui-dev-workflow/SKILL.md | 10 ++++----- .../skills/winui-packaging/SKILL.md | 6 +++--- .../references/sourcegen-patterns.md | 2 +- .../agent-plugin/skills/winui-setup/SKILL.md | 2 +- .../skills/winui-ui-testing/SKILL.md | 4 ++-- .../skills/winui-wpf-migration/SKILL.md | 12 +++++------ 10 files changed, 46 insertions(+), 23 deletions(-) diff --git a/.github/workflows/pr-validation.yml b/.github/workflows/pr-validation.yml index 56d7796d..0b986962 100644 --- a/.github/workflows/pr-validation.yml +++ b/.github/workflows/pr-validation.yml @@ -137,8 +137,27 @@ jobs: if not skill_dirs: errors.append(f"No immediate skill directories found under {skills_root}") for skill_dir in skill_dirs: - if not (skill_dir / "SKILL.md").is_file(): + skill_md = skill_dir / "SKILL.md" + if not skill_md.is_file(): errors.append(f"Immediate skill directory lacks SKILL.md: {skill_dir}") + continue + # Mirrors vally's valid-refs lint used by marketplaces such as + # awesome-copilot: markdown links must resolve inside the skill + # directory. Name sibling skills in plain text instead. + body = re.sub(r"(?ms)^(```|~~~).*?^\1", "", skill_md.read_text(encoding="utf-8")) + body = re.sub(r"`[^`\n]*`", "", body) + targets = re.findall(r"\]\(([^)\s]+)", body) + re.findall(r"(?m)^\s*\[[^\]]+\]:\s*(\S+)", body) + for target in targets: + if re.match(r"^[A-Za-z][A-Za-z0-9+.-]*:", target) or target.startswith("#"): + continue + relative = target.split("#", 1)[0] + if not relative: + continue + resolved = (skill_dir / relative).resolve() + if not resolved.is_relative_to(skill_dir.resolve()): + errors.append(f"{skill_md}: link '{target}' points outside the skill directory; name the other skill in plain text") + elif not resolved.exists(): + errors.append(f"{skill_md}: link '{target}' does not exist") forbidden_portable_paths = ( ".claude-plugin", diff --git a/CHANGELOG.md b/CHANGELOG.md index 29af2bec..e32e6e73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,10 @@ The `version-bump` and `changelog-entry` CI jobs enforce this. ### Fixed +- Replace cross-skill markdown links with plain-text skill names so each skill + is self-contained and passes marketplace link validation (vally `valid-refs`), + which blocked the awesome-copilot listing update. CI now enforces this. + ### Removed ### Deprecated diff --git a/plugins/winui/agent-plugin/skills/winui-code-review/SKILL.md b/plugins/winui/agent-plugin/skills/winui-code-review/SKILL.md index eda9715d..0093de61 100644 --- a/plugins/winui/agent-plugin/skills/winui-code-review/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-code-review/SKILL.md @@ -9,9 +9,9 @@ Run a code review **after the app builds and before committing**. This catches q ### How to Review -Read through the project's XAML and C# files and check each section below. For analyzer setup, see [winui-dev-workflow](../winui-dev-workflow/SKILL.md); if it isn't installed, tell the user its checks didn't run. +Read through the project's XAML and C# files and check each section below. For analyzer setup, see `winui-dev-workflow`; if it isn't installed, tell the user its checks didn't run. -Before reporting an API mismatch or recommending a replacement, verify it against the **restored app project's** references with CLI 0.7+ `winapp find-api`, for example `winapp find-api members NavigationView --filter selected --json --project-dir `. See [winui-design](../winui-design/SKILL.md) for batch property checks and project selection; machine-SDK results are not proof of app-package availability. +Before reporting an API mismatch or recommending a replacement, verify it against the **restored app project's** references with CLI 0.7+ `winapp find-api`, for example `winapp find-api members NavigationView --filter selected --json --project-dir `. See `winui-design` for batch property checks and project selection; machine-SDK results are not proof of app-package availability. The analyzer catches a curated set of WinUI 3 / Windows App SDK issues with categorized 4-digit IDs: @@ -42,7 +42,7 @@ Use the installed package's diagnostic help links for rule details. Check inheri ### Native AOT / Trimming (When Intended) - [ ] The published artifact was tested (a Release JIT run is not AOT validation), with IL/CsWinRT warnings fixed rather than suppressed -- [ ] ABI-crossing types are partial; JSON and runtime bindings use source generation — see [source-generator patterns](../winui-packaging/references/sourcegen-patterns.md) +- [ ] ABI-crossing types are partial; JSON and runtime bindings use source generation — see `winui-packaging`'s `references/sourcegen-patterns.md` ### Accessibility diff --git a/plugins/winui/agent-plugin/skills/winui-design/SKILL.md b/plugins/winui/agent-plugin/skills/winui-design/SKILL.md index 0e5e0830..55026a9a 100644 --- a/plugins/winui/agent-plugin/skills/winui-design/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-design/SKILL.md @@ -103,7 +103,7 @@ Don't size the window by setting `Width`/`Height` on the root `Grid` — that cl ``` -In a page/window, `x:Bind` resolves against code-behind (e.g., its `Vm` property), not `DataContext`. Use `x:DataType` on typed **DataTemplates**, not on `Page` to set a VM. Runtime `{Binding}`/`DisplayMemberPath` can be appropriate; for AOT, their source classes may need `partial` plus `[WinRT.GeneratedBindableCustomProperty]`. See [source-generator patterns](../winui-packaging/references/sourcegen-patterns.md) instead of treating all runtime binding as unsupported. +In a page/window, `x:Bind` resolves against code-behind (e.g., its `Vm` property), not `DataContext`. Use `x:DataType` on typed **DataTemplates**, not on `Page` to set a VM. Runtime `{Binding}`/`DisplayMemberPath` can be appropriate; for AOT, their source classes may need `partial` plus `[WinRT.GeneratedBindableCustomProperty]`. See `winui-packaging`'s `references/sourcegen-patterns.md` instead of treating all runtime binding as unsupported. ### `TextBox` two-way needs `UpdateSourceTrigger=PropertyChanged` diff --git a/plugins/winui/agent-plugin/skills/winui-dev-workflow/SKILL.md b/plugins/winui/agent-plugin/skills/winui-dev-workflow/SKILL.md index adedbaee..fa0269ab 100644 --- a/plugins/winui/agent-plugin/skills/winui-dev-workflow/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-dev-workflow/SKILL.md @@ -28,14 +28,14 @@ dotnet add .\MyApp.csproj package Microsoft.Windows.SDK.BuildTools.WinUIAnalyzer Keep `PrivateAssets="all"` on the reference. It loads in normal CLI, IDE, and CI builds; WinApp CLI does not inject it. If the package is unavailable, continue and tell the user its checks for potential runtime issues did not run. Undo only an incomplete reference added by this attempt; do not remove existing references or hide other restore failures. -For other packages, prefer the latest stable unless the project has a version policy or the user requests a specific version. Before coding API assumptions, use `winapp find-api` scoped to the restored app with `--project-dir ` (or `--project ` in a solution); see [winui-design](../winui-design/SKILL.md). +For other packages, prefer the latest stable unless the project has a version policy or the user requests a specific version. Before coding API assumptions, use `winapp find-api` scoped to the restored app with `--project-dir ` (or `--project ` in a solution); see `winui-design`. ### Build & Run (JIT Development) ```powershell winapp run . --detach --json ``` -For UI testing, see [winui-ui-testing](../winui-ui-testing/SKILL.md), which chooses the execution target itself. +For UI testing, see `winui-ui-testing`, which chooses the execution target itself. Ordinary `winapp run` uses the build/JIT path, **even with `-c Release`**; it does not validate Native AOT. Use an explicit `.csproj` when project selection is ambiguous; see `winapp run --help` for options. @@ -48,7 +48,7 @@ For intended AOT deployment, set `true` in the app proj winapp run . --aot -c Release --arch --detach --json winapp run . --aot -c Release --arch -p PublishAot=true --detach --json ``` -Fix IL/CsWinRT warnings rather than suppressing them. See [AOT/source-generator patterns](../winui-packaging/references/sourcegen-patterns.md). +Fix IL/CsWinRT warnings rather than suppressing them. See `winui-packaging`'s `references/sourcegen-patterns.md`. ### Diagnosing Crashes @@ -82,7 +82,7 @@ Run attached with `--debug-output` and **invoke it with `mode: "async"`**, then | WinApp CLI | 0.7+ | | Native AOT only | MSVC C++ build tools (Visual Studio or Build Tools, **Desktop development with C++** workload, target-architecture tools); not needed for normal builds | -If WinApp CLI is missing or older than 0.7, install or upgrade it using [winui-setup](../winui-setup/SKILL.md) without asking (it needs no admin rights) and tell the user. Ask before installing anything that needs admin rights — the .NET SDK, Developer Mode, or the [Native AOT toolchain](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/); do not work around them. +If WinApp CLI is missing or older than 0.7, install or upgrade it using `winui-setup` without asking (it needs no admin rights) and tell the user. Ask before installing anything that needs admin rights — the .NET SDK, Developer Mode, or the [Native AOT toolchain](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/); do not work around them. ### Critical Rules @@ -93,4 +93,4 @@ If WinApp CLI is missing or older than 0.7, install or upgrade it using [winui-s ### References -- [winui-packaging](../winui-packaging/SKILL.md) — release packaging directly from the project; no development registration required. +- `winui-packaging` — release packaging directly from the project; no development registration required. diff --git a/plugins/winui/agent-plugin/skills/winui-packaging/SKILL.md b/plugins/winui/agent-plugin/skills/winui-packaging/SKILL.md index 5d1cada7..17bb634e 100644 --- a/plugins/winui/agent-plugin/skills/winui-packaging/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-packaging/SKILL.md @@ -3,7 +3,7 @@ name: winui-packaging description: "MSIX packaging, code signing, and distribution for WinUI 3 apps with WinApp CLI 0.7+ — SDK-native project packaging, Native AOT, certificates, self-contained deployment, CI/CD, and Microsoft Store handoff. Use when preparing for release, creating MSIX installers, managing certificates, setting up CI/CD packaging, or publishing to the Microsoft Store." --- -Requires **WinApp CLI 0.7+**. For analyzer setup, see [winui-dev-workflow](../winui-dev-workflow/SKILL.md). +Requires **WinApp CLI 0.7+**. For analyzer setup, see `winui-dev-workflow`. ### Quick Reference @@ -23,7 +23,7 @@ Requires **WinApp CLI 0.7+**. For analyzer setup, see [winui-dev-workflow](../wi - Pass the **explicit project file**, not `.` or a guessed `bin` folder. WinUI project packaging uses SDK-native `dotnet publish` packaging, defaults to **Release**, and preserves project AOT settings. - Check manifest identity, target architectures, the SDK for the app's TFM, and release warnings. - For Native AOT, set `true` in the project and fix IL/CsWinRT warnings; there is **no `winapp package --aot`**. AOT also needs the MSVC C++ build tools. See [source-generator patterns](references/sourcegen-patterns.md). -- Project packaging rejects `WindowsPackageType=None`; restore the packaged setting first (see [winui-dev-workflow](../winui-dev-workflow/SKILL.md) Critical Rules). +- Project packaging rejects `WindowsPackageType=None`; restore the packaged setting first (see `winui-dev-workflow` Critical Rules). Do **not** run/register/unregister a development package just to produce release artifacts. Project packaging builds without a development `winapp run --no-launch` step. For WinUI SDK-native packaging, do not pass layout overrides `--manifest`, `--executable`, or `--skip-pri`; fix the project/manifest instead. @@ -55,7 +55,7 @@ winapp sign .\MyApp.msix .\prod.pfx --timestamp http://timestamp.digicert.com `--timestamp` belongs to **`winapp sign`**, not `winapp package`. Use an approved timestamp service and protect the PFX/password. #### Step 5: Install or Distribute -When installation/testing is part of the task, choose the target per [winui-ui-testing](../winui-ui-testing/SKILL.md) Step 1, and get consent for certificate trust and dependency provisioning on that machine. Packaging alone is not permission to install an app. +When installation/testing is part of the task, choose the target per `winui-ui-testing` Step 1, and get consent for certificate trust and dependency provisioning on that machine. Packaging alone is not permission to install an app. ### Self-Contained Does Not Mean Single-File diff --git a/plugins/winui/agent-plugin/skills/winui-packaging/references/sourcegen-patterns.md b/plugins/winui/agent-plugin/skills/winui-packaging/references/sourcegen-patterns.md index 215c1b19..cbdb9fbf 100644 --- a/plugins/winui/agent-plugin/skills/winui-packaging/references/sourcegen-patterns.md +++ b/plugins/winui/agent-plugin/skills/winui-packaging/references/sourcegen-patterns.md @@ -1,6 +1,6 @@ # Source Generator Patterns — Detailed Reference -Patterns for Native AOT and trimming in WinUI 3. See [SKILL.md](../SKILL.md) for project packaging and [winui-dev-workflow](../../winui-dev-workflow/SKILL.md) for analyzer setup and publish runs. +Patterns for Native AOT and trimming in WinUI 3. See [SKILL.md](../SKILL.md) for project packaging and `winui-dev-workflow` for analyzer setup and publish runs. --- diff --git a/plugins/winui/agent-plugin/skills/winui-setup/SKILL.md b/plugins/winui/agent-plugin/skills/winui-setup/SKILL.md index 6943daaf..b4b64b96 100644 --- a/plugins/winui/agent-plugin/skills/winui-setup/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-setup/SKILL.md @@ -132,7 +132,7 @@ If the user declines or dismisses UAC, continue to the summary and print the com Report these separately from the base toolchain. `winapp target snapshot sandbox --json` inspects an existing guest without starting or repairing it; "no target running" alone does not -mean the Windows feature is unavailable. [winui-ui-testing](../winui-ui-testing/SKILL.md) +mean the Windows feature is unavailable. `winui-ui-testing` Step 1 defines what to do when Windows Sandbox is unavailable. Enabling Windows Sandbox is a **user action** (admin plus a reboot): ask the user diff --git a/plugins/winui/agent-plugin/skills/winui-ui-testing/SKILL.md b/plugins/winui/agent-plugin/skills/winui-ui-testing/SKILL.md index bb2265cb..65e84fa6 100644 --- a/plugins/winui/agent-plugin/skills/winui-ui-testing/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-ui-testing/SKILL.md @@ -9,7 +9,7 @@ description: "Automated UI testing for Windows desktop apps — generate a batch Windows Sandbox keeps synthetic input off the user's desktop; target selection is in Step 1. Discover the installed contract with `winapp run --help`, `winapp target --help`, and `winapp ui --help`. Use `--on sandbox`, not `--sandbox` or a top-level `sandbox` command. Do not enable Windows features or launch an app without the task's permission. -- Prerequisites and enablement: see [winui-setup](../winui-setup/SKILL.md). +- Prerequisites and enablement: see `winui-setup`. - Project builds/publishes execute on the **host**; deployment, app launch, and `ui --on sandbox` execute in the **guest**. Run the batch script below on the host, not inside `target exec` (which would double-route). - Real input and capture require an unlocked host and a connected, nonminimized Sandbox client. Tree inspection may work while input cannot; a readable tree is not an input-readiness check. - `winapp target snapshot sandbox --json` is a read-only readiness query: it neither starts nor reconnects a guest. Use it to diagnose readiness rather than probing the user's desktop. @@ -24,7 +24,7 @@ Core verbs: `list-windows`, `inspect`, `search`, `get-property`, `get-value`, `w ### Step 1: Select a target, then keep the PID and target together -Prefer `sandbox` when Windows Sandbox is available; otherwise tell the user and choose `local`. **If the user explicitly requested Windows Sandbox and it is unavailable, stop** and point them to the enablement steps in [winui-setup](../winui-setup/SKILL.md). A stopped guest does not prove unavailability: `target snapshot` can report no running target while the feature is enabled. App build/test failures are not Sandbox unavailability. The same policy applies to diagnostics: unpackaged apps can't use guest `--debug-output`, so diagnose them locally unless Sandbox was explicitly requested. +Prefer `sandbox` when Windows Sandbox is available; otherwise tell the user and choose `local`. **If the user explicitly requested Windows Sandbox and it is unavailable, stop** and point them to the enablement steps in `winui-setup`. A stopped guest does not prove unavailability: `target snapshot` can report no running target while the feature is enabled. App build/test failures are not Sandbox unavailability. The same policy applies to diagnostics: unpackaged apps can't use guest `--debug-output`, so diagnose them locally unless Sandbox was explicitly requested. Pass the selected target to the template: it launches with `winapp run . --on sandbox --detach --json` for a guest, or omits `--on sandbox` for local execution. Reuse an already-running app only when its captured target matches the selected target and the guest has not been recreated. Never pass a guest PID to default-host `winapp ui`. If a target becomes unavailable after selection, report it and select again under the same policy; the script itself never retries in another target. diff --git a/plugins/winui/agent-plugin/skills/winui-wpf-migration/SKILL.md b/plugins/winui/agent-plugin/skills/winui-wpf-migration/SKILL.md index 73517c7a..8bf81ba6 100644 --- a/plugins/winui/agent-plugin/skills/winui-wpf-migration/SKILL.md +++ b/plugins/winui/agent-plugin/skills/winui-wpf-migration/SKILL.md @@ -5,7 +5,7 @@ description: "Migrate WPF applications to WinUI 3 — namespace replacement (Sys ### Migration Process -Use the **WinApp CLI 0.7+** prerequisites and per-app analyzer setup in [winui-dev-workflow](../winui-dev-workflow/SKILL.md). The normal SDK path needs .NET 8.0.100 or later **and** the SDK required by the target TFM; Native AOT additionally needs MSVC/Desktop C++ tools. Handle missing prerequisites as described there. +Use the **WinApp CLI 0.7+** prerequisites and per-app analyzer setup in `winui-dev-workflow`. The normal SDK path needs .NET 8.0.100 or later **and** the SDK required by the target TFM; Native AOT additionally needs MSVC/Desktop C++ tools. Handle missing prerequisites as described there. #### Step 1: Audit the WPF Source Before writing code, inventory WPF-specific APIs: @@ -19,7 +19,7 @@ List: WPF controls used, custom MVVM framework, imaging APIs, threading patterns ```powershell winapp new --name --template winui-mvvm --template-version latest --use-defaults ``` -Immediately set `` in `.csproj` to match the WPF namespace. Update `x:Class` in `App.xaml`, `MainWindow.xaml` and their code-behind files. Add the analyzer per [winui-dev-workflow](../winui-dev-workflow/SKILL.md). Build to verify before porting any code. +Immediately set `` in `.csproj` to match the WPF namespace. Update `x:Class` in `App.xaml`, `MainWindow.xaml` and their code-behind files. Add the analyzer per `winui-dev-workflow`. Build to verify before porting any code. Before implementing API replacements, restore the app project and check its exact references from the WinUI project directory, not the old WPF project or machine SDK: ```powershell @@ -27,7 +27,7 @@ winapp find-api DispatcherQueue --json --project-dir . winapp find-api members DispatcherQueue --filter TryEnqueue --json --project-dir . winapp find-api check-property ListView ItemsSource SelectionMode --json --project-dir . ``` -Use `winapp find-ui ""` for usage samples; see [winui-design](../winui-design/SKILL.md) for project selection and batch API checks. +Use `winapp find-ui ""` for usage samples; see `winui-design` for project selection and batch API checks. #### Step 3: Replace Namespaces @@ -74,7 +74,7 @@ Get via `DispatcherQueue.GetForCurrentThread()`. No `Application.Current.Dispatc Delete custom `ObservableObject`/`RelayCommand`/`DelegateCommand`. Use CommunityToolkit.Mvvm: - `INotifyPropertyChanged` base → `ObservableObject` with `[ObservableProperty]` partial properties (fix MVVMTK0045; don't keep fields) - Custom `RelayCommand` → `[RelayCommand]` attribute -- Prefer `{x:Bind}` for known types; keep runtime `{Binding}`/`DisplayMemberPath` where needed. See [source-generator patterns](../winui-packaging/references/sourcegen-patterns.md) for binding modes, `x:DataType`, and AOT-safe runtime binding. +- Prefer `{x:Bind}` for known types; keep runtime `{Binding}`/`DisplayMemberPath` where needed. See `winui-packaging`'s `references/sourcegen-patterns.md` for binding modes, `x:DataType`, and AOT-safe runtime binding. - `DynamicResource` → `{ThemeResource}` #### Step 8: Replace Resources @@ -86,7 +86,7 @@ Delete custom `ObservableObject`/`RelayCommand`/`DelegateCommand`. Use Community - ❌ NEVER reference `PresentationCore`, `PresentationFramework`, or `System.Windows.Controls` assemblies - ❌ NEVER add `true` -- Keep packaged as the default; see [winui-dev-workflow](../winui-dev-workflow/SKILL.md) Critical Rules for unpackaged experiments. +- Keep packaged as the default; see `winui-dev-workflow` Critical Rules for unpackaged experiments. - ❌ NEVER delete `Package.appxmanifest` - ❌ NEVER overwrite `App.xaml` / `App.xaml.cs` — merge WPF code into the WinUI 3 boilerplate - ✅ Launch with project-mode `winapp run`, not the .exe directly. @@ -108,4 +108,4 @@ dotnet build .\MyApp.csproj -p:Platform=x64 winapp run .\MyApp.csproj --detach --json ``` -For UI validation, see [winui-ui-testing](../winui-ui-testing/SKILL.md); for crash diagnostics, see [winui-dev-workflow](../winui-dev-workflow/SKILL.md). If AOT is intended, also test the published artifact via the workflow's AOT path; the run above is JIT, even in Release. +For UI validation, see `winui-ui-testing`; for crash diagnostics, see `winui-dev-workflow`. If AOT is intended, also test the published artifact via the workflow's AOT path; the run above is JIT, even in Release. From ba2172d7cb5d7962222eb29715e71809499d71d0 Mon Sep 17 00:00:00 2001 From: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:09:26 -0700 Subject: [PATCH 2/5] Run the marketplace vally lint in CI Add a vally-lint job that runs @microsoft/vally 0.12.0, the same linter and version github/awesome-copilot applies to external plugins, over the plugin the same way their quality gate does. Replace the hand-written link check from #200 so there is one source of truth, track the pinned dependency with Dependabot, and document the local command. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/dependabot.yml | 13 + .github/workflows/pr-validation.yml | 39 +- CONTRIBUTING.md | 8 + RELEASING.md | 4 +- scripts/vally/lint-skills.mjs | 25 + scripts/vally/package-lock.json | 1119 +++++++++++++++++++++++++++ scripts/vally/package.json | 15 + 7 files changed, 1201 insertions(+), 22 deletions(-) create mode 100644 scripts/vally/lint-skills.mjs create mode 100644 scripts/vally/package-lock.json create mode 100644 scripts/vally/package.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8e391d60..0419275e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -17,3 +17,16 @@ updates: cooldown: default-days: 7 + + # vally skill linter (pinned to match github/awesome-copilot's marketplace gate) + - package-ecosystem: "npm" + directory: "/scripts/vally" + schedule: + interval: "weekly" + day: "monday" + open-pull-requests-limit: 2 + labels: + - "dependencies" + commit-message: + prefix: "ci" + include: "scope" diff --git a/.github/workflows/pr-validation.yml b/.github/workflows/pr-validation.yml index 0b986962..a64af985 100644 --- a/.github/workflows/pr-validation.yml +++ b/.github/workflows/pr-validation.yml @@ -30,6 +30,24 @@ jobs: shell: pwsh run: ./scripts/tests/Test-SetupVersionDetection.ps1 + vally-lint: + name: Marketplace skill lint (vally) + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Setup Node + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22 + + # Same linter and version github/awesome-copilot runs on external plugins. + - name: Lint skills + run: | + npm ci --prefix scripts/vally --no-audit --no-fund + node scripts/vally/lint-skills.mjs + validate-plugin-manifest: name: Validate Agent Plugins package runs-on: ubuntu-latest @@ -137,27 +155,8 @@ jobs: if not skill_dirs: errors.append(f"No immediate skill directories found under {skills_root}") for skill_dir in skill_dirs: - skill_md = skill_dir / "SKILL.md" - if not skill_md.is_file(): + if not (skill_dir / "SKILL.md").is_file(): errors.append(f"Immediate skill directory lacks SKILL.md: {skill_dir}") - continue - # Mirrors vally's valid-refs lint used by marketplaces such as - # awesome-copilot: markdown links must resolve inside the skill - # directory. Name sibling skills in plain text instead. - body = re.sub(r"(?ms)^(```|~~~).*?^\1", "", skill_md.read_text(encoding="utf-8")) - body = re.sub(r"`[^`\n]*`", "", body) - targets = re.findall(r"\]\(([^)\s]+)", body) + re.findall(r"(?m)^\s*\[[^\]]+\]:\s*(\S+)", body) - for target in targets: - if re.match(r"^[A-Za-z][A-Za-z0-9+.-]*:", target) or target.startswith("#"): - continue - relative = target.split("#", 1)[0] - if not relative: - continue - resolved = (skill_dir / relative).resolve() - if not resolved.is_relative_to(skill_dir.resolve()): - errors.append(f"{skill_md}: link '{target}' points outside the skill directory; name the other skill in plain text") - elif not resolved.exists(): - errors.append(f"{skill_md}: link '{target}' does not exist") forbidden_portable_paths = ( ".claude-plugin", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 790c252b..c14f1524 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -140,6 +140,7 @@ check will (correctly) refuse to let the version-bump diff land on staging. | `staging-up-to-date-with-main` | PR targets `staging` | PR head contains every commit on `main` (back-merge PRs satisfy this naturally). | | `powershell-tests` | Any PR | Session classification, documented Sandbox test-script behavior, and setup version detection pass focused regression tests. | | `validate-plugin-manifest` + `validate-skill-frontmatter` | Any PR | Manifests are well-formed, every `SKILL.md` has valid frontmatter. | +| `vally-lint` | Any PR | Skills pass the same [vally](https://github.com/microsoft/vally) lint marketplaces run (e.g. awesome-copilot). Links in a `SKILL.md` must stay inside that skill's folder — name other skills in plain text. | If a check fails, the failure message tells you exactly what to fix. @@ -152,6 +153,13 @@ pwsh -NoProfile -File .\scripts\tests\Test-WinuiUiTestingSandbox.ps1 pwsh -NoProfile -File .\scripts\tests\Test-SetupVersionDetection.ps1 ``` +To run the marketplace skill lint locally (Node 22+): + +```powershell +npm ci --prefix scripts/vally +node scripts/vally/lint-skills.mjs +``` + These checks do not replace exercising the published CLI/analyzer with a real app before releasing changed build, packaging, AOT, or Sandbox guidance. diff --git a/RELEASING.md b/RELEASING.md index 8ff82835..2b730e67 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -79,7 +79,7 @@ If the helper doesn't work for some reason: Before merging: -- ✅ All status checks green (`powershell-tests`, `version-bump`, +- ✅ All status checks green (`powershell-tests`, `vally-lint`, `version-bump`, `changelog-entry`). - ✅ External tools the skills depend on (WinApp CLI, the analyzer NuGet package) are published at the versions the skills require. @@ -171,7 +171,7 @@ the CI workflows alone are not enough. 2. **Branch protection on `staging`** (CRITICAL — strict mode is REQUIRED, not optional): - Require PR before merging. - - Require status checks: `powershell-tests`, + - Require status checks: `powershell-tests`, `vally-lint`, `validate-plugin-manifest`, `validate-skill-frontmatter`, `version-sync`, `staging-up-to-date-with-main`. diff --git a/scripts/vally/lint-skills.mjs b/scripts/vally/lint-skills.mjs new file mode 100644 index 00000000..a8ee7bb5 --- /dev/null +++ b/scripts/vally/lint-skills.mjs @@ -0,0 +1,25 @@ +// Runs the same vally lint that marketplaces such as github/awesome-copilot +// apply to external plugins, so link/spec problems fail our CI first. +// Mirrors awesome-copilot's eng/external-plugin-quality-gates.mjs: lint each +// skills path declared in plugin.json, or the plugin root when none is declared. +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { runLint, LintConsoleReporter } from "@microsoft/vally"; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", ".."); +const pluginRoot = path.join(repoRoot, "plugins", "winui", "agent-plugin"); +const manifest = JSON.parse(fs.readFileSync(path.join(pluginRoot, "plugin.json"), "utf8")); + +const skillPaths = [].concat(manifest.skills ?? []) + .map((p) => path.resolve(pluginRoot, p)) + .filter((p) => fs.existsSync(p) && fs.statSync(p).isDirectory()); +const targets = skillPaths.length > 0 ? skillPaths : [pluginRoot]; + +let passed = true; +for (const target of targets) { + const result = await runLint({ rootPath: target }); + await new LintConsoleReporter({ verbose: true, stream: process.stdout }).report(result); + passed &&= result.passed; +} +process.exit(passed ? 0 : 1); diff --git a/scripts/vally/package-lock.json b/scripts/vally/package-lock.json new file mode 100644 index 00000000..e91a24a1 --- /dev/null +++ b/scripts/vally/package-lock.json @@ -0,0 +1,1119 @@ +{ + "name": "win-dev-skills-vally-lint", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "win-dev-skills-vally-lint", + "dependencies": { + "@microsoft/vally": "0.12.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/@github/copilot-sdk": { + "version": "1.0.16", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk/-/copilot-sdk-1.0.16.tgz", + "integrity": "sha512-m21UkMs8hkI6nRu2+EoP1kAGLJcEXFnNzAokEjwLcVmPojlO6fdLpfka1c1Nypxr39YZjyI3jHHAXwoe66SO2A==", + "license": "MIT", + "dependencies": { + "koffi": "3.2.1", + "vscode-jsonrpc": "8.2.1", + "zod": "4.3.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@github/copilot-sdk-darwin-arm64": "1.0.16", + "@github/copilot-sdk-darwin-x64": "1.0.16", + "@github/copilot-sdk-linux-arm64": "1.0.16", + "@github/copilot-sdk-linux-x64": "1.0.16", + "@github/copilot-sdk-linuxmusl-arm64": "1.0.16", + "@github/copilot-sdk-linuxmusl-x64": "1.0.16", + "@github/copilot-sdk-win32-arm64": "1.0.16", + "@github/copilot-sdk-win32-x64": "1.0.16" + } + }, + "node_modules/@github/copilot-sdk-linux-x64": { + "version": "1.0.16", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk-linux-x64/-/copilot-sdk-linux-x64-1.0.16.tgz", + "integrity": "sha512-YLxPU1IdwH4cNvIJhawzyb6nMCbXB6ZfeebUs0kQEJbu6pzsMkyl1uSWCCv1vpAHPuhub1BgMokoY1kX9chElg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@github/copilot-sdk-linuxmusl-x64": { + "version": "1.0.16", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk-linuxmusl-x64/-/copilot-sdk-linuxmusl-x64-1.0.16.tgz", + "integrity": "sha512-JWjzUi366WXGqdY9xIJvmJRTB+sCsW8qasVwLXj12X05GxYWMdfHK+7t8CiYTs2L1NKu1NiOYd5rS7D+ChSZyw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@github/copilot-sdk-win32-arm64": { + "version": "1.0.16", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk-win32-arm64/-/copilot-sdk-win32-arm64-1.0.16.tgz", + "integrity": "sha512-nQ//JXHfPfn4sfxtZ3rcLR993Mn8YQkC/RXHW9zu0W4Qtb1kyKec7XSi+VRMsKWPyzL7B7X+SHjTRSmn9AqZnQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-darwin-arm64": { + "optional": true + }, + "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-darwin-x64": { + "optional": true + }, + "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-linux-arm64": { + "optional": true + }, + "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-linuxmusl-arm64": { + "optional": true + }, + "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-win32-x64": { + "optional": true + }, + "node_modules/@github/copilot-sdk/node_modules/zod": { + "version": "4.3.6", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/zod/-/zod-4.3.6.tgz", + "integrity": "sha1-icVuCqfSsFEH2JRBIicIeIWrESo=", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@koromix/koffi-android-arm64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-android-arm64/-/koffi-android-arm64-3.2.1.tgz", + "integrity": "sha1-Lc55jTZp0re1bpwCqKaidKvWx8Y=", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-android-x64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-android-x64/-/koffi-android-x64-3.2.1.tgz", + "integrity": "sha1-TQr8uvZgQjEKwbOs8sWMb/6XN0M=", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-darwin-arm64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.2.1.tgz", + "integrity": "sha1-IP1RZvBGbrn1lplQbLeK8cUgfQk=", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-darwin-x64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.2.1.tgz", + "integrity": "sha1-A+TMtBoFV58aKcKB5IJiEzF89so=", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-freebsd-arm64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.2.1.tgz", + "integrity": "sha1-0+Tp8iGTKchvN7woVoXriVpSgb0=", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-freebsd-ia32": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.2.1.tgz", + "integrity": "sha1-hphgO4/QJ8Hs9tw6rX303Bbv398=", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-freebsd-x64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.2.1.tgz", + "integrity": "sha1-hROyr0V+Jtl+gNNPY8vwBjhzBYY=", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-arm": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-arm/-/koffi-linux-arm-3.2.1.tgz", + "integrity": "sha1-U8kNnV+aiTlB862CivSHs3lejuE=", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-arm64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.2.1.tgz", + "integrity": "sha1-ddSlPuDQYfoVnMG+eugLBNEAkg8=", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-ia32": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.2.1.tgz", + "integrity": "sha1-TvuhuJjnO2GNIqngyfPp0R192rQ=", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-loong64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.2.1.tgz", + "integrity": "sha1-Kg2NCvf2bpXiVxEeX1TsIQjYs7g=", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-riscv64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.2.1.tgz", + "integrity": "sha1-1VWiDsNvfBkM8W/vEFWkKtkYPU0=", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-x64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.2.1.tgz", + "integrity": "sha1-I3tGQNc4A+tny7pDe1Eu2HkzgD0=", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-openbsd-ia32": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.2.1.tgz", + "integrity": "sha1-QzemOyiO/9HqwdOHbXlK4rfuPRg=", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-openbsd-x64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.2.1.tgz", + "integrity": "sha1-xZycfkCVP/t+MvjY+8sZ/zio7wM=", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-arm64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.2.1.tgz", + "integrity": "sha1-kVoYz1dHK16cbXFoE7w5mDekUU4=", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-ia32": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.2.1.tgz", + "integrity": "sha1-n60joxMqlAcm//MI5bKXVRepoys=", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-x64": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.2.1.tgz", + "integrity": "sha1-nTgKsOqLz7oW9P7aLJ6jYw/1Yg8=", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@microsoft/vally": { + "version": "0.12.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@microsoft/vally/-/vally-0.12.0.tgz", + "integrity": "sha1-uNDP4xMlze8r/nQf8EARFD2uAR0=", + "license": "MIT", + "dependencies": { + "@github/copilot-sdk": "^1.0.7", + "@opentelemetry/api": "^1.9.1", + "js-tiktoken": "^1.0.21", + "mdast-util-from-markdown": "^2.0.3", + "picomatch": "^4.0.5", + "yaml": "^2.9.0", + "zod": "^4.4.3" + }, + "engines": { + "node": ">=22.0.0", + "npm": ">=11.11.1" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha1-wbA0beM2ulWvLVp5cIggN7rt7AU=", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha1-ItHMnVQtNZPK6nZPl0MGqzYobuc=", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha1-fM9y7dLxqn3TQ34YDGQ3NYWATdY=", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha1-BSqmekjszEMJ1/AZG35BQ0uQu3g=", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha1-rKqw+RnOaczmKcLU7S60rcG2wgw=", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "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/character-entities": { + "version": "2.0.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha1-LQnC5yzZUjB2zLIRV9/2atQ/zCI=", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", + "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha1-PkBgN2CHTC5YZ2kbWZ1zp9oltT8=", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha1-JkQhTxmX057Q7g7OcjNUkKesZ74=", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha1-TbfCyk3G4Og0wwvnDJS7yXbccBg=", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/js-tiktoken": { + "version": "1.0.21", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha1-NoqZV1kaMKYpl90MTPMIZvAPgiE=", + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1" + } + }, + "node_modules/koffi": { + "version": "3.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/koffi/-/koffi-3.2.1.tgz", + "integrity": "sha1-lPmhEdssUTzdchscXYwk2DjCziU=", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "url": "https://liberapay.com/Koromix" + }, + "optionalDependencies": { + "@koromix/koffi-android-arm64": "3.2.1", + "@koromix/koffi-android-x64": "3.2.1", + "@koromix/koffi-darwin-arm64": "3.2.1", + "@koromix/koffi-darwin-x64": "3.2.1", + "@koromix/koffi-freebsd-arm64": "3.2.1", + "@koromix/koffi-freebsd-ia32": "3.2.1", + "@koromix/koffi-freebsd-x64": "3.2.1", + "@koromix/koffi-linux-arm": "3.2.1", + "@koromix/koffi-linux-arm64": "3.2.1", + "@koromix/koffi-linux-ia32": "3.2.1", + "@koromix/koffi-linux-loong64": "3.2.1", + "@koromix/koffi-linux-riscv64": "3.2.1", + "@koromix/koffi-linux-x64": "3.2.1", + "@koromix/koffi-openbsd-ia32": "3.2.1", + "@koromix/koffi-openbsd-x64": "3.2.1", + "@koromix/koffi-win32-arm64": "3.2.1", + "@koromix/koffi-win32-ia32": "3.2.1", + "@koromix/koffi-win32-x64": "3.2.1" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha1-yVgiuRqrdfGKTL6LL1G4c+0s8Mc=", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha1-elEhR1VWoE5+3etnsmSq550xKBQ=", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha1-kTlaPhiEoZjmIRbjPJxWjjmTb9s=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha1-xpFjDkhQIaaM8o28Kyyifr9njNQ=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha1-j++OD3CB8EdPvdkt61DJkKAmRjk=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha1-UmfvqX8eUlTvx/ILRZo4yyEFi6E=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha1-NtAhLpYrKzEh+FJfx6PHwCnzNPw=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha1-I35KpdWKlYY/AQMtnumwkPHebpQ=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha1-BrJrKYPE0nv8xlezPiUTTUhosLE=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha1-L5h4MaQNTFEKwmHomFLE6XA8zaY=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha1-R/vNk0caP8yrhs/wOEf8NVLbEFE=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha1-05n6+cRcoUyLS+mLHqSBvO2Htik=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha1-Kg9JCrCL/1zC/V7sbdDKBPibMKk=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha1-/PFbZgl5OI5vEYzba/fXnXPSb+U=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha1-bLmVguXScehO/KjmGoB5lNcWHrI=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha1-DVHRwJVVHPqsNoMmljz1XxX1QLg=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha1-5AQDCWSBmGtBwQZif5j3LU0QuCU=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha1-ww13sugyrPZSb4vxqke8nJQ4wW0=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha1-4aLWLN0jcjCirhGDkCexk4HjHos=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha1-q4l4m4GKWHUrc9a1UjhiG3+qj9c=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha1-2K3lug8xl6HPaimZ+7/mNXoaGe4=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha1-5dpJTo6ysHGg0I+zT2zv7GwKGbg=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha1-8AIl9fWg68MlT5bDa2YFxLOTkI4=", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha1-YxM2ADTMs2s9xh7L3/eBIfkP4h8=", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha1-RJxuIaiA4IVb9aq63rOnQDFKusI=", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", + "integrity": "sha1-oyLMDx2X95T/2cTNKomKC94JfzQ=", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/scripts/vally/package.json b/scripts/vally/package.json new file mode 100644 index 00000000..20fe6586 --- /dev/null +++ b/scripts/vally/package.json @@ -0,0 +1,15 @@ +{ + "name": "win-dev-skills-vally-lint", + "private": true, + "type": "module", + "description": "Marketplace skill lint (vally), pinned to the version github/awesome-copilot uses.", + "scripts": { + "lint": "node lint-skills.mjs" + }, + "dependencies": { + "@microsoft/vally": "0.12.0" + }, + "engines": { + "node": ">=22" + } +} From abf77f8e7035dccfe4c2cdc85baa1b4dbb6b4f11 Mon Sep 17 00:00:00 2001 From: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:20:29 -0700 Subject: [PATCH 3/5] Use awesome-copilot's public vally lockfile The lockfile was resolved against an internal npm mirror that is missing five @github/copilot-sdk platform packages, leaving version-less stubs that make npm ci fail with 'Invalid Version'. Rebuild it from the @microsoft/vally 0.12.0 dependency closure in github/awesome-copilot's lockfile so CI resolves from registry.npmjs.org and matches the gate's transitive versions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- scripts/vally/package-lock.json | 524 +++++++++++++++++--------------- 1 file changed, 277 insertions(+), 247 deletions(-) diff --git a/scripts/vally/package-lock.json b/scripts/vally/package-lock.json index e91a24a1..3b262690 100644 --- a/scripts/vally/package-lock.json +++ b/scripts/vally/package-lock.json @@ -12,135 +12,175 @@ "node": ">=22" } }, - "node_modules/@github/copilot-sdk": { - "version": "1.0.16", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk/-/copilot-sdk-1.0.16.tgz", - "integrity": "sha512-m21UkMs8hkI6nRu2+EoP1kAGLJcEXFnNzAokEjwLcVmPojlO6fdLpfka1c1Nypxr39YZjyI3jHHAXwoe66SO2A==", - "license": "MIT", + "node_modules/@github/copilot": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.78.tgz", + "integrity": "sha512-jn+8HLZC3R7d6K1/1g9L1iWNKzBVS3JdVcx40r3aWyS5r+MLV1OPNp0fo5OfRMCDIm3NmEaaoqypi9sQkCXuiQ==", + "license": "SEE LICENSE IN LICENSE.md", "dependencies": { - "koffi": "3.2.1", - "vscode-jsonrpc": "8.2.1", - "zod": "4.3.6" + "detect-libc": "^2.1.2" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" + "bin": { + "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-sdk-darwin-arm64": "1.0.16", - "@github/copilot-sdk-darwin-x64": "1.0.16", - "@github/copilot-sdk-linux-arm64": "1.0.16", - "@github/copilot-sdk-linux-x64": "1.0.16", - "@github/copilot-sdk-linuxmusl-arm64": "1.0.16", - "@github/copilot-sdk-linuxmusl-x64": "1.0.16", - "@github/copilot-sdk-win32-arm64": "1.0.16", - "@github/copilot-sdk-win32-x64": "1.0.16" + "@github/copilot-darwin-arm64": "1.0.78", + "@github/copilot-darwin-x64": "1.0.78", + "@github/copilot-linux-arm64": "1.0.78", + "@github/copilot-linux-x64": "1.0.78", + "@github/copilot-linuxmusl-arm64": "1.0.78", + "@github/copilot-linuxmusl-x64": "1.0.78", + "@github/copilot-win32-arm64": "1.0.78", + "@github/copilot-win32-x64": "1.0.78" + } + }, + "node_modules/@github/copilot-darwin-arm64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.78.tgz", + "integrity": "sha512-P11+VyWg8ad0WlywGtO2d7AxqTLJv4hkUicFg6Ycth5lfk00aCu/74YOOZSPO6C2bBBJhAza7oAdmauM6KEojw==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "copilot-darwin-arm64": "copilot" } }, - "node_modules/@github/copilot-sdk-linux-x64": { - "version": "1.0.16", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk-linux-x64/-/copilot-sdk-linux-x64-1.0.16.tgz", - "integrity": "sha512-YLxPU1IdwH4cNvIJhawzyb6nMCbXB6ZfeebUs0kQEJbu6pzsMkyl1uSWCCv1vpAHPuhub1BgMokoY1kX9chElg==", + "node_modules/@github/copilot-darwin-x64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.78.tgz", + "integrity": "sha512-stimP3WDFs2GU8nJzTJbtRpZViV4bsf80yg7QrFq+G4RISQ3Nihg/3/H0U6UQF1+txMJ/Ohmb5RFYxSw1Hj2sw==", "cpu": [ "x64" ], - "libc": [ - "glibc" + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "darwin" ], - "license": "MIT", + "bin": { + "copilot-darwin-x64": "copilot" + } + }, + "node_modules/@github/copilot-linux-arm64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.78.tgz", + "integrity": "sha512-K31PRKGTm252V1Lof7ypjg283R2QSm3BgoCvZfX2taos4wqC3SaTozSQKwW3dgrAx7A3G3SGEoilVCNqfigdZA==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.md", "optional": true, "os": [ "linux" - ] + ], + "bin": { + "copilot-linux-arm64": "copilot" + } }, - "node_modules/@github/copilot-sdk-linuxmusl-x64": { - "version": "1.0.16", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk-linuxmusl-x64/-/copilot-sdk-linuxmusl-x64-1.0.16.tgz", - "integrity": "sha512-JWjzUi366WXGqdY9xIJvmJRTB+sCsW8qasVwLXj12X05GxYWMdfHK+7t8CiYTs2L1NKu1NiOYd5rS7D+ChSZyw==", + "node_modules/@github/copilot-linux-x64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.78.tgz", + "integrity": "sha512-QK3oMtAn9dIv+1u1kx0xNpZNtZxdI+uZVIyLl7myp+Oh2Uj8BLagVv6a7uP0cDphO3TgfIdlvpepCe5MIcx0fw==", "cpu": [ "x64" ], - "libc": [ - "musl" - ], - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.md", "optional": true, "os": [ "linux" - ] + ], + "bin": { + "copilot-linux-x64": "copilot" + } }, - "node_modules/@github/copilot-sdk-win32-arm64": { - "version": "1.0.16", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@github/copilot-sdk-win32-arm64/-/copilot-sdk-win32-arm64-1.0.16.tgz", - "integrity": "sha512-nQ//JXHfPfn4sfxtZ3rcLR993Mn8YQkC/RXHW9zu0W4Qtb1kyKec7XSi+VRMsKWPyzL7B7X+SHjTRSmn9AqZnQ==", + "node_modules/@github/copilot-linuxmusl-arm64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.78.tgz", + "integrity": "sha512-F/0cTMsz6ug4yiXn3RKaCAMsLR261U5Njb6G9Y/HeAI7ES/tKEo2t5SHuvgXaIH4mYiZsRvfDKdX7c0WgBX/Jg==", "cpu": [ "arm64" ], - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.md", "optional": true, "os": [ - "win32" - ] - }, - "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-darwin-arm64": { - "optional": true - }, - "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-darwin-x64": { - "optional": true - }, - "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-linux-arm64": { - "optional": true - }, - "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-linuxmusl-arm64": { - "optional": true + "linux" + ], + "bin": { + "copilot-linuxmusl-arm64": "copilot" + } }, - "node_modules/@github/copilot-sdk/node_modules/@github/copilot-sdk-win32-x64": { - "optional": true + "node_modules/@github/copilot-linuxmusl-x64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.78.tgz", + "integrity": "sha512-YMaJaeBGbArGAFYel+yFaFW/0rFgh0Oqki2f2mUtlonTX/xHr8EB4+mTnMJkHYMFy4gOTC3OtSEEe1NaW/cBXQ==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "copilot-linuxmusl-x64": "copilot" + } }, - "node_modules/@github/copilot-sdk/node_modules/zod": { - "version": "4.3.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/zod/-/zod-4.3.6.tgz", - "integrity": "sha1-icVuCqfSsFEH2JRBIicIeIWrESo=", + "node_modules/@github/copilot-sdk": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk/-/copilot-sdk-1.0.8.tgz", + "integrity": "sha512-dbahVsyt2aX8qqtOOtmYNe40MnvzSvOSHYFFgoFK7gHZSTNz9QgOht8b1sCCJlcXaFAn/w+5qNc7CwWoCjpQ0g==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "dependencies": { + "@github/copilot": "^1.0.73", + "koffi": "^3.1.0", + "vscode-jsonrpc": "^8.2.1", + "zod": "^4.3.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@koromix/koffi-android-arm64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-android-arm64/-/koffi-android-arm64-3.2.1.tgz", - "integrity": "sha1-Lc55jTZp0re1bpwCqKaidKvWx8Y=", + "node_modules/@github/copilot-win32-arm64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.78.tgz", + "integrity": "sha512-ktDkFXaaecEKD3hpM6ydM9lKOdoCfsQsXCmzLzE7DCmSpbbMCdfPfWfZ7MOclmKmpZ5/MNfr4U2l8CUqGerzYA==", "cpu": [ "arm64" ], - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.md", "optional": true, "os": [ - "android" + "win32" ], - "funding": { - "url": "https://liberapay.com/Koromix" + "bin": { + "copilot-win32-arm64": "copilot.exe" } }, - "node_modules/@koromix/koffi-android-x64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-android-x64/-/koffi-android-x64-3.2.1.tgz", - "integrity": "sha1-TQr8uvZgQjEKwbOs8sWMb/6XN0M=", + "node_modules/@github/copilot-win32-x64": { + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.78.tgz", + "integrity": "sha512-Gd8l2T4eqYEWlOEPd0SZznQ+YYgYrwOkE0QXodMkhCBbPdgu/uTzb7mnISWwnVAgqs7pONdF1GOpHkTo+ay8CQ==", "cpu": [ "x64" ], - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.md", "optional": true, "os": [ - "android" + "win32" ], - "funding": { - "url": "https://liberapay.com/Koromix" + "bin": { + "copilot-win32-x64": "copilot.exe" } }, "node_modules/@koromix/koffi-darwin-arm64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.2.1.tgz", - "integrity": "sha1-IP1RZvBGbrn1lplQbLeK8cUgfQk=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.1.4.tgz", + "integrity": "sha512-/9o0uahf25sNXz7CczfMAsgdHrrrkDK3/d1W5ygJUC7QnpWo80103yTYpYahWP3vTABK5yjzKtURgssv1paskA==", "cpu": [ "arm64" ], @@ -154,9 +194,9 @@ } }, "node_modules/@koromix/koffi-darwin-x64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.2.1.tgz", - "integrity": "sha1-A+TMtBoFV58aKcKB5IJiEzF89so=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.1.4.tgz", + "integrity": "sha512-6IOhfAHbrySr6lYRU720Hg+IMQvtMpN08k9Ppf9WF8NxYRdHLnW1FJm7zCbClfrwudtjhS/piwDYwgAkO5u8cg==", "cpu": [ "x64" ], @@ -170,9 +210,9 @@ } }, "node_modules/@koromix/koffi-freebsd-arm64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.2.1.tgz", - "integrity": "sha1-0+Tp8iGTKchvN7woVoXriVpSgb0=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.1.4.tgz", + "integrity": "sha512-JKCWC0awdVvq7Nd/etn4PXFTa7uvyHn7IzqtaOZ3r4dJRdwQVby7Ai/wsQo8UUrJfAYlALkLYgFgU8wgsnAE/A==", "cpu": [ "arm64" ], @@ -186,9 +226,9 @@ } }, "node_modules/@koromix/koffi-freebsd-ia32": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.2.1.tgz", - "integrity": "sha1-hphgO4/QJ8Hs9tw6rX303Bbv398=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.1.4.tgz", + "integrity": "sha512-gU9pShDRLMZzftdGW+mTzyL8Cpa/7nzHPHe5vFakjGgtIzVFzdFBqwli4oB+tFsx44W1VqMMlvMMVlnz54ERiQ==", "cpu": [ "ia32" ], @@ -202,9 +242,9 @@ } }, "node_modules/@koromix/koffi-freebsd-x64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.2.1.tgz", - "integrity": "sha1-hROyr0V+Jtl+gNNPY8vwBjhzBYY=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.1.4.tgz", + "integrity": "sha512-2kppLX97xBM3WoQET6noN4W02zT2fkFRXHYluAwcCcmkEax8AVJ1CYs6hxcZ3kaNPc+5P7yMw3V/b1lg2v3aMw==", "cpu": [ "x64" ], @@ -217,26 +257,10 @@ "url": "https://liberapay.com/Koromix" } }, - "node_modules/@koromix/koffi-linux-arm": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-arm/-/koffi-linux-arm-3.2.1.tgz", - "integrity": "sha1-U8kNnV+aiTlB862CivSHs3lejuE=", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://liberapay.com/Koromix" - } - }, "node_modules/@koromix/koffi-linux-arm64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.2.1.tgz", - "integrity": "sha1-ddSlPuDQYfoVnMG+eugLBNEAkg8=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.1.4.tgz", + "integrity": "sha512-yYbypuGVGqrNchkAMY59kj+7TZ1c1u9lXRG1+74X9T8G4rOaushoVONNYLuu+ygpbwsKzz/NvEDtRioRU/dQlQ==", "cpu": [ "arm64" ], @@ -250,9 +274,9 @@ } }, "node_modules/@koromix/koffi-linux-ia32": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.2.1.tgz", - "integrity": "sha1-TvuhuJjnO2GNIqngyfPp0R192rQ=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.1.4.tgz", + "integrity": "sha512-IoA/8Qfc6ZEmwMw2Nf4aSp9RfJnxh0UHhdqD4FsVXm0vC797kLMuzj744vv5tll+waVfjrU10jREqjtnMVFoQw==", "cpu": [ "ia32" ], @@ -266,9 +290,9 @@ } }, "node_modules/@koromix/koffi-linux-loong64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.2.1.tgz", - "integrity": "sha1-Kg2NCvf2bpXiVxEeX1TsIQjYs7g=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.1.4.tgz", + "integrity": "sha512-ZUTdea+9dg6CV9J9CIGbhTh0FtSBgvcGKqDrlp9BVQF71jEDKOri1by/TrDe8yQUyC5kzWN8vWnkzES5wT0xDg==", "cpu": [ "loong64" ], @@ -282,9 +306,9 @@ } }, "node_modules/@koromix/koffi-linux-riscv64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.2.1.tgz", - "integrity": "sha1-1VWiDsNvfBkM8W/vEFWkKtkYPU0=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.1.4.tgz", + "integrity": "sha512-CINyyhNYV/8MX52MGhYcik2G6PXH+KEU2JEO7dOONlsGol4lSGyW40RvYA4RQgNYk8q8imGSEScL08X8eOXnaA==", "cpu": [ "riscv64" ], @@ -298,9 +322,9 @@ } }, "node_modules/@koromix/koffi-linux-x64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.2.1.tgz", - "integrity": "sha1-I3tGQNc4A+tny7pDe1Eu2HkzgD0=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.1.4.tgz", + "integrity": "sha512-x3XnAy/tUTTCX/gMpV7VJNpOQIVQvzNhNYDrpyIeS9Q8/f1qLsE0vp0tj7A/YEDIfMVLqoJtyamfRJc04+vk4w==", "cpu": [ "x64" ], @@ -314,9 +338,9 @@ } }, "node_modules/@koromix/koffi-openbsd-ia32": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.2.1.tgz", - "integrity": "sha1-QzemOyiO/9HqwdOHbXlK4rfuPRg=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.1.4.tgz", + "integrity": "sha512-r9p/fffvmBm7+iT5BZ+c17gZJ280jvmbinrPZqjG14rF9I4lk7xrlV79YfsexkeN4mcPjF2hSPtbMNFBoQU3Dw==", "cpu": [ "ia32" ], @@ -330,9 +354,9 @@ } }, "node_modules/@koromix/koffi-openbsd-x64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.2.1.tgz", - "integrity": "sha1-xZycfkCVP/t+MvjY+8sZ/zio7wM=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.1.4.tgz", + "integrity": "sha512-SNp5AxOzheC2YaWPu3Y86wxRHHWf6V9NMl5Ot5nu9OpnP61Yinzug7JwsCeXtcZZTbKLsfsWoT7y4n17UYpOVA==", "cpu": [ "x64" ], @@ -346,9 +370,9 @@ } }, "node_modules/@koromix/koffi-win32-arm64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.2.1.tgz", - "integrity": "sha1-kVoYz1dHK16cbXFoE7w5mDekUU4=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.1.4.tgz", + "integrity": "sha512-oS8ETU35AelOD6DY7xmmz9qq26Xl38upXWiZbsdxbtH9UEIY0QpenQOuCK/0+q4CtfiLorRUlglGkO9YgPAIeA==", "cpu": [ "arm64" ], @@ -362,9 +386,9 @@ } }, "node_modules/@koromix/koffi-win32-ia32": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.2.1.tgz", - "integrity": "sha1-n60joxMqlAcm//MI5bKXVRepoys=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.1.4.tgz", + "integrity": "sha512-zd7Qh8s4fzblD9zzuDf44XCbujYg3QrffhgcNJg79/YC6ABT2m0CUtX4yFic9EWm2ps8NPAM25kCTCXPpt3eaw==", "cpu": [ "ia32" ], @@ -378,9 +402,9 @@ } }, "node_modules/@koromix/koffi-win32-x64": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.2.1.tgz", - "integrity": "sha1-nTgKsOqLz7oW9P7aLJ6jYw/1Yg8=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.1.4.tgz", + "integrity": "sha512-BPeQXc1bRd0QBOklvsP+AjoRnUzKbPNE6rfx7VNxrebhh09MKld2ibstgKWn6ejQLEcfKEoUJ+WAWIhX4AOsIg==", "cpu": [ "x64" ], @@ -395,8 +419,8 @@ }, "node_modules/@microsoft/vally": { "version": "0.12.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@microsoft/vally/-/vally-0.12.0.tgz", - "integrity": "sha1-uNDP4xMlze8r/nQf8EARFD2uAR0=", + "resolved": "https://registry.npmjs.org/@microsoft/vally/-/vally-0.12.0.tgz", + "integrity": "sha512-6/zyjQBGkhCuZeUe4rMeD841xIGQX9PW0u5FBEkXOZOhhqjecnCDB0zxSd0cQEIF2TqVOacLiHSwxbhCNwpFEg==", "license": "MIT", "dependencies": { "@github/copilot-sdk": "^1.0.7", @@ -414,8 +438,8 @@ }, "node_modules/@opentelemetry/api": { "version": "1.9.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@opentelemetry/api/-/api-1.9.1.tgz", - "integrity": "sha1-wbA0beM2ulWvLVp5cIggN7rt7AU=", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "license": "Apache-2.0", "engines": { "node": ">=8.0.0" @@ -423,8 +447,8 @@ }, "node_modules/@types/debug": { "version": "4.1.13", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha1-ItHMnVQtNZPK6nZPl0MGqzYobuc=", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "license": "MIT", "dependencies": { "@types/ms": "*" @@ -432,8 +456,8 @@ }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha1-fM9y7dLxqn3TQ34YDGQ3NYWATdY=", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -441,20 +465,20 @@ }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha1-BSqmekjszEMJ1/AZG35BQ0uQu3g=", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha1-rKqw+RnOaczmKcLU7S60rcG2wgw=", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -473,8 +497,8 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha1-LQnC5yzZUjB2zLIRV9/2atQ/zCI=", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "license": "MIT", "funding": { "type": "github", @@ -483,8 +507,8 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -500,8 +524,8 @@ }, "node_modules/decode-named-character-reference": { "version": "1.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha1-PkBgN2CHTC5YZ2kbWZ1zp9oltT8=", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -513,17 +537,26 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha1-JkQhTxmX057Q7g7OcjNUkKesZ74=", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { "node": ">=6" } }, + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha1-TbfCyk3G4Og0wwvnDJS7yXbccBg=", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "license": "MIT", "dependencies": { "dequal": "^2.0.0" @@ -535,47 +568,44 @@ }, "node_modules/js-tiktoken": { "version": "1.0.21", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/js-tiktoken/-/js-tiktoken-1.0.21.tgz", - "integrity": "sha1-NoqZV1kaMKYpl90MTPMIZvAPgiE=", + "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", "license": "MIT", "dependencies": { "base64-js": "^1.5.1" } }, "node_modules/koffi": { - "version": "3.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/koffi/-/koffi-3.2.1.tgz", - "integrity": "sha1-lPmhEdssUTzdchscXYwk2DjCziU=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-3.1.4.tgz", + "integrity": "sha512-KHX39XIg7afe8ds+0MHPoLiKR9dCzsVK4oAmBUSaeJlcX0xur22f15C2DILbZ6GJ9eyqC+e6Sb1cTG7M17z+Tg==", "hasInstallScript": true, "license": "MIT", "funding": { "url": "https://liberapay.com/Koromix" }, "optionalDependencies": { - "@koromix/koffi-android-arm64": "3.2.1", - "@koromix/koffi-android-x64": "3.2.1", - "@koromix/koffi-darwin-arm64": "3.2.1", - "@koromix/koffi-darwin-x64": "3.2.1", - "@koromix/koffi-freebsd-arm64": "3.2.1", - "@koromix/koffi-freebsd-ia32": "3.2.1", - "@koromix/koffi-freebsd-x64": "3.2.1", - "@koromix/koffi-linux-arm": "3.2.1", - "@koromix/koffi-linux-arm64": "3.2.1", - "@koromix/koffi-linux-ia32": "3.2.1", - "@koromix/koffi-linux-loong64": "3.2.1", - "@koromix/koffi-linux-riscv64": "3.2.1", - "@koromix/koffi-linux-x64": "3.2.1", - "@koromix/koffi-openbsd-ia32": "3.2.1", - "@koromix/koffi-openbsd-x64": "3.2.1", - "@koromix/koffi-win32-arm64": "3.2.1", - "@koromix/koffi-win32-ia32": "3.2.1", - "@koromix/koffi-win32-x64": "3.2.1" + "@koromix/koffi-darwin-arm64": "3.1.4", + "@koromix/koffi-darwin-x64": "3.1.4", + "@koromix/koffi-freebsd-arm64": "3.1.4", + "@koromix/koffi-freebsd-ia32": "3.1.4", + "@koromix/koffi-freebsd-x64": "3.1.4", + "@koromix/koffi-linux-arm64": "3.1.4", + "@koromix/koffi-linux-ia32": "3.1.4", + "@koromix/koffi-linux-loong64": "3.1.4", + "@koromix/koffi-linux-riscv64": "3.1.4", + "@koromix/koffi-linux-x64": "3.1.4", + "@koromix/koffi-openbsd-ia32": "3.1.4", + "@koromix/koffi-openbsd-x64": "3.1.4", + "@koromix/koffi-win32-arm64": "3.1.4", + "@koromix/koffi-win32-ia32": "3.1.4", + "@koromix/koffi-win32-x64": "3.1.4" } }, "node_modules/mdast-util-from-markdown": { "version": "2.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha1-yVgiuRqrdfGKTL6LL1G4c+0s8Mc=", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -598,8 +628,8 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha1-elEhR1VWoE5+3etnsmSq550xKBQ=", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" @@ -611,8 +641,8 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha1-kTlaPhiEoZjmIRbjPJxWjjmTb9s=", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "funding": [ { "type": "GitHub Sponsors", @@ -646,8 +676,8 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha1-xpFjDkhQIaaM8o28Kyyifr9njNQ=", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "funding": [ { "type": "GitHub Sponsors", @@ -680,8 +710,8 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha1-j++OD3CB8EdPvdkt61DJkKAmRjk=", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "funding": [ { "type": "GitHub Sponsors", @@ -701,8 +731,8 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha1-UmfvqX8eUlTvx/ILRZo4yyEFi6E=", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "funding": [ { "type": "GitHub Sponsors", @@ -723,8 +753,8 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha1-NtAhLpYrKzEh+FJfx6PHwCnzNPw=", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "funding": [ { "type": "GitHub Sponsors", @@ -743,8 +773,8 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha1-I35KpdWKlYY/AQMtnumwkPHebpQ=", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "funding": [ { "type": "GitHub Sponsors", @@ -765,8 +795,8 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha1-BrJrKYPE0nv8xlezPiUTTUhosLE=", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "funding": [ { "type": "GitHub Sponsors", @@ -787,8 +817,8 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha1-L5h4MaQNTFEKwmHomFLE6XA8zaY=", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "funding": [ { "type": "GitHub Sponsors", @@ -807,8 +837,8 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha1-R/vNk0caP8yrhs/wOEf8NVLbEFE=", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "funding": [ { "type": "GitHub Sponsors", @@ -826,8 +856,8 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha1-05n6+cRcoUyLS+mLHqSBvO2Htik=", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "funding": [ { "type": "GitHub Sponsors", @@ -847,8 +877,8 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha1-Kg9JCrCL/1zC/V7sbdDKBPibMKk=", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "funding": [ { "type": "GitHub Sponsors", @@ -867,8 +897,8 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha1-/PFbZgl5OI5vEYzba/fXnXPSb+U=", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "funding": [ { "type": "GitHub Sponsors", @@ -886,8 +916,8 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha1-bLmVguXScehO/KjmGoB5lNcWHrI=", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "funding": [ { "type": "GitHub Sponsors", @@ -908,8 +938,8 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha1-DVHRwJVVHPqsNoMmljz1XxX1QLg=", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "funding": [ { "type": "GitHub Sponsors", @@ -924,8 +954,8 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha1-5AQDCWSBmGtBwQZif5j3LU0QuCU=", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "funding": [ { "type": "GitHub Sponsors", @@ -940,8 +970,8 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha1-ww13sugyrPZSb4vxqke8nJQ4wW0=", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "funding": [ { "type": "GitHub Sponsors", @@ -959,8 +989,8 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha1-4aLWLN0jcjCirhGDkCexk4HjHos=", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "funding": [ { "type": "GitHub Sponsors", @@ -978,8 +1008,8 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha1-q4l4m4GKWHUrc9a1UjhiG3+qj9c=", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "funding": [ { "type": "GitHub Sponsors", @@ -999,8 +1029,8 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha1-2K3lug8xl6HPaimZ+7/mNXoaGe4=", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "funding": [ { "type": "GitHub Sponsors", @@ -1021,8 +1051,8 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha1-5dpJTo6ysHGg0I+zT2zv7GwKGbg=", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { "type": "GitHub Sponsors", @@ -1037,8 +1067,8 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha1-8AIl9fWg68MlT5bDa2YFxLOTkI4=", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "funding": [ { "type": "GitHub Sponsors", @@ -1053,14 +1083,14 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha1-YxM2ADTMs2s9xh7L3/eBIfkP4h8=", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "license": "MIT", "engines": { "node": ">=12" @@ -1071,8 +1101,8 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha1-RJxuIaiA4IVb9aq63rOnQDFKusI=", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -1084,17 +1114,17 @@ }, "node_modules/vscode-jsonrpc": { "version": "8.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", - "integrity": "sha1-oyLMDx2X95T/2cTNKomKC94JfzQ=", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", + "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/yaml": { - "version": "2.9.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/yaml/-/yaml-2.9.1.tgz", - "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -1107,9 +1137,9 @@ } }, "node_modules/zod": { - "version": "4.6.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/zod/-/zod-4.6.5.tgz", - "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" From 996f40ff4f48e94bc0d72797b07665baa93f7a23 Mon Sep 17 00:00:00 2001 From: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:31:59 -0700 Subject: [PATCH 4/5] Release 0.7.1 --- .claude-plugin/marketplace.json | 4 ++-- .github/plugin/marketplace.json | 4 ++-- CHANGELOG.md | 20 +++++++++++++++----- plugins/winui/.claude-plugin/plugin.json | 2 +- plugins/winui/.codex-plugin/plugin.json | 7 +++++-- plugins/winui/agent-plugin/plugin.json | 2 +- 6 files changed, 26 insertions(+), 13 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 0b71074b..cb641e5d 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -5,12 +5,12 @@ "url": "https://github.com/microsoft/win-dev-skills" }, "description": "Agents and skills for native Windows app development with WinUI 3 and the Windows App SDK.", - "version": "0.7.0", + "version": "0.7.1", "plugins": [ { "name": "winui", "description": "Agents and skills for WinUI 3 app development. Create new WinUI 3 desktop apps, convert from other frameworks to WinUI 3, or add features to existing WinUI 3 applications.", - "version": "0.7.0", + "version": "0.7.1", "source": "./plugins/winui", "category": "windows-development", "tags": [ diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index 253d25d0..86d94bc6 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -6,13 +6,13 @@ }, "metadata": { "description": "Agents and skills for native Windows app development with WinUI 3 and the Windows App SDK.", - "version": "0.7.0" + "version": "0.7.1" }, "plugins": [ { "name": "winui", "description": "Agents and skills for WinUI 3 app development. Create new WinUI 3 desktop apps, convert from other frameworks to WinUI 3, or add features to existing WinUI 3 applications.", - "version": "0.7.0", + "version": "0.7.1", "source": "./plugins/winui/agent-plugin" } ] diff --git a/CHANGELOG.md b/CHANGELOG.md index e32e6e73..5763ff73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,15 +12,13 @@ strict SemVer. ## [Unreleased] ### Added @@ -29,6 +27,17 @@ The `version-bump` and `changelog-entry` CI jobs enforce this. ### Fixed +### Removed + +### Deprecated +## [0.7.1] — 2026-09-30 + +### Added + +### Changed + +### Fixed + - Replace cross-skill markdown links with plain-text skill names so each skill is self-contained and passes marketplace link validation (vally `valid-refs`), which blocked the awesome-copilot listing update. CI now enforces this. @@ -192,3 +201,4 @@ release process was introduced. Future releases will list per-PR changes here. against source drift. - Marketplace manifest under `.github/plugin/marketplace.json` and Claude Code marketplace manifest under `.claude-plugin/marketplace.json`. + diff --git a/plugins/winui/.claude-plugin/plugin.json b/plugins/winui/.claude-plugin/plugin.json index 5ca558d3..2b5981dc 100644 --- a/plugins/winui/.claude-plugin/plugin.json +++ b/plugins/winui/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "winui", "description": "Agents and skills for WinUI 3 app development. Create new WinUI 3 desktop apps, convert from other frameworks to WinUI 3, or add features to existing WinUI 3 applications.", - "version": "0.7.0", + "version": "0.7.1", "author": { "name": "Microsoft", "url": "https://github.com/microsoft/win-dev-skills" diff --git a/plugins/winui/.codex-plugin/plugin.json b/plugins/winui/.codex-plugin/plugin.json index 88817275..89575bb4 100644 --- a/plugins/winui/.codex-plugin/plugin.json +++ b/plugins/winui/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "winui", - "version": "0.7.0", + "version": "0.7.1", "description": "Agents and skills for WinUI 3 app development. Create new WinUI 3 desktop apps, convert from other frameworks to WinUI 3, or add features to existing WinUI 3 applications.", "author": { "name": "Microsoft", @@ -32,7 +32,10 @@ "longDescription": "End-to-end WinUI 3 development for AI agents — scaffold projects, design XAML with Fluent UI and accessibility, build and diagnose with a real toolchain, automate UI tests, run code reviews, migrate from WPF, and package signed MSIX installers. Each skill is paired with purpose-built tools so the agent fetches just what it needs.", "developerName": "Microsoft", "category": "Developer Tools", - "capabilities": ["Read", "Write"], + "capabilities": [ + "Read", + "Write" + ], "websiteURL": "https://aka.ms/winui-skills", "defaultPrompt": [ "Create a new WinUI 3 app with MVVM.", diff --git a/plugins/winui/agent-plugin/plugin.json b/plugins/winui/agent-plugin/plugin.json index fe69889b..feb49939 100644 --- a/plugins/winui/agent-plugin/plugin.json +++ b/plugins/winui/agent-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "winui", "description": "Agents and skills for WinUI 3 app development. Create new WinUI 3 desktop apps, convert from other frameworks to WinUI 3, or add features to existing WinUI 3 applications.", - "version": "0.7.0", + "version": "0.7.1", "author": { "name": "Microsoft", "url": "https://github.com/microsoft/win-dev-skills" From 74a15b8643c3a5c305a2a52a6772a037c94c8850 Mon Sep 17 00:00:00 2001 From: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:34:08 -0700 Subject: [PATCH 5/5] Fix release helper CHANGELOG and Codex formatting side effects Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- CHANGELOG.md | 18 ++++++------------ plugins/winui/.codex-plugin/plugin.json | 5 +---- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5763ff73..1c722c93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,13 +12,15 @@ strict SemVer. ## [Unreleased] ### Added @@ -30,11 +32,8 @@ The ersion-bump and changelog-entry CI jobs enforce this. ### Removed ### Deprecated -## [0.7.1] — 2026-09-30 - -### Added -### Changed +## [0.7.1] — 2026-09-30 ### Fixed @@ -42,10 +41,6 @@ The ersion-bump and changelog-entry CI jobs enforce this. is self-contained and passes marketplace link validation (vally `valid-refs`), which blocked the awesome-copilot listing update. CI now enforces this. -### Removed - -### Deprecated - ## [0.7.0] — 2026-09-30 ### Added @@ -201,4 +196,3 @@ release process was introduced. Future releases will list per-PR changes here. against source drift. - Marketplace manifest under `.github/plugin/marketplace.json` and Claude Code marketplace manifest under `.claude-plugin/marketplace.json`. - diff --git a/plugins/winui/.codex-plugin/plugin.json b/plugins/winui/.codex-plugin/plugin.json index 89575bb4..c4f86e89 100644 --- a/plugins/winui/.codex-plugin/plugin.json +++ b/plugins/winui/.codex-plugin/plugin.json @@ -32,10 +32,7 @@ "longDescription": "End-to-end WinUI 3 development for AI agents — scaffold projects, design XAML with Fluent UI and accessibility, build and diagnose with a real toolchain, automate UI tests, run code reviews, migrate from WPF, and package signed MSIX installers. Each skill is paired with purpose-built tools so the agent fetches just what it needs.", "developerName": "Microsoft", "category": "Developer Tools", - "capabilities": [ - "Read", - "Write" - ], + "capabilities": ["Read", "Write"], "websiteURL": "https://aka.ms/winui-skills", "defaultPrompt": [ "Create a new WinUI 3 app with MVVM.",