[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G983EEBFSXTTSFVBV76J0Z":3,"skill-same:01M6G983EEBFSXTTSFVBV76J0Z":79},{"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":22,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":13,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6G983EEBFSXTTSFVBV76J0Z","pydantic-models-py",null,"Create Pydantic models following the multi-model pattern with Base, Create, Update, Response, and InDB variants. Use when defining API request\u002Fresponse schemas, database models, or data validation in Python applications using Pydantic v2.","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-python\u002Fskills\u002Fpydantic-models-py\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"pydantic models py","Pydantic","models","with","python","multi","pattern","base","data validation","multi-model","use","model","api","applications","data","database","validation","update","create","2026-11-10 10:12:30",false,"---\nname: pydantic-models-py\ndescription: Create Pydantic models following the multi-model pattern with Base, Create, Update, Response, and InDB variants. Use when defining API request\u002Fresponse schemas, database models, or data validation in Python applications using Pydantic v2.\n---\n\n# Pydantic Models\n\nCreate Pydantic models following the multi-model pattern for clean API contracts.\n\n## Quick Start\n\nCopy the template from [assets\u002Ftemplate.py](assets\u002Ftemplate.py) and replace placeholders:\n- `{{ResourceName}}` → PascalCase name (e.g., `Project`)\n- `{{resource_name}}` → snake_case name (e.g., `project`)\n\n## Multi-Model Pattern\n\n| Model | Purpose |\n|-------|---------|\n| `Base` | Common fields shared across models |\n| `Create` | Request body for creation (required fields) |\n| `Update` | Request body for updates (all optional) |\n| `Response` | API response with all fields |\n| `InDB` | Database document with `doc_type` |\n\n## camelCase Aliases\n\n```python\nclass MyModel(BaseModel):\n    workspace_id: str = Field(..., alias=\"workspaceId\")\n    created_at: datetime = Field(..., alias=\"createdAt\")\n    \n    class Config:\n        populate_by_name = True  # Accept both snake_case and camelCase\n```\n\n## Optional Update Fields\n\n```python\nclass MyUpdate(BaseModel):\n    \"\"\"All fields optional for PATCH requests.\"\"\"\n    name: Optional[str] = Field(None, min_length=1)\n    description: Optional[str] = None\n```\n\n## Database Document\n\n```python\nclass MyInDB(MyResponse):\n    \"\"\"Adds doc_type for Cosmos DB queries.\"\"\"\n    doc_type: str = \"my_resource\"\n```\n\n## Integration Steps\n\n1. Create models in `src\u002Fbackend\u002Fapp\u002Fmodels\u002F`\n2. Export from `src\u002Fbackend\u002Fapp\u002Fmodels\u002F__init__.py`\n3. Add corresponding TypeScript types\n","# Pydantic Models\n\nCreate Pydantic models following the multi-model pattern for clean API contracts.\n\n## Quick Start\n\nCopy the template from [assets\u002Ftemplate.py](assets\u002Ftemplate.py) and replace placeholders:\n- `{{ResourceName}}` → PascalCase name (e.g., `Project`)\n- `{{resource_name}}` → snake_case name (e.g., `project`)\n\n## Multi-Model Pattern\n\n| Model | Purpose |\n|-------|---------|\n| `Base` | Common fields shared across models |\n| `Create` | Request body for creation (required fields) |\n| `Update` | Request body for updates (all optional) |\n| `Response` | API response with all fields |\n| `InDB` | Database document with `doc_type` |\n\n## camelCase Aliases\n\n```python\nclass MyModel(BaseModel):\n    workspace_id: str = Field(..., alias=\"workspaceId\")\n    created_at: datetime = Field(..., alias=\"createdAt\")\n    \n    class Config:\n        populate_by_name = True  # Accept both snake_case and camelCase\n```\n\n## Optional Update Fields\n\n```python\nclass MyUpdate(BaseModel):\n    \"\"\"All fields optional for PATCH requests.\"\"\"\n    name: Optional[str] = Field(None, min_length=1)\n    description: Optional[str] = None\n```\n\n## Database Document\n\n```python\nclass MyInDB(MyResponse):\n    \"\"\"Adds doc_type for Cosmos DB queries.\"\"\"\n    doc_type: str = \"my_resource\"\n```\n\n## Integration Steps\n\n1. Create models in `src\u002Fbackend\u002Fapp\u002Fmodels\u002F`\n2. Export from `src\u002Fbackend\u002Fapp\u002Fmodels\u002F__init__.py`\n3. Add corresponding TypeScript types\n",{"name":5,"description":7},"main","d41309588593cee5c2fb44062474efc3a99fbcb6",".agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Fpydantic-models-py","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms","https:\u002F\u002Fgithub.com\u002Fricardoaevt","2026-03-23 00:05:03",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add ricardoaevt\u002Fnexus-roms --skill pydantic-models-py",{"tool":59,"command":60},"bunx","bunx skills add ricardoaevt\u002Fnexus-roms --skill pydantic-models-py",{"tool":62,"command":63},"pnpm","pnpm dlx skills add ricardoaevt\u002Fnexus-roms --skill pydantic-models-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Fpydantic-models-py\u002FSKILL.md",true,[67,73],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"assets\u002Ftemplate.py","SCRIPT","脚本",3258,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Fpydantic-models-py\u002Fassets\u002Ftemplate.py",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Facceptance-criteria.md","REFERENCE","参考文档",18945,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Fpydantic-models-py\u002Freferences\u002Facceptance-criteria.md",[80,103,118,133,144,153],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":42},"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",[],[88,89,90,91,26,92,93,94,95,96,97,33,98,99,100,101,102],"openspec propose","openspec","cli","generated","proposal","complete","get","build","implementation","ready","user","artifacts","tasks","change","design",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":42},"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",[],[89,110,101,111,90,112,113,114,33,98,41,115,116,117,26],"openspec new change","new feature","structured","artifact","workflow","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":84,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":42},"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,89,33,127,90,101,98,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":84,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":42},"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",[],[89,140,141,101,114,90,41,98,33,142,113,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":84,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":42},"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,89,152,101,90,114,98,33,96,93],"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":84,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":42},"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",[],[89,101,160,161,100,115,140,162,98,33,96,90],"openspec apply change","implement","work"]