[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BFNQPJ9NPTCWA3FRKPCPJ":3,"skill-same:01M69BFNQPJ9NPTCWA3FRKPCPJ":68},{"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":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M69BFNQPJ9NPTCWA3FRKPCPJ","template-gallery",null,"Use when working in the Awesome Rayfin template gallery repo — creating, validating, or updating templates under templates\u002F, regenerating gallery manifests, or updating the templates table in README. Triggers: awesome-rayfin, template gallery, templates\u002F, new-template.sh, generate-manifest.mjs, rayfin-template.yml, manifest.json, template metadata, templateId, template.name, template.displayName, template.description, rayfin init -t, scaffold template, gallery README, leaf manifest, root manifest","microsoft\u002Fawesome-rayfin","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BFJTNT39H6W8XT2H1BZDN",111,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftemplate-gallery\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,9,31,32,33,34,35,36,37],"template gallery","gallery","template","repo","new","when","manifests","root","name","triggers","use","README","json","manifest","templates","generate","rayfin","scaffold","init","2026-11-10 10:12:30",false,"---\nname: template-gallery\ndescription: \"Use when working in the Awesome Rayfin template gallery repo — creating, validating, or updating templates under templates\u002F, regenerating gallery manifests, or updating the templates table in README. Triggers: awesome-rayfin, template gallery, templates\u002F, new-template.sh, generate-manifest.mjs, rayfin-template.yml, manifest.json, template metadata, templateId, template.name, template.displayName, template.description, rayfin init -t, scaffold template, gallery README, leaf manifest, root manifest\"\nmetadata:\n  author: microsoft\n  version: \"0.1.0\"\n---\n\n# Template Gallery Skill\n\nUse this skill when working in the Awesome Rayfin template gallery repo. This is an operational checklist for creating, validating, and maintaining gallery templates.\n\n## Goal\n\nMake changes that keep individual templates, generated manifests, and gallery documentation consistent.\n\n## Before you change anything\n\n1. Read `docs\u002Ftemplate-guidelines.md` for the expected template structure.\n2. Read the root `AGENTS.md` for gallery-specific workflow guidance.\n3. Use the `rayfin` MCP server from `.mcp.json` when you need Rayfin SDK or CLI docs.\n4. Review a nearby template in `templates\u002F` if you need a working example.\n5. Use `.scratchpad\u002F` for any temporary or working files — it is git-ignored.\n\n## Create a new template\n\n1. Run:\n   ```bash\n   .\u002Fscripts\u002Fnew-template.sh \u003Cname> \"\u003CDisplay Name>\" \"\u003Cdescription>\"\n   ```\n2. Open the new `templates\u002F\u003Cname>\u002F` directory.\n3. Customize the generated files, especially:\n   - `src\u002F` for the application UI and client logic\n   - `rayfin\u002Fdata\u002F` for entities and schema definitions\n   - `rayfin\u002Frayfin.yml` for service configuration\n4. Update any placeholder content in `README.md`, `manifest.json`, and `package.json`.\n5. Confirm `package.json` includes:\n   - `template.name`\n   - `template.displayName`\n   - `template.description`\n6. If the template adds new routes or features, make sure the README explains what the template demonstrates.\n\n## Validate a template\n\n1. Verify generated manifests are in sync:\n   ```bash\n   node scripts\u002Fgenerate-manifest.mjs --check\n   ```\n2. Smoke-test scaffolding in a fresh scratch directory:\n   ```bash\n   rayfin init -t . --template-name \"\u003Cname>\"\n   ```\n   If the CLI supports it in your environment, point the output to a new empty directory so you can inspect the scaffolded result safely.\n3. Check the scaffolded output contains the expected project files, especially `package.json`.\n4. Re-open the source template's `package.json` and confirm `template.name`, `template.displayName`, and `template.description` are present and correct.\n5. If the repo workflow or your change touches manifest generation, compare the regenerated files before finishing.\n\n## Update the gallery after template changes\n\nAfter changing template metadata or adding\u002Fremoving templates, run:\n\n```bash\nnode scripts\u002Fgenerate-manifest.mjs\n```\n\nThis regenerates:\n- root `rayfin-template.yml`\n- per-template `rayfin-template.yml`\n- the templates table in `README.md`\n\nDo not hand-edit generated manifest content if the script owns it.\n\n## Required template structure\n\nEach template should include these files:\n\n- `package.json` with template metadata\n- `manifest.json`\n- `rayfin-template.yml`\n- `rayfin\u002Frayfin.yml`\n- `rayfin\u002Fdata\u002Fschema.ts`\n- `README.md`\n- `index.html`\n- `src\u002Fmain.tsx`\n- `tsconfig.json`\n- `vite.config.ts`\n\nIf any required file is missing, add it before considering the template complete.\n\n## Common patterns\n\n### Add a data entity\n\n1. Create a new file in `rayfin\u002Fdata\u002F`.\n2. Define the entity with decorators from `@microsoft\u002Frayfin-core`.\n3. Export the entity from `rayfin\u002Fdata\u002Fschema.ts` so the schema includes it.\n4. Update any app code that reads or writes the new entity.\n5. Document the new data model in the template README if it changes what the template demonstrates.\n\n### Add a page\n\n1. Create the page component in `src\u002Fpages\u002F`.\n2. Add the route in `src\u002FApp.tsx`.\n3. Link to the page from navigation or the relevant entry point.\n4. Verify the page works with the template's auth and data model.\n\n## Cross-platform compatibility (Windows + macOS\u002FLinux)\n\nTemplates are used on Windows, macOS, and Linux. Check for platform issues when adding or modifying scripts:\n\n- **Prefer `.mjs` over `.sh`** for any script that end users run. Shell scripts are fine for contributor tooling only (e.g., `scripts\u002Fnew-template.sh`).\n- **No Unix-only assumptions** in runtime scripts: avoid hardcoded Unix socket paths (`\u002Fvar\u002Frun\u002Fdocker.sock`), symlinks, or POSIX-only APIs without a Windows fallback.\n- **Use `process.platform` guards** when behavior diverges (e.g., Docker daemon detection uses sockets on Unix but named pipes\u002FCLI on Windows).\n- **Use `cross-env`** for environment variables in npm scripts — never rely on `VAR=value cmd` syntax.\n- **Avoid path separators** in JS: use `path.join()`\u002F`path.resolve()` instead of string concatenation with `\u002F`.\n- **`&&` chaining in npm scripts** is safe (works in cmd, PowerShell 7+, and bash).\n\nWhen reviewing or validating a template, scan scripts for:\n1. Hardcoded Unix paths (`\u002Fvar\u002Frun\u002F`, `\u002Ftmp\u002F`, `~\u002F.docker\u002Frun\u002F`)\n2. Socket or pipe assumptions without platform checks\n3. Shell-specific syntax in npm scripts (backticks, `$(...)`, `export`)\n4. File permission operations (`chmod`, `chown`) without guards\n\n## Final checklist\n\n- Template structure matches `docs\u002Ftemplate-guidelines.md`\n- Template metadata in `package.json` is complete\n- `node scripts\u002Fgenerate-manifest.mjs --check` passes\n- `rayfin init -t . --template-name \"\u003Cname>\"` works for the changed template\n- Generated gallery files were refreshed with `node scripts\u002Fgenerate-manifest.mjs` when needed\n- README and manifest content reflect the actual template behavior\n","# Template Gallery Skill\n\nUse this skill when working in the Awesome Rayfin template gallery repo. This is an operational checklist for creating, validating, and maintaining gallery templates.\n\n## Goal\n\nMake changes that keep individual templates, generated manifests, and gallery documentation consistent.\n\n## Before you change anything\n\n1. Read `docs\u002Ftemplate-guidelines.md` for the expected template structure.\n2. Read the root `AGENTS.md` for gallery-specific workflow guidance.\n3. Use the `rayfin` MCP server from `.mcp.json` when you need Rayfin SDK or CLI docs.\n4. Review a nearby template in `templates\u002F` if you need a working example.\n5. Use `.scratchpad\u002F` for any temporary or working files — it is git-ignored.\n\n## Create a new template\n\n1. Run:\n   ```bash\n   .\u002Fscripts\u002Fnew-template.sh \u003Cname> \"\u003CDisplay Name>\" \"\u003Cdescription>\"\n   ```\n2. Open the new `templates\u002F\u003Cname>\u002F` directory.\n3. Customize the generated files, especially:\n   - `src\u002F` for the application UI and client logic\n   - `rayfin\u002Fdata\u002F` for entities and schema definitions\n   - `rayfin\u002Frayfin.yml` for service configuration\n4. Update any placeholder content in `README.md`, `manifest.json`, and `package.json`.\n5. Confirm `package.json` includes:\n   - `template.name`\n   - `template.displayName`\n   - `template.description`\n6. If the template adds new routes or features, make sure the README explains what the template demonstrates.\n\n## Validate a template\n\n1. Verify generated manifests are in sync:\n   ```bash\n   node scripts\u002Fgenerate-manifest.mjs --check\n   ```\n2. Smoke-test scaffolding in a fresh scratch directory:\n   ```bash\n   rayfin init -t . --template-name \"\u003Cname>\"\n   ```\n   If the CLI supports it in your environment, point the output to a new empty directory so you can inspect the scaffolded result safely.\n3. Check the scaffolded output contains the expected project files, especially `package.json`.\n4. Re-open the source template's `package.json` and confirm `template.name`, `template.displayName`, and `template.description` are present and correct.\n5. If the repo workflow or your change touches manifest generation, compare the regenerated files before finishing.\n\n## Update the gallery after template changes\n\nAfter changing template metadata or adding\u002Fremoving templates, run:\n\n```bash\nnode scripts\u002Fgenerate-manifest.mjs\n```\n\nThis regenerates:\n- root `rayfin-template.yml`\n- per-template `rayfin-template.yml`\n- the templates table in `README.md`\n\nDo not hand-edit generated manifest content if the script owns it.\n\n## Required template structure\n\nEach template should include these files:\n\n- `package.json` with template metadata\n- `manifest.json`\n- `rayfin-template.yml`\n- `rayfin\u002Frayfin.yml`\n- `rayfin\u002Fdata\u002Fschema.ts`\n- `README.md`\n- `index.html`\n- `src\u002Fmain.tsx`\n- `tsconfig.json`\n- `vite.config.ts`\n\nIf any required file is missing, add it before considering the template complete.\n\n## Common patterns\n\n### Add a data entity\n\n1. Create a new file in `rayfin\u002Fdata\u002F`.\n2. Define the entity with decorators from `@microsoft\u002Frayfin-core`.\n3. Export the entity from `rayfin\u002Fdata\u002Fschema.ts` so the schema includes it.\n4. Update any app code that reads or writes the new entity.\n5. Document the new data model in the template README if it changes what the template demonstrates.\n\n### Add a page\n\n1. Create the page component in `src\u002Fpages\u002F`.\n2. Add the route in `src\u002FApp.tsx`.\n3. Link to the page from navigation or the relevant entry point.\n4. Verify the page works with the template's auth and data model.\n\n## Cross-platform compatibility (Windows + macOS\u002FLinux)\n\nTemplates are used on Windows, macOS, and Linux. Check for platform issues when adding or modifying scripts:\n\n- **Prefer `.mjs` over `.sh`** for any script that end users run. Shell scripts are fine for contributor tooling only (e.g., `scripts\u002Fnew-template.sh`).\n- **No Unix-only assumptions** in runtime scripts: avoid hardcoded Unix socket paths (`\u002Fvar\u002Frun\u002Fdocker.sock`), symlinks, or POSIX-only APIs without a Windows fallback.\n- **Use `process.platform` guards** when behavior diverges (e.g., Docker daemon detection uses sockets on Unix but named pipes\u002FCLI on Windows).\n- **Use `cross-env`** for environment variables in npm scripts — never rely on `VAR=value cmd` syntax.\n- **Avoid path separators** in JS: use `path.join()`\u002F`path.resolve()` instead of string concatenation with `\u002F`.\n- **`&&` chaining in npm scripts** is safe (works in cmd, PowerShell 7+, and bash).\n\nWhen reviewing or validating a template, scan scripts for:\n1. Hardcoded Unix paths (`\u002Fvar\u002Frun\u002F`, `\u002Ftmp\u002F`, `~\u002F.docker\u002Frun\u002F`)\n2. Socket or pipe assumptions without platform checks\n3. Shell-specific syntax in npm scripts (backticks, `$(...)`, `export`)\n4. File permission operations (`chmod`, `chown`) without guards\n\n## Final checklist\n\n- Template structure matches `docs\u002Ftemplate-guidelines.md`\n- Template metadata in `package.json` is complete\n- `node scripts\u002Fgenerate-manifest.mjs --check` passes\n- `rayfin init -t . --template-name \"\u003Cname>\"` works for the changed template\n- Generated gallery files were refreshed with `node scripts\u002Fgenerate-manifest.mjs` when needed\n- README and manifest content reflect the actual template behavior\n",{"name":5,"metadata":43,"description":7},{"author":9,"version":44},"0.1.0","main","6007598ad84bc06f9d584f0d2ba6af970422a9fe",".agents\u002Fskills\u002Ftemplate-gallery",70,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-09 23:42:43",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add microsoft\u002Fawesome-rayfin --skill template-gallery",{"tool":60,"command":61},"bunx","bunx skills add microsoft\u002Fawesome-rayfin --skill template-gallery",{"tool":63,"command":64},"pnpm","pnpm dlx skills add microsoft\u002Fawesome-rayfin --skill template-gallery","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftemplate-gallery\u002FSKILL.md",true,[],[69,93,119,141,175,206],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":38},"01M70HMXK23DA6CE0T9R4DNDA9","visuals","Use when user wants to incorporate charts, graphs, data grid,  or other visual representations of data into their project. Use VegaVisual and DataGrid components to create these visuals,  utilizing the shared DataTable input, formatting, theme, and interactivity. Covers the onInteraction selection\u002Fclick events host apps consume, named multi-table data input for layered overlays and reference lines, and Vega-Lite native selections.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002Ftemplates\u002Fcaldova-reorder\u002F.agents\u002Fskills\u002Fvisuals\u002FSKILL.md",[],[71,76,77,78,79,80,81,82,83,84,29,85,24,86,87,88,89,90,91,92],"shared","click","theme","Charts","for","overlays","project","selection","host","apps","visual","components","grid","multi","create","layered","native",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":38},"01M70HMVE4BANY7VVP0JR2GQ92","schema-discovery","Explore Power BI semantic model schemas using DAX INFO functions. Progressive metadata discovery strategy, scope estimation, and narrowing techniques for tables, columns, measures, and relationships.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002Ftemplates\u002Fcaldova-reorder\u002F.agents\u002Fskills\u002Fschema-discovery\u002FSKILL.md",[],[100,101,102,103,104,105,80,106,107,108,109,110,111,112,113,114,115,116,117,118],"discovery","schema discovery","schema","power","scope","model","explore","techniques","strategy","estimation","power bi","functions","info","bi","relationships","columns","dax","tables","semantic",{"skillNo":120,"name":35,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":38},"01M70HMQD0PKCKWCY2NQ8VCCYH","Use when doing ANY task involving Rayfin — scaffolding, data models, decorators, auth, deployment, CLI commands, or client setup. Triggers: rayfin, rayfin init, rayfin up, rayfin login, RayfinClient, @entity, @role, @anonymous, @authenticated, @text, @uuid, @int, @decimal, @boolean, @date, @email, @set, @one, @many, DAB, Data API Builder, rayfin.yml, publishableKey, signUp, signIn, signOut, sendMagicLink, handleMagicLinkCallback, ensureSignedInWithFabric, Fabric SSO, Entra ID, rayfin up db apply, rayfin up staticapp deploy, schema.ts, OpaqueSession, onSessionChange, GraphQL select, GraphQL create, GraphQL update, GraphQL delete, findById, executePaginated, RLS policy, row-level security, claims.sub, claims.email, TC39 decorators, config generation, dialect, mssql, postgresql","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002Ftemplates\u002Fcaldova-reorder\u002F.agents\u002Fskills\u002Frayfin\u002FSKILL.md",[],[35,125,126,127,128,129,130,131,132,133,37,134,135,24,136,137,138,139,140,90],"builder","SET","decorators","anonymous","auth","db","scaffolding","select","up","entra id","api builder","rls","api","text","mssql","postgresql",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":157,"publishedAt":38},"01M70HMFPA9WXWY5X7C14XB11D","rayfin-connectors","Use for Rayfin connectors that wire existing Fabric SQL data sources (Lakehouse, Warehouse, SQL Database) into an app as GraphQL-backed entities. Triggers: rayfin connector, rayfin up connector apply, connectors:, fabric-sqlanalytics, fabric-warehouse, fabric-sqldatabase, kusto, kql, eventhouse, workspaceId, itemId, operations:, AppConnectorsSchema, ConnectorsSchema, rayfin\u002Fconnectors\u002F, metadata.json, connector @role policy, connector claims.sub filter, connector claims.email filter, ConnectorsRayfinClient, rayfin-client.ts, client.connectors, connectorConfig, GraphQLBackedConnector, RestrictedDataApi, schema.ts aggregate, generate entities from metadata, add a use case on specific entities, wire connector into client, call a connector from the SDK, rayfin connector inspect, inspect connector data, sample connector rows, fabric-semanticmodel, --entity, --query, DAX EVALUATE, read-only sample query, rayfin connector search, discover connectable sources, find fabric sources to add, --all-workspaces, --workspace-id, connector search interactive picker, rayfin connector invoke, invoke a connector operation, run executeQuery, --input, --file, RAYFIN_FEATURE_FLAGS, resultSetRowCountLimit, limit rows, row limit, cap rows, too many rows, overflow","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002Ftemplates\u002Fcaldova-reorder\u002F.agents\u002Fskills\u002Frayfin-connectors\u002FSKILL.md",[147,152],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":153,"categoryName":154,"taxonomyType":155,"taxonomyTypeDesc":156},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[158,35,159,160,161,162,163,164,165,166,34,167,168,169,170,171,172,173,174,80],"rayfin connectors","connectors","app","inspect","workspaces","search","invoke","filter","cap","data sources","run","read","input","as","kql","limit","email",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":190,"publishedAt":38},"01M70HMD71TMHM9NEZV0870V9B","query-design","Separates DAX data-fetching from TypeScript presentation. Guides when to use  DAX vs. TypeScript vs. Vega-Lite for aggregation, total rows, FORMAT(), SELECTCOLUMNS,  BLANK handling, filtering, multi-grain queries, cross-filtering and cross-highlight subset\u002Foverlay queries, and format strings.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002Ftemplates\u002Fcaldova-reorder\u002F.agents\u002Fskills\u002Fquery-design\u002FSKILL.md",[181,184,187],{"categoryNo":182,"categoryName":183,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":185,"categoryName":186,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":188,"categoryName":189,"taxonomyType":155,"taxonomyTypeDesc":156},"01JBSEEDCAT000000000000032","设计师",[191,192,193,194,80,195,196,29,24,197,89,198,199,200,201,202,203,204,205,116],"query design","design","query","overlay","strings","filtering","guides","queries","grain","aggregation","format","typescript","data-fetching","data","when to use",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":215,"publishedAt":38},"01M70HMAX3MRJWF62P8PAYF1R3","playwright-cli","Automate browser interactions, test web pages and work with Playwright tests.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fawesome-rayfin\u002Fblob\u002Fmain\u002Ftemplates\u002Fcaldova-reorder\u002F.agents\u002Fskills\u002Fplaywright-cli\u002FSKILL.md",[212],{"categoryNo":213,"categoryName":214,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000008","测试与质量",[216,217,218,208,219,220,57,221,222,223,224,225,226,227,228,229],"playwright cli","playwright","cli","pages","tests","Bash","browser","with","test","work","web","test web","npm","automate"]