[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G9ABAG5F52E55P24MN0RFP":3,"skill-same:01M6G9ABAG5F52E55P24MN0RFP":78},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":13,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6G9ABAG5F52E55P24MN0RFP","azure-microsoft-playwright-testing-ts",null,"Run Playwright tests at scale using Azure Playwright Workspaces (formerly Microsoft Playwright Testing). Use when scaling browser tests across cloud-hosted browsers, integrating with CI\u002FCD pipelines, or publishing test results to the Azure portal.","ricardoaevt\u002Fnexus-roms","ricardoaevt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F164531880?v=4","01M6DGFGSV6CF9AKPHABBREC79","01M6DGFGYNNPJVDFQA05TDPSBN",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-microsoft-playwright-testing-ts\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"playwright","testing","microsoft","azure","azure microsoft playwright testing ts","playwright testing","with","CI\u002FCD","azure portal","azure playwright workspaces","tests","scaling","across","workspaces","publishing","use","ci","browser","run","test","2026-11-10 10:12:30",false,"---\nname: azure-microsoft-playwright-testing-ts\ndescription: Run Playwright tests at scale using Azure Playwright Workspaces (formerly Microsoft Playwright Testing). Use when scaling browser tests across cloud-hosted browsers, integrating with CI\u002FCD pipelines, or publishing test results to the Azure portal.\npackage: \"@azure\u002Fplaywright\"\n---\n\n# Azure Playwright Workspaces SDK for TypeScript\n\nRun Playwright tests at scale with cloud-hosted browsers and integrated Azure portal reporting.\n\n> **Migration Notice:** `@azure\u002Fmicrosoft-playwright-testing` is retired on **March 8, 2026**. Use `@azure\u002Fplaywright` instead. See [migration guide](https:\u002F\u002Faka.ms\u002Fmpt\u002Fmigration-guidance).\n\n## Installation\n\n```bash\n# Recommended: Auto-generates config\nnpm init @azure\u002Fplaywright@latest\n\n# Manual installation\nnpm install @azure\u002Fplaywright --save-dev\nnpm install @playwright\u002Ftest@^1.47 --save-dev\nnpm install @azure\u002Fidentity --save-dev\n```\n\n**Requirements:**\n- Playwright version 1.47+ (basic usage)\n- Playwright version 1.57+ (Azure reporter features)\n\n## Environment Variables\n\n```bash\nPLAYWRIGHT_SERVICE_URL=wss:\u002F\u002Feastus.api.playwright.microsoft.com\u002Fplaywrightworkspaces\u002F{workspace-id}\u002Fbrowsers\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```bash\n# Sign in with Azure CLI\naz login\n```\n\n```typescript\n\u002F\u002F playwright.service.config.ts\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    credential: new DefaultAzureCredential(),\n  })\n);\n```\n\n### Custom Credential\n\n```typescript\nimport { ManagedIdentityCredential } from \"@azure\u002Fidentity\";\nimport { createAzurePlaywrightConfig } from \"@azure\u002Fplaywright\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    credential: new ManagedIdentityCredential(),\n  })\n);\n```\n\n## Core Workflow\n\n### Service Configuration\n\n```typescript\n\u002F\u002F playwright.service.config.ts\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    connectTimeout: 30000,\n    exposeNetwork: \"\u003Cloopback>\",\n    credential: new DefaultAzureCredential(),\n  })\n);\n```\n\n### Run Tests\n\n```bash\nnpx playwright test --config=playwright.service.config.ts --workers=20\n```\n\n### With Azure Reporter\n\n```typescript\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    credential: new DefaultAzureCredential(),\n  }),\n  {\n    reporter: [\n      [\"html\", { open: \"never\" }],\n      [\"@azure\u002Fplaywright\u002Freporter\"],\n    ],\n  }\n);\n```\n\n### Manual Browser Connection\n\n```typescript\nimport playwright, { test, expect, BrowserType } from \"@playwright\u002Ftest\";\nimport { getConnectOptions } from \"@azure\u002Fplaywright\";\n\ntest(\"manual connection\", async ({ browserName }) => {\n  const { wsEndpoint, options } = await getConnectOptions();\n  const browser = await (playwright[browserName] as BrowserType).connect(wsEndpoint, options);\n  const context = await browser.newContext();\n  const page = await context.newPage();\n\n  await page.goto(\"https:\u002F\u002Fexample.com\");\n  await expect(page).toHaveTitle(\u002FExample\u002F);\n\n  await browser.close();\n});\n```\n\n## Configuration Options\n\n```typescript\ntype PlaywrightServiceAdditionalOptions = {\n  serviceAuthType?: \"ENTRA_ID\" | \"ACCESS_TOKEN\";  \u002F\u002F Default: ENTRA_ID\n  os?: \"linux\" | \"windows\";                        \u002F\u002F Default: linux\n  runName?: string;                                \u002F\u002F Custom run name for portal\n  connectTimeout?: number;                         \u002F\u002F Default: 30000ms\n  exposeNetwork?: string;                          \u002F\u002F Default: \u003Cloopback>\n  credential?: TokenCredential;                    \u002F\u002F REQUIRED for Entra ID\n};\n```\n\n### ServiceOS Enum\n\n```typescript\nimport { ServiceOS } from \"@azure\u002Fplaywright\";\n\n\u002F\u002F Available values\nServiceOS.LINUX   \u002F\u002F \"linux\" - default\nServiceOS.WINDOWS \u002F\u002F \"windows\"\n```\n\n### ServiceAuth Enum\n\n```typescript\nimport { ServiceAuth } from \"@azure\u002Fplaywright\";\n\n\u002F\u002F Available values\nServiceAuth.ENTRA_ID      \u002F\u002F Recommended - uses credential\nServiceAuth.ACCESS_TOKEN  \u002F\u002F Use PLAYWRIGHT_SERVICE_ACCESS_TOKEN env var\n```\n\n## CI\u002FCD Integration\n\n### GitHub Actions\n\n```yaml\nname: playwright-ts\non: [push, pull_request]\n\npermissions:\n  id-token: write\n  contents: read\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Azure Login\n        uses: azure\u002Flogin@v2\n        with:\n          client-id: ${{ secrets.AZURE_CLIENT_ID }}\n          tenant-id: ${{ secrets.AZURE_TENANT_ID }}\n          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}\n\n      - run: npm ci\n      \n      - name: Run Tests\n        env:\n          PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}\n        run: npx playwright test -c playwright.service.config.ts --workers=20\n```\n\n### Azure Pipelines\n\n```yaml\n- task: AzureCLI@2\n  displayName: Run Playwright Tests\n  env:\n    PLAYWRIGHT_SERVICE_URL: $(PLAYWRIGHT_SERVICE_URL)\n  inputs:\n    azureSubscription: My_Service_Connection\n    scriptType: pscore\n    inlineScript: |\n      npx playwright test -c playwright.service.config.ts --workers=20\n    addSpnToEnvironment: true\n```\n\n## Key Types\n\n```typescript\nimport {\n  createAzurePlaywrightConfig,\n  getConnectOptions,\n  ServiceOS,\n  ServiceAuth,\n  ServiceEnvironmentVariable,\n} from \"@azure\u002Fplaywright\";\n\nimport type {\n  OsType,\n  AuthenticationType,\n  BrowserConnectOptions,\n  PlaywrightServiceAdditionalOptions,\n} from \"@azure\u002Fplaywright\";\n```\n\n## Migration from Old Package\n\n| Old (`@azure\u002Fmicrosoft-playwright-testing`) | New (`@azure\u002Fplaywright`) |\n|---------------------------------------------|---------------------------|\n| `getServiceConfig()` | `createAzurePlaywrightConfig()` |\n| `timeout` option | `connectTimeout` option |\n| `runId` option | `runName` option |\n| `useCloudHostedBrowsers` option | Removed (always enabled) |\n| `@azure\u002Fmicrosoft-playwright-testing\u002Freporter` | `@azure\u002Fplaywright\u002Freporter` |\n| Implicit credential | Explicit `credential` parameter |\n\n### Before (Old)\n\n```typescript\nimport { getServiceConfig, ServiceOS } from \"@azure\u002Fmicrosoft-playwright-testing\";\n\nexport default defineConfig(\n  config,\n  getServiceConfig(config, {\n    os: ServiceOS.LINUX,\n    timeout: 30000,\n    useCloudHostedBrowsers: true,\n  }),\n  {\n    reporter: [[\"@azure\u002Fmicrosoft-playwright-testing\u002Freporter\"]],\n  }\n);\n```\n\n### After (New)\n\n```typescript\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    connectTimeout: 30000,\n    credential: new DefaultAzureCredential(),\n  }),\n  {\n    reporter: [\n      [\"html\", { open: \"never\" }],\n      [\"@azure\u002Fplaywright\u002Freporter\"],\n    ],\n  }\n);\n```\n\n## Best Practices\n\n1. **Use Entra ID auth** — More secure than access tokens\n2. **Provide explicit credential** — Always pass `credential: new DefaultAzureCredential()`\n3. **Enable artifacts** — Set `trace: \"on-first-retry\"`, `video: \"retain-on-failure\"` in config\n4. **Scale workers** — Use `--workers=20` or higher for parallel execution\n5. **Region selection** — Choose region closest to your test targets\n6. **HTML reporter first** — When using Azure reporter, list HTML reporter before Azure reporter\n","# Azure Playwright Workspaces SDK for TypeScript\n\nRun Playwright tests at scale with cloud-hosted browsers and integrated Azure portal reporting.\n\n> **Migration Notice:** `@azure\u002Fmicrosoft-playwright-testing` is retired on **March 8, 2026**. Use `@azure\u002Fplaywright` instead. See [migration guide](https:\u002F\u002Faka.ms\u002Fmpt\u002Fmigration-guidance).\n\n## Installation\n\n```bash\n# Recommended: Auto-generates config\nnpm init @azure\u002Fplaywright@latest\n\n# Manual installation\nnpm install @azure\u002Fplaywright --save-dev\nnpm install @playwright\u002Ftest@^1.47 --save-dev\nnpm install @azure\u002Fidentity --save-dev\n```\n\n**Requirements:**\n- Playwright version 1.47+ (basic usage)\n- Playwright version 1.57+ (Azure reporter features)\n\n## Environment Variables\n\n```bash\nPLAYWRIGHT_SERVICE_URL=wss:\u002F\u002Feastus.api.playwright.microsoft.com\u002Fplaywrightworkspaces\u002F{workspace-id}\u002Fbrowsers\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```bash\n# Sign in with Azure CLI\naz login\n```\n\n```typescript\n\u002F\u002F playwright.service.config.ts\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    credential: new DefaultAzureCredential(),\n  })\n);\n```\n\n### Custom Credential\n\n```typescript\nimport { ManagedIdentityCredential } from \"@azure\u002Fidentity\";\nimport { createAzurePlaywrightConfig } from \"@azure\u002Fplaywright\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    credential: new ManagedIdentityCredential(),\n  })\n);\n```\n\n## Core Workflow\n\n### Service Configuration\n\n```typescript\n\u002F\u002F playwright.service.config.ts\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    connectTimeout: 30000,\n    exposeNetwork: \"\u003Cloopback>\",\n    credential: new DefaultAzureCredential(),\n  })\n);\n```\n\n### Run Tests\n\n```bash\nnpx playwright test --config=playwright.service.config.ts --workers=20\n```\n\n### With Azure Reporter\n\n```typescript\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    credential: new DefaultAzureCredential(),\n  }),\n  {\n    reporter: [\n      [\"html\", { open: \"never\" }],\n      [\"@azure\u002Fplaywright\u002Freporter\"],\n    ],\n  }\n);\n```\n\n### Manual Browser Connection\n\n```typescript\nimport playwright, { test, expect, BrowserType } from \"@playwright\u002Ftest\";\nimport { getConnectOptions } from \"@azure\u002Fplaywright\";\n\ntest(\"manual connection\", async ({ browserName }) => {\n  const { wsEndpoint, options } = await getConnectOptions();\n  const browser = await (playwright[browserName] as BrowserType).connect(wsEndpoint, options);\n  const context = await browser.newContext();\n  const page = await context.newPage();\n\n  await page.goto(\"https:\u002F\u002Fexample.com\");\n  await expect(page).toHaveTitle(\u002FExample\u002F);\n\n  await browser.close();\n});\n```\n\n## Configuration Options\n\n```typescript\ntype PlaywrightServiceAdditionalOptions = {\n  serviceAuthType?: \"ENTRA_ID\" | \"ACCESS_TOKEN\";  \u002F\u002F Default: ENTRA_ID\n  os?: \"linux\" | \"windows\";                        \u002F\u002F Default: linux\n  runName?: string;                                \u002F\u002F Custom run name for portal\n  connectTimeout?: number;                         \u002F\u002F Default: 30000ms\n  exposeNetwork?: string;                          \u002F\u002F Default: \u003Cloopback>\n  credential?: TokenCredential;                    \u002F\u002F REQUIRED for Entra ID\n};\n```\n\n### ServiceOS Enum\n\n```typescript\nimport { ServiceOS } from \"@azure\u002Fplaywright\";\n\n\u002F\u002F Available values\nServiceOS.LINUX   \u002F\u002F \"linux\" - default\nServiceOS.WINDOWS \u002F\u002F \"windows\"\n```\n\n### ServiceAuth Enum\n\n```typescript\nimport { ServiceAuth } from \"@azure\u002Fplaywright\";\n\n\u002F\u002F Available values\nServiceAuth.ENTRA_ID      \u002F\u002F Recommended - uses credential\nServiceAuth.ACCESS_TOKEN  \u002F\u002F Use PLAYWRIGHT_SERVICE_ACCESS_TOKEN env var\n```\n\n## CI\u002FCD Integration\n\n### GitHub Actions\n\n```yaml\nname: playwright-ts\non: [push, pull_request]\n\npermissions:\n  id-token: write\n  contents: read\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Azure Login\n        uses: azure\u002Flogin@v2\n        with:\n          client-id: ${{ secrets.AZURE_CLIENT_ID }}\n          tenant-id: ${{ secrets.AZURE_TENANT_ID }}\n          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}\n\n      - run: npm ci\n      \n      - name: Run Tests\n        env:\n          PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}\n        run: npx playwright test -c playwright.service.config.ts --workers=20\n```\n\n### Azure Pipelines\n\n```yaml\n- task: AzureCLI@2\n  displayName: Run Playwright Tests\n  env:\n    PLAYWRIGHT_SERVICE_URL: $(PLAYWRIGHT_SERVICE_URL)\n  inputs:\n    azureSubscription: My_Service_Connection\n    scriptType: pscore\n    inlineScript: |\n      npx playwright test -c playwright.service.config.ts --workers=20\n    addSpnToEnvironment: true\n```\n\n## Key Types\n\n```typescript\nimport {\n  createAzurePlaywrightConfig,\n  getConnectOptions,\n  ServiceOS,\n  ServiceAuth,\n  ServiceEnvironmentVariable,\n} from \"@azure\u002Fplaywright\";\n\nimport type {\n  OsType,\n  AuthenticationType,\n  BrowserConnectOptions,\n  PlaywrightServiceAdditionalOptions,\n} from \"@azure\u002Fplaywright\";\n```\n\n## Migration from Old Package\n\n| Old (`@azure\u002Fmicrosoft-playwright-testing`) | New (`@azure\u002Fplaywright`) |\n|---------------------------------------------|---------------------------|\n| `getServiceConfig()` | `createAzurePlaywrightConfig()` |\n| `timeout` option | `connectTimeout` option |\n| `runId` option | `runName` option |\n| `useCloudHostedBrowsers` option | Removed (always enabled) |\n| `@azure\u002Fmicrosoft-playwright-testing\u002Freporter` | `@azure\u002Fplaywright\u002Freporter` |\n| Implicit credential | Explicit `credential` parameter |\n\n### Before (Old)\n\n```typescript\nimport { getServiceConfig, ServiceOS } from \"@azure\u002Fmicrosoft-playwright-testing\";\n\nexport default defineConfig(\n  config,\n  getServiceConfig(config, {\n    os: ServiceOS.LINUX,\n    timeout: 30000,\n    useCloudHostedBrowsers: true,\n  }),\n  {\n    reporter: [[\"@azure\u002Fmicrosoft-playwright-testing\u002Freporter\"]],\n  }\n);\n```\n\n### After (New)\n\n```typescript\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    connectTimeout: 30000,\n    credential: new DefaultAzureCredential(),\n  }),\n  {\n    reporter: [\n      [\"html\", { open: \"never\" }],\n      [\"@azure\u002Fplaywright\u002Freporter\"],\n    ],\n  }\n);\n```\n\n## Best Practices\n\n1. **Use Entra ID auth** — More secure than access tokens\n2. **Provide explicit credential** — Always pass `credential: new DefaultAzureCredential()`\n3. **Enable artifacts** — Set `trace: \"on-first-retry\"`, `video: \"retain-on-failure\"` in config\n4. **Scale workers** — Use `--workers=20` or higher for parallel execution\n5. **Region selection** — Choose region closest to your test targets\n6. **HTML reporter first** — When using Azure reporter, list HTML reporter before Azure reporter\n",{"name":5,"package":51,"description":7},"@azure\u002Fplaywright","main","d41309588593cee5c2fb44062474efc3a99fbcb6",".agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-microsoft-playwright-testing-ts","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms","https:\u002F\u002Fgithub.com\u002Fricardoaevt","2026-03-23 00:05:03",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add ricardoaevt\u002Fnexus-roms --skill azure-microsoft-playwright-testing-ts",{"tool":64,"command":65},"bunx","bunx skills add ricardoaevt\u002Fnexus-roms --skill azure-microsoft-playwright-testing-ts",{"tool":67,"command":68},"pnpm","pnpm dlx skills add ricardoaevt\u002Fnexus-roms --skill azure-microsoft-playwright-testing-ts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-microsoft-playwright-testing-ts\u002FSKILL.md",true,[72],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Facceptance-criteria.md","REFERENCE","参考文档",10309,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-microsoft-playwright-testing-ts\u002Freferences\u002Facceptance-criteria.md",[79,102,118,133,144,153],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":46},"01M6G9HYKQRK6HBKVTZM3258M3","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","MIT","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[87,88,89,90,32,91,92,93,94,95,96,41,97,98,99,100,101],"openspec propose","openspec","cli","generated","proposal","complete","get","build","implementation","ready","user","artifacts","tasks","change","design",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":46},"01M6G9HV9V20WFCHYVSDNQMJVK","openspec-new-change","Start a new OpenSpec change using the experimental artifact workflow. Use when the user wants to create a new feature, fix, or modification with a structured step-by-step approach.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-new-change\u002FSKILL.md",[],[88,109,100,110,89,111,112,113,41,97,114,115,116,117,32],"openspec new change","new feature","structured","artifact","workflow","create","start","fix","feature",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":46},"01M6G9HRF6R89QZXGSFC9DRQW3","openspec-explore","Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-explore\u002FSKILL.md",[],[125,126,88,41,127,89,100,97,128,129,130,131,132],"openspec explore","explore","partner","think","thinking partner","thinking","ideas","requirements",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":46},"01M6G9HP3APFCXZG7XRWBMM524","openspec-continue-change","Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-continue-change\u002FSKILL.md",[],[88,140,141,100,113,89,114,97,41,142,112,143],"continue","openspec continue change","next","progress",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":46},"01M6G9HKT3WMSDBSKA7YM4MSSQ","openspec-archive-change","Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-archive-change\u002FSKILL.md",[],[151,88,152,100,89,113,97,41,95,92],"openspec archive change","archive",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":46},"01M6G9HHEG0RJK4E0YTVZZ6A8T","openspec-apply-change","Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-apply-change\u002FSKILL.md",[],[88,100,160,161,99,115,140,162,97,41,95,89],"openspec apply change","implement","work"]