[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BBM5F427YJB53DV40WFEV":3,"skill-same:01M69BBM5F427YJB53DV40WFEV":606},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":24,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M69BBM5F427YJB53DV40WFEV","ui-tests-migration",null,"Create, migrate, and stabilize PowerToys UI tests with Microsoft.PowerToys.UITest.Next and winappcli, through local VM success, commit\u002Fpush, and CI validation. Use for ports, new UITest projects, flaky CI tests, persistent Hyper-V validation, Settings IPC authentication\u002Ftest signing, Explorer\u002FShell selection, preview handlers, thumbnail providers, hotkey activation, stateful process lifecycle, composed WinUI\u002FWebView visual baselines, or foreground failures. Covers APIs, scaffolding, test design, diagnostics, and the required handoff to ui-tests-pipeline-ci. Keywords: UI test, UITests, UITestAutomation.Next, winappcli, WinAppDriver, Selenium, Settings IPC, not-microsoft-signed, Authenticode, local VM, Hyper-V, checkpoint, migrate, flaky, CI stability, Explorer, Shell extension, WebView2.","microsoft\u002FPowerToys","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BB0G8W7E0BMJRDE4NW1BD",140840,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002FSKILL.md",[19],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,9,47,48,49],"tests","migration","ui tests migration","ui","ci","new","stateful","local","preview","scaffolding","selection","ports","projects","migrate","pipeline","design","selenium","authentication","powertoys","create","diagnostics","commit","test","stability","handoff","2026-11-10 10:12:30",false,"---\nname: ui-tests-migration\ndescription: \"Create, migrate, and stabilize PowerToys UI tests with Microsoft.PowerToys.UITest.Next and winappcli, through local VM success, commit\u002Fpush, and CI validation. Use for ports, new UITest projects, flaky CI tests, persistent Hyper-V validation, Settings IPC authentication\u002Ftest signing, Explorer\u002FShell selection, preview handlers, thumbnail providers, hotkey activation, stateful process lifecycle, composed WinUI\u002FWebView visual baselines, or foreground failures. Covers APIs, scaffolding, test design, diagnostics, and the required handoff to ui-tests-pipeline-ci. Keywords: UI test, UITests, UITestAutomation.Next, winappcli, WinAppDriver, Selenium, Settings IPC, not-microsoft-signed, Authenticode, local VM, Hyper-V, checkpoint, migrate, flaky, CI stability, Explorer, Shell extension, WebView2.\"\nlicense: Complete terms in LICENSE.txt\n---\n\n# PowerToys UI-Tests Migration (legacy → `.Next`)\n\nConvert a PowerToys module's UI tests from the legacy **WinAppDriver \u002F Selenium \u002F Appium** harness\n(`Microsoft.PowerToys.UITest`, in `src\u002Fcommon\u002FUITestAutomation\u002F`) to the new **winappcli** harness\n(`Microsoft.PowerToys.UITest.Next`, in `src\u002Fcommon\u002FUITestAutomation.Next\u002F`).\n\nThe new harness shells out to `winapp.exe` and parses its JSON — **no WinAppDriver server on :4723,\nno Selenium\u002FAppium NuGet packages, no `WindowsElement`\u002F`WindowsDriver`.** The public *shape*\n(`UITestBase`, `Session`, `Find\u003CT>`, `By`, element wrappers like `ToggleSwitch`) is deliberately\nsimilar, so most of the work is mechanical API mapping plus reworking a few patterns that don't\ntranslate one-to-one (XPath selectors, stateful elements, instance mouse\u002Fkeyboard helpers).\n\n## When to use this skill\n\nUse this skill when the task is to:\n\n- **Port** a module's existing legacy UI tests to `.Next` (e.g. \"migrate the ScreenRuler UI tests to\n  the new framework\", \"convert FancyZones.UITests to winappcli\").\n- **Create a new** `[Module].UITests.Next` project that re-implements the legacy tests with the new\n  harness, leaving the old project in place.\n- **Stand up brand-new** `.Next` UI tests for a module that has **no** UI tests at all, by reading the\n  module's human test **sign-off markdown** (e.g. `ColorPickerUITest.md`) and turning each manual\n  checklist item into an automated test.\n- **Validate a new or migrated suite in a local Windows VM** through an unattended\n  build\u002Fpackage\u002Fdeploy\u002Frun\u002FTRX\u002Fdiagnose loop. Use a retained VM for fast iteration and a restored\n  baseline checkpoint when clean-profile behavior matters.\n\nThis skill is the *how*: the framework differences, the API mapping, the project scaffolding, the\nnaming rules, the recurring PowerToys test recipes, and the build\u002Fvalidate loop. The *what* (which\nmodule, which tests) comes from the calling prompt.\n\n## End-to-end completion contract\n\nA request to **create, migrate, or stabilize UI tests** includes the complete delivery loop:\nimplement -> build -> full local VM matrix -> commit and push -> scoped CI -> terminal results.\nLocal success is a handoff, **not completion**. After the full default and constrained suites pass,\ninvoke [ui-tests-pipeline-ci](..\u002Fui-tests-pipeline-ci\u002FSKILL.md) automatically; do not wait for a\nseparate \"push\" or \"run CI\" request. Keep commit\u002Fpush and CI validation as open TODOs from the start.\n\nRespect an explicit local-only\u002Fno-push\u002Fno-CI request. A read-only investigation, VM setup, or request\nto run an existing suite locally does not authorize publishing changes. CI remains Microsoft\nFTE-only and requires the pipeline skill's successful access preflight; report an exact blocker\nwhen unavailable, never call local-only evidence CI-validated. The pipeline skill owns publication,\nqueueing, synchronous waiting, and the three-run stabilization limit.\n\n> **Reference implementation — read these working examples before porting anything.** They are\n> the ground truth for \"what good looks like\" with each harness:\n> - **New (`.Next`)**: [ColorPickerEndToEndTests.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FcolorPicker\u002FColorPicker.UITests\u002FColorPickerEndToEndTests.cs)\n>   — full end-to-end scenario (navigate Settings → toggle module → read shortcut → fire hotkey →\n>   read overlay → click-capture → inspect editor), driven entirely through `winappcli`.\n> - **Legacy**: [TestSpacing.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FMeasureTool\u002FTests\u002FScreenRuler.UITests\u002FTestSpacing.cs)\n>   + [TestHelper.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FMeasureTool\u002FTests\u002FScreenRuler.UITests\u002FTestHelper.cs)\n>   — a `UITestBase` subclass plus a static helper that navigates, toggles, reads the shortcut, fires\n>   the hotkey, and validates the clipboard.\n> - **Worked Scenario-A port (validated 5\u002F5, where the legacy suite scored 0\u002F5 locally)**: the\n>   ScreenRuler suite ported from the legacy project above lives in\n>   [ScreenRuler.UITests.Next\u002FTestHelper.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FMeasureTool\u002FTests\u002FScreenRuler.UITests.Next\u002FTestHelper.cs)\n>   + 5 test classes. It is the canonical port reference — cross-window toolbar discovery via\n>   `Session.FromProcess`, a DPI-aware `app.manifest`, cursor centering, and patient hotkey\n>   activation are all there because real runs needed them (see\n>   [references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md)).\n> - **Stateful\u002Fvisual reference (validated 15\u002F15 across Win10 x64, Win11 x64, and ARM64)**:\n>   [PeekFilePreviewTests.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002Fpeek\u002FPeek.UITests.Next\u002FPeekFilePreviewTests.cs)\n>   demonstrates stable Explorer Shell selection, toggle-hotkey activation, process-preserving\n>   pinning tests, renderer readiness, and composed WinUI\u002FWebView visual baselines.\n> - **Explorer\u002FShell-extension reference (validated across x64 and ARM64 CI)**:\n>   [FileExplorerAddonsTests.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002Fpreviewpane\u002FPreviewPane.UITests\u002FFileExplorerAddonsTests.cs)\n>   demonstrates class-scoped runner reuse, one-time Shell restart, state-aware Preview pane\n>   activation, exact Shell selection, deterministic icon sizes, provider-log readiness, and\n>   failure media captured before Explorer teardown. Read\n>   [references\u002Fexplorer-shell-tests.md](references\u002Fexplorer-shell-tests.md) before testing Explorer.\n\n## Required reads (in order)\n\n1. **This `SKILL.md`** — the decision tree (which scenario), the naming rules, the high-level\n   workflow, and the build\u002Fvalidate loop.\n2. **[references\u002Fframework-differences.md](references\u002Fframework-differences.md)** — the conceptual\n   deltas you MUST internalize before writing code: winappcli engine, stateless elements, selector\n   grammar (no XPath\u002FCssSelector), session scopes (window vs process), lifecycle\u002Fhygiene\u002Fmodule\n   pre-enablement, multi-window discovery, and what the new harness does NOT (yet) provide.\n3. **[references\u002Fapi-mapping.md](references\u002Fapi-mapping.md)** — the line-by-line cheat sheet:\n   namespaces, `By`, `Element` actions\u002Fproperties, `Session`, `UITestBase`, the static\n   Keyboard\u002FMouse\u002FClipboard helpers, and the element-wrapper catalog. Keep this open while editing.\n4. **[references\u002Fproject-setup.md](references\u002Fproject-setup.md)** — csproj scaffold, naming\u002Fplacement\n   rules, `.slnx` registration, and how to build & run a `.Next` project. Uses the\n   [templates\u002F](templates\u002F) starter files.\n5. **[references\u002Fporting-workflow.md](references\u002Fporting-workflow.md)** — the two end-to-end\n   playbooks: **A)** port existing legacy tests, and **B)** author tests from a human sign-off\n   markdown when none exist.\n6. **[references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md)** — adaptable recipes\n   for the recurring PowerToys patterns (toggle a module + verify its process, read the activation\n   shortcut from a `ShortcutControl`, fire a global hotkey reliably, inspect the clipboard, discover\n   overlay\u002Feditor windows) and the gotchas that bite during migration.\n7. **[references\u002Fexplorer-shell-tests.md](references\u002Fexplorer-shell-tests.md)** — required for tests\n  involving Explorer, preview handlers, thumbnail providers, Shell selection, view modes, or Shell\n  restarts. Covers lifecycle boundaries, authoritative signals, and failure evidence.\n8. **[references\u002Fci-stability.md](references\u002Fci-stability.md)** — the CI-stability capstone: the\n  Win32-window vs UIA-element mental model, state-boundary worksheet, stable-sample waits, retry\n  semantics, foreground\u002Fintegrity constraints, process lifecycle, composed visual capture, and a\n  **pre-flight checklist** to apply BEFORE the first CI push. It also covers Release Runner\u002FSettings\n  IPC authentication, the existing CI companion-signing mechanism, and why a visible Settings toggle\n  must never be rescued with a settings-file\u002Frestart fallback. Read this to spend one CI iteration\n  instead of six.\n9. **[ui-tests-local-vm](..\u002Fui-tests-local-vm\u002FSKILL.md)** — the live desktop execution loop:\n  scaffold or reuse a persistent Hyper-V VM, run as a true standard user, refresh only\n  changed payloads, iterate through durable TRX\u002Fevidence, and restore or recreate the baseline for\n  clean-profile validation.\n10. **[ui-tests-pipeline-ci](..\u002Fui-tests-pipeline-ci\u002FSKILL.md)** — the mandatory post-local handoff\n  for implementation tasks: preflight, scoped commit\u002Fpush, exact-revision CI, and terminal sign-off.\n\n## Pick your scenario\n\n```mermaid\nflowchart TD\n    A[Module to migrate] --> B{Does a legacy\u003Cbr\u002F>UITests project exist?}\n    B -- Yes --> C[\"Scenario A: PORT\u003Cbr\u002F>Create [Module].UITests.Next\u003Cbr\u002F>Re-implement each legacy test\"]\n    B -- No --> D{Is there a human test\u003Cbr\u002F>sign-off .md?}\n    D -- Yes --> E[\"Scenario B: GREENFIELD\u003Cbr\u002F>Create [Module].UITests\u003Cbr\u002F>Turn each checklist item into a test\"]\n    D -- No --> F[Ask the user for the\u003Cbr\u002F>test spec \u002F sign-off doc]\n```\n\n| Scenario | Trigger | New project name | Source of test cases |\n|---|---|---|---|\n| **A — Port** | A legacy `[Module].UITests` (or similar) project already exists and references `UITestAutomation.csproj` | **`[Module].UITests.Next`** — keep the `.Next` suffix so it lives **alongside** the legacy project | The existing legacy test methods (1:1 re-implementation) |\n| **B — Greenfield** | The module has **no** UI tests at all | **`[Module].UITests`** — **drop** the `.Next` suffix; there's nothing to live alongside | The module's human sign-off markdown (manual checklist), e.g. `ColorPickerUITest.md` |\n\nPlace the new project under **`src\u002Fmodules\u002F[Module]\u002FTests\u002F[Module].UITests.Next\u002F`** (or\n`…\u002FTests\u002F[Module].UITests\u002F` for Scenario B). If the module already keeps tests in a different\n`Tests\u002F` layout, match the module's existing convention rather than forcing this one — see\n[references\u002Fproject-setup.md](references\u002Fproject-setup.md).\n\n> **Keep it abstract.** Every PowerToys module is unique and the legacy tests were written by\n> different people in different styles. Treat the recipes in this skill as *adaptable patterns*, not\n> a rigid script. Re-create the **intent and assertions** of each test; do not mechanically translate\n> brittle, harness-specific scaffolding (Selenium `Actions`, XPath walks, manual driver attaches) when\n> the new harness has a cleaner idiom.\n\n## High-level workflow\n\nCreate a TODO list and work top-to-bottom. Each step links to the reference that drives it.\n\n```markdown\n- [ ] 1. Identify the module + scenario (A port \u002F B greenfield) — this SKILL.md \"Pick your scenario\"\n- [ ] 1a. Read the module's developer docs — `doc\u002Fdevdocs\u002Fmodules\u002F\u003Cmodule>.md` (if the exact file is\n        missing, search `doc\u002Fdevdocs\u002F`, including `doc\u002Fdevdocs\u002Fcommon\u002F`) — to learn its\n        development-cycle specifics BEFORE writing tests: how its shell extensions \u002F context menus\n        register, whether they need a **Release** build (`NDEBUG`) or a **signed** sparse MSIX package,\n        and any Explorer-restart or first-run needs. Skipping this produces opaque failures — e.g. a\n        context-menu entry never appears because a Debug build compiles registration out, or an\n        unsigned `.msix` fails to register (`0x800B0100`).\n- [ ] 2. Read the two reference examples (ColorPicker .Next + ScreenRuler legacy) end-to-end\n- [ ] 3. Inventory the source:\n        • Scenario A → list every [TestMethod] + shared helper in the legacy project\n        • Scenario B → read the module's sign-off .md; list each manual checklist item\n  • For each workflow → list every external boundary (runner, Explorer, HWND, renderer,\n    compositor, child process) and its authoritative ready signal\n        — references\u002Fporting-workflow.md\n- [ ] 4. Internalize the deltas — references\u002Fframework-differences.md\n- [ ] 5. Scaffold the new project (csproj + PerMonitorV2 app.manifest from templates, name per the\n  table, register in .slnx)\n        — references\u002Fproject-setup.md\n- [ ] 6. Re-implement tests, mapping each API as you go — references\u002Fapi-mapping.md\n        + recipes from references\u002Fpatterns-and-pitfalls.md\n- [ ] 6a. If Explorer\u002FShell is involved, apply references\u002Fexplorer-shell-tests.md\n- [ ] 7. Apply the CI-stability checklist BEFORE building — references\u002Fci-stability.md\n  (stable authoritative signals, retry classification, foreground\u002Fintegrity, lifecycle reset\n  scope, non-activating helper processes, composed capture, DPI manifest, single-module enable,\n  first-run suppression)\n- [ ] 7a. If a test changes a module's enabled state through Settings, keep the real Settings UI +\n  immediate runtime assertion. Verify the selected UITest project is covered by the existing\n  `$requiresAuthenticatedSettingsIpc` companion-signing path in\n  `.pipelines\u002Fv2\u002Ftemplates\u002Fjob-test-project.yml`; never add a test-side settings\u002Frestart fallback\n  for Release CI — [references\u002Fci-stability.md](references\u002Fci-stability.md#principle-5a--keep-module-lifecycle-tests-on-real-release-settings-ipc)\n- [ ] 8. Build the new project to exit code 0 — this SKILL.md \"Build & validate\"\n- [ ] 9. Run one deterministic test in the local VM and diagnose the first failure\n      — ..\u002Fui-tests-local-vm\u002FSKILL.md\n- [ ] 10. Rerun the focused test after each fix, then widen to the complete module suite with bounded\n  timeouts; parse TRX and verify durable evidence export\n- [ ] 11. If the local VM is unavailable or unsupported, run on another live desktop or report the exact\n   environmental blocker; do not silently stop at compile validation\n- [ ] 12. Complete the full default and Constrained suites on both guest OSes, plus applicable\n   architecture builds\u002Fguests; preserve counts, payload hashes, and evidence\n- [ ] 13. Invoke ui-tests-pipeline-ci, pass its access preflight, commit only task-owned changes,\n   and push the feature branch; record the exact SHA\n- [ ] 14. Preview and queue scoped CI, persist its build ID, wait synchronously, and diagnose\u002Fretry\n   within the three-run ceiling; finish only on verified terminal success or an explicit blocker\n```\n\n## Build & validate\n\nThe `.Next` harness needs `winapp.exe` only at **run** time, not build time — the project has zero\nmanaged dependency on the engine. So you can always compile-verify a migration even on an agent with\nno winappcli installed.\n\n```pwsh\n# 0. FIRST build of a brand-new project: restore so the assets file exists, otherwise the build\n#    fails with NETSDK1004 \"Assets file ... project.assets.json not found\".\ndotnet restore src\\modules\\\u003CModule>\\Tests\\\u003CModule>.UITests.Next\\\u003CModule>.UITests.Next.csproj -p:Platform=x64\n#    (Equivalently, run tools\\build\\build-essentials.cmd once at the start of the session.)\n\n# 1. Build just the new test project (fast inner loop). Prefer the repo build script.\ntools\\build\\build.cmd -Path src\\modules\\\u003CModule>\\Tests\\\u003CModule>.UITests.Next -Platform x64 -Configuration Debug\n#    Exit code 0 = success; non-zero = failure. On failure read the errors log under the repo root:\n#    artifacts\\logs\\\u003CModule>.UITests.Next\\build.\u003CConfiguration>.\u003CPlatform>.errors.log\n#    Do not substitute `dotnet build` when UITestAutomation.Next's COM references are in the graph:\n#    .NET SDK MSBuild cannot run ResolveComReference and fails with MSB4803. Use the repo script or\n#    Visual Studio's full-framework MSBuild.exe; use `dotnet restore` only to create project.assets.json.\n\n# 2. Run (needs a live desktop). A .Next project is a Microsoft.Testing.Platform Exe — run the\n#    produced exe directly with a TRX report; filter to one test\u002Fcategory for a tight loop.\n$exe = \"\u003Crepo>\\x64\\Debug\\tests\\\u003CModule>.UITests.Next\\net10.0-windows10.0.26100.0\\\u003CModule>.UITests.Next.exe\"\n& $exe --filter \"TestCategory=\u003CCat>\" --report-trx --report-trx-filename run.trx --results-directory \u003Cdir>\n#    --filter accepts \"TestCategory=X\" or \"FullyQualifiedName~Y\"; omit it to run everything.\n#    Exit 0 = all passed. Parse the .trx for per-test outcomes + failure messages.\n```\n\n- **Default to persistent local VM validation —\n  [ui-tests-local-vm](..\u002Fui-tests-local-vm\u002FSKILL.md).** It keeps the interactive desktop and staged\n  tools, refreshes only changed archives, and returns durable status\u002FTRX\u002Fevidence. Do not\n  modify stabilized tests merely to improve a VM-specific pass rate when the task only asks whether\n  the execution loop works. Finish clean-profile claims from a restored known baseline or a fresh\n  named VM volume.\n- **Design for CI stability up-front — [references\u002Fci-stability.md](references\u002Fci-stability.md).**\n  Before the first push, walk its pre-flight checklist (authoritative-signal retries instead of fixed\n  sleeps, navigation via UIA invoke, interaction-scoped foreground checks, non-activating helpers,\n  Win32 window\u002Foverlay detection, screen-capture cold-start handling, DPI manifest, single-module\n  enable, first-run suppression). Most \"passes local, fails CI\" loops come from skipping one of\n  these; applying them proactively is how you spend one CI iteration instead of six.\n- **Run it in a loop: write → build → run → diagnose → repeat.** UI tests surface environment-real\n  failures (DPI scaling, cursor position, hotkey-arming races) that only a live run reveals. Start\n  with one deterministic test (e.g. the activation\u002Ftoggle test), get it green, then widen.\n- **Diagnose from the artifacts, not from the assertion message.** Every failed test attaches a\n  desktop screenshot, and in pipeline mode an MP4 of the run. **Open them before forming any theory**\n  — especially before concluding the product is broken. An assertion can only say \"found 0 rows\"; the\n  screenshot says whether the list was empty or whether your selector was wrong. This is the single\n  highest-leverage habit in the agentic loop: skipping it cost ~8 iterations and a confident but\n  entirely wrong product-defect report on File Locksmith (see\n  [references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md) Pitfall 26). If there is\n  no video, find out why rather than proceeding blind — the harness now prints the reason (a clean\n  Windows image without the Visual C++ redistributable cannot load the native encoder).\n- **First, run the *legacy* suite once for a baseline — and run it ELEVATED.** The legacy harness\n  launches PowerToys via `ProcessStartInfo { Verb = \"runas\" }` (elevated), so a **non-elevated** test\n  host can't complete the launch and **every test fails at startup with a misleading `Win32Exception`\n  cascade** — a false 0\u002FN that looks like \"the tests are broken\" but is purely the run method. (That's\n  why VS Test Explorer passes them: VS runs as admin.) Run from an **elevated** terminal: start\n  `WinAppDriver.exe` on `127.0.0.1:4723`, then run the built DLL with `vstest.console.exe` (see\n  [references\u002Fporting-workflow.md](references\u002Fporting-workflow.md) §A0 for the `-Verb RunAs` recipe).\n  A measurement failure on a scaled (non-100%) display is usually a pre-existing DPI issue (Pitfall\n  12), not something the port must reproduce — the ScreenRuler legacy suite scores **4\u002F5** elevated\n  here (Bounds fails at 150% scale) while the `.Next` port scores **5\u002F5**. `.Next` tests themselves\n  need **no** elevation (the new harness launches the runner non-elevated).\n- **Always** build to exit code 0 before proceeding to live validation. Fix every compile error — do\n  not leave `\u002F\u002F TODO: port this` stubs that break the build.\n- Running the tests requires a **live interactive desktop** plus `winapp.exe`\n  (`winget install Microsoft.winappcli`, or set `WINAPP_CLI_PATH`). The whole PowerToys runner is\n  launched by the harness (`PowerToys.exe --open-settings`) — you should see the Settings window\n  appear. If no supported live desktop is available, report **local validation blocked**, along with\n  the build result and checklist coverage. Compile-only evidence does not complete an implementation\n  task or satisfy the CI local gate.\n- New `.csproj` files under `src\u002F` MUST `\u003CImport Project=\"$(RepoRoot)src\\Common.Dotnet.CsWinRT.props\" \u002F>`\n  right after `\u003CProject Sdk=...>` (CI audits this). The template already does.\n\n## What NOT to do\n\n- **Do NOT delete or edit the legacy `[Module].UITests` project** in Scenario A. The `.Next` project\n  lives alongside it; removing the old one is a separate, explicit decision for the maintainers.\n- **Do NOT change product behaviour.** This is a test-only migration. The one sanctioned product edit\n  is adding **`AutomationProperties.AutomationId`** to a control that is otherwise unaddressable — an\n  icon-only button whose label lives in a tooltip has no UIA Name at all, and the alternative is a\n  brittle coordinate click. Use `AutomationProperties.AutomationId`, never `x:Name` (which also emits\n  a code-behind field); see [references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md)\n  Recipe 16. Anything larger — a hidden automation-peer TextBlock, a new property, a state string —\n  must be flagged for the user instead. (ColorPicker's `ColorHexAutomationPeer` hook is a documented,\n  pre-existing exception — see its class remarks.)\n- **Do NOT port the legacy plumbing literally.** No Selenium `Actions`, no `WindowsDriver`\u002F`WindowsElement`,\n  no `By.XPath`\u002F`By.CssSelector`, no `:4723`. Map them to the winappcli idioms in\n  [references\u002Fapi-mapping.md](references\u002Fapi-mapping.md).\n- **Do NOT add a `ProjectReference` to `UITestAutomation.csproj`** (the legacy harness) — reference\n  **`UITestAutomation.Next.csproj`** only.\n- **Do NOT invent assertions** for a vague sign-off item. If a checklist line has no observable\n  pass\u002Ffail signal, implement what you can and leave a clearly-marked `TestContext.WriteLine` note\n  (or skip with an explanation) rather than asserting on something you can't actually read.\n- **Do NOT introduce new third-party NuGet dependencies.** The `.Next` harness is intentionally\n  dependency-free (MSTest only). Use the Win32-based helpers it already ships.\n- **Do NOT retry a toggle hotkey blindly.** Once any target window appears, wait for initialization;\n  resending the chord may close a healthy window. Restart only after a terminal readiness failure.\n- **Do NOT replace or weaken visual baselines before proving capture is correct.** Foreground HWND,\n  DWM z-order, composed WebView content, theme, and platform are separate failure sources.\n- **Do NOT work around a Release Runner `not-microsoft-signed` Settings rejection in test code.** Do\n  not seed the global enabled map, restart PowerToys, bypass authentication, or weaken the lifecycle\n  assertion. Reuse the pipeline's existing Runner\u002FSettings companion-signing mechanism; see\n  [references\u002Fci-stability.md](references\u002Fci-stability.md#principle-5a--keep-module-lifecycle-tests-on-real-release-settings-ipc).\n\n## What is NICE to do\n\n- **Improve the framework when a helper is demonstrably reusable.** Prefer small composable APIs\n  (`WaitHelper`, `WindowControl`, `ExplorerShell`) over module-specific mega-helpers. Keep product\n  semantics such as Peek pin-state preservation in the module test.\n","# PowerToys UI-Tests Migration (legacy → `.Next`)\n\nConvert a PowerToys module's UI tests from the legacy **WinAppDriver \u002F Selenium \u002F Appium** harness\n(`Microsoft.PowerToys.UITest`, in `src\u002Fcommon\u002FUITestAutomation\u002F`) to the new **winappcli** harness\n(`Microsoft.PowerToys.UITest.Next`, in `src\u002Fcommon\u002FUITestAutomation.Next\u002F`).\n\nThe new harness shells out to `winapp.exe` and parses its JSON — **no WinAppDriver server on :4723,\nno Selenium\u002FAppium NuGet packages, no `WindowsElement`\u002F`WindowsDriver`.** The public *shape*\n(`UITestBase`, `Session`, `Find\u003CT>`, `By`, element wrappers like `ToggleSwitch`) is deliberately\nsimilar, so most of the work is mechanical API mapping plus reworking a few patterns that don't\ntranslate one-to-one (XPath selectors, stateful elements, instance mouse\u002Fkeyboard helpers).\n\n## When to use this skill\n\nUse this skill when the task is to:\n\n- **Port** a module's existing legacy UI tests to `.Next` (e.g. \"migrate the ScreenRuler UI tests to\n  the new framework\", \"convert FancyZones.UITests to winappcli\").\n- **Create a new** `[Module].UITests.Next` project that re-implements the legacy tests with the new\n  harness, leaving the old project in place.\n- **Stand up brand-new** `.Next` UI tests for a module that has **no** UI tests at all, by reading the\n  module's human test **sign-off markdown** (e.g. `ColorPickerUITest.md`) and turning each manual\n  checklist item into an automated test.\n- **Validate a new or migrated suite in a local Windows VM** through an unattended\n  build\u002Fpackage\u002Fdeploy\u002Frun\u002FTRX\u002Fdiagnose loop. Use a retained VM for fast iteration and a restored\n  baseline checkpoint when clean-profile behavior matters.\n\nThis skill is the *how*: the framework differences, the API mapping, the project scaffolding, the\nnaming rules, the recurring PowerToys test recipes, and the build\u002Fvalidate loop. The *what* (which\nmodule, which tests) comes from the calling prompt.\n\n## End-to-end completion contract\n\nA request to **create, migrate, or stabilize UI tests** includes the complete delivery loop:\nimplement -> build -> full local VM matrix -> commit and push -> scoped CI -> terminal results.\nLocal success is a handoff, **not completion**. After the full default and constrained suites pass,\ninvoke [ui-tests-pipeline-ci](..\u002Fui-tests-pipeline-ci\u002FSKILL.md) automatically; do not wait for a\nseparate \"push\" or \"run CI\" request. Keep commit\u002Fpush and CI validation as open TODOs from the start.\n\nRespect an explicit local-only\u002Fno-push\u002Fno-CI request. A read-only investigation, VM setup, or request\nto run an existing suite locally does not authorize publishing changes. CI remains Microsoft\nFTE-only and requires the pipeline skill's successful access preflight; report an exact blocker\nwhen unavailable, never call local-only evidence CI-validated. The pipeline skill owns publication,\nqueueing, synchronous waiting, and the three-run stabilization limit.\n\n> **Reference implementation — read these working examples before porting anything.** They are\n> the ground truth for \"what good looks like\" with each harness:\n> - **New (`.Next`)**: [ColorPickerEndToEndTests.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FcolorPicker\u002FColorPicker.UITests\u002FColorPickerEndToEndTests.cs)\n>   — full end-to-end scenario (navigate Settings → toggle module → read shortcut → fire hotkey →\n>   read overlay → click-capture → inspect editor), driven entirely through `winappcli`.\n> - **Legacy**: [TestSpacing.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FMeasureTool\u002FTests\u002FScreenRuler.UITests\u002FTestSpacing.cs)\n>   + [TestHelper.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FMeasureTool\u002FTests\u002FScreenRuler.UITests\u002FTestHelper.cs)\n>   — a `UITestBase` subclass plus a static helper that navigates, toggles, reads the shortcut, fires\n>   the hotkey, and validates the clipboard.\n> - **Worked Scenario-A port (validated 5\u002F5, where the legacy suite scored 0\u002F5 locally)**: the\n>   ScreenRuler suite ported from the legacy project above lives in\n>   [ScreenRuler.UITests.Next\u002FTestHelper.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002FMeasureTool\u002FTests\u002FScreenRuler.UITests.Next\u002FTestHelper.cs)\n>   + 5 test classes. It is the canonical port reference — cross-window toolbar discovery via\n>   `Session.FromProcess`, a DPI-aware `app.manifest`, cursor centering, and patient hotkey\n>   activation are all there because real runs needed them (see\n>   [references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md)).\n> - **Stateful\u002Fvisual reference (validated 15\u002F15 across Win10 x64, Win11 x64, and ARM64)**:\n>   [PeekFilePreviewTests.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002Fpeek\u002FPeek.UITests.Next\u002FPeekFilePreviewTests.cs)\n>   demonstrates stable Explorer Shell selection, toggle-hotkey activation, process-preserving\n>   pinning tests, renderer readiness, and composed WinUI\u002FWebView visual baselines.\n> - **Explorer\u002FShell-extension reference (validated across x64 and ARM64 CI)**:\n>   [FileExplorerAddonsTests.cs](..\u002F..\u002F..\u002Fsrc\u002Fmodules\u002Fpreviewpane\u002FPreviewPane.UITests\u002FFileExplorerAddonsTests.cs)\n>   demonstrates class-scoped runner reuse, one-time Shell restart, state-aware Preview pane\n>   activation, exact Shell selection, deterministic icon sizes, provider-log readiness, and\n>   failure media captured before Explorer teardown. Read\n>   [references\u002Fexplorer-shell-tests.md](references\u002Fexplorer-shell-tests.md) before testing Explorer.\n\n## Required reads (in order)\n\n1. **This `SKILL.md`** — the decision tree (which scenario), the naming rules, the high-level\n   workflow, and the build\u002Fvalidate loop.\n2. **[references\u002Fframework-differences.md](references\u002Fframework-differences.md)** — the conceptual\n   deltas you MUST internalize before writing code: winappcli engine, stateless elements, selector\n   grammar (no XPath\u002FCssSelector), session scopes (window vs process), lifecycle\u002Fhygiene\u002Fmodule\n   pre-enablement, multi-window discovery, and what the new harness does NOT (yet) provide.\n3. **[references\u002Fapi-mapping.md](references\u002Fapi-mapping.md)** — the line-by-line cheat sheet:\n   namespaces, `By`, `Element` actions\u002Fproperties, `Session`, `UITestBase`, the static\n   Keyboard\u002FMouse\u002FClipboard helpers, and the element-wrapper catalog. Keep this open while editing.\n4. **[references\u002Fproject-setup.md](references\u002Fproject-setup.md)** — csproj scaffold, naming\u002Fplacement\n   rules, `.slnx` registration, and how to build & run a `.Next` project. Uses the\n   [templates\u002F](templates\u002F) starter files.\n5. **[references\u002Fporting-workflow.md](references\u002Fporting-workflow.md)** — the two end-to-end\n   playbooks: **A)** port existing legacy tests, and **B)** author tests from a human sign-off\n   markdown when none exist.\n6. **[references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md)** — adaptable recipes\n   for the recurring PowerToys patterns (toggle a module + verify its process, read the activation\n   shortcut from a `ShortcutControl`, fire a global hotkey reliably, inspect the clipboard, discover\n   overlay\u002Feditor windows) and the gotchas that bite during migration.\n7. **[references\u002Fexplorer-shell-tests.md](references\u002Fexplorer-shell-tests.md)** — required for tests\n  involving Explorer, preview handlers, thumbnail providers, Shell selection, view modes, or Shell\n  restarts. Covers lifecycle boundaries, authoritative signals, and failure evidence.\n8. **[references\u002Fci-stability.md](references\u002Fci-stability.md)** — the CI-stability capstone: the\n  Win32-window vs UIA-element mental model, state-boundary worksheet, stable-sample waits, retry\n  semantics, foreground\u002Fintegrity constraints, process lifecycle, composed visual capture, and a\n  **pre-flight checklist** to apply BEFORE the first CI push. It also covers Release Runner\u002FSettings\n  IPC authentication, the existing CI companion-signing mechanism, and why a visible Settings toggle\n  must never be rescued with a settings-file\u002Frestart fallback. Read this to spend one CI iteration\n  instead of six.\n9. **[ui-tests-local-vm](..\u002Fui-tests-local-vm\u002FSKILL.md)** — the live desktop execution loop:\n  scaffold or reuse a persistent Hyper-V VM, run as a true standard user, refresh only\n  changed payloads, iterate through durable TRX\u002Fevidence, and restore or recreate the baseline for\n  clean-profile validation.\n10. **[ui-tests-pipeline-ci](..\u002Fui-tests-pipeline-ci\u002FSKILL.md)** — the mandatory post-local handoff\n  for implementation tasks: preflight, scoped commit\u002Fpush, exact-revision CI, and terminal sign-off.\n\n## Pick your scenario\n\n```mermaid\nflowchart TD\n    A[Module to migrate] --> B{Does a legacy\u003Cbr\u002F>UITests project exist?}\n    B -- Yes --> C[\"Scenario A: PORT\u003Cbr\u002F>Create [Module].UITests.Next\u003Cbr\u002F>Re-implement each legacy test\"]\n    B -- No --> D{Is there a human test\u003Cbr\u002F>sign-off .md?}\n    D -- Yes --> E[\"Scenario B: GREENFIELD\u003Cbr\u002F>Create [Module].UITests\u003Cbr\u002F>Turn each checklist item into a test\"]\n    D -- No --> F[Ask the user for the\u003Cbr\u002F>test spec \u002F sign-off doc]\n```\n\n| Scenario | Trigger | New project name | Source of test cases |\n|---|---|---|---|\n| **A — Port** | A legacy `[Module].UITests` (or similar) project already exists and references `UITestAutomation.csproj` | **`[Module].UITests.Next`** — keep the `.Next` suffix so it lives **alongside** the legacy project | The existing legacy test methods (1:1 re-implementation) |\n| **B — Greenfield** | The module has **no** UI tests at all | **`[Module].UITests`** — **drop** the `.Next` suffix; there's nothing to live alongside | The module's human sign-off markdown (manual checklist), e.g. `ColorPickerUITest.md` |\n\nPlace the new project under **`src\u002Fmodules\u002F[Module]\u002FTests\u002F[Module].UITests.Next\u002F`** (or\n`…\u002FTests\u002F[Module].UITests\u002F` for Scenario B). If the module already keeps tests in a different\n`Tests\u002F` layout, match the module's existing convention rather than forcing this one — see\n[references\u002Fproject-setup.md](references\u002Fproject-setup.md).\n\n> **Keep it abstract.** Every PowerToys module is unique and the legacy tests were written by\n> different people in different styles. Treat the recipes in this skill as *adaptable patterns*, not\n> a rigid script. Re-create the **intent and assertions** of each test; do not mechanically translate\n> brittle, harness-specific scaffolding (Selenium `Actions`, XPath walks, manual driver attaches) when\n> the new harness has a cleaner idiom.\n\n## High-level workflow\n\nCreate a TODO list and work top-to-bottom. Each step links to the reference that drives it.\n\n```markdown\n- [ ] 1. Identify the module + scenario (A port \u002F B greenfield) — this SKILL.md \"Pick your scenario\"\n- [ ] 1a. Read the module's developer docs — `doc\u002Fdevdocs\u002Fmodules\u002F\u003Cmodule>.md` (if the exact file is\n        missing, search `doc\u002Fdevdocs\u002F`, including `doc\u002Fdevdocs\u002Fcommon\u002F`) — to learn its\n        development-cycle specifics BEFORE writing tests: how its shell extensions \u002F context menus\n        register, whether they need a **Release** build (`NDEBUG`) or a **signed** sparse MSIX package,\n        and any Explorer-restart or first-run needs. Skipping this produces opaque failures — e.g. a\n        context-menu entry never appears because a Debug build compiles registration out, or an\n        unsigned `.msix` fails to register (`0x800B0100`).\n- [ ] 2. Read the two reference examples (ColorPicker .Next + ScreenRuler legacy) end-to-end\n- [ ] 3. Inventory the source:\n        • Scenario A → list every [TestMethod] + shared helper in the legacy project\n        • Scenario B → read the module's sign-off .md; list each manual checklist item\n  • For each workflow → list every external boundary (runner, Explorer, HWND, renderer,\n    compositor, child process) and its authoritative ready signal\n        — references\u002Fporting-workflow.md\n- [ ] 4. Internalize the deltas — references\u002Fframework-differences.md\n- [ ] 5. Scaffold the new project (csproj + PerMonitorV2 app.manifest from templates, name per the\n  table, register in .slnx)\n        — references\u002Fproject-setup.md\n- [ ] 6. Re-implement tests, mapping each API as you go — references\u002Fapi-mapping.md\n        + recipes from references\u002Fpatterns-and-pitfalls.md\n- [ ] 6a. If Explorer\u002FShell is involved, apply references\u002Fexplorer-shell-tests.md\n- [ ] 7. Apply the CI-stability checklist BEFORE building — references\u002Fci-stability.md\n  (stable authoritative signals, retry classification, foreground\u002Fintegrity, lifecycle reset\n  scope, non-activating helper processes, composed capture, DPI manifest, single-module enable,\n  first-run suppression)\n- [ ] 7a. If a test changes a module's enabled state through Settings, keep the real Settings UI +\n  immediate runtime assertion. Verify the selected UITest project is covered by the existing\n  `$requiresAuthenticatedSettingsIpc` companion-signing path in\n  `.pipelines\u002Fv2\u002Ftemplates\u002Fjob-test-project.yml`; never add a test-side settings\u002Frestart fallback\n  for Release CI — [references\u002Fci-stability.md](references\u002Fci-stability.md#principle-5a--keep-module-lifecycle-tests-on-real-release-settings-ipc)\n- [ ] 8. Build the new project to exit code 0 — this SKILL.md \"Build & validate\"\n- [ ] 9. Run one deterministic test in the local VM and diagnose the first failure\n      — ..\u002Fui-tests-local-vm\u002FSKILL.md\n- [ ] 10. Rerun the focused test after each fix, then widen to the complete module suite with bounded\n  timeouts; parse TRX and verify durable evidence export\n- [ ] 11. If the local VM is unavailable or unsupported, run on another live desktop or report the exact\n   environmental blocker; do not silently stop at compile validation\n- [ ] 12. Complete the full default and Constrained suites on both guest OSes, plus applicable\n   architecture builds\u002Fguests; preserve counts, payload hashes, and evidence\n- [ ] 13. Invoke ui-tests-pipeline-ci, pass its access preflight, commit only task-owned changes,\n   and push the feature branch; record the exact SHA\n- [ ] 14. Preview and queue scoped CI, persist its build ID, wait synchronously, and diagnose\u002Fretry\n   within the three-run ceiling; finish only on verified terminal success or an explicit blocker\n```\n\n## Build & validate\n\nThe `.Next` harness needs `winapp.exe` only at **run** time, not build time — the project has zero\nmanaged dependency on the engine. So you can always compile-verify a migration even on an agent with\nno winappcli installed.\n\n```pwsh\n# 0. FIRST build of a brand-new project: restore so the assets file exists, otherwise the build\n#    fails with NETSDK1004 \"Assets file ... project.assets.json not found\".\ndotnet restore src\\modules\\\u003CModule>\\Tests\\\u003CModule>.UITests.Next\\\u003CModule>.UITests.Next.csproj -p:Platform=x64\n#    (Equivalently, run tools\\build\\build-essentials.cmd once at the start of the session.)\n\n# 1. Build just the new test project (fast inner loop). Prefer the repo build script.\ntools\\build\\build.cmd -Path src\\modules\\\u003CModule>\\Tests\\\u003CModule>.UITests.Next -Platform x64 -Configuration Debug\n#    Exit code 0 = success; non-zero = failure. On failure read the errors log under the repo root:\n#    artifacts\\logs\\\u003CModule>.UITests.Next\\build.\u003CConfiguration>.\u003CPlatform>.errors.log\n#    Do not substitute `dotnet build` when UITestAutomation.Next's COM references are in the graph:\n#    .NET SDK MSBuild cannot run ResolveComReference and fails with MSB4803. Use the repo script or\n#    Visual Studio's full-framework MSBuild.exe; use `dotnet restore` only to create project.assets.json.\n\n# 2. Run (needs a live desktop). A .Next project is a Microsoft.Testing.Platform Exe — run the\n#    produced exe directly with a TRX report; filter to one test\u002Fcategory for a tight loop.\n$exe = \"\u003Crepo>\\x64\\Debug\\tests\\\u003CModule>.UITests.Next\\net10.0-windows10.0.26100.0\\\u003CModule>.UITests.Next.exe\"\n& $exe --filter \"TestCategory=\u003CCat>\" --report-trx --report-trx-filename run.trx --results-directory \u003Cdir>\n#    --filter accepts \"TestCategory=X\" or \"FullyQualifiedName~Y\"; omit it to run everything.\n#    Exit 0 = all passed. Parse the .trx for per-test outcomes + failure messages.\n```\n\n- **Default to persistent local VM validation —\n  [ui-tests-local-vm](..\u002Fui-tests-local-vm\u002FSKILL.md).** It keeps the interactive desktop and staged\n  tools, refreshes only changed archives, and returns durable status\u002FTRX\u002Fevidence. Do not\n  modify stabilized tests merely to improve a VM-specific pass rate when the task only asks whether\n  the execution loop works. Finish clean-profile claims from a restored known baseline or a fresh\n  named VM volume.\n- **Design for CI stability up-front — [references\u002Fci-stability.md](references\u002Fci-stability.md).**\n  Before the first push, walk its pre-flight checklist (authoritative-signal retries instead of fixed\n  sleeps, navigation via UIA invoke, interaction-scoped foreground checks, non-activating helpers,\n  Win32 window\u002Foverlay detection, screen-capture cold-start handling, DPI manifest, single-module\n  enable, first-run suppression). Most \"passes local, fails CI\" loops come from skipping one of\n  these; applying them proactively is how you spend one CI iteration instead of six.\n- **Run it in a loop: write → build → run → diagnose → repeat.** UI tests surface environment-real\n  failures (DPI scaling, cursor position, hotkey-arming races) that only a live run reveals. Start\n  with one deterministic test (e.g. the activation\u002Ftoggle test), get it green, then widen.\n- **Diagnose from the artifacts, not from the assertion message.** Every failed test attaches a\n  desktop screenshot, and in pipeline mode an MP4 of the run. **Open them before forming any theory**\n  — especially before concluding the product is broken. An assertion can only say \"found 0 rows\"; the\n  screenshot says whether the list was empty or whether your selector was wrong. This is the single\n  highest-leverage habit in the agentic loop: skipping it cost ~8 iterations and a confident but\n  entirely wrong product-defect report on File Locksmith (see\n  [references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md) Pitfall 26). If there is\n  no video, find out why rather than proceeding blind — the harness now prints the reason (a clean\n  Windows image without the Visual C++ redistributable cannot load the native encoder).\n- **First, run the *legacy* suite once for a baseline — and run it ELEVATED.** The legacy harness\n  launches PowerToys via `ProcessStartInfo { Verb = \"runas\" }` (elevated), so a **non-elevated** test\n  host can't complete the launch and **every test fails at startup with a misleading `Win32Exception`\n  cascade** — a false 0\u002FN that looks like \"the tests are broken\" but is purely the run method. (That's\n  why VS Test Explorer passes them: VS runs as admin.) Run from an **elevated** terminal: start\n  `WinAppDriver.exe` on `127.0.0.1:4723`, then run the built DLL with `vstest.console.exe` (see\n  [references\u002Fporting-workflow.md](references\u002Fporting-workflow.md) §A0 for the `-Verb RunAs` recipe).\n  A measurement failure on a scaled (non-100%) display is usually a pre-existing DPI issue (Pitfall\n  12), not something the port must reproduce — the ScreenRuler legacy suite scores **4\u002F5** elevated\n  here (Bounds fails at 150% scale) while the `.Next` port scores **5\u002F5**. `.Next` tests themselves\n  need **no** elevation (the new harness launches the runner non-elevated).\n- **Always** build to exit code 0 before proceeding to live validation. Fix every compile error — do\n  not leave `\u002F\u002F TODO: port this` stubs that break the build.\n- Running the tests requires a **live interactive desktop** plus `winapp.exe`\n  (`winget install Microsoft.winappcli`, or set `WINAPP_CLI_PATH`). The whole PowerToys runner is\n  launched by the harness (`PowerToys.exe --open-settings`) — you should see the Settings window\n  appear. If no supported live desktop is available, report **local validation blocked**, along with\n  the build result and checklist coverage. Compile-only evidence does not complete an implementation\n  task or satisfy the CI local gate.\n- New `.csproj` files under `src\u002F` MUST `\u003CImport Project=\"$(RepoRoot)src\\Common.Dotnet.CsWinRT.props\" \u002F>`\n  right after `\u003CProject Sdk=...>` (CI audits this). The template already does.\n\n## What NOT to do\n\n- **Do NOT delete or edit the legacy `[Module].UITests` project** in Scenario A. The `.Next` project\n  lives alongside it; removing the old one is a separate, explicit decision for the maintainers.\n- **Do NOT change product behaviour.** This is a test-only migration. The one sanctioned product edit\n  is adding **`AutomationProperties.AutomationId`** to a control that is otherwise unaddressable — an\n  icon-only button whose label lives in a tooltip has no UIA Name at all, and the alternative is a\n  brittle coordinate click. Use `AutomationProperties.AutomationId`, never `x:Name` (which also emits\n  a code-behind field); see [references\u002Fpatterns-and-pitfalls.md](references\u002Fpatterns-and-pitfalls.md)\n  Recipe 16. Anything larger — a hidden automation-peer TextBlock, a new property, a state string —\n  must be flagged for the user instead. (ColorPicker's `ColorHexAutomationPeer` hook is a documented,\n  pre-existing exception — see its class remarks.)\n- **Do NOT port the legacy plumbing literally.** No Selenium `Actions`, no `WindowsDriver`\u002F`WindowsElement`,\n  no `By.XPath`\u002F`By.CssSelector`, no `:4723`. Map them to the winappcli idioms in\n  [references\u002Fapi-mapping.md](references\u002Fapi-mapping.md).\n- **Do NOT add a `ProjectReference` to `UITestAutomation.csproj`** (the legacy harness) — reference\n  **`UITestAutomation.Next.csproj`** only.\n- **Do NOT invent assertions** for a vague sign-off item. If a checklist line has no observable\n  pass\u002Ffail signal, implement what you can and leave a clearly-marked `TestContext.WriteLine` note\n  (or skip with an explanation) rather than asserting on something you can't actually read.\n- **Do NOT introduce new third-party NuGet dependencies.** The `.Next` harness is intentionally\n  dependency-free (MSTest only). Use the Win32-based helpers it already ships.\n- **Do NOT retry a toggle hotkey blindly.** Once any target window appears, wait for initialization;\n  resending the chord may close a healthy window. Restart only after a terminal readiness failure.\n- **Do NOT replace or weaken visual baselines before proving capture is correct.** Foreground HWND,\n  DWM z-order, composed WebView content, theme, and platform are separate failure sources.\n- **Do NOT work around a Release Runner `not-microsoft-signed` Settings rejection in test code.** Do\n  not seed the global enabled map, restart PowerToys, bypass authentication, or weaken the lifecycle\n  assertion. Reuse the pipeline's existing Runner\u002FSettings companion-signing mechanism; see\n  [references\u002Fci-stability.md](references\u002Fci-stability.md#principle-5a--keep-module-lifecycle-tests-on-real-release-settings-ipc).\n\n## What is NICE to do\n\n- **Improve the framework when a helper is demonstrably reusable.** Prefer small composable APIs\n  (`WaitHelper`, `WindowControl`, `ExplorerShell`) over module-specific mega-helpers. Keep product\n  semantics such as Peek pin-state preservation in the module test.\n",{"name":5,"license":55,"description":7},"Complete terms in LICENSE.txt","main","5ce7acee5356814f1fbd8e8b8fd27b95c11a6def",".github\u002Fskills\u002Fui-tests-migration",8726,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-11 08:24:26",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add microsoft\u002FPowerToys --skill ui-tests-migration",{"tool":71,"command":72},"bunx","bunx skills add microsoft\u002FPowerToys --skill ui-tests-migration",{"tool":74,"command":75},"pnpm","pnpm dlx skills add microsoft\u002FPowerToys --skill ui-tests-migration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002FSKILL.md",true,[79,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,144,148,152,156,160,164,168,172,176,180,184,188,194,198,202,206,210,214,219,223,227,230,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417,420,424,428,432,436,440,444,448,452,456,460,464,468,472,476,480,484,488,492,496,500,504,508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,580,584,588,594,598,602],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"copilot-studio\u002Fagent.sync.yaml","REFERENCE","参考文档",174,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fagent.sync.yaml",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"copilot-studio\u002Fbehaviors\u002Faibast_accessory-recommendations.mcs.yml",1266,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_accessory-recommendations.mcs.yml",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"copilot-studio\u002Fbehaviors\u002Faibast_aggregate-store-coaching-review.mcs.yml",723,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_aggregate-store-coaching-review.mcs.yml",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"copilot-studio\u002Fbehaviors\u002Faibast_prepare-transaction.mcs.yml",1295,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_prepare-transaction.mcs.yml",{"path":98,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":99,"sourceHtmlUrl":100},"copilot-studio\u002Fbehaviors\u002Faibast_product-compare.mcs.yml",1213,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_product-compare.mcs.yml",{"path":102,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":103,"sourceHtmlUrl":104},"copilot-studio\u002Fbehaviors\u002Faibast_respectful-customer-assistance-draft.mcs.yml",750,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_respectful-customer-assistance-draft.mcs.yml",{"path":106,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":107,"sourceHtmlUrl":108},"copilot-studio\u002Fbehaviors\u002Faibast_store-shift-planning-checklist.mcs.yml",645,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_store-shift-planning-checklist.mcs.yml",{"path":110,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":111,"sourceHtmlUrl":112},"copilot-studio\u002Fbehaviors\u002Faibast_verified-product-lookup-draft.mcs.yml",720,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fbehaviors\u002Faibast_verified-product-lookup-draft.mcs.yml",{"path":114,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":115,"sourceHtmlUrl":116},"copilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-rules-and-safety.md",14806,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-rules-and-safety.md",{"path":118,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":119,"sourceHtmlUrl":120},"copilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-rules-and-safety.md.mcs.yml",188,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-rules-and-safety.md.mcs.yml",{"path":122,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":123,"sourceHtmlUrl":124},"copilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-synthetic-records.md",13698,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-synthetic-records.md",{"path":126,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":127,"sourceHtmlUrl":128},"copilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-synthetic-records.md.mcs.yml",190,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fcapabilities\u002Fknowledge\u002Ffiles\u002Faibast_store-associate-synthetic-records.md.mcs.yml",{"path":130,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":131,"sourceHtmlUrl":132},"copilot-studio\u002Fsettings.mcs.yml",2612,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fcopilot-studio\u002Fsettings.mcs.yml",{"path":134,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":135,"sourceHtmlUrl":136},"deployment.json",4857,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fdeployment.json",{"path":138,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":139,"sourceHtmlUrl":140},"EASY-MODE-COPILOT-CHAT.md",245,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002FEASY-MODE-COPILOT-CHAT.md",{"path":142,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":139,"sourceHtmlUrl":143},"EASY-MODE-PERSONLESS.md","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002FEASY-MODE-PERSONLESS.md",{"path":145,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":146,"sourceHtmlUrl":147},"EASY-MODE.md",2757,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002FEASY-MODE.md",{"path":149,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":150,"sourceHtmlUrl":151},"evals\u002Fcopilot-studio-preview-evidence.json",2345,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Fcopilot-studio-preview-evidence.json",{"path":153,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":154,"sourceHtmlUrl":155},"evals\u002Fdataverse-draft-evidence.json",1699,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Fdataverse-draft-evidence.json",{"path":157,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":158,"sourceHtmlUrl":159},"evals\u002Fmanual-build-evidence.json",4367,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Fmanual-build-evidence.json",{"path":161,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":162,"sourceHtmlUrl":163},"evals\u002Fonepager-map.json",2745,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Fonepager-map.json",{"path":165,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":166,"sourceHtmlUrl":167},"evals\u002Fsource-audit.json",1946,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Fsource-audit.json",{"path":169,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":170,"sourceHtmlUrl":171},"evals\u002Ftranscripts.json",20508,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Ftranscripts.json",{"path":173,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":174,"sourceHtmlUrl":175},"evals\u002Fvisual-checkpoints.json",34532,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevals\u002Fvisual-checkpoints.json",{"path":177,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":178,"sourceHtmlUrl":179},"evidence-report.html",33418,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fevidence-report.html",{"path":181,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":182,"sourceHtmlUrl":183},"export-manifest.json",61346,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fexport-manifest.json",{"path":185,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":186,"sourceHtmlUrl":187},"exports\u002FREADME.md",1603,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fexports\u002FREADME.md",{"path":189,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":192,"sourceHtmlUrl":193},"exports\u002Fstore-associate-copilot-copilot-studio-solution.zip","ASSET","资产文件",23047,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fexports\u002Fstore-associate-copilot-copilot-studio-solution.zip",{"path":195,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":196,"sourceHtmlUrl":197},"exports\u002Fstore-associate-copilot-deployment-settings.json",211,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fexports\u002Fstore-associate-copilot-deployment-settings.json",{"path":199,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":200,"sourceHtmlUrl":201},"exports\u002Fstore-associate-copilot-solution-export.json",1138,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fexports\u002Fstore-associate-copilot-solution-export.json",{"path":203,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":204,"sourceHtmlUrl":205},"field-guide.html",39499,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Ffield-guide.html",{"path":207,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":208,"sourceHtmlUrl":209},"FIELD-GUIDE.md",14633,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002FFIELD-GUIDE.md",{"path":211,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":212,"sourceHtmlUrl":213},"FLOW.md",1126,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002FFLOW.md",{"path":215,"resourceType":216,"resourceTypeDesc":217,"sizeBytes":218,"sourceHtmlUrl":16},"LICENSE.txt","LICENSE","许可证",11355,{"path":220,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":221,"sourceHtmlUrl":222},"manual-tutorial.html",98802,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fmanual-tutorial.html",{"path":224,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":225,"sourceHtmlUrl":226},"manual\u002FGLOBAL-INSTRUCTIONS.md",1883,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fmanual\u002FGLOBAL-INSTRUCTIONS.md",{"path":228,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":115,"sourceHtmlUrl":229},"manual\u002Fknowledge\u002Faibast_store-associate-rules-and-safety.md","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fmanual\u002Fknowledge\u002Faibast_store-associate-rules-and-safety.md",{"path":231,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":123,"sourceHtmlUrl":232},"manual\u002Fknowledge\u002Faibast_store-associate-synthetic-records.md","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fmanual\u002Fknowledge\u002Faibast_store-associate-synthetic-records.md",{"path":234,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":235,"sourceHtmlUrl":236},"quest.html",156009,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fquest.html",{"path":238,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":239,"sourceHtmlUrl":240},"README.md",2721,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002FREADME.md",{"path":242,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":243,"sourceHtmlUrl":244},"references\u002Fapi-mapping.md",13373,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fapi-mapping.md",{"path":246,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":247,"sourceHtmlUrl":248},"references\u002Fci-stability.md",29311,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fci-stability.md",{"path":250,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":251,"sourceHtmlUrl":252},"references\u002Fexplorer-shell-tests.md",11483,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fexplorer-shell-tests.md",{"path":254,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":255,"sourceHtmlUrl":256},"references\u002Fframework-differences.md",12204,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fframework-differences.md",{"path":258,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":259,"sourceHtmlUrl":260},"references\u002Fnuget-runtime-pack-cache.md",1612,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fnuget-runtime-pack-cache.md",{"path":262,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":263,"sourceHtmlUrl":264},"references\u002Fpatterns-and-pitfalls.md",45908,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fpatterns-and-pitfalls.md",{"path":266,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":267,"sourceHtmlUrl":268},"references\u002Fporting-workflow.md",12978,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fporting-workflow.md",{"path":270,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":271,"sourceHtmlUrl":272},"references\u002Fproject-setup.md",13132,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Freferences\u002Fproject-setup.md",{"path":274,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":275,"sourceHtmlUrl":276},"screenshots\u002Fassisted\u002F01-review-build.jpg",115865,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F01-review-build.jpg",{"path":278,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":279,"sourceHtmlUrl":280},"screenshots\u002Fassisted\u002F02-sa-01.jpg",139243,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F02-sa-01.jpg",{"path":282,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":283,"sourceHtmlUrl":284},"screenshots\u002Fassisted\u002F03-sa-02.jpg",116314,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F03-sa-02.jpg",{"path":286,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":287,"sourceHtmlUrl":288},"screenshots\u002Fassisted\u002F04-sa-03.jpg",116423,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F04-sa-03.jpg",{"path":290,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":291,"sourceHtmlUrl":292},"screenshots\u002Fassisted\u002F05-sa-04.jpg",235606,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F05-sa-04.jpg",{"path":294,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":295,"sourceHtmlUrl":296},"screenshots\u002Fassisted\u002F06-sa-05.jpg",133206,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F06-sa-05.jpg",{"path":298,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":299,"sourceHtmlUrl":300},"screenshots\u002Fassisted\u002F07-sa-06.jpg",146928,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F07-sa-06.jpg",{"path":302,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":303,"sourceHtmlUrl":304},"screenshots\u002Fassisted\u002F08-sa-07.jpg",134072,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F08-sa-07.jpg",{"path":306,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":307,"sourceHtmlUrl":308},"screenshots\u002Fassisted\u002F09-confirm-draft.jpg",29045,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002F09-confirm-draft.jpg",{"path":310,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":311,"sourceHtmlUrl":312},"screenshots\u002Fassisted\u002Fannotated\u002F01-review-build.png",122987,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F01-review-build.png",{"path":314,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":315,"sourceHtmlUrl":316},"screenshots\u002Fassisted\u002Fannotated\u002F02-sa-01.png",132542,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F02-sa-01.png",{"path":318,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":319,"sourceHtmlUrl":320},"screenshots\u002Fassisted\u002Fannotated\u002F03-sa-02.png",118760,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F03-sa-02.png",{"path":322,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":323,"sourceHtmlUrl":324},"screenshots\u002Fassisted\u002Fannotated\u002F04-sa-03.png",117687,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F04-sa-03.png",{"path":326,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":327,"sourceHtmlUrl":328},"screenshots\u002Fassisted\u002Fannotated\u002F05-sa-04.png",223415,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F05-sa-04.png",{"path":330,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":331,"sourceHtmlUrl":332},"screenshots\u002Fassisted\u002Fannotated\u002F06-sa-05.png",131791,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F06-sa-05.png",{"path":334,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":335,"sourceHtmlUrl":336},"screenshots\u002Fassisted\u002Fannotated\u002F07-sa-06.png",145669,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F07-sa-06.png",{"path":338,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":339,"sourceHtmlUrl":340},"screenshots\u002Fassisted\u002Fannotated\u002F08-sa-07.png",132308,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F08-sa-07.png",{"path":342,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":343,"sourceHtmlUrl":344},"screenshots\u002Fassisted\u002Fannotated\u002F09-confirm-draft.png",29350,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fannotated\u002F09-confirm-draft.png",{"path":346,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":347,"sourceHtmlUrl":348},"screenshots\u002Fassisted\u002Fbrowserfilm.json",1774,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fbrowserfilm.json",{"path":350,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":351,"sourceHtmlUrl":352},"screenshots\u002Fassisted\u002Fcopilot-assisted-contact-sheet.jpg",243635,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fcopilot-assisted-contact-sheet.jpg",{"path":354,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":355,"sourceHtmlUrl":356},"screenshots\u002Fassisted\u002Fcopilot-assisted-walkthrough.gif",1383024,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002Fcopilot-assisted-walkthrough.gif",{"path":358,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":359,"sourceHtmlUrl":360},"screenshots\u002Fassisted\u002FREADME.md",467,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fassisted\u002FREADME.md",{"path":362,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":363,"sourceHtmlUrl":364},"screenshots\u002Fmanual\u002F01-create-blank-agent.jpg",59079,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F01-create-blank-agent.jpg",{"path":366,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":367,"sourceHtmlUrl":368},"screenshots\u002Fmanual\u002F02-name-agent.jpg",61252,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F02-name-agent.jpg",{"path":370,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":371,"sourceHtmlUrl":372},"screenshots\u002Fmanual\u002F03-enter-instructions.jpg",119277,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F03-enter-instructions.jpg",{"path":374,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":375,"sourceHtmlUrl":376},"screenshots\u002Fmanual\u002F04-save-instructions.jpg",125449,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F04-save-instructions.jpg",{"path":378,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":379,"sourceHtmlUrl":380},"screenshots\u002Fmanual\u002F05-remove-web-search.jpg",119297,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F05-remove-web-search.jpg",{"path":382,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":383,"sourceHtmlUrl":384},"screenshots\u002Fmanual\u002F06-add-aibast-store-associate-rules-and-safety.jpg",120856,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F06-add-aibast-store-associate-rules-and-safety.jpg",{"path":386,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":387,"sourceHtmlUrl":388},"screenshots\u002Fmanual\u002F07-add-aibast-store-associate-synthetic-records.jpg",123622,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F07-add-aibast-store-associate-synthetic-records.jpg",{"path":390,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":391,"sourceHtmlUrl":392},"screenshots\u002Fmanual\u002F08-add-aibast-accessory-recommendations-05.jpg",127440,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F08-add-aibast-accessory-recommendations-05.jpg",{"path":394,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":395,"sourceHtmlUrl":396},"screenshots\u002Fmanual\u002F09-add-aibast-customer-assist-02.jpg",130251,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F09-add-aibast-customer-assist-02.jpg",{"path":398,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":399,"sourceHtmlUrl":400},"screenshots\u002Fmanual\u002F10-add-aibast-performance-dashboard-04.jpg",132601,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F10-add-aibast-performance-dashboard-04.jpg",{"path":402,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":403,"sourceHtmlUrl":404},"screenshots\u002Fmanual\u002F11-add-aibast-prepare-transaction-07.jpg",134361,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F11-add-aibast-prepare-transaction-07.jpg",{"path":406,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":407,"sourceHtmlUrl":408},"screenshots\u002Fmanual\u002F12-add-aibast-product-compare-06.jpg",135795,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F12-add-aibast-product-compare-06.jpg",{"path":410,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":411,"sourceHtmlUrl":412},"screenshots\u002Fmanual\u002F13-add-aibast-product-lookup-01.jpg",136207,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F13-add-aibast-product-lookup-01.jpg",{"path":414,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":415,"sourceHtmlUrl":416},"screenshots\u002Fmanual\u002F14-add-aibast-task-checklist-03.jpg",135794,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F14-add-aibast-task-checklist-03.jpg",{"path":418,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":415,"sourceHtmlUrl":419},"screenshots\u002Fmanual\u002F15-review-inventory.jpg","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F15-review-inventory.jpg",{"path":421,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":422,"sourceHtmlUrl":423},"screenshots\u002Fmanual\u002F16-review-skills.jpg",125594,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F16-review-skills.jpg",{"path":425,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":426,"sourceHtmlUrl":427},"screenshots\u002Fmanual\u002F17-review-skills-more.jpg",127503,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F17-review-skills-more.jpg",{"path":429,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":430,"sourceHtmlUrl":431},"screenshots\u002Fmanual\u002F18-open-preview.jpg",33576,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F18-open-preview.jpg",{"path":433,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":434,"sourceHtmlUrl":435},"screenshots\u002Fmanual\u002F19-sa-01.jpg",133118,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F19-sa-01.jpg",{"path":437,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":438,"sourceHtmlUrl":439},"screenshots\u002Fmanual\u002F20-sa-02.jpg",100330,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F20-sa-02.jpg",{"path":441,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":442,"sourceHtmlUrl":443},"screenshots\u002Fmanual\u002F21-sa-03.jpg",105933,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F21-sa-03.jpg",{"path":445,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":446,"sourceHtmlUrl":447},"screenshots\u002Fmanual\u002F22-sa-04.jpg",144213,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F22-sa-04.jpg",{"path":449,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":450,"sourceHtmlUrl":451},"screenshots\u002Fmanual\u002F23-sa-05.jpg",115893,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F23-sa-05.jpg",{"path":453,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":454,"sourceHtmlUrl":455},"screenshots\u002Fmanual\u002F24-sa-06.jpg",159590,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F24-sa-06.jpg",{"path":457,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":458,"sourceHtmlUrl":459},"screenshots\u002Fmanual\u002F25-sa-07.jpg",114298,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F25-sa-07.jpg",{"path":461,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":462,"sourceHtmlUrl":463},"screenshots\u002Fmanual\u002F26-confirm-draft.jpg",29640,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002F26-confirm-draft.jpg",{"path":465,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":466,"sourceHtmlUrl":467},"screenshots\u002Fmanual\u002Fannotated\u002F01-create-blank-agent.png",64183,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F01-create-blank-agent.png",{"path":469,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":470,"sourceHtmlUrl":471},"screenshots\u002Fmanual\u002Fannotated\u002F02-name-agent.png",65889,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F02-name-agent.png",{"path":473,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":474,"sourceHtmlUrl":475},"screenshots\u002Fmanual\u002Fannotated\u002F03-enter-instructions.png",126828,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F03-enter-instructions.png",{"path":477,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":478,"sourceHtmlUrl":479},"screenshots\u002Fmanual\u002Fannotated\u002F04-save-instructions.png",130383,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F04-save-instructions.png",{"path":481,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":482,"sourceHtmlUrl":483},"screenshots\u002Fmanual\u002Fannotated\u002F05-remove-web-search.png",127286,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F05-remove-web-search.png",{"path":485,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":486,"sourceHtmlUrl":487},"screenshots\u002Fmanual\u002Fannotated\u002F06-add-aibast-store-associate-rules-and-safety.png",129131,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F06-add-aibast-store-associate-rules-and-safety.png",{"path":489,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":490,"sourceHtmlUrl":491},"screenshots\u002Fmanual\u002Fannotated\u002F07-add-aibast-store-associate-synthetic-records.png",131371,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F07-add-aibast-store-associate-synthetic-records.png",{"path":493,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":494,"sourceHtmlUrl":495},"screenshots\u002Fmanual\u002Fannotated\u002F08-add-aibast-accessory-recommendations-05.png",133873,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F08-add-aibast-accessory-recommendations-05.png",{"path":497,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":498,"sourceHtmlUrl":499},"screenshots\u002Fmanual\u002Fannotated\u002F09-add-aibast-customer-assist-02.png",135948,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F09-add-aibast-customer-assist-02.png",{"path":501,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":502,"sourceHtmlUrl":503},"screenshots\u002Fmanual\u002Fannotated\u002F10-add-aibast-performance-dashboard-04.png",138373,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F10-add-aibast-performance-dashboard-04.png",{"path":505,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":506,"sourceHtmlUrl":507},"screenshots\u002Fmanual\u002Fannotated\u002F11-add-aibast-prepare-transaction-07.png",139099,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F11-add-aibast-prepare-transaction-07.png",{"path":509,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":510,"sourceHtmlUrl":511},"screenshots\u002Fmanual\u002Fannotated\u002F12-add-aibast-product-compare-06.png",140293,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F12-add-aibast-product-compare-06.png",{"path":513,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":514,"sourceHtmlUrl":515},"screenshots\u002Fmanual\u002Fannotated\u002F13-add-aibast-product-lookup-01.png",140921,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F13-add-aibast-product-lookup-01.png",{"path":517,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":518,"sourceHtmlUrl":519},"screenshots\u002Fmanual\u002Fannotated\u002F14-add-aibast-task-checklist-03.png",140755,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F14-add-aibast-task-checklist-03.png",{"path":521,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":522,"sourceHtmlUrl":523},"screenshots\u002Fmanual\u002Fannotated\u002F15-review-inventory.png",151057,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F15-review-inventory.png",{"path":525,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":526,"sourceHtmlUrl":527},"screenshots\u002Fmanual\u002Fannotated\u002F16-review-skills.png",146059,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F16-review-skills.png",{"path":529,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":530,"sourceHtmlUrl":531},"screenshots\u002Fmanual\u002Fannotated\u002F17-review-skills-more.png",149824,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F17-review-skills-more.png",{"path":533,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":534,"sourceHtmlUrl":535},"screenshots\u002Fmanual\u002Fannotated\u002F18-open-preview.png",33339,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F18-open-preview.png",{"path":537,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":538,"sourceHtmlUrl":539},"screenshots\u002Fmanual\u002Fannotated\u002F19-sa-01.png",139586,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F19-sa-01.png",{"path":541,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":542,"sourceHtmlUrl":543},"screenshots\u002Fmanual\u002Fannotated\u002F20-sa-02.png",108674,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F20-sa-02.png",{"path":545,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":546,"sourceHtmlUrl":547},"screenshots\u002Fmanual\u002Fannotated\u002F21-sa-03.png",109583,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F21-sa-03.png",{"path":549,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":550,"sourceHtmlUrl":551},"screenshots\u002Fmanual\u002Fannotated\u002F22-sa-04.png",146951,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F22-sa-04.png",{"path":553,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":554,"sourceHtmlUrl":555},"screenshots\u002Fmanual\u002Fannotated\u002F23-sa-05.png",122759,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F23-sa-05.png",{"path":557,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":558,"sourceHtmlUrl":559},"screenshots\u002Fmanual\u002Fannotated\u002F24-sa-06.png",158731,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F24-sa-06.png",{"path":561,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":562,"sourceHtmlUrl":563},"screenshots\u002Fmanual\u002Fannotated\u002F25-sa-07.png",121298,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F25-sa-07.png",{"path":565,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":566,"sourceHtmlUrl":567},"screenshots\u002Fmanual\u002Fannotated\u002F26-confirm-draft.png",30520,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fannotated\u002F26-confirm-draft.png",{"path":569,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":570,"sourceHtmlUrl":571},"screenshots\u002Fmanual\u002Fbrowserfilm.json",4591,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fbrowserfilm.json",{"path":573,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":574,"sourceHtmlUrl":575},"screenshots\u002Fmanual\u002Fmanual-build-contact-sheet.jpg",873191,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fmanual-build-contact-sheet.jpg",{"path":577,"resourceType":190,"resourceTypeDesc":191,"sizeBytes":578,"sourceHtmlUrl":579},"screenshots\u002Fmanual\u002Fmanual-build-walkthrough.gif",5794638,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002Fmanual-build-walkthrough.gif",{"path":581,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":582,"sourceHtmlUrl":583},"screenshots\u002Fmanual\u002FREADME.md",461,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002Fmanual\u002FREADME.md",{"path":585,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":586,"sourceHtmlUrl":587},"screenshots\u002FREADME.md",521,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faibast-agents-library\u002Fblob\u002Fmain\u002Fsolutions\u002Fstore-associate-copilot\u002Fscreenshots\u002FREADME.md",{"path":589,"resourceType":590,"resourceTypeDesc":591,"sizeBytes":592,"sourceHtmlUrl":593},"templates\u002Fapp.manifest","OTHER","其他",1308,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Ftemplates\u002Fapp.manifest",{"path":595,"resourceType":590,"resourceTypeDesc":591,"sizeBytes":596,"sourceHtmlUrl":597},"templates\u002FModule.UITests.Next.csproj",2706,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Ftemplates\u002FModule.UITests.Next.csproj",{"path":599,"resourceType":590,"resourceTypeDesc":591,"sizeBytes":600,"sourceHtmlUrl":601},"templates\u002FModuleEndToEndTests.cs",5816,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Ftemplates\u002FModuleEndToEndTests.cs",{"path":603,"resourceType":590,"resourceTypeDesc":591,"sizeBytes":604,"sourceHtmlUrl":605},"templates\u002FTestHelper.cs",10834,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fui-tests-migration\u002Ftemplates\u002FTestHelper.cs",[607,645,678,706,734,755],{"skillNo":608,"name":609,"nameZh":6,"description":610,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":611,"licenseFileUrl":612,"sourceHtmlUrl":613,"categories":614,"keywords":623,"publishedAt":50},"01M69BBVFWFXVP5T0QRVHVC764","winmd-api-search","Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI\u002FML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values).","MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fwinmd-api-search\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fwinmd-api-search\u002FSKILL.md",[615,620],{"categoryNo":616,"categoryName":617,"taxonomyType":618,"taxonomyTypeDesc":619},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":621,"categoryName":622,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000030","开发工程师",[624,625,626,627,628,629,630,631,632,28,633,634,635,636,637,638,639,640,641,642,643,644],"winmd api search","search","api","file access","windows","ml","desktop","networking","capabilities","notifications","explore","access","camera","methods","full","platform","events","controls","for","features","when",{"skillNo":646,"name":647,"nameZh":6,"description":648,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":649,"sourceHtmlUrl":650,"categories":651,"keywords":652,"publishedAt":50},"01M69BBAKBN3RB0YF8CDV5TTAS","release-note-generation","Toolkit for generating PowerToys stable or preview release notes from GitHub milestones, commit ranges, or Azure DevOps release-candidate builds. Prepare draft preview releases with three-component GitHub tags while preserving four-component build and asset versions. Use when asked to create release notes, summarize milestone PRs, generate changelog, prepare a draft preview release, calculate PR deltas across main and stable, update release documentation, manage PR milestones, or prepare and validate release assets.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Frelease-note-generation\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Frelease-note-generation\u002FSKILL.md",[],[653,654,655,656,657,658,659,660,46,661,662,663,664,665,666,667,668,669,670,44,671,672,43,673,56,674,33,675,676,677,644],"release note generation","release","release note","generation","note","summarize","github","component","validate","azure devops","prepare","documentation","create release","notes","azure","pr","release notes","toolkit","generate","update","deltas","milestone","across","milestones","candidate",{"skillNo":679,"name":680,"nameZh":6,"description":681,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":682,"sourceHtmlUrl":683,"categories":684,"keywords":688,"publishedAt":50},"01M69BB4235609E12GSMJTZWPT","powertoys-verification","Verify PowerToys behavior end-to-end with the winapp CLI across two scenarios: (A) a module's release checklist against the installed build; (B) PR validation — derive each PR's checklist from its description + diff, then drive it against the installed build (a merged\u002Fshipped PR, or a whole release\u002Fhotfix set) or by building + sideloading the module when the PR isn't in the build yet (unmerged or not-yet-released). Drive each item via UIA invoke \u002F Named Events \u002F settings.json edits \u002F clipboard \u002F GPO \u002F SendInput, and emit a structured PASS \u002F FAIL \u002F BLOCKED verdict per item with evidence (FAIL distinguishes product defects from stale\u002Fambiguous checklist items). Use when asked to verify a module checklist, validate a PR, sign off a release\u002Fhotfix's PRs, or QA installed\u002Fsideloaded PowerToys bits. Combines generic winapp ui mechanics (references\u002Fwinapp-ui-testing.md) with PT-specific recipes, per-scenario playbooks (references\u002Fscenarios\u002F), and the helper .ps1 files shipped with this skill.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpowertoys-verification\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpowertoys-verification\u002FSKILL.md",[685],{"categoryNo":686,"categoryName":687,"taxonomyType":618,"taxonomyTypeDesc":619},"01JBSEEDCAT000000000000008","测试与质量",[43,689,690,691,692,661,668,654,28,693,694,695,696,697,698,699,700,640,701,702,703,704,705],"powertoys verification","verification","testing","cli","use","clipboard","files","build","scenario","module","recipes","verdict","release checklist","winapp cli","pt","prs","invoke",{"skillNo":707,"name":708,"nameZh":6,"description":709,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":611,"licenseFileUrl":6,"sourceHtmlUrl":710,"categories":711,"keywords":715,"publishedAt":50},"01M69BCCP7VKNARGZP6VSSW1PV","publish-extension","Publish your Command Palette extension to the Microsoft Store or WinGet. Use when asked to publish, distribute, release, deploy to store, create MSIX packages, submit to WinGet, set up CI\u002FCD for releases, or automate builds with GitHub Actions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002Fsrc\u002Fmodules\u002Fcmdpal\u002FExtensionTemplate\u002FTemplateCmdPalExtension\u002F.github\u002Fskills\u002Fpublish-extension\u002FSKILL.md",[712],{"categoryNo":713,"categoryName":714,"taxonomyType":618,"taxonomyTypeDesc":619},"01JBSEEDCAT000000000000011","运维与部署",[716,717,718,659,9,719,720,721,44,722,654,723,29,724,725,726,727,728,729,730,731,732,733,644],"publish extension","publish","extension","msix","deploy","packages","command palette","actions","github actions","SET","automate","command","up","releases","distribute","submit","palette","CI\u002FCD",{"skillNo":735,"name":736,"nameZh":6,"description":737,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":611,"licenseFileUrl":6,"sourceHtmlUrl":738,"categories":739,"keywords":740,"publishedAt":50},"01M69BCAEPE3W6QZF2RTZ9Q28C","add-fallback-commands","Add fallback commands to your Command Palette extension for catch-all search behavior. Use when asked to add search functionality, query matching, direct input handling, calculator-style evaluation, URL opening, command execution, or results that appear when no other extension matches. Used by 14 of 20 built-in extensions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002Fsrc\u002Fmodules\u002Fcmdpal\u002FExtensionTemplate\u002FTemplateCmdPalExtension\u002F.github\u002Fskills\u002Fadd-fallback-commands\u002FSKILL.md",[],[741,742,743,744,722,625,745,746,747,748,727,693,749,750,732,751,752,642,753,754,644],"add fallback commands","fallback","commands","add","Evaluation","execution","calculator","direct","query","input","URL","extensions","catch","input handling",{"skillNo":756,"name":757,"nameZh":6,"description":758,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":611,"licenseFileUrl":6,"sourceHtmlUrl":759,"categories":760,"keywords":761,"publishedAt":50},"01M69BC81SF2YG0G1YFZMAAFRN","add-extension-settings","Add a settings page to your Command Palette extension. Use when asked to add settings, preferences, configuration options, toggles, text inputs, dropdowns, or user-customizable behavior. Covers ToggleSetting, TextSetting, ChoiceSetSetting, and persistence.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerToys\u002Fblob\u002Fmain\u002Fsrc\u002Fmodules\u002Fcmdpal\u002FExtensionTemplate\u002FTemplateCmdPalExtension\u002F.github\u002Fskills\u002Fadd-extension-settings\u002FSKILL.md",[],[762,763,718,744,722,764,765,766,767,727,768,769,693,770,771,732,644],"add extension settings","settings","persistence","preferences","text","page","behavior","user","configuration","options"]